본문 바로가기

Spring&SpringBoot31

테스트 코드는 왜 사용하고, 어떻게 작성해야 하는가? 테스트의 유용함 테스트는 내가 의도했던 대로 코드가 정확히 동작하는지 확인해서, 만든 코드를 확신할 수 있게 해주는 작업이다. 코드를 개선하는 과정에서 그것이 처음과 동일한 기능을 수행함을 보장해줄 수 있다. 테스트는 개발자가 마음 편하게 잠자리에 들 수 있게 해주는 것이다. 수동 테스트 vs 자동 테스트 웹으로 수동 테스트를 하게되면 서버 띄우고 입력하고 클릭까지 해야하므로 실행이 번거롭다. 테스트 수행에 참여하는 클래스의 코드가 많기 때문에 오류 원인을 찾기 어렵다. 반면 자동 테스트는 코드로 작성한다. 실행이 간편하기 때문에 반복 수행이 가능하다. 자동 테스트는 테스트 클래스에 별도로 보관한다. 단위 테스트와 관심사 분리 테스트 코드에 관심사 분리를 적용하면 그 대상에만 집중해서 테스트할 수 있다... 2023. 3. 8.
applicationContext.xml로 객체 관계 설정하기 스프링은 빈의 생성과 관리를 담당한다. 개발자는 객체의 관계를 설정하는 책임만 가지면 된다. 이때 객체 관계를 설정하는 방법은 여러가지가 있다. 자바 클래스를 사용해도 되지만, 보다 간편한 xml 파일로 관계 설정 정보를 작성하는 것이 일반적이다. 이 예제에서는 자바 클래스로 작성된 객체 관계를 xml 파일로 변경해본다. (하지만 스프링 mvc를 사용하는 요즘.. 다 애노테이션 쓰지 xml은 안 쓴다) 다음과 같이 자바 클래스로 작성된 객체 관계를 xml 파일로 변경해보자. @Configuration public class DaoFactory { @Bean public UserDao userDao() { UserDao userDao = new UserDao(); userDao.setConnectionMa.. 2023. 3. 2.
DI와 IoC의 차이는 무엇이고 스프링 컨테이너는 무엇을 지원하는가? IoC와 DI의 관계, 그리고 스프링 애플리케이션 컨텍스트 IoC는 소프트웨어에서 자주 발견되는 일반적인 개념이다. 제어권을 이전해서 기존의 제어관계가 역전되는 것을 IoC라고 부른다. IoC는 프레임워크, 컨테이너에서 동작하는 서버 기술, 디자인 패턴 등 객체지향적인 설계에서 사용된다. 프레임워크는 애플리케이션 코드 작성 방법을 정하는 권한을 개발자에서 프레임워크로 넘긴다. 컨테이너는 컴포넌트의 실행 권한을 엔트리포인트에서 컨테이너로 넘긴다. 템플릿 메소드 패턴은 메소드의 실행 권한을 상위 객체에게 넘긴다. 코드의 관심사 분리 관점에서 객체의 생성 권한을 외부 객체에게 넘기는 것이 된다. 스프링 IoC 컨테이너는 특히 객체의 생성 권한의 이전을 통해 런타임 의존관계를 동적으로 만드는데 집중한다. 이를 .. 2023. 3. 2.
애플리케이션 컨텍스트 도입하기 : 의존성 해결과 싱글톤 관리 이번 장에서는 의존성 해결 책임을 애플리케이션 차원에서 관리하기 위해 스프링이 지원하는 애플리케이션 컨텍스트를 도입해본다. 사용 책임만 남은 객체는 외부에서 의존성을 주입받아야 하는데, 이를 의존성 해결이라고 한다. 의존성 해결을 위해서는 구현을 선택하고, 객체를 생성하고, 생성된 객체를 요청에 따라 주입하는 기능이 필요하다. 구현 선택 정보는 환경 설정 파일에서, 객체의 생성과 주입 및 관리는 애플리케이션 컨텍스트가 담당한다. 책임을 더 작게 쪼개서 유연한 설계를 얻는다. 애플리케이션 컨텍스트를 사용하면 일관된 방식으로 오브젝트를 생성하고 주입할 수 있다. 또 내부적으로 싱글톤을 지원하므로 제약 없이 객체 지향 설계를 적용할 수 있다. 예제는 의존성 해결의 책임의 이동에 따라 전개된다. 책임은 테스트 .. 2023. 3. 2.
생성 사용 관심사 분리와 의존성 관리 기법 관심사를 별도의 단위로 분리해야하는 이유는 관심사 분리로 변경의 파급효과를 제한하여 코드 수정을 최소화할 수 있기 때문이다. 이 예제에서는 메소드 추출로 코드 중복을 제거하고, 상속과 인터페이스를 이용해 생성 책임을 분리해보고 차이점을 비교해본다. 테스트 메소드를 작성해 코드가 수정될 때마다 기능이 잘 동작하는지 확인하는 리팩토링도 해본다. 마지막에는 의존성과 관련된 객체지향 개념인 OCP, 응집도와 결합도에 대해 이야기한다. 아래 코드의 add와 get은 UserDao의 메소드로, DB로부터 커넥션을 받아와 sql문을 준비하고 실행시켜 값을 사용한다. 사용한 리소스를 닫고 마무리한다. 보자마자 코드 스멜이 난다. 우선 add와 get에 유사한 코드가 중복된다. 그리고 하나의 메소드가 너무 많은 일을 하.. 2023. 3. 2.
[토비의 스프링 3.1] 1장 예제 실행을 위한 환경 구성 새로 산 m1 맥북에 처음부터 설치를 하려니 꽤 오래 걸렸다. 특히 workbench 실행 오류가 나서 업그레이드했더니 잘 되더라. 내가 사용하는 환경은 다음과 같다. Jdk 11 OS : macOS Monterey IDE : IntelliJ Ultimate DB : MySQL 8.0.27 DB GUI Tool : MySQL WorkBech Community 8.0.27 mysql connector java 8.0.32 JDBC를 사용하는 간단한 자바 애플리케이션을 위한 환경 세팅을 해보자. 간단하다. 데이터베이스 설치하고 기본 설정 해놓고, 자바 애플리케이션과 연결하면 된다. 데이터베이스 설치 및 설정 1. MySQL을 설치한다. 이때 맥 유저들 터미널로 install mysql 을 실행하면 디폴트로 .. 2023. 3. 2.