본문 바로가기

💻 개발IT/Spring

Spring(스프링) 프로젝트 폴더 구조

실제 폴더 구조 

스프링 프로젝트를 생성하고 난 뒤

실제 폴더를 열어보면 src(source) 폴더 안에는 main, test 폴더가 존재한다.

여기서 main 폴더로 들어가게 되면,

아래와 같이 java, resources, webapp 폴더로 나눠져있다.

 

프로젝트 구조

IDE로 접속해서 프로젝트를 실행하면

실제 폴더 구조와 달리 다양한 폴더를 확인할 수 있다.

 

1. src/main/java

실제 폴더에서 src/main/java 디렉토리에 속하고

java파일이 모여있는 폴더이다.

스프링에서 이미 MVC 패턴 servlet 구조를 잡아주기 때문에 별도의 servlet없이 스프링 구조에 맞춰 클래스들을 만들면 된다.

 

2. src/main/resources

실제 폴더에서 src/main/resource 디렉토리에 속하고, 

자바 클래스에서 사용하는 리소스(mapper(sql 디렉토리), ws)를 보관하는 곳이다.

DB 연결을 위한 자원, 의존성 주입(DI) 을 위한 xml 파일 등 자바 코드 외 모든 자원은 이곳에 넣어 주면 된다.

 

2.1. application.properties

application 가동을 위한 각종 설정 정보 입력 (https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html

ex. DB 정보

 

3. src/test

실제 폴더에서 src/test 디렉토리에 속하고

main에 있는 파일을 테스트하기 위한 테스트 코드 및 리소스를 배치하는 곳이다.

 

4. src 폴더

실제 폴더에서 src/main/webapp 디렉토리에 속하는 파일들로, 

Web에 관련된 자원 모든 것이 담겨있는 루트 폴더이다.

빌드 하게 되면 main 내 파일들이 패키징 된다.

 

3.1. src/main/webapp/resources

웹에 필요한 다양한 자원(html, js, css, img 등)들을 보관하는 곳이고

보통 컨트롤러가 요청을 가로채지 않고 사용자가 바로 접근 할 수 있도록 따로 설정해서 사용하는 곳이다.

 

3.2. src/main/webapp/WEB-INF/classes

컴파일 된 파일이 보관되는 곳이다.

 

3.3. src/main/webapp/WEB-INF/spring

 

스프링 컨테이너를 생성하기 위한 스프링 환경설정 파일 (context)이 보관 되는 곳이다.

 

3.4. src/main/webapp/WEB-INF/view

 

View(UI)를 구현할 수 있는 JSP 파일이 들어있는 디렉토리이다. 이 폴더가 루트( / ) 의 기준점 이고 Controller에서 보낸 데이터를 ${}를 통해 사용할 수 있다. 

 

3.5. web.xml 파일

WAS가 최초 구동시, 가장 먼저 읽는 파일로 웹 애플리케이션의 설정을 구성한다. 스프링의 context 경로, DispatcherSevlet 설정 등을 할 수 있다.

 

5. Maven Dependencies

pom.xml 파일 내 작성된 라이브러리들을 자동으로 다운 받아 확인할 수 있는 곳이다. 

 

6. pom.xml

Maven을 사용할 때 생성되는 프로젝트 관련된 라이브러리 통합 관리 파일이다. Maven 설정시 setting.xml <LocalRepository>에 설정한 repository 경로로 라이브러리가 추가된 것을 확인 할 수 있다. 

  • modelVersion : maven version
  • groupId : 보통 사이트 도메인의 역순으로 작성
  • artifactId : groupId 외의 구분자
  • version : 프로젝트의 버전
  • name : 프로젝트 이름
  • description : 프로젝트 설명
  • properties : pom.xml 내에 사용할 변수를 선언해주는 태그. 파일 내 자주 사용하는 변수를 선언해준다.
  • repositories : 실제 라이브러리를 다운 받을 위치를 설정
  • dependency : 라이브러리를 추가할 때 사용하는 태그로 id, version 등을 입력하면 된다.
    • groupId : 라이브러리의 group ID
    • artifactId : 라이브러리의 artifact ID
    • scope : 라이브러리의 이용 범위
      • compile(default) : 모든 클래스 경로에서 사용될 수 있어 컴파일 및 배포 상황에서도 제공
      • provided : JDK or Container가 런타임, 컴파일, 테스트에만 제공 (배포 X)
      • runtime : 실행 상황(런타임), 테스트에서만 사용 (컴파일X)
      • test : 테스트에만 사용되는 라이브러리
      • system : 직접 관리하는 jar을 추가할 때 사용
  • build : 프로젝트 빌드 관련 정보
  • packaging : 패키징 타입
    • jar : 자바 프로젝트 압축 파일
    • war : 웹 어플리케이션을 위한 패키징 방식

 

※ 라이브러리

  • Spring Boot Starter Parent : 프로젝트 내 라이브러리 간 버전 조합 정보 제공. 다른 라이브러리 버전을 작성하지 않아도 Parent가 프로젝트에 맞는 버전으로 불러와줌
  • Spring Boot Starter Web : Spring MVC를 사용한 REST 서비스 개발시 사용
  • Spring Boot Starter Test : 테스트 기능 제공

 

 

7. build.gradle

Gradle을 사용할 때 생성되는 repository에 대한 설정과 하위모듈에서 공통적으로 사용하기 위한 라이브러리의 Dependency설정과 플러그인 정보를 정의한 파일

  • repositories : 라이브러리 저장된 위치 등 설정
  • mavenCentral : 기본 maven repository
  • dependencies : 라이브러리 사용을 위한 의존성 설정

 

반응형