MVC 패턴의 구체화

노지환·2021년 7월 12일
0

내꺼로 만들기

목록 보기
2/5

MVC패턴을 어떻게 구현해야할까?

spring을 처음 접하며 가장 고민했던 것.
MVC 패턴을 잘 설계해야한다, 규칙에 어긋나면 안된다... 여러가지 말을 많이 들었지만, 역시 일단 부딪혀보는 것이 가장 도움이 많이됐다.

구체화를 위한 요소들

막막했던 처음에 비하여, 지금까지 알게된 것을 복습해보자면,
백엔드에서 구현해야할 것은 MVC 패턴 중에서 Model과 Controller라는 2부분이다. 이를 구현하기 위해서는 대체로 4가지의 구성요소가 필요하다.

Controller, Model(domain, repository, Service)

이 순서대로 쓴 이유가 있는데, 개발하다보니 저 순서대로 개발하는 게 더 구조적이고 편리하다고 느꼈다.(제가 느끼기엔 그렇지만 더 좋은 방법이 있다면 언제든 알려주세요!)
MVC를 간단명료하게 설명하는 문장을 봤었는데 기억이 안난다. 찾아봐야지.

Controller

MVC 패턴에서도 Controller를 담당해야하는 친구다. client에서 요청이 들어왔을 때, 가장 먼저 거쳐야하는 친구이기도 하다.
처음 프로젝트를 시작하면, 프로젝트를 같이하는 팀원들과 만들어야하는 요구사항이 뭔지를 분석하고, 입력받는 데이터의 타입, return하는 데이터의 타입과 어떤 정보를 가진 데이터를 다룰 것인지를 이야기하는 게 좋을 것 같다.
(이번에 진행한 프로젝트에서는 애매하게 정해서 merge할 때 시간이 좀 소비되었다.)

Domain

controller에서 어떤 데이터를 다뤄야하는지 정해졌다면, 데이터를 실체화하는 것이 domain이다. 프로젝트에서 활용할 데이터를 팀원들과 상의해서 어떤 domain을 만들 것인지 의논하는 것이 좋다. 사람마다 필요한 것이 달라서 각각 domain을 만들고 진행한다면, 맡은 부분들을 합칠 때 꽤나 힘들었다.
domain을 만들고, 사용할 때 중요한 점은 데이터를 제공만 해야한다는 것이다. 다른 부가적인 로직의 실행은 서비스에서 도맡아 하는 구조로 만드는 게 좋을 것 같다.

Repository

domain을 만들었다면, 우리가 얻는 이 정보를 어떻게 저장된 정보를 활용할 것 인지에 대한 로직을 가진 친구가 repository이다. 여기서는 저장, 삭제, 업데이트, find등의 로직을 수행한다. 정보를 가공하지는 않는다.
진행하는 프로젝트 기준으로 이야기를 하면, repository의 interface를 만들고 진행하는 것이 효율적이다. 처음 시작하는 프로젝트에서 db를 연동하여 test를 하는 것은 memory에서 데이터를 저장하여 사용하는 것보다는 오래걸린다고 생각하여, interface를 구현하여 초반에는 memory로 데이터를 저장해 구현을 진행했고, 로직들이 제대로 구현되었을 때, 데이터베이스를 구성하여 바꿔주었다. 이때, interface로 repository를 갈아끼우기 편리하기 때문에 이렇게 사용하는 게 훨씬 객체지향적이다.

Service

controller에서 필요한 정보들을 가공해서 주는 역할을 한다. domain이 저장된 repository에서 save, update, delete를 활용하여 데이터들을 다룬다. 또한, HTTP 통신 할 필요가 없는 순수한 자바객체로 구성되어야 한다! 따라서, controller에서 service에 필요한 request 데이터들을 뽑아내어 service를 호출하고, return된 데이터를 가공하여 response 해주면 된다.

마무리.

Controller : 입구(service를 받기위한 상태로 요청을 만든다.)
ex) 실생활에서 따지면, 병원 갔을 때, 어디가 아픈지, 나이나 성별은 무엇인지등을 써서 카운터에 넘겨주는 것과 같다.(여기서 POJO라는 것이 사용된다 -> 공부해서 작성)

Service : (Controller에서) 주어진 데이터를 가공하여 return한다.
ex) 의사 선생님이 환자 진료를 보고, 처방전을 끊어주는 것과 같다.

domain, repository : service에서 필요한 데이터들을 저장하는 공간. 저장, 삭제, 수정하는 역할을 한다.
ex) 의사 선생님 머리 속에 있는 의학적 지식들이 이에 해당할 거 같다.

profile
기초가 단단한 프로그래머 -ing

0개의 댓글