# Spring Boot의 디렉터리 구조

- Author: @kimyoungjo
- Published: 2024-08-21
- Updated: 2024-08-29
- Source: http://blex.me/@kimyoungjo/mvc-%ED%8C%A8%ED%84%B4%EC%9D%98-%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC-%EA%B5%AC%EC%A1%B0
- Tags: 미분류

---

몇 번의 프로젝트를 진행하면서 디렉터리 구조는 항상 후반부에 제 발목을 잡았다. 치밀하게 계획을 해서 프로젝트에 돌입해도 끝에는 코드가 뒤죽박죽 섞여 정리가 안 되는 현상이 반복되어서 항상 고민이었는데, 이번 프로젝트의 백엔드로 선정한 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, 그리고 스프링 컨테이너라는 객체를 중앙에서 관리해주는 방식을 이용하면 내가 원하는 데이터의 가공에 있어서 보다 직관적으로 개발할 수 있을 것 같아 현재 계속 공부중이다. 그동안 개인 노션에 간단히 내용을 정리하면서 관련 개념을 습득했는데 그 개념들을 좀 더 자세하게 풀어서 매일 포스팅을 해 볼 예정이다.
