728x90
반응형

서비스 service

컨트롤러와 리파지토리 사이에 위치하는 계층, 서버의 핵심 기능을 처리하는 순서 총괄

 

클라이언트가 요청을 보내면, 

컨트롤러가 이를 서비스에 전달

서비스는 정해진 규칙에 의해 요청을 가공

가공에 필요한 데이터는 리파지터리가 DB에서 가져온다.

 

트랜잭션

서비스 업무 처리는 트랜잭션 단위로 진행된다. 

트랜잭션이란 모두 성공해야 하는 일련의 과정 의미 , 쪼갤 수 없는 업무 처리의 최소 단위.

 

예약을 잡는데 중간에 실패한다면 앞서 진행한 기록은 모두 취소되어야 한다. 실패한 정보가 남으면 다른 예약을 받을 수 없기 때문.

모두 성공해야 하는 일련의 과정 - 트랜잭션, 트랜잭션 실패시 처음으로 되돌리는 것 = 롤백

 

REST 컨트롤러 코드 : 1인 2역

컨트롤러와 서비스 역할 동시에 수행

 

클라이언트의 요청과 응답을 처리하고 동시에 리파지터리에 데이터를 가져오도록 명령 - 작은 게시판 코드라서

 

일반적인 웹 서비스는 컨트롤러와 리파지토리 사이  서비스 계층을 두어 분업할 수 있게 한다.

 

서비스 계층 만들기

REST 컨트롤러 는 리파지터리 와 협업해서 게시판의 데이터를 CRUD 했다. 여기에 서비스 계층을 추가하여 컨트롤러와 서비스, 리파지터리의 역할을 분업

 

객체 주입된 리파지터리를 서비스로 바꾸기

새 service 클래스를 추가 ArticleService

@Service 어노테이션을 붙이면 스프링 부트에 서비스 객체를 생성한다.

 

서비스에 articleRepository 필드 추가, 객체 주입 @Autowired 

 

원래 ArticleApiController에 구현했던 내용얼 service로 옮겨준다.

컨트롤러는 어떤 URL 요청이 들어왔을 때 뭘 해야하는지에 대한 구현 + HttpStatus 알림을 해주고 실제 역할은

ArticleService에서 하도록 수정

 

 

 

 

---트랜잭션 맛보기

트랜잭션은 반드시 성공해야하는 일련의 과정, 실패하면 롤백

시나리오

1. 게시판에 데이터 3개 한번에 생성 요청

2. 데이터를 DB에 저장하는 과정에서 의도적으로 오류 발생

3. 어떻게 롤백되는지 확인

 

transaction-test URL 을 통해서 한번에 3개의 POST 진행

자바 스트림 문법을 통해 여러개의 JSON 문법 POST가 리스트 형태로 한번에 DB에 추가 될 수 있도록 메소드 추가

 

예외 상황 발생시 실패 메시지를 띄울 수 있도록 예외 처리 추가 (의도적 오류 발생)

 

 

보통 트랜잭션은 서비스에서  관리한다.

서비스의 메서드에 @Transactional 붙이면 해당메서드는 하나의 트랜잭션으로 묶인다.

createArticles 메서드 위에 @Transactional 붙이면 메서드가 중간에 실패하면 롤백으로 이전 상태로 돌아간다.

 

 

 

 

 

반응형

+ Recent posts