hgo641 / blog

MIT License
0 stars 0 forks source link

controller-service/ #3

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

Controller, Service, Dao, Repository... 그게 다 뭔데

Controller와 Service의 차이는 무엇일까? Controller Service 사용자의 요청이 진입하는 지점이며 요청을 받아 적절한 Service에 보내 처리가 일어나게 한다. Service에서 처리한 내용을 View에 던져준다. 실질적인 데이터 처리를 수행한다. 비즈니스 로직을 수행하고 데이터베이스에 접근

https://blog.hongo.app/controller-service/

devHudi commented 1 year ago

레이어드 아키텍쳐에 대해서 공부하시는군요! 저도 DAO와 Repository 개념에 대해 처음 공부할때에는 많이 혼란스러웠어요 ㅋㅋㅋ

Repository는 사실 에릭 에반스라는 사람의 DDD (Domain Driven Development)에서 튀어나온 개념이에요. 말씀해주신 것 처럼 데이터베이스보다는 도메인에 가깝죠. 더 정확히는 영속 계층(Persistence Layer)보다 도메인에 가깝다라고 하는게 맞겠네요.

Repository는 도메인 객체를 관리하는 가상의 일급 컬렉션으로 바라보시면 좋을 것 같아요. Repository의 사용자는 얘가 파일 시스템에서 도메인을 꺼내오던, 디비에서 꺼내오던 상관없이 마치 컬렉션을 사용하는 것 처럼 사용할 수 있죠.

반면에 DAO는 Repository에 비해 더 낮은 계층인 영속 계층에 위치해있어요. 포스팅해주신 것 처럼 이 친구는 데이터 접근 메커니즘을 캡슐화, 추상화하는 역할을 해요. 쉽게 말하면 커넥션 얻어오는것, SQL 이런것들을 추상화 할 수 있을 것 같아요.

DAO를 구현해서 쿼리를 추상화하고, DAO를 이용해 객체를 꺼내오는 Repository를 상위 계층에 구현해보세요. 아마 많은 부분이 이해가 되실거예요.

이후에 JPA 사용하고 더 나아가서 Spring Data JPA를 사용하실텐데 그때는 확실히 레포지토리 개념에 대해 많이 이해하실 수 있을거예요 ㅎㅎ Spring Data JPA가 DDD의 개념을 차용해 만들어진 것이거든요.

hgo641 commented 1 year ago

@devHudi 헉 댓글보니까 Repository랑 DAO의 차이 이해된 것 같아요. 추가 설명 감사합니다! 😀 그저 갓후디