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

Jong Hee Park님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 서비스 개발

repository랑 service 개념 질문입니다.

해결된 질문

20.09.21 14:16 작성

·

223

3

1. 제가 DAO라는 방식으로 먼저 배워서 repository를 DAO라고 생각하고 이해하고 있는데요. 이게 맞는건가요?

2. repository로 바로 비즈니스로직을 수행을 해도 되는데 service로 나눠준 이유는 사용자들이 동시에 사용할 수 있게 하기 위한거라고 알고 있는데 이게 맞는건가요?

답변 6

3

김영한님의 프로필 이미지
김영한
지식공유자

2020. 09. 21. 23:28

안녕하세요. Jong Hee Park님 좋은 질문입니다^^

1. 제가 DAO라는 방식으로 먼저 배워서 repository를 DAO라고 생각하고 이해하고 있는데요. 이게 맞는건가요?

-> 네 말씀하신데로 DAO라 생각하셔도 무방합니다. 매우 디테일하게 들어가면 DAO는 DB 데이터에 접근하는 모든 기능을 이야기하는 것이고, repository는 엔티티를 관리하는 저장소입니다. 그런데 실무에서 사용할 때 크게 구분하지 않기 때문에 둘다 비슷하게 생각하셔도 됩니다.

2. repository로 바로 비즈니스로직을 수행을 해도 되는데 service로 나눠준 이유는 사용자들이 동시에 사용할 수 있게 하기 위한거라고 알고 있는데 이게 맞는건가요?

-> 개발은 결국 레고 블럭을 잘게 쪼게고 필요한 곳에서 필요한 기능을 조립해서 사용하는 것이 효율적이겠지요. 예를 들어서 주문서비스에서도 회원 리포지토리가 필요하고, 회원 서비스에서도 회원 리포지토리가 필요하다면 같은 회원 리포지토리의 기능을 재사용할 수 있습니다^^ 이렇게 잘게 잘 설계하는 것이 중요합니다. 그리고 서비스 계층은 비즈니스 로직이 있는 곳으로, 리포지토리는 엔티티를 관리하고 저장하는 곳으로 역할이 나누어져 있습니다. 단일 책임 원칙(SRP)를 지키는 것이지요^^

감사합니다.

2

김영한님의 프로필 이미지
김영한
지식공유자

2020. 09. 22. 00:07

네 공부하시면서 궁금한 내용이 있으면 언제든지 편하게 질문주세요.

제가 직장인이라 저녁 늦은 시간에만 답변을 드릴 수 있어서 다음날이 오기전에 하나라도 더 답해드리고 싶어서 그래요 ㅎㅎ

화이팅!

2

김영한님의 프로필 이미지
김영한
지식공유자

2020. 09. 21. 23:52

네 맞습니다. 추가로 repository는 엔티티를 관리하는 저장소라 생각하시면 됩니다^^

그런데 실무에서는 크게 관계 구분하지 않고 사용합니다^^ JPA를 사용하면 그냥 repository라고 하고, JPA를 사용하지 않을 때는 DAO라고 많이 합니다.

1

Jong Hee Park님의 프로필 이미지
Jong Hee Park
질문자

2020. 09. 21. 23:55

아 이해가 팍 갔습니다 강사님 ㅠㅠ 답변 감사합니다. 늦은밤에 이렇게 답변달아주셔서 다시한번 감사합니다. 안녕히 주무세여 ㅎㅎ

1

Jong Hee Park님의 프로필 이미지
Jong Hee Park
질문자

2020. 09. 21. 23:50

아 DAO는 영속성컨텍스트랑 관계 없이 DB에서 데이터만 가지고오는 역할만이고 repository는 영속성컨텍스트랑 관계가 있는거라고 이해하면 될까요?

1

Jong Hee Park님의 프로필 이미지
Jong Hee Park
질문자

2020. 09. 21. 23:45

아 이게 Service로 다시 나눠주는 중요한 이유가 재사용이군요. 재사용말곤 다른 이유는 없는건가요? 예전에 다른 곳에서 배울때 사용자가 DB접근을 여럿이서 할때 문제가 생길 수 있어서 service방식으로 구현해줘야된다고 배웠었던거 같아서요. 제가 잘 못 알고 있는건가요?