Service 설명

coding S's avatar
Mar 20, 2024
Service 설명
notion image
💡
우린 이제 이런걸 만들어서 레파지토리가 아니라 서비스에 의존할 것이다!
 

[ Service 설명 ]

notion image
💡
프로그래밍의 기본 : 메소드로 호출했으면 응답(return)을 받는다

[ 서비스 (Service) 란? ]

서비스는 기능의 이름을 이야기한다. 컨트롤러는 외부 요청을 통신으로 받는 최초 진입점. 즉, api 주소를 가지고 있다. (API의 엔드포인트 = URL) 실제로 내부에 서비스를 하고 싶을 때에는 그냥 받으면 되는데(?) 외부에 서비스를 제공할 수는 없어서 컨트롤러의 api 주소를 통해서 서비스를 제공하는 것 때문에 외부에 노출할 때에는 이 api 주소를 노출한다. /join 하면 회원가입 하는.. /login 로그인 하는... API주소를 노출 그런데 이 회원가입의 '기능'은 어디에 있어야하나? 바로 서비스! 기능!!을 서비스에 제공 그러나 하나의 기능이 하나의 레파지토리로 해결 안 될 수도 있다. (=1대 1 매칭이 안될 수도 있다는 말)

예시를 들어보자

[ 예시 1 ] 콩나물을 먹는다 -> 콩나물을 먹는 것 삼겹살을 먹는다 -> 삼겹살을 먹는 것 이런 메소드들이 jpa 레파지토리에 순수하게 다 있는 것임. 실제 서비스라는 건 기능을 이야기함. 외부에 제공해야할 기능! (추상적) 저런 구체적인 콩나물, 삼겹살이 아니라 '밥먹다' 를 들고 있는 것임 서비스는 밥먹다라는 메소드... 즉, 콩나물 먹기, 삼겹살 먹기 이런걸 조합해서 내는 것! -> 조합해서 쓰기 때문에 1:1로 매칭이 안됨. -> 여러가지가 하나의 서비스니까! 트랜젝션 관리가 필수! [ 예시 2 ] 고객이 통닭, 콜라, 라면을 요청했다. 주문이라는 서비스가 생김. 내가 레파지토리(주방)에 가서 통닭, 콜라, 라면을 하나씩 만든다. 애도 필요하고, 애도 필요하고, 애도 필요하니까 레파지토리를 여러번 때림! 그러다가 라면 만들기를 실패함!! -> 2개만 배달 보내면 될까? 안 된다! 롤백하고 처음부터 다시 만들어야함! 하나하나씩 다시!! 3개가 다 정상적으로 완료되었을 때 배달(컨트롤러)하는 사람한테 주는 것임
💡
서비스 = 하나의 기능을 담당하는 것!!!!!!!!!!!!!!!!
 

[ 계좌 이체로 보는 서비스 ]

notion image
계좌 정보만 남아있으면 뭐가 뭔지 모르니까 히스토리 (거래내역)을 만든다. (이 거래내역을 저장하는 히스토리 테이블이 필요) JPA UPDATE로 send 계좌 한 번 UPDATE, 다시 receiver 계좌를 UPDATE, 다른 레파지토리에 접근해서 히스토리(거래내역)을 INSERT. -> 이 3가지 로직을 하나의 서비스(기능)이라고 함!
 
Share article

codingb