Spring 기본 구조 및 설계

귀찮Lee·2022년 6월 27일
0

Spring

목록 보기
15/30
post-custom-banner

◎ 패키지 구조

  • 패키지 구조 필요성

    • 작은 프로젝트더라도 java 파일은 굉장히 많나질 것이다.
      ex) Controller, Service, DTO, entity, ...
    • 따라서 패키지 (일종의 폴더 구조)를 통해 원하는 파일을 찾기 쉽게 분류해놓는 것이 좋다.
  • 기능 기반 패키지 구조(package-by-feature)

    • 애플리케이션의 패키지를 애플리케이션에서 구현해야 하는 기능을 기준으로 패키지를 구성
    • 한 기능 패키지 내에는 하나의 기능을 완성하기 위한 계틍별 클래스들이 모여있음
  • 계층 기반 패키지 구조(package-by-layer)

    • 패키지를 하나의 계층으로 보고, 클래스들을 계층별로 묶어서 관리함
  • Spring Boot 팀에서는 테스트와 리팩토링이 용이하고, 향후에 마이크로 서비스 시스템으로의 분리가 상대적으로 용이한 기능 기반 패키지 구조 사용을 권장

◎ 한 기능 내에서의 구조

  • 기본적인 구조

    • Controller : Controller : 가장 바깥 부분, 요청/응답을 처리함. → API와 통신함
    • Service : 중간 부분, 비즈니스 로직을 수행
    • Repository : 가장 안쪽 부분, DB와 맞닿아 있음.
    • 서로 연결될 때, 클래스 내부에서 객체를 생성하는 것이 아닌 DI(Spring Container) 로 주입함

◎ Controller 설계

  1. 클라이언트로부터 발생할 요청을 고민 (API 문서 작성)
  2. REST API 기반의 애플리케이션에서는 리소스(Resource, 자원) 으로 구분
    ex) 커피 주문 어플 > 회원, 커피, 주문 ...
  3. 리소스에 해당하는 리소스별 패키지 생성 및 컨트롤러 설계
  4. 컨트롤러 별로 CRUD 작업을 진행 (필요한 부분을 필요에 맞게 구현)

◎ EntryPoint (엔트리 포인트)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Section3Week1Application {

    public static void main(String[] args) {
        SpringApplication.run(Section3Week1Application.class, args);
    }
}
  • 애플리케이션 시작점

  • ‘Spring Initializr’를 통해 생성한 프로젝트에는 엔트리포인트 클래스가 이미 작성되어 있음

  • @SpringBootApplication

    • 자동 구성을 활성화
    • Spring Bean에 등록하는 역할 (@ComponentScan 역할, @Configuration을 추가로 등록)
  • @SpringApplication.run(ProjectName.class, args);

    • Spring 애플리케이션을 부트스트랩하고, 실행하는 역할
    • 부트스트랩 : 어플리케이션 실행 전, 설정 작업 수행하여 실핵 가능하게 만드는 단계
profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!
post-custom-banner

0개의 댓글