[Springboot] 패키지 구조

Jae·2022년 8월 15일
1

Springboot

목록 보기
10/10

서론

Spring boot로 jpa 및 spring-data-jpa를 사용하는 상황에서 아래와 같은 내용을 알아보고자 한다.

  • 스프링 프레임워크가 어떤 데이터 흐름을 가지고 데이터가 전달되는지
  • 어떤 순서로 소스를 작성해야되는지
  • 각각의 패키지들이 어떤 역할을 하는지

프로젝트 구조

스프링 부트는 목적에 따라 여러 패키지를 생성하여 소스코드를 관리한다.

  • domain(entity)
  • repository
  • dto
  • service
  • controller

domain

domain은 db의 테이블과 직접적으로 맵핑되는 클래스이다.
jpa 사용시, 여러 어노테이션을 사용하여 테이블, 필드, 필드 옵션 등을 설정한다.

domain 클래스에서 자주 사용되는 어노테이션

@Entity

테이블과 1:1로 맵핑되는 어노테이션이다.
해당 어노테이션을 클래스에 붙이면 jpa가 해당 클래스를 관리하게 됩니다.

@Column

필드에 붙이는 어노테이션으로 해당 어노테이션을 붙이면 컬럼으로 인식하게 됩니다.

@Id

PK를 지정하는 어노테이션 입니다.

@GeneratedValue

pk가 중복되는것을 방지하기 위해 작성하는 어노테이션 입니다. strategy 파라미터로 GenerationType.IDENTITY를 주게되면 PK로 인식하여 Auto Increament로 설정됩니다.

@Builder

Builder 패턴을 사용하기 위한 어노테이션 입니다. @Builder 어노테이션을 사용하게되면 객체를 생성할때 생성자를 통해서 객체를 생성하는게 아니라 도메인.builder().필드(값).필드(값).build(); 를 통해 필드에 대한 값을 좀더 명시적으로 넣어 줄 수 있습니다.

repository

repository는 DB에 접근하는 소스코드를 모아둔 Interface이다.
JPA 사용시, JpaRepository 인터페이스를 상속받아 제네릭을 통해 관리하고자 하는 클래스, ID필드 타입을 <Posts, Long>와 같이 넣어주게되면 자동으로 DB와 CRUD 연결을 할 수 있는 메소드를 생성해 준다.

DTO

DTO는 Data Transfer Object, 즉 직역하면 데이터 전송 객체라는 뜻.
Service나 Controller에서 DB에 접근할때 사용하는 클래스 이다.
Domain과 DTO의 차이점은
Domain은 DB 테이블에 대한 정보를 가지고 있는 클래스이고
DTO는 해당 테이블에서 실제로 CRUD를 할 필드를 정의해 둔 것이다.

Service

Repository와 DTO를 통해 DB에 접근하여
CRUD의 각각의 프로세스 관리와 에러처리 등을 담당하는 역할을 한다.
@Service 어노테이션을 붙여주게 되면 스프링 Bean에 등록되고 스프링에서 관리하는 객체가 된다.
DB와 실제적인 접근을 명령하는 소스코드를 작성하는 클래스이다.
DTO에 작성된 메소드를 기반으로 소스코드를 작성하게 된다.

Controller

제일 앞단에서 HTTP 요청과 응답을 위한 클래스 이다.
@Controller 어노테이션을 붙여주면 스프링 Bean에 등록되고 스프링에서 관리하는 객체가 된다.
@GetMapping(“주소”) 와같이 http 메소드 명과 함께 주소를 작성해주게 되면 해당 주소로 요청을 받을수 있게 된다.
Service를 사용하여 DB에 접근하게 되고 model을 사용하여 파라미터를 view단으로 넘길수 있고 template 이름만 문자열로 반환하게 되면 View Resolver가 자동으로 해당 template를 찾아 사용자에게 페이지를 보여주게된다.

자주 사용하는 lombok의 Annotation

@Getter - 클래스 필드의 getter 메소드를 자동으로 생성해 준다.
@NoArgsConstructor - 클래스에 존재하는 필드의 생성자를 자동으로 생성해 준다.

마무리

Spring = Domain-Repository-DTO-Service-Controller
소스를 작성하는 순서도 이와 같다.

  1. Domain에서 DB와 관련된 클래스를 작성한다.
  2. Repository로 Doamin에 작성된 필드 접근을 위한 CRUD를 spring-data-jpa를 통해 자동으로 생성한다.
  3. DTO로 어떤 테이블에 어떤 필드로 접근할지 정의한다.
  4. Service에서 외부에서 해당 기능을 사용할 수 있도록 메소드를 정의한다.
  5. 외부에서 요청이 오면 Controller를 통해서 Service로 DB에 접근하여 요청을 처리한다.

References

Spring Boot 구조 정리

profile
Jae's Development Area : 재개발구역

0개의 댓글