테스트는 순서에 의존관계가 없어야 한다. -> store.clear();
@ComponentScan 선언(@Service, @Repository 등) vs @Bean 등록
생성자 주입 : 권장하는 스타일. 조립 시점(Spring 실행되는 시점)에 생성자로 조립해 놓고, 끝을 내야 한다. (그 다음엔 변경을 막아 버린다.)
필드 주입 : 별로 안 좋다. 중간에 수정할 방법이 없다.
Setter Injection : 단점 - 누군가가 MemberController로 호출했을 때, public 으로 열려있어야 한다. (public 에 노출)
※ Spring 쓰는 이유
메모리 멤버 -> JDBC 멤버로 변경시 기존의 코드는 하나도 손 대지 않고, 애플리케이션 설정부분만 만지면 실제 애플리케이션 코드를 손대지 않고 똑같이 동작하게한다.
※ 객체지향적 설계가 좋은 이유 : 인터페이스를 두고 구현체 바꿔끼기 가능(다형성 활용). 이걸 가능하게 spring container가 지원해준다. DI 덕분에 개발이 편리해진다.
h2 데이터베이스 연결
cmd에서 */h2/bin 접근후 javaw -jar h2-1.4.200.jar 를 실행
통합 테스트
@SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다.
@Transactional : DB에 값 넣고 마지막에 ROLLBACK -> 실제 데이터가 반영 X -> 다음테스트를 반복해서 실행가능.
JdbcTemplate : 실무에서도 많이 사용.
60~70% : 테스트 코드
20~30% : 프로덕션 코드
프로덕션 코드가 커질수록 굉장히 중요. 에러 -> 몇 억이상의 손해 발생가능
AOP : 공통 핵심 사항 빼놓을 때 사용(시간 측정 예시 떠올리기), 프록시 방식 사용
reference
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술