
이 글은 SpringBoot의 기초적인 구조을 셋팅하는 글입니다.
프로젝트 생성 방법 ⬅️ 링크로 가시면 Spring Project파일을 생성하는 방법을 알 수 있습니다.!😊
처음 프로젝트를 생성하면 아래와 같은 프로젝트 구조를 확인할 수 있습니다.
저희는 핵심 데이터 모델을 한 곳에 정리하여 가독성과 유지보수성을 높이기 위해 각 패키지를 생성할 것입니다.
※ 물론 자신이 사용할 패키지만 만들어도 좋은 방법입니다.😊
📂 src/main/java
┗ 📂 com.example.app
┃ ┗ 📜 Application.java // 메인 클래스 (@SpringBootApplication)
📂 src/main/resources
┣ 📜 application.properties // 기본 설정 파일 (빈 상태로 시작)
┣ 📜 static/ // 정적 파일용 빈 폴더
┗ 📜 templates/ // 템플릿 파일용 빈 폴더
// 테스트 클래스 생략
// 빌드 셋팅 생략
📂 src/main/java
┣ 📂 com.example.app
┣ 📂 DTO
┃ ┣ 📂 controller
┃ ┣ 📂 service
┃ ┣ 📂 repository
┃ ┣ 📂 entity(domain, model)
┃ ┣ 📂 util
┃ ┗ 📜 Application.java // 메인 클래스 (@SpringBootApplication)
📂 src/main/resources
┣ 📜 application.properties (설정 파일)
┣ 📜 static/
┗ 📜 templates/
// 테스트 클래스 생략
// 빌드 셋팅 생략
이렇게 구조가 된다면 각 패키지의 역할에 대해서 알아야 합니다.
📂 src/main/java: 자바 소스 코드를 포함하는 메인 디렉토리.
📂 com.example.app: 애플리케이션의 기본 패키지, 계층 구조의 루트.
📂 DTO: 클라이언트와 서버 간 데이터를 전달하기 위한 객체
📂 controller: HTTP 요청을 처리하고 응답을 반환하는 컨트롤러 클래스.
📂 service: 비즈니스 로직을 구현하는 서비스 클래스.
비지니스 로직 : 핵심 기능이나 규칙을 처리하는 코드
📂 repository: 데이터베이스와 상호작용하는 데이터 접근 계층.
📂 entity(domain, model): 데이터베이스 테이블과 매핑되는 객체 모델.
📂 util: 유틸리티 클래스나 공통 기능을 담당.
📜 Application.java: 스프링 부트 애플리케이션의 진입점, 메인 실행 클래스.
📂 src/main/resources: 설정 및 리소스 파일을 포함하는 디렉토리.
📜 application.properties: 애플리케이션 설정(예: DB 연결 정보, 서버Port 등)을 정의.
server.port=8080 //기본값
spring.datasource.url=jdbc:mysql://localhost:3306/
spring.datasource.username=root
spring.datasource.password=1234
📜 templates/: Thymeleaf 같은 템플릿 엔진용 HTML 파일 저장.
다른 패키지도 있지만, 보통 주로 사용하는 패키지 위주로 구성하였습니다.
entity부분은 개인이나 기업마다 이름이 다를 수 있으니 주의해 주세요! 😂
위 와 같이 다양한 패키지가 있고 이제는 패키지들의 순환 순서를 설명하겠습니다.
클라이언트→controller→DTO→service→repository→entity→service→DTO→controller→클라이언트(필요 시 util은 중간중간 호출)
기본적으로 이러한 방식을 사용합니다. 조금 더 구체적인 설명을 해드리겠습니다.
클라이언트 요청
사용자가 브라우저나 API 클라이언트를 통해 요청(예: GET /users)을 보냅니다.
controller
역할: HTTP 요청을 받아 적절한 메서드로 라우팅하고, 요청 데이터를 DTO로 받아 처리 시작.
순서: 요청을 받아 service로 전달.
역할: 클라이언트와 주고받는 데이터를 구조화한 객체(예: UserDto).
순서: controller에서 수신된 데이터를 service로 전달하거나, 나중에 응답으로 반환될 때 사용.
역할: 비즈니스 로직을 처리하며, DTO를 entity로 변환하거나 계산 수행.
순서: controller에서 받은 요청을 처리하고, 필요하면 repository 호출.
역할: 데이터베이스와 상호작용하며, entity를 통해 데이터를 조회/저장.
순서: service의 요청을 받아 DB 작업 수행 후 결과(entity) 반환.
역할: 데이터베이스 테이블과 매핑된 객체로, 데이터의 구조를 정의.
순서: repository에서 사용되며, service로 전달된 후 필요 시 DTO로 변환.
역할: repository에서 받은 entity를 가공하거나 DTO로 변환해 controller로 반환.
순서: 처리된 데이터를 controller로 전달.
역할: service에서 받은 DTO를 기반으로 응답(예: JSON, HTML)을 생성해 클라이언트에 반환.
순서: 최종 응답을 클라이언트로 보냄.
역할: 공통 기능(예: 날짜 변환, 유효성 검사 등)을 제공하며, 다른 패키지에서 호출 가능.
순서: controller, service, repository 등에서 필요할 때마다 사용.
이렇게 프로젝트 구조와 패키지 순환 방식을 알아보았습니다.!
저처럼 Spring을 처음 접할 때 어떻게 순환하고 어떤 구조로 이뤄지는지 잘 몰랐던 사람들을 위해 이 글을 남겼습니다. 감사합니다!!! ☺️