본문 바로가기

SpringFramework/Spring

Spring Package 구조와 역할

스프링에서 사용하는 패키지(package)단위의 구분.

패키지 구조 설계는 프로젝트마다 그리고 개발자마다 다를 것이며, 사용되는 프레임워크나 서비스에 맞게 설계되는 것이 일반적이다.

정해진 답은 없다.

 

= controller

클라이언트의 요청이 진입하는 포인트. 요청에 따라 어떤 처리(수행할 비즈니스로직)를 할지 결정해주며 처리된 로직 및 데이터를 View 혹은 정의내린 포맷에 맞게 응답을 보내주는 중간 제어자이다. 우리가 흔히 알고있는 MVC패턴의 그 Controller가 맞다.

스프링에서는 @Controller 어노테이션을 선언하여 스프링 Bean에 등록한다.

 

= service

비즈니스 로직을 처리한다. controller에서 받은 요청을 처리할 때, 필요한 데이터를 dao객체(mapper, repository)를 통해 가져와서 dto 혹은 vo를 통해 전달받은 다음, 적절한 처리를 해서 전달해준다.

스프링에서는 @Service 어노테이션을 선언하여 Bean에 등록한다.

 

= dao(Data access Object)

DataBase에 접근하여 데이터를 조회하거나 조작하는 기능을 담당하는 객체이다. dao를 사용하는 이유는 효율적인 connection관리와 보안성(DB관련 mechanism을 은닉할 수 있음) 때문이다.

아래의 repository나 mapper package는 ORM 프레임워크 사용시에 정의하는 인터페이스를 가진다.

  • repository : JPA 구현체를 이용하여 자바 객체로 접근할 수 있도록 한다.
  • mapper : mybatis 프레임워크(3.0 ver 이상) 사용시, resources에서 SQL이 작성된 xm파일을 호출하기 위한 인터페이스이다.

스프링에서는 @Repository 어노테이션을 선언하여 Bean에 등록한다.

 

= dto(Data Transfer Object)와 vo(Value Object)

dto와 vo는 개념적으로 동일하다. 계층(controller, view, service 등)간의 데이터 교환을 위한 객체이다.

dto와 vo는 순수한 데이터 객체이며, 로직을 가지지 않는다. 속성과 그 속성에 접근하기 위한 getter와 setter 메소드만을 가진다.

(Object 클래스 메소드는 작성가능)

  [dto]는, 데이터의 전송을 위한 객체이며, 비지니스 로직의 결과까지 담긴다.

    - 사용용도: 클라이언트 요청, 응답 데이터/다른 서비스, 플랫폼 통신 데이터 포맷 등..

  [vo]는, 데이터 그 자체로 의미 있는 것을 담고 있는 객체이며, 거의 불변성을 가진다.

    - 사용용도: 데이터베이스의 레코드에 매핑하여 사용 / JPA의 Entity에 vo를 사용

 

(!) 반드시 dto, vo를 사용하라는 것은 아니다. 프로젝트 속성에 맞게 설계를 하면 된다.