일반적인 웹 애플리케이션 구조
컨트롤러: 웹 MVC의 컨트롤러 역할
리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
도메인: 비즈니스 도매인 객체, 예) 회원, 주문 쿠포 ㄴ등등 주로 데이터베이스에 저장하고 관리됨
AOP : 관점 지향 프로그래밍(공통 관심 사항)
특징: 어떤 로직을 기준으로 핵심 적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것
ex) 시간을 측정하는 로직이 모든 메소드에 필요 할 경우 공통 관심 사항 AOP로 표현
개발 팁
테스트 코드는 순서와 의존 관계에 상관 없이 실행 되야 한다. (다른 테스트 코드와 연관 되어서 실행 되면 안됨-> 단위테스트
테스트 클래스를 먼저 생성하는 것 -> TDD 테스트 주도 개발
생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어 준다.(생성자가 하나 있으면 생략 가능)
스프링 부트 어플리케이션 어노테이션 있는 패키지 부터 하위패키지까지 컴포넌스 스캔 가능
스프링 빈을 등록하는 2가지 방법
실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다.
정형화 되지 않거나 , 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록 한다.(ex-> 레포지토리를 JPA로 변경하거나, JDBC를 이용한 만든 레퍼지토리로 변경 할 경우
기본 레퍼지토리를 인터페이스로 구현한 다음 변경할 레포지토리를 스프링 빈을 통해 등록해준다.)
스프링 DB 접근 기술
JPA를 통한 모든 데이터 변경은 트랙잭션 안에서 실행해야 한다.