본격적인 서버 개발 시작 전, SW 디자인 패턴에 대해 정리해 보자!
어플리케이션의 역할
을 정의하는 부분이다. 앱이 포함해야 할 데이터가 정의되어 있고, 데이터 상태 변경 시 모델을 뷰나 컨트롤러에 알린다.
+) 주로 뷰에 알려 필요 시 화면을 변경하는데, 업데이트된 뷰에 따라 로직의 수정이 필요할 시 컨트롤러에 알리게 된다.
사용자에게 시각적으로 보여주는 UI 부분이다. 앱의 데이터를 보여주는 방식을 정의한다.
Model
의 데이터 처리 로직
을 담당한다. 입력 받은 데이터
를 적절히 가공해 이를 바탕으로 모델
을 호출한다.
소프트웨어 디자인 패턴인 MVC
를 사용함으로써 UI, 데이터 처리, 그리고 이 사이를 제어하는 컨트롤러가 단일 책임을 지며 각각 맡은 바만 수행할 수 있게 된다.
역할의 분리로 각자가 맡은 부분만 수행하면 되니 추후 애플리케이션의 유지·보수, 확장성, 유연성에 아주 유리해진다!
대규모 프로젝트 시 A서비스, B서비스 등 여러 서비스를 제공할 수 있는데 이 각각의 서비스를 역할에 따라 설계하고 코딩하기 위해 Controller을 나누어 사용할 수 있다.
@Controlloer
은 주로 View를 반환하기 위해 사용 RestController
은 @ResponseBody
어노테이션이 붙은 효과를 지녀 JSON/XML 형태의 객체 데이터 반환을 도움서비스는 비즈니스 로직
을 수행하는 부분으로, 알맞은 정보를 가공하는 과정을 겪는다.
주로 RESTful API와 같은 데이터 통신 역할을 담당하며 데이터베이스에 접근하는 DAO를 이용해 결과값을 받아온다.
+) DAO : DB의 데이터에 접근해 데이터를 조작하는 객체
Entity
에 의해 생성되는 DV에 접근하는 메서드를 사용하기 위한 인터페이스다.
@Entity
라는 어노테이션으로 DB를 만들면 CRUD 과정을 어떻게 수행하게 할 것인지 정의해 주는 계층을 말한다.
├── DemoApplication.java
├── config //스프링 각종 설정들로 구성
├── controller //사용자로부터 전달받은 요청을 처리한 후 지정된 View에 모델 객체를 넘겨줌
├── dto //DTO는 로직을 가지지 않는 데이터 객체, getter, setter 메소드만 가진 클래스를 의미
├── domain
├── entity // 데이터베이스에 표현할 추상적인 표현들인 속성(Attribute)가 정의
├── exception //Exception Guide의 역할
├── error //예외 핸들링을 담당하는 클래스로 구성
├── model //Controller에서 생성한 데이터를 담아 View로 전달할 때 사용
├──repository //JPA를 담당하는 '저장소'
├── service //사용자로부터 전달받은 데이터를 가공하여 처리
└── util //유틸성 클래스들이 위치
https://velog.io/@jybin96/Controller-Service-Repository-%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
https://meojiktard.tistory.com/11