Spring Boot의 디렉터리 구조

몇 번의 프로젝트를 진행하면서 디렉터리 구조는 항상 후반부에 제 발목을 잡았다. 치밀하게 계획을 해서 프로젝트에 돌입해도 끝에는 코드가 뒤죽박죽 섞여 정리가 안 되는 현상이 반복되어서 항상 고민이었는데, 이번 프로젝트의 백엔드로 선정한 Spring Boot는 MVC 패턴이라는 정해진 구조 패턴이 있어 이번에는 이를 적극 활용하여 깔끔하게 프로젝트를 끝내는 것을 목표로 잡았다.

기본 디렉터리 구조

Spring Boot MVC 프로젝트의 기본 디렉터리 구조는 다음과 같다:

src/
├── main/
│   ├── java/
│   │   └── com/example/project/
│   │       ├── controller/
│   │       ├── service/
│   │       ├── repository/
│   │       ├── model/
│   │       ├── dto/
│   │       └── ProjectApplication.java
│   └── resources/
│       ├── static/
│       ├── templates/
│       ├── application.properties
│       └── application.yml
└── test/
    └── java/
        └── com/example/project/

이제 각 디렉터리의 역할에 대해 자세히 살펴보겠다.

주요 디렉터리 설명

1. controller/

  • @Controller 또는 @RestController 어노테이션이 적용된 클래스들이 위치한다.
  • 웹 요청을 처리하는 컨트롤러 클래스들이 이 디렉터리에 위치한다.
  • 클라이언트의 요청을 받아 적절한 서비스 계층으로 전달하고, 결과를 다시 클라이언트에게 반환하는 역할을 한다.

2. service/

  • @Service 어노테이션이 적용된 클래스들이 위치한다.
  • 비즈니스 로직을 담당하는 서비스 계층의 클래스들이 이 디렉터리에 위치한다.
  • 컨트롤러와 리포지토리 계층 사이에서 중간 역할을 하며, 복잡한 비즈니스 로직을 처리한다.

3. repository/

  • @Repository 어노테이션이 적용된 인터페이스가 위치한다.
  • JPA를 사용하는 경우, JpaRepository를 상속받은 인터페이스들이 이 디렉터리에 위치한다.
  • 데이터베이스와의 상호작용을 담당하며, 데이터의 조회, 저장, 삭제 등의 작업을 수행한다.

4. model/

  • @Entity 어노테이션이 적용된 클래스들이 위치한다.
  • 데이터베이스 테이블과 매핑되는 엔티티 객체들이 이 디렉터리에 정의된다.
  • JPA를 사용할 때 주로 사용되며, 데이터베이스의 테이블 구조를 자바 객체로 표현한다.

5. dto/

  • DTO(Data Transfer Object) 클래스들이 이 디렉터리에 위치한다.
  • 계층 간 데이터 전송에 사용되는 객체들을 정의한다.
  • 주로 Lombok 라이브러리를 이용하여 getter, setter 메서드를 자동으로 생성한다.

6. ProjectApplication.java

  • 프로젝트의 메인 클래스다.
  • @SpringBootApplication 어노테이션이 적용되며, 애플리케이션의 시작점 역할을 한다.
  • Java의 main 메서드와 같이 모든 것의 시작점이 된다.

7. resources/

  • static/: CSS, JavaScript, 이미지 등의 정적 리소스 파일들이 위치한다.
  • templates/: Thymeleaf 등의 템플릿 엔진을 사용할 때 HTML 템플릿 파일들이 위치한다.
  • application.properties 또는 application.yml: 애플리케이션의 설정 정보를 담고 있는 파일이다.

이번 Next 프로젝트에서 Spring Boot의 역할은 일정 시간마다 데이터를 크롤링해와 db를 갱신하고 그 갱신된 데이터를 프론트에게 넘겨주는 역할이다. Next의 자체 백엔드 기능을 사용해도 무리는 없었을 것 같긴 하지만 다양한 디자인 패턴과 RDBMS, 그리고 스프링 컨테이너라는 객체를 중앙에서 관리해주는 방식을 이용하면 내가 원하는 데이터의 가공에 있어서 보다 직관적으로 개발할 수 있을 것 같아 현재 계속 공부중이다. 그동안 개인 노션에 간단히 내용을 정리하면서 관련 개념을 습득했는데 그 개념들을 좀 더 자세하게 풀어서 매일 포스팅을 해 볼 예정이다.

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.