본문 바로가기
자바과정/스프링

스프링 과 메이븐 디렉터리 구조

by Parkej 2021. 4. 5.

- 출처1 : admm.tistory.com/15

- 출처2 : codevang.tistory.com/240

- 의존 주입(DI)에 관한 내용 : codevang.tistory.com/312?category=847271

- 의존 주입(DI)에 관한 내용2 : private.tistory.com/39

- 스프링과 메이븐에 대한 자세한 설명 : codevang.tistory.com/239?category=847271

- Maven을 통한 라이브러리 의존성 주입 사이트 (https://mvnrepository.com/)

 

메이븐(Maven)

OS : window 10 64bit
WAS : Tomcat 9.0
JAVA, JDK : 15
Framwork :
 - Spring Tools 3 Add-On for Spring Tools 4 3.9.15.RELEASE
 - Spring Tools 3 (Standalone Edition) 3.9.14.RELEASE
 - Spring Tools 4 (aka Spring Tool Suite 4) 4.10.0.RELEASE

 

New > Other > Maven > Maven Project > Create a... 체크, Use default... 체크 > Group id, Artifact id 입력 > Finish

maven 디렉토리

[ 메이븐(Maven) ]

  • 자바 프로젝트를 위한 통합 빌드 툴 (Build Tool)
  • 프로젝트, 라이브러리, 의존관리를 자동 관리해주는 프로젝트 관리 도구
  • 빌드 과정의 프레임워크이자 자동화 시스템
  • Apache에서 개발한 자바 프로젝트의 빌드 자동화 도구, Apache Ant의 대안으로 만들어짐
  • 주로 라이브러리 의존성 관리를 위해 사용되며, 프로젝트에서 필요한 라이브러리들을 POM(Project ObjectModel)에 정의해주면, Maven이 네트워크를 통해 자동으로 다운로드하여 프로젝트에 주입해줌

- Maven을 통한 라이브러리 의존성 주입 방법

blog.naver.com/PostView.nhn?blogId=ksw6169&logNo=221495438877&categoryNo=85&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView&userTopListOpen=true&userTopListCount=5&userTopListManageOpen=false&userTopListCurrentPage=1

 

디렉토리 구성 설명
  • src/main/java : 자바 소스 파일 위치 . 이 하위에 org.gliderwiki ... 와 같은 패키지를 배치
  • src/main/resources : 프로퍼티나 XML 등 리소스 파일이 위치
  • src/main/webapp : Web Project 일 경우 WEB-INF등 웹 어플리케이션 리소스를 위치
  • src/test/java : JUnit등의 테스트 파일
  • src/test/resources : 테스트시에 필요한 resource 파일

 src 하위에 main 부분과 test 부분을 경로가 나뉘는 이유는 개발과 동시에 테스트 코드를 작성하기 위함. 

 

Maven 장점
  • 메이븐을 사용할 경우 개발자가 라이브러리 관리를 따로 하지 않아도 된다는 큰 이점이 추가로 생긴다.
  • 결론적으로 개발자는 실제 라이브러리 파일(.jar)을 직접 관리할 필요없이, "pom.xml" 파일만 잘 관리해주면 된다.

 

[ 스프링(Spring) ]

 

New > Other > Spring > Spring Legacy Project > Project name 입력, Spring MVC Project 선택 > ***.***.*** 패키지 네임 입력 > Finish

* 빌드툴은 메이븐을 사용함.

Spring 디렉토리


src/main/java

- 자바(.java) 파일이 모여있는 곳입니다.
- 패키지로 잘 분리해서 자바 클래스를 생성해 사용하면 됩니다.
- 스프링에서 이미 MVC 패턴의 서블릿 구조를 잡아주기 때문에 따로 서블릿을 만들 필요 없이 스프링 구조에 맞춰 클래스 파일들을 작성해주면 됩니다.

src/main/resources

 

- 자바 클래스에서 사용하는 리소스를 보관하는 곳입니다.
- DB 연결을 위한 자원, 의존성 주입(DI)을 위한 xml 파일 등 자바 코드 외 모든 자원은 이곳에 넣어주면 됩니다.

 src/test/java or resources

테스트를 위한 자바 코드와 리소스를 보관하는 곳입니다.

Maven Dependencies

- 메이븐에서 자동으로 관리해주는 라이브러리 폴더입니다.
- "pom.xml"에 작성된 라이브러리들을 자동으로 다운 받아 관리해줍니다.
- 빌드툴을 사용함으로써 개발자가 직접 관리해주지 않아도 되는 영역이 되었습니다. 

src/main/webapp/...

1. src/main/webapp/resources
 - 웹에 필요한 다양한 자원들을 보관하는 곳이자, 사용자가 직접 접근할 수 있는 공간입니다. js, css, img 파일 등이 보관되어 있으며, 보통 컨트롤러가 요청을 가로채지 않고 바로 접근할 수 있도록 따로 설정해서 사용하는 곳입니다.

2. src/main/webapp/WEB-INF
 - 웹에 필요한 코드 파일과 컴파일된 파일, 그리고 여러 환경설정 파일들이 보관되는 곳입니다. 보안이 중요한 파일들이기 때문에 외부 사  용자가 직접 접근할 수 없으며 컨트롤러(정확히는 핸들러)를 통해 내부적으로만 접근할 수 있는 폴더입니다.     

3. src/main/webapp/WEB-INF/classes
 - 컴파일 된 파일이 보관되는 곳입니다.

4. src/main/webapp/WEB-INF/spring
 - 스프링 환경설정 파일(context)이 보관되는 곳입니다. 

5. src/main/webapp/WEB-INF/views
 - JSP, HTML 파일이 보관되는 곳입니다. 이 폴더가 루트(/)의 기준점입니다. 사용자가 입력하고, 컨트롤러가 받아주는 URL이 이 폴더의 구조를 따라가기 때문에 잘 정리해서 사용할 필요가 있는 곳입니다. 

POM.xml 파일의 구조
<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 https://maven.apache.org/maven-v4_0_0.xsd">
	
    <modelVersion>4.0.0</modelVersion>
	<groupId>com.or</groupId>
	<artifactId>sl</artifactId>
	<name>FirstMVC</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			</exclusions>
		</dependency>      
	</dependencies>
    
    	<build>
        <plugins> ....
        </build>
</project>

- project : pom.xml 파일의 최상위 루트 엘리먼트
- modelVersion : POM model의 버전
- groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정. 일반적으로 도메인 이름을 거꾸로 적는다.
- artifactId : 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를 결정. Maven을 이용하여 pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성. artifactid-version.packaging. 위 예의 경우 빌드할 경우 examples-1.0-SNAPSHOT.jar 파일이 생성.
- packaging : 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정. jar, war, ear 등이 해당됨.
- version : 프로젝트의 현재 버전. 추후 살펴보겠지만 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용하는데
이러한 Maven의 버전 관리 기능은 라이브러리 관리를 편하게 한다.
- name : 프로젝트의 이름
- url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능
 
 
여기서 가장 중요한 것은 dependency 입니다.
여기에 원하는 라이브러리에 대한 버전이나 기타 등등의 양식을 입력하면 자동으로 라이브러리가 추가되어 사용할 수 있습니다. 예를들어 jdbc를 이용하여 mysql을 사용하고 싶으면 <dependencies></dependencies> 안에 다음과 같은 코드를 삽입하면 됩니다.

<dependencies>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.45</version>
	</dependency>
</dependencies>
반응형

댓글