Spring Boot의 입문 강의 정리
테스트 케이스 작성
- 테스트 코드 작성 후 실행하면 실행 의존성은 절대 없어야 한다.
- 테스트에서는 절대로 보장해주지 않는다. 그렇다면 레포지토리에 데이터가 담겨 있다면,
AfterEach
애노테이션을 사용할 수 있다.
@AfterEach
public void afterEach(){
repository.clearStore();
}
- 저장소에 담겨있는 데이터를 테스트 하나가 끝날 때 마다 비워준다.
- 테스트 주도 개발 TDD
- 어떤 기능을 만들어야 하는데 기능에 대해서 먼저 검증을 해보기 위해서 테스트 코드를 먼저 작성하는 방법이다.
- 테스트 코드가 없이 개발 하는 것은 정말 힘든 일이다. 깊이 있는 공부가 필요로 하다.
Ctrl+Shift+T
테스트 코드의 껍대기를 작성해주므로 편리한 기능을 사용할 수 있다.- 테스트 코드는 과감하게 한글로 작성해도 된다.
- 무언가가 주어질 때(given) → 이 기능을 실행했을 때(when) → 이 결과가 나와야 한다(then) 처음 테스트 케이스를 작성할 때는 주석을 달아서 이러한 형태의 로직대로 테스트를 작성하여 익숙해지도록 하자.
- 단순히 기능이 동작 하는지만 테스트 하는 것보다는 예외상황을 생각하였을 때 예외가 발생하지 않고 그대로 로직이 수행된다면 그 기능은 제대로 만들지 못한 것이다. 테스트 코드안에 예외가 발생되도록 작성한 다음
fail()
을 사용하여 예외가 정확하게 발생하는지 알 수 있다. 즉 자신이 예외를 생각하여 로직을 작성하였어도 예외가 발생하지 않는 경우를 테스트 해볼 수 있는 것이다. @SpringBootTest
스프링부트테스트 애노테이션은 스프링 컨테이너와 테스트를 진행한다.@Transactional
트랜잭셔널 애노테이션은 데이터베이스에 기입 된 내용들을 롤백 시켜준다.- 테스트는 필드 주입으로도 많이 사용한다.
- 가급적이면 스프링 컨테이너 없이 단위 테스트를 만드는게 좋다.
서비스
- 레포지토리의 네이밍은 단순히 기계적으로 한눈에 알아볼 수 있도록 작성한다.
- 서비스에서는 비즈니스에 의존적으로 설계를 하여 네이밍을 한다.
스프링 빈 등록
- 컴포넌트 스캔과 자동 의존관계 설정
- 스프링 컨테이너에 등록된 컨트롤러를 서비스와 연결 시켜준다 → 의존성 주입(DI)
- 생성자 주입
- 필드 주입
- setter 주입 - 의존관계가 실행중에 동적으로 변하는 경우는 없으므로
생성자 주입
을 사용한다. -@Controller, @Service, @Repository
애노테이션을 달아주면 스프링이 컨테이너에 등록해준다. 여기에서AutoWired
를 사용하면 연관 관계를 지어준다.
- 자바 코드로 직접 스프링 빈 등록하기
@Bean
을 사용하여 직접 스프링 컨테이너에 올릴 수 있다.- Controller는 직접 등록하는 것 보다는 애노테이션을 사용하도록 하자.
- 정형화 되어 있지 않거나, 상황에 따라 구현 클래스를 변경해야 할 때 사용한다.
간단하게 살펴보기
- 개방-폐쇄 원칙(OCP)
JdbcTemplate
- JPA
- AOP(Aspect Oriented Programming)
- 모든 메소드의 호출 시간을 측정하고 싶을 때
- 공통 관심 사항, 핵심 관심 사항
원하는 곳에 공통 관심 사항 적용
@Aspect
@Around("execution(*패키지))"
- 어디서 병목이 있는지 등을 확인가능하다.
회고
김영한 님의 Spring Boot 기초 강의를 듣고 정리하였습니다. 앞부분의 MVC 패턴에 대해서는 자세하게 정리 해보려고 합니다. 스프링 부트에 대해 입문하기 좋은 강의라고 생각합니다. 우선 자바의 정석을 완독하면서 인강을 계속해서 들을 예정입니다.