본문 바로가기
Spring

[Spring] 첫번째 프로젝트 생성, pom.xml

by moca7 2024. 10. 14.

 

 

 

ㅁ 패키지 익스플로러 우클릭 - new - Spring Legacy Project

 

- DB 연동해서 웹개발하진 않고 스프링 특징(IOC, DI)을 살펴본다.

 

- 템플릿으로는 Spring MVC Project를 선택해서 만든다.

그럼 ~어느정도 세팅된 채로 만들어진다.

 

 

 

 

 

 

- 기본으로 깔고 갈 베이스 패키지를 만든다.

3번째 레벨정도는 만든다.

첫번재 두번째 레벨은 도메인의 역순, 세번째 레벨은 어쩌구

- 이제부터는 베이스 패키지가 굉장히 중요하다.

- 세번재 레벨값을 잘 기억하고 있어야 한다. contextPath가 세번재 레벨로 잡힌다.

 

 

 

 

ㅁ 

 

 

- 폴더의 아이콘에 패키지가 포함되어 있으면 소스파일이 보관되는 소스폴더다.
- s는 스프링과 관련된 문서가 포함되어 있어서 붙어있다.

 

(1) src/main/java 

- java 파일을 보관하는 폴더.

 

(2) src/main/resources

- 이것도 소스폴더. 스프링 프로젝트에서는 내가 만들 필요 없이 만들어준다.

- 환경설정 관련한 xml파일이나 sql문들 작성하는 mapper파일을 보관하는 폴더다.

 

(3) src/test/java

- 실제 구동되는 폴더가 아니라 테스트용 폴더다. 나중에 junit 테스트할 때 쓴다.

 

(4) src/test/resources

- 실제 구동되는 폴더가 아니라 테스트용 폴더다. 나중에 junit 테스트할 때 쓴다.

 

 

 

(5) src/main/webapp/resources

- 위의 resources와는 다르다. 정적 자원(이미지파일, js파일, css파일)을 보관하는 폴더다.

- assets라는 이름의 폴더를 썼었는데 스프링 프로젝트에서는 resources라는 이름의 폴더로 만들어진다.

 

(6) src/main/webapp/WEB-INF/views

- 화면을 담당하는 jsp 파일을 보관하는 폴더.

 

(7) src/main/webapp/WEB-INF/spring

- 스프링 환경설정 관련한 xml 파일이 보관되는 폴더.

 

(8) test

- 얘도 테스트용이라 당장 쓰이진 않는다.

 

(9) target

- 우리가 작업한게 컴파일되서 타겟에 저장된다.

- 개발이 다 끝나고 실제 서버에 배포하는 과정을 할텐데, 배포된 파일이 저장되는 폴더가 target 폴더다.

- 지금 당장은 쓰이지 않는다.

 

(10) pom.xml

- xml 파일인데 아이콘은 m이다.

- m은 Maven을 뜻한다.

- sts로 스프링 프로젝트를 만들면 내부적으로 메이븐을 가져다 쓴다.

 

- STS에서 스프링 프로젝트를 만들면 내부적으로 Maven을 가져다 쓴다.

스프링은 따지고 보면 Maven 프로젝트 중의 하나다.

- Spring 자체는 Maven 프로젝트가 아니며 독립적인 프레임워크다.

다만 Spring 프로젝트를 생성할 때 Maven 또는 Gradle과 같은 빌드 도구를 사용하여 의존성 관리와 빌드를 편리하게 한다.

 

 

 

 

 

ㅁ 자동 생성된 home.jsp와 HomeContollrer.java 삭제

 

 

- 샘플용으로 만들어 놓은 home.jsp다. 지운다.

 

 

 

 

 

 

 

- HomeController.java도 지운다.

- 이 둘을 지우면 프로젝트에 빨간 X표는 사라진다.

 

 

 

 

 

ㅁ 자바 버전 변경

- 현재 패키지 익스플로러의 JRE System Library를 보면 자바가 1.6버전이다.

- 스프링 이전에는 버전을 바꿀 때 project facets가서 했는데 이젠 그럴 필요 없다.

이제 버전관리 등은 pom.xml 파일에서 진행한다.

- pom.xml은 Maven 관련 파일이다.

 

 

 

 

※ Maven

- Java 프로젝트의 전반적인 버전 관리와 라이브러리 관리를 자동화하는 빌드 관리 도구다.

- project object model XML 문서(pom.xml)를 통해 해당 프로젝트의 버전 정보 및 라이브러리 정보들을 통합하여 관리하는 프레임워크이다.

- 네트워크를 통해 필요한 라이브러리와 플러그인을 자동으로 다운로드하여 개발 환경 설정과 빌드 작업을 간소화한다.

 

- sts에서 스프링 프로젝트를 생성할 때 기본적으로 Maven을 사용하도록 설정되어 있다.

 

 

- 빌드 관리 도구로 Maven말고 Gradle도 있다. 

- Maven과 Gradle은 모두 빌드 도구로, Java 프로젝트에서 의존성 관리, 빌드(컴파일, 테스트, 패키징 등), 그리고 프로젝트 관리를 자동화하는 역할을 한다.

- 의존성 관리는 소프트웨어 프로젝트에서 필요한 외부 라이브러리나 모듈을 자동으로 다운로드하고 프로젝트에 포함시키는 과정을 말한다.

 

 

- 이제부터는 직접 jar 파일을 추가할 필요가 없다. pom.xml 문서에 사용할 라이브러리를 작성만 하면 된다.

Maven이 필요한 라이브러리를 자동으로 다운로드하고 프로젝트에 연동해 준다.

이게 라이브러리 종속성이란 특징이다.

- 일반적인 프로젝트는 개발자가 필요한 라이브러리를 직접 찾아서 추가해야 하지만, Maven을 사용하면
pom.xml 문서에 사용하고자 하는 라이브러리를 등록하면 자동으로 프로젝트에 추가되게 하여 라이브러리 관리의 편리성을 제공해준다.

 

 

 

 

 

ㅁ pom.xml

 

 
<?xml version="1.0" encoding="UTF-8"?>
 
    <!-- (1) 프로젝트 정보 -->
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.br</groupId>
    <artifactId>spring</artifactId>
    <name>01_Spring_IoC_DI</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
 
 
    <!-- (2) properties -->
    <properties>
        <java-version>1.6</java-version>
        <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
    </properties>
 
 
    <!-- (3) dependencies -->
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                 </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
               
        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>  
       
        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>

        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
               
        <!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
   
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>        
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
 
</project>
 

 

 

- project 태그로 전체가 감싸져 있다.

- 그 안에 model

 

 

(1) 프로젝트 정보 

 

(2) properties

- 해당 xml 파일 내에서 사용하고자 하는 버전들을 변수에 담아두는 태그

- properties에 쓰여진 값은 ${ } 블록으로 다른데서 참조할 수가 있다. 

 

(3) dependencies

- 여러개의 depencency 태그들이 올 수 있다.

- 사용하고자 하는 라이브러리(jar)를 나타낸다.

이 프로젝트에서 사용하고자 하는 라이브러리들을 dependency 태그로 나타낸다.

- maven에 의해서 저장소로부터 자동으로 다운로드가 진행된다. 

 

- 기본적으로 필요한 라이브러리가 꽤 많다.

- 스프링과 관련된 라이브러리 2개, Logging 관련한 라이브러리 4개 등등이 있다.

얘네가 기본적으로 스프링 프로젝트를 가동시킬 때 기본적으로 필요해서 이미 기재되어 있다.

 

- dependency 태그를 추가하면 된다.

- dependency 구문에 의해 maven이 라이브러리들을 다운로드 했을 것이다.

 

 

 

 

- window - preferences - maven - user settings - Local Repository의 폴더 안에 라이브러리들이 다운로드 되어 있다.

- Users는 "사용자" 폴더다.

 

 

 

 

- pom.xml에 dependency로 작성한 라이브러리들이 다운되어 있다.

 

 

 

 

 

 

- jar 파일이 있다.

- 스프링 관련된 것들은 3.1.1 버전으로 다운받아져 있다.

 

 

 

 

 

 

- 여기서도 볼 수 있다.

- 패키지 익스플로러에 Maven Dependecies에서도 볼 수 있다. 

확장해보면 현재 다운로드가 진행된 jar파일 목록들을 한번에 볼 수 있다. 어디에 위치되어 있는지도 볼 수 있다.

 

 

 

 

- 스프링 관련된 것들은 3.1.1 버전으로 다운받아져 있다.

- pom.xml에 어쩌구

- 근데 3.1.1 버전은 너무 옛날 버전이다.

현재 전자 정부에서 쓰는 5.3.27 버전으로 바꾼다.

 

 

 

 

 

 

- mvnrepository.com에 들어간다. 라이브러리를 제공하는 maven 사이트다.

- 다수가 한번에 접속하면 ip 차단되기도 한다. 그럼 ip 우회해서 들어가야 한다.

지금은 괜찮아도 나중에 차단되기도 한다.

 

 

 

 

 

 

- 여기서 라이브러리들을 검색할 수 있다.

 

- spring 검색하면 스프링 관련한 라이브러리가 보여진다. 

 

 

 

 

 

 

 

 

- 전자정부가 5.3.27버전이다. 6버전은 스프링 부트할때 써보기로 하고, 지금은 5.3.27버전으로 한다.

 

- pom.xml에서 <properties> 태그의 <org.springframework-version>을 5.3.27로 바꾸고 저장하면 progress 탭에서 다운이 진행된다. 

 

 

 

 

	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>

 

	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>5.3.27</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>

 

 

 

 

 

- maven을 쓰면 일일이 jar 파일을 다운받아서 lib 폴더에 넣을 필요 없이 자동으로 다운받아진다.

 

 

 

 

 

 

 

 

- aspectj를 검색해본다. 

첫번째로 나오는 AspectJ weaver를 들어가본다.

 

 

 

 

 

 

- 엄청 옛날 버전이다. 스프링 버전이 나온 날짜와 같이 나온 버전이랑 맞춰주는 것이 제일 좋다.

2023년 4월쯤에 나왔으니까 2023년 8월 보다는 2022 12월 21일 버전을 쓴다.  스프링 버전이 나오는 것보다 좀 더 전걸로.

- 아니면 usages를 봐도 된다. 사용 빈도 수다. 1.9.19로 수정한다.

 

 

 

 

	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>5.3.27</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>

 

	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>5.3.27</org.springframework-version>
		<org.aspectj-version>1.9.19</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>

 

- 왼쪽의 maven 어쩌구에서도 버전이 바뀐걸 확인할 수 있다.

 

 

 

 

 

 

ㅁ slf4j

 

 

- 얘도 스프링 버전이 나왔을 대와 비슷한 때로 맞춘다. 

- 2.0.7로 한다.

 

	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>5.3.27</org.springframework-version>
		<org.aspectj-version>1.9.19</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>

 

 

	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>5.3.27</org.springframework-version>
		<org.aspectj-version>1.9.19</org.aspectj-version>
		<org.slf4j-version>2.0.7</org.slf4j-version>
	</properties>

 

 

 

 

 

ㅁ 자바 버전

 

- 1.6으로 되어있는데 11로 바꾼다.

	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>5.3.27</org.springframework-version>
		<org.aspectj-version>1.9.19</org.aspectj-version>
		<org.slf4j-version>2.0.7</org.slf4j-version>
	</properties>
	<properties>
		<java-version>11</java-version>
		<org.springframework-version>5.3.27</org.springframework-version>
		<org.aspectj-version>1.9.19</org.aspectj-version>
		<org.slf4j-version>2.0.7</org.slf4j-version>
	</properties>

 

 

- JRE SYSTEM LIBRARY는 여전히 1.6이다.

 

 

 

 

 

 

- 이러고 maven 업데이트를 하면 java 버전이 바뀔 것이다.

 

 

 

 

 

ㅁ dependencies - Servlet 주석 부분

 

- 서블릿 관련한 라이브러리들이다.

 

 

- maven 라이브러리 사이트에서 artifactId에 있는 걸 검색하는게 제일 정확하다.

 

 

 

- 2018년에 나온게 가장 최근이다. 4.0.1로 바꾼다.

 

 

 

 

 

- 근데 빨간줄이 뜬다.

- 버전만 바꿀 것이 아니고 artifactId도 같이 바꿔야 한다.

 

 

 

 

 

- 구문을 통째로 복사해간다. artifactId도 변경을 해줘야 한다.

 

 

 

 

 

- 제일 위에있는걸 클릭

 

 

 

 

 

 

               
        <!-- Servlet -->
        <!--
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>

        -->
   
        <!-- servlet-api, jsp-api 변경 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
       
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
 

 

 

- jstl은 그대로 둔다.

 

 

 

 

 

ㅁ TEST

- junit 검색

- 2번째로 검색되는 junit이 4버전대.

 

   
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version> <!-- 4.13.2로 변경 -->
            <scope>test</scope>
        </dependency>  
             
    </dependencies>
 

 

 

 

 

 

 

ㅁ 자바 버전 변경

- 11버전으로 참조하게 했는데도 1.6 버전으로 보인다.

- maven을 강제로 업데이트하기.

- 프로젝트 우클릭 - maven - update project를 누르면 어떤 창이 뜨는데 ok누르면 자바가 11버전이 된다.

- 이제 자바 버전을 project facets에서 변경할 필요가 없다. 

 

 

 

 

 

- maven - update project를 했더니 JRE System Library [javaSE-1.6]이 1.6에서 11로 바뀌었다.

 

 

 

 

 

ㅁ Maven (pom.xml)

- 프로젝트 관리 도구

- 프로젝트의 전반적인 버전 및 라이브러리, 플러그인들을 통합해서 관리하는 도구

- 라이브러리 종속성의 특징으로 dependency 태그로 사용할 라이브러리 작성시

메이븐 저장소로부터 자동으로 라이브러리가 다운되며 추가된다.

(패키지 익스플로러의 Maven Dependencies에서 확인 가능)

- mvnrepository.com 사이트에서 라이브러리 검색 가능

(dependency 구문 자체를 제공한다)

 

- 유의사항 1) pom.xml을 자주 수정하고 저장하면 매번 다운로드가 진행되어 오류가 자주 발생한다.

그래서 한꺼번에 작성하고 저장하는 것이 좋다.

- 유의사항 2) 다운로드 중에는 최대한 건드리지 않는 것이 좋다.

다운로드 중에 수정하고 저장하면 또 다운로드가 진행되는데 충돌나서 뻗어버릴 수 있다.

progress 탭을 확인해야 한다. 

- 유의사항 3) 반영이 안되는 듯 보여지면 "프로젝트 우클릭" - "maven" - "update project"를 실행한다.

 

 

'Spring' 카테고리의 다른 글

[Spring] MVC (1)  (0) 2024.10.16
[Spring] DI(의존성 주입)  (2) 2024.10.15
[Spring] IOC(제어의 역전)  (0) 2024.10.14
[Spring] 스프링 기초  (0) 2024.10.14
[Spring] 스프링 세팅  (1) 2024.10.14