This is personal study note Copyright and original reference are from: https://www.youtube.com/watch?v=62Dh9AWAp58 [토크ON세미나] 스프링 부트를 이용한 웹 서비스 개발 4강 - 스프링부트 만들기 III | T아카데미 ================================================================================ - 서비스계층 코드 - @Service - @Transactional: Service 안의 메서드가 호출될 때, 트랜잭션 관리를 하겠다 public BookServiceImpl(BookRepository repository) { this.repository=repository; } - 생성자주입방식으로 BookRepository 인스턴스를 주입받음 - findById 와 findAll 메서드를 override 함 ================================================================================ - 트랜잭션: 행위시작 - 종료될 때 까지, - 정상일경우 완료처리 - 예외가 생길경우, 데이터를 롤백함 - 카테고리엔티티를 만들면, 북엔티티/카테고리엔티티 가 서로 상호작용하는 영역이 서비스계층임 ================================================================================ ================================================================================ - BookService 에서 findById 라고 하는 BookRepository 의 메서드를 호출하는 메서드를 만들것임 - 의견이 분분한 내용 - 인터페이스를 작성하고, 인터페이스의 구현체를 작성하여 사용방식 - BookService 를 클래스로 작성해서 바로 사용 - 일반적으로는, 인터페이스에 메서드 정의함 - 그리고 인터페이스를 구현한 클래스를 하나 더 작성 ================================================================================ ================================================================================ ================================================================================ - 생성자를 통해 BookRepository 인스턴스를 주입받는 코드 작성 - BookRepository 인스턴스를 주입받고 BookServiceImpl 클래스의 필드에 넣는다 public BookServiceImpl(BookRepository bookRepository){ this.bookRepository=bookRepository; } ================================================================================ - 주입받은 BookRepository 인스턴스에서 findById(id) 를 호출해서 결과를 반환함 @Override public Optional<Book> findById(Long id){ return bookRepository.findById(id); } ================================================================================ - 테스트 코드 작성 - 패키지 만들기 - 서비스 패키지 만들기 - 패키지 안에 클래스 만들기 ================================================================================ - @RunWith(SpringRunner.class) - @RunWith: 테스트가 실행되는 환경 지정 - SpringRunner.class: 스프링프레임워크와 함께 테스트를 실행할 것임 - @SpringBooTest() - 서비스계층은 Web Application Context 까지 띄울 필요가 없음 - 따라서, webEnvironment=WebEnvironment.NONE ================================================================================ - "자동주입" 을 기반으로 서비스를 테스트하는 방법 - BooService 인스턴스를 주입받음 @Autowired BookService bookService; - orElseThrow: - id 값을 찾지 못하면 예외를 던짐 ================================================================================ https://youtu.be/62Dh9AWAp58?t=1037 - "BookServiceImpl" 을 직접 사용하는 방식을 기반으로 서비스를 테스트하는 방법 ================================================================================ - 컨트롤러는 @RestController 또는 @Controller 가짐 ================================================================================ ================================================================================ 1: 외부에서 요청이 생김, DispatcherServlet 이 요청을 받음 2: 등록된 HanderMapping 중에서, 해당 요청에 대해 처리될 게 있나 확인 3: 확인 결과 반환 4: 결과에 따라 HadlerAdapter 동작 5: 상응하는 Controller 호출 6: JSON 요청했는지, HttpMessage 요청했는지에 따라서 Data converter 를 이용해서 데이터 반환 7: ================================================================================ ================================================================================ Book controller 만들기 - api 패키지만들기 ================================================================================ - BookController 클래스 만들기 ================================================================================ /books/123 요청 들어올때, 서비스에서 조회함 ================================================================================ - 프로젝트를 만듦 - 메인 스프링부트 어플리케이션 옆에, - Rest 컨트롤러를 붙임 ================================================================================ ================================================================================ ================================================================================