스프링 프로젝트 구조
개요
: 스프링 프로젝트는 구조는 다음과 같다. 가장 많이 사용하는 프로젝트 기준으로 설명한다.
- 프로젝트:
Spring Legacy Project
- 템플릿:
Spring MVC Project
구조
: 아래는 이클립스 프로젝트 전체 구조이다.
(1) src/main/java
- 자바(.java) 파일이 모여있는 곳
- 패키지를 이쁘게 폴더링하고 그 인에 자바 클래스를 생성한다.
- 스프링에서 이미 MVC 패턴의 서블릿 구조를 잡아주기 때문에 따로 서블릿을 만들 필요 없이 스프링 구조에 맞춰 클래스 파일들을 작성해주면 된다.
(2) src/main/resources
- 자바 클래스에서 사용하는 리소스를 보관하는 곳.
- 핵심은 자바 클래스에서 사용한다는 자원이라는 것이다.
- 예시)
- DB 연결을 위한 자원(Mapper)
- 의존성 주입(DI)을 위한 xml 파일(Log4j)
(3) src/test | src/test/java | src/test/resources
- 위와 같은 역할이다.
- 다른점은 테스트를 위한 자바 코드와 리소스를 보관하는 곳이다.
- 가끔 나는 종종 간단하게 단위 테스트를 수행하고 싶을때 사용했다.
- 예시)
- JUnit Test
(4) Maven Dependencies
- 메이븐에서 자동으로 관리해주는 라이브러리 폴더.
pom.xml
안에 작성된 라이브러리들을 자동으로 다운 받고 관리해준다. (패키지 아티팩트와 버전들을 명시해주면 알아서 관리된다.)- 그런데 폐쇄망 개발 환경에서는 사용이 어렵다..
- 나의 경우 폐쇄망에서 개발하는 경우가 많아서 메이븐 개념은 정말 필수라고 생각한다.
(5) src
웹(Web)
에 관련된 자원이 담겨있는 루트(Root) 폴더.- 하위 폴더에 웹과 관련된 모든 자원들이 분류되어 있다.
- main 폴더 안에 모두 들어가있다.
- test 폴더는 거의 비어있었고 사용하지 않았다 :)
(5-1) src/main/webapp/resources
- 웹에 필요한 다양한 자원들을 보관하는 곳,
- 정적인 웹리소스 js, css, img 파일 등이 보관되어 있다.
- 퍼블릭(Public)한 공간으로 사용자가 직접 접근할 수 있다.
- 보통 컨트롤러가 요청을 가로채지 않고 바로 접근할 수 있도록 따로 설정해서 사용하는 곳이다.
(5-2) src/main/webapp/WEB-INF
- 웹에 필요한 코드 파일과 컴파일된 파일, 그리고 여러 환경설정 파일들이 보관되는 곳
- 보안이 중요한 파일들이기 때문에 외부 사용자가 직접 접근할 수 없다.
- 컨트롤러(정확히는 핸들러)를 통해 내부적으로만 접근할 수 있는 폴더이다.
(5-2-1) src/main/webapp/WEB-INF/classes
- 컴파일 된 파일이 보관되는 곳
- 나의 경우는 항상 비어있거나 폴더 자체가 없었는데 기본적으로 프로젝트 생성시 target 폴더에 컴파일되게끔 디폴트 설정이 되어있다. (여기만 그런건가?) 좀 더 알아봐야겠다.
(5-2-2) src/main/webapp/WEB-INF/spring
- 스프링 환경설정 파일(context)이 보관되는 곳.
- 예시)
- root-context.xml
- servlet-context.xml
(5-2-3) src/main/webapp/WEB-INF/views
- JSP, HTML 파일이 보관되는 곳.
- 이 폴더가 루트(/)의 기준점입니다.
- 사용자가 입력하고, 컨트롤러가 받아주는 URL이 이 폴더의 구조를 따라가기 때문에 잘 정리해서 사용할 필요가 있는 곳이다.
마치며..
프로젝트마다 폴더링 구조가 너무 다양했다.
자연스러운 느낌적으로 아 이건 보통 여기서 사용하지 하며 운영했는데.. 적어도 기본 구조는 필수적으로 숙지해야겠다..
Leave a comment