스프링 Maven 프로젝트의 구조는 스프링 프레임워크를 기반으로 하는 Maven 빌드 도구를 사용하는 표준 자바 프로젝트 구조이다. Maven은 프로젝트 관리와 빌드를 자동화하는 도구로, 프로젝트의 라이프사이클을 관리하고 의존성을 해결하는 데 도움을 준다.
기본 디렉토리 구조
my-spring-project/
│
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── myproject/
│ │ │ ├── controller/
│ │ │ ├── model/
│ │ │ ├── repository/
│ │ │ ├── service/
│ │ │ └── MySpringApplication.java
│ │ │
│ │ ├── resources/
│ │ │ ├── static/
│ │ │ ├── templates/
│ │ │ ├── application.properties
│ │ │ └── application.yml
│ │ │
│ ├── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── myproject/
│ │ │ └── MySpringApplicationTests.java
│ │ │
│ │ ├── resources/
│ │ │ └── test-data.sql
│
├── .gitignore
├── mvnw
├── mvnw.cmd
├── pom.xml
└── README.md
주요 디렉토리 및 파일 설명
1. src/main/java/
스프링 애플리케이션의 주요 소스 코드가 위치하는 디렉토리이다. 패키지 구조에 따라 클래스 파일들이 정리된다.
- MySpringApp.java: 스프링 부트 애플리케이션의 진입점 클래스이다. 주로 @SpringBootApplication 어노테이션을 사용하여 설정한다.
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringApp {
public static void main(String[] args) {
SpringApplication.run(MySpringApp.class, args);
}
}
2. src/main/resources/
애플리케이션 설정 파일과 리소스 파일들이 위치하는 디렉토리이다.
- application.properties: 스프링 부트 애플리케이션의 설정 파일로, 데이터베이스 연결 정보, 서버 포트 등 설정을 정의한다.
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
3. src/main/webapp/
웹 애플리케이션 관련 파일들이 위치하는 디렉토리이다. JSP 파일이나 HTML 파일과 같은 뷰 파일들이 포함된다.
- WEB-INF/: 웹 애플리케이션의 구성 파일을 포함하는 디렉토리이다.
- web.xml: 서블릿 설정 파일로, 스프링 MVC와 같은 웹 프레임워크의 초기화를 설정할 수 있다.
<web-app>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- views/: JSP, HTML 등의 뷰 파일들이 위치하는 디렉토리이다.
- index.jsp: 기본 JSP 파일로, 예시로 단순한 HTML 콘텐츠를 포함할 수 있다.
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Welcome to My Spring Application</h1>
</body>
</html>
4. src/test/java/
테스트 코드가 위치하는 디렉토리이다. JUnit이나 다른 테스트 프레임워크를 사용하여 작성된 테스트 클래스들이 포함된다.
- MySpringAppTests.java: 스프링 애플리케이션을 테스트하는 클래스이다.
package com.example;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class MySpringAppTests {
@Test
void contextLoads() {
}
}
5. .gitignore
Git을 사용할 때 버전 관리에서 제외할 파일이나 디렉토리를 정의한다. 주로 빌드 아티팩트와 IDE 설정 파일들을 제외한다.
6. mvnw, mvnw.cmd
Maven Wrapper 스크립트로, 프로젝트에 포함된 특정 Maven 버전을 사용하여 빌드할 수 있게 한다. 이는 프로젝트를 설정하는 데 필요한 별도의 Maven 설치 없이도 빌드를 가능하게 한다.
7. pom.xml
프로젝트 객체 모델(Project Object Model) 파일로, 프로젝트의 의존성, 플러그인, 빌드 설정 등을 정의한다. Maven 프로젝트의 중심 파일이다.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myspringapp</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
주요 구성 요소 설명
- groupId: 프로젝트의 그룹 식별자이다. 보통 도메인 이름을 거꾸로 사용한다. 예: com.example.
- artifactId: 프로젝트의 아티팩트 식별자이다. 프로젝트 이름과 유사하다. 예: myspringapp.
- version: 프로젝트의 버전이다. 예: 1.0.0.
- dependencies: 프로젝트에서 사용할 라이브러리들을 정의한다.
- build: 빌드 플러그인과 관련된 설정을 포함한다.
스프링 Maven 프로젝트의 구조와 각 구성 요소를 이해하면 스프링 애플리케이션 개발을 효과적으로 관리하고 빌드할 수 있다. 이 구조는 표준 Maven 디렉토리 레이아웃을 따르며, 확장성과 유지보수성을 높이는 데 도움이 된다.
'Spring' 카테고리의 다른 글
[Spring] web.xml 한글 필터 (0) | 2024.05.20 |
---|---|
[Spring] File Upload (0) | 2024.05.20 |
[Spring] Annotation(Lombok) (0) | 2024.05.20 |
[Spring] MVC (0) | 2024.05.20 |
[Spring] Annotation (2) | 2023.10.18 |