Search
Duplicate

Packages

태그
패키지
스프링부트
각 패키지의 역할
절대적인 것은 아니지만, package 별로 어떠한 역할을 하는지 정리해보았다.
Model (= Domain, Post ..)
테이블의 필드와 DB 를 매핑하는 역할을 한다.
DTO 가 들어있다.
DTO(Data Transfer Object)
계층 간 데이터 교환을 하기 위해 사용하는 객체로 순수하게 getter 와 setter 만 가진 클래스 이다.
브라우저에서 form 에 데이터를 입력하면 이를 DTO 에 넣어서 전송한다. 이를 받은 서버가 DAO 를 이용하여 데이터베이스로 데이터를 집어넣는다.
Repository (= Persistence)
데이터 베이스가 연결되는 repository(DAO)
DAO(Data Access Object)
데이터 베이스의 data 에 접근하기 위한 객체이다.
DataBase 에 접근하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용한다.
JPaRepository 를 상속 받는 곳이다.
Controller (= web)
사용자에게 입력을 받고 처리 후 돌려주는 역할을 한다.
Service interface 와 ServiceImpl class 구조
보통 프로젝트에서 Service 를 인터페이스로 설계하고, Impl 클래스를 생성하여 이를 구현한다. 왜 이런 구조를 사용하는 걸까?
인터페이스와 구현체를 분리하면 구현체를 독립적으로 확장할 수 있고, 확장하거나 변경시에 이를 사용하는 클라이언트의 코드에 영향을 주지 않기 때문이다.
즉, 서비스를 인터페이스로 만들면 하나의 역할을 여러 방식으로 구현할 수 있다. 하지만 대부분의 프로젝트에서는 인터페이스와 구현체가 1:1 로 만들어져 사용되고 있다. 즉, 하나의 역할을 하나의 방식으로 구현한다는 것이다. 이 때문에 이러한 구조를 계속 사용해야 하는지 아닌지에 대해서는 논란이 있다.
결론
이러한 구조를 사용하느냐 마느냐는 전적으로 프로젝트를 설계하는 사람을 따라야 하므로 왜 이런 구조를 사용하는지에 대해서만 알아두자.