인프런 커뮤니티 질문&답변

SeatSTAR님의 프로필 이미지
SeatSTAR

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 서비스 개발

Repository와 Service의 이해

작성

·

705

1

안녕하세요! 강의를 다시 보다보니 제대로 이해한건지 확실히 하고 넘어가고 싶어서 글을 쓰게 되었습니다.
 
Repository에서 interface로 선언한 것은 각 기능별로 저장할 때 어떤 타입? 으로 저장할지(list 등)
이며 이를 가지고 class에서 implements를 하여 실제 구현체를 만드는데 각 기능별로 저장한 값을 어떻게 반환할지 단순히 데이터의 저장을 위한 기능
 
Service에서는 앞서 Repository와 Domain에서 정한 것을 가지고 실제로 동작하는 기능(조건이 있다면 조건 로직, 검증을 해야한다면 검증 로직 포함)을 작성하는 것으로 이해했습니다.
 
실제 구현 할 때 Service 부분을이 아무래도 비즈니스 로직이다보니 해당 부분에서 오류가 발생한다면 전반적인 작동에도 문제가 생기겠죠?

답변 1

0

안녕하세요. SeatSTAR님, 공식 서포터즈 OMG입니다.

잘 이해하신 것 같습니다. 약간의 첨언을 하면 아래와 같습니다.

 

Repository에서 interface로 선언한 것은 각 기능별로 저장할 때 어떤 타입? 으로 저장할지(list 등)
이며 이를 가지고 class에서 implements를 하여 실제 구현체를 만드는데 각 기능별로 저장한 값을 어떻게 반환할지 단순히 데이터의 저장을 위한 기능

=> 단순 저장 뿐만 아니라, 구현할 기능에 따라 저장, 수정 등도 포함 될 수 있습니다. 본강의에서는 조회와 저장 기능을 구현하였습니다.

Service에서는 앞서 Repository와 Domain에서 정한 것을 가지고 실제로 동작하는 기능(조건이 있다면 조건 로직, 검증을 해야한다면 검증 로직 포함)을 작성하는 것으로 이해했습니다.
 
실제 구현 할 때 Service 부분을이 아무래도 비즈니스 로직이다보니 해당 부분에서 오류가 발생한다면 전반적인 작동에도 문제가 생기겠죠?

=> Service에는 비즈니스 로직이 포함되며 Service뿐만 아니라, Repository, Controller도 해당 부분에서 오류가 발생한다면 기능에 따라 문제가 발생할 수 있습니다.


감사합니다.

SeatSTAR님의 프로필 이미지
SeatSTAR
질문자

안녕하세요! 

Repository에서는 store를 이용하여 null인 경우 optional로 감싼다거나 name과 같은 경우를 찾아서 반환하는거 자체가 조회와 저장의 기능을 구현했다고 보는건가요?

그렇다면 Repository에서의 구현은 실제 기능 로직인 Service보다는 추상적인? 기능을 구현했다고 보고 Repository구현한 기능(및 반환될 데이터)을 가지고 Service에서 좀 더 명확하게 기능을 구현하는 실 구현되는 부분이라고 이해하면 될까요??

기능구현을 왜 Repository와 Service에서 하는건가요?

 

강의 순서상 MemberRepository 구현 강의는 들으셨을거라 아래 코드는 보셨을텐데요,

save가 저장 기능을, findById, Name이 조회 기능이라고 보시면 됩니다.

 

Repository와 Service는 역할이 각각 다릅니다.

Repository는 DB와 밀접한 객체입니다. DB에 접근하여 데이터를 조회, 저장, 삭제 등의 역할을 가집니다.

Service는 핵심 비즈니스 로직을 가지는 객체입니다.

예를 들어, 각각의 역할을 분리해놓음으로써 문제가 발생할 시

비즈니스 로직 상 문제가 없는것 같은데 DB 관련 처리에서 문제가 발생한다면 Repository코드를 확인해보면 됩니다.

각각의 역할이 분리되어 개발과 유지보수 등이 용이해집니다.

 

 

SeatSTAR님의 프로필 이미지
SeatSTAR
질문자

아! Repository는 DB에 접근하여 수행할 기능을 구현하는 것이고 Service는 DB접근과는 상관없이 비즈니스적인 핵심적인 기능을 구현한거라고 이해하면 될까요??

한번 의문이 생기니 왜? 라는 궁금증이 계속 생겼는데 답변을 너무 친절히 잘해주셔서 이해할 수 있었습니다! 번거로우실텐데 계속 답변 달아주셔서 너무 감사드립니다:)

네 맞습니다.

제가 수강평에도 남겨 많은 인프런 이용자 분들에게 공감을 받았는데요,

스프링 핵심원리 기본편 강의 초반에  설명해주시는 객체지향 관련 영한님의 설명을 들으시면 궁금 하셨던 부분이 명확히 이해되면서 많은 것을 배워가실 수 있을거라 생각합니다.

SeatSTAR님의 프로필 이미지
SeatSTAR

작성한 질문수

질문하기