Framework/Spring

[코드로배우는스프링] Part1:Ch01 개발을 위한 준비

유호야 2021. 7. 5. 23:17
반응형

ch01 개발을 위한 준비

설정이 반이다


JDK 1.8버전 설치 / JDK10은 2018년 8월 기준 Tomcat 등의 연동에 문제가 완전히 해결되지 않아 권장하지 않음

STS(Eclipse) 설치 및 프로젝트 생성

Tomcat 설치 및 연동

오라클 데이터베이스 / SQL Developer 설치 및 설정

스프링 프로젝트 생성 및 라이브러리 추가

MyBatis / mybatis-spring 설정

스프링 MVC 개발 설정 


1.1 개발 환경설정

개발하는데 시간을 단축해주는 여러 개발도구를 설정

스프링은 버전에 따라 JDK의 제한이 있다.

5.x의 경우 JDK 1.8 이상
4.x의 경우 JDK 1.6 이상
3.x의 경우 JDK 1.5 이상

 

[Spring] 스프링 버전 확인

1. 프로젝트에서 스프링 현재 버전 확인 Pom.xml에서 Dependencies 모듈을 통해 스프링의 버전을 확인할 수 있다. 2. 스프링 최신 버전 확인 https://projects.spring.io/spring-framework/

jasonbla.tistory.com

 

1.1.1 JDK 설치

JDK 설치 후에 환경 변수에서 JAVA_HOME을 설정
환경변수 값은 JDK가 설치된 경로를 지정

 

 

새 시스템 변수에다가 추가 한다.....

책에는 사용자 변수 편집으로 하라고 했는데, 어떻게 하는 지 몰라서 검색하니까

시스템 변수에다가 넣고 한 번 더 작업하셨다. 

 

[초급 JAVA]자바 JDK 설치 경로 및 환경변수 설정

JDK Install Introduction 안녕하세요. Commin 입니다. JAVA 카테고리에 처음으로 글을 올리게되었네요. 사실 다른 카테고리에는 포스팅 한적이없지만요 ^^ 부지런히 채워나갈려고하는데 여건상 그러지못

commin.tistory.com

시스템 변수 편집 > %JAVA_HOME%\bin 추가 > 확인

적용이 잘 되었는 지 확인하기 위해 
cmd 창 실행 > java -version 입력 / javac 입력
잘 적용되었다면 아래 와 같이 잘 나올 것이다.

JDK 설정에 문제가 있다면, 둘 다 나오지 않을 것이고, 환경변수 선언이 제대로 이루어지지 않았으면, java -version은 잘 나오지만, javac는 나오지 않는다.

 

1.1.2 Eclipse 혹은 STS 설치

JDK가 올바르게 설치되었다면 스프링 개발을 위한 개발도구를 설정해야 한다. Java를 이용하는 경우 가장 많이 사용하는 도구는 STS, Eclipse, Intellij 이다.

STS 설치 완료.

 

1.1.3 Eclipse 실행 환경 편집 

설치된 이클립스를 별 다른 설정 없이 사용하는 것도 가능하지만 이클립스가 기본적으로 jdk가 아닌 jre를 이용해서 실행되기 때문에 이후에 설치하는 Lombok 라이브러리 등의 사용에 지장이 될 수 있다. 이러한 문제를 미리 막기 위해 이클립스가 설치된 폴더 내에 'sts.ini(Eclipse의 경우 eclipse.ini)' 파일을 수정할 필요가 있다.

-vm
C:\Program Files\Java\jdk1.8.0_171\bin\javaw.exe
..이하의 내용은 수정하지 않습니다.

파일에 '-vm' 이라는 설정을 추가하고 내용은 JDK 설치 경로 내에 bin 폴더와 javaw.exe 파일로 지정한다.

+ 수정 이후에 바로가기 아이콘을 교체하는 것이 좋다.

1.1.4 workspace의 UTF-8 설정

STS(Eclipse)는 운영체제에 따라서 workspace의 기본 문자열 인코딩 방식을 다르게 지원한다.

Window > preferences 클릭 후 encoding 타입하여 UTF-8로 Workspace와 JSP Files의 인코딩 정보를 변경한다.

 

1.1.5 STS(Spring Tool Suite) 설정

Eclipse를 이용해서 Servelt이나 JSP를 개발하는 경우에는 별도의 추가적인 기능이 필요하지는 않지만, 스프링 프레임워크의 경우 설정이나 개발 시 도움을 바을 수 있는 sts(Spring Tool Suite 이하 STS)를 이용하는 것이 편리하다.

(+ STS4는 스프링 부트에 특화되어 있으니 주의)

1.1.6 Eclipse를 이용하는 경우 스프링 플러그인 설치
나는 STS를 이용한다.

1.1.7 Tomcat 9(8) 서버 설정 

 

Apache Tomcat® - Welcome!

The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the

tomcat.apache.org

 

zip이나 tar.gz 등의 압축형태를 다운로드해서 원하는 경로에 압축을 해제한다.
나의 경우는 c드라이브 밑에 폴더를 생성하여 압축을 해제하여 사용한다.

Preferences > Server > Runtime Environment에 Add하여 압축 푼 Tomcat 을 추가해준다.

 

1.2 스프링 프로젝트 생성

이클립스(sts)에서 스프링 프로젝트 생성하는 방식에는 3가지가 있다.

1) 처음부터 스프링 프로젝트를 지정하고 생성하는 방식
2) Maven 이나 Gradle 프로젝트를 생성한 후 프레임워크를 추가하는 방식
3) 직접 프레임워크 라이브러리를 추가하는 방식

1.2.1 'ex00' 프로젝트 생성

STS나 Eclipse의 스프링 관련 플러그인을 설치하면 별도의 설정 없이 몇 번의 클릭만으로도 Maven을 사용하는 스프링 프로젝트를 생성할 수 있다. 화면 오른쪽 상단의 Perspective를 Spring으로 지정한 후 File 메뉴를 통해서 프로젝트를 생성한다.

File > New > Spring Legacy Project 

프로젝트명 ex00
패키지명 org.zerock.controller

프로젝트를 최초로 생성하면 필요한 코드와 라이브러리들을 다운로드하게 된다.
다운로드 하는 라이브러리들은 사용자 폴더 내 '.m2' 라는 이름의 폴더를 이용한다.
'.m2' 폴더에 생성된 repository 폴더 안에는 프로젝트 생성 시 다운로드된 파일들이 추가된다.

1.2.2 스프링 버전 변경

src/main/java : 작성되는 코드의 경로
src/main/resources : 실행할 때 참고하는 기본 경로(주로 설정파일들을 넣는다)
src/test/java : 테스트 코드를 넣는 경로
src/test/resources : 테스트 관련 설정 파일 보관 경로

servlet-context.xml : 웹과 관련된 스프링 설정
root-context.xml : 스프링 설정 파일
views : 템플릿 프로젝트의 jsp 파일 경로
web.xml : Tomcat의 web.xml 파일
pom.xml : Maven이 사용하는 pom.xml

Spring Legacy Project 메뉴를 이용해서 생성하는 프로젝트는 편리하긴 하지만 아쉽게도 생성되는 스프링의 버전은 3.x이고, JDK 환경 역시 1.6을 기준으로 작성되어 있다. 예제는 스프링5버전을 이용할 것이므로 수정이 필요하다. 생성된 프로젝트의 라이브러리는 pom.xml 파일을 통해서 관리되므로 이를 수정한다.

스프링과 관련된 버전은 'maven spring'으로 검색해서 'Maven Repository'의 스프링 링크를 찾아서 사용한다.

pom.xml에서 스프링 프레임워크 버전은 3.1.1로 생성되므로, 예제는 5.0.7 버전으로 수정한다.

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

스프링 프레임워크의 버전을 수정하고 나면 관련 라이브러리들을 새롭게 추가하는데 시간이 조금 걸린다. 완료된 후에는 프로젝트 구조의 'Maven Depenedencies' 항목을 통해서 스프링 프레임워크 라이브러리들이 제대로 변경되었는지를 확인한다.

 

1.2.3 Java version 변경

생성된 프로젝트의 JRE System Library를 보면, 'JavaSE-1.6' 버전으로 생성되었으므로, 스프링 5.x 버전을 이용하고 싶다면 JDK 1.8을 사용하는 것이 가장 좋다. (2018년 4월 기준 JDK 1.9 버전은 MyBatis에서 경고 메시지에 대한 이슈가 해결되지 않은 상태, Java SE 10의 경우 Tomcat과의 이슈가 해결되지 않은 상황이다.)

 pom.xml의 <plugin> 태그 중 maven-compiler-plugin의 내용을 1.6에서 1.8로 수정한다.

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    //<source>1.6</source>
                    <source>1.8</source>
                    //<target>1.6</target>
                    <target>1.8</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>

그리고 메이븐 업데이트 : Maven > Update Project

 

실행 후에 프로젝트의 컴파일이나 실행 환경이 JDK 1.8을 기준으로 설정된 것을 확인할 수 있다.

 

1.3 Tomcat을 이용한 프로젝트 실행 확인

작성된 프로젝트가 정상적으로 동작하는 지 프로젝트를 실행해서 확인하는 과정은 프로젝트의 Run As > Run on Server 를 이용해서 처리한다.

프로젝트가 정상적으로 실행되면 Eclipse(STS) 내에서 실행되는 모습을 확인할 수 있다. 문제가 없다면 'http://localhost:8080/controller/' 라는 url이 실행된다.

실행하고 나서 아래의 오류가 발생했다.  

Port 8080 required by Tomcat v9.0 Server at localhost is already in use. 
The server may already be running in another process, or a system process may be using the port.
To start this server you will need to stop the other process or change the port number(s).

 

pom.xml에서 빨간색 경고가 발생하는 경우 - 해당 라이브러리를 다운로드 하지 못하면서 생기는 문제인 경우가 많다. Maven으로 여러 라이브러리들을 다운 받으려고 할 때 가끔 비정상적으로 다운로드가 되는 경우가 있다. Maven으로 다운로드되는 파일들은 '사용자 이름' 폴더 내 '.m2' 폴더에 모이게 된다. 따라서 Eclipse를 종료한 후 '.m2' 폴더 내의 모든 내용을 삭제한 수 다시 Eclipse를 실행한다. Eclipse는 기본적으로 프로젝트의 유효성을 점검하기 때문에 Maven으로 다시 관련 라이브러리를 다운로드한다.

Tomcat으로 실행할 때 'invalid Ioc header(bad signature)' 메시지가 보이면서 정상적으로 실행되지 않는 경우 - 앞에서와 마찬가지로 대부분 라이브러리 문제이다. 다만 이 문제는 Tomcat 쪽에 라이브러리가 제대로 처리되지 않아서 생기는 문제임으로 위의 방식으로 해결되는 경우가 대부분이고, Maven을 강제로 업데이트 시켜볼 수도 있다. (Force Update of Snapshots/Releases 체크) 프로젝트를 선택한 후 Maven 메뉴를 이용해서 'Update Project'를 선택한다. 

 

1.4 Lombok 라이브러리 설치

이클립스와 스프링 플러그인 만으로도 스프링 개발은 가능하지만, Lombok을 이용하면 Java 개발 시 자주 사용하는 getter/setter, toString(), 생성자 등을 자동으로 생성해주므로 약간의 코드만으로도 필요한 클래스를 설계할 때 유용하다. 
Lombok은 다른 jar 파일들과 달리 프로젝트의 코드에서만 사용되는 것이 아니라 Eclipse 에디터 내에서도 사용되어야 하기 때문에 별도로 설치한다. 

Lombok 다운로드는 https://projectlombok.org에서 jar 파일 형태로 받을 수 있다.

 

Project Lombok

 

projectlombok.org

 

CMD창을 이용해서 lombok이 설치된 경로로 이동하여 lombok을 실행한다.
경로이동은
하위폴더로 이동 > cd ..
해당경로 이동 > cd 이동하고자하는폴더이름 

java -jar lombok.jar

 

설치가 끝나면 Eclipse(STS)의 실행 경로에 lombok.jar 파일이 추가된 것을 확인할 수 있다.

만일 Lombok을 설치한 후 바탕화면의 이클립스 '바로가기'가 정상적으로 동작하지 않는다면, 실제로 이클립스가 설치된 경로에서 제대로 실행되는지 확인하고, 바탕화면 '바로가기'는 삭제 후 다시 생성한다.

 

1.5 Java Configuration을 하는 경우

이클립스(sts)를 통해 생성하는 'Spring Legacy Project'의 경우 XML 기반으로 스프링 관련 설정을 하도록 되어 있다. 스프링 3버전 이후에는 Java 클래스 파일을 이용하는 설정을 지원하는데, 최근 인터넷에 공개된 예제들 역시 XML과 별개로 Java를 이용하는 설정(Java Configuration - 이하 Java 설정)이 점점 증가하고 있다. 국내 프로젝트 역시 XML을 이용하는 경우가 많기는 하지만, 점차 Java 설정을 이용하는 경우도 증가하고 있어서 XML을 이용하는 학습 이후에 Java 설정을 학습하겠다. 

예제로 작성된 'ex00' 프로젝트의 경우 XML 기반으로 설정된 것이므로 Java 설정을 이용하는 예제는 'jex00'과 같이 'j'를 붙여서 프로젝트를 생성한다. 'jex00' 프로젝트는 기존과 동일하게 'Spring Legacy Project' 설정합니다. 프로젝트 생성 시 패키지명은 'org.zerock.controller'로 기존과 동일하게 작성한다. 

'jex00' 프로젝트가 생성된 후에는 다음과 같은 작업을 진행한다.

web.xml의 파일 삭제 및 스프링 관련 파일 삭제
pom.xml의 수정 및 스프링 버전 변경
Java 설정 관련 패키지 생성

 

1.5.1 XML 파일 삭제

삭제해야 하는 대상의 파일은 'web.xml'과 'servlet-context.xml, root-context.xml' 파일이다.

'web.xml' 과 달리 다른 파일들은 spring이라는 이름의 폴더 내에 이씅므로 spring 폴더 자체를 삭제해야 한다.

삭제 후 폴더 구조

web.xml을 삭제하면 pom.xml에서 에러가 발생하는데, 과거의 웹 프로젝트들이 기본적으로 web.xml을 사용하는 것을 기본으로 설정했기 때문이다. 이를 해결하기 위해 pom.xml 하단부에 <plugins> 내에 아래의 설정을 추가한다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
    	<failOnMissingWebXml>false</failOnMissingWebXml>
	</configuration>
</plugin>

 

pom.xml의 스프링 버전도 함께 변경

<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>

 

컴파일 관련 버전 역시 1.8버전으로 수정하고 'Maven > update Proejct' (메이븐 업데이트)를 실행

 

1.5.2 @Configuration
Java 설정을 이용하는 경우에는 XML 대신 설정 파일을 직접 작성할 필요가 있다. 다행스럽게도 스프링은 @Configuration이라는 어노테이션을 이용해서 해당 클래스의 인스턴스를 이용해서 설정 파일을 대신한다.

프로젝트 내에 'org.zerock.config' 라는 폴더를 생성하고 RootConfig 클래스를 작성해둔다.

 

1.5.3 web.xml을 대신하는 클래스 작성

기존 프로젝트에서는 web.xml을 이용해서 스프링을 구동시켰지만,
XML을 사용하지 않는 경우에는 이 역할을 대신하는 클래스를 작성하여 처리한다.

org.zerock.config 패키지 내에 WebConfig 클래스를 생성한다.
WebConfig 클래스는 AbstractAnnotationConfigDispatcherServletInitializer라는 긴 이름의 추상클래스를 상속하도록 작성한다.

package org.zerock.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
	
	@Override
	protected Class<?>[] getRootConfigClasses() {
		return null;
	}
	
	@Override
	protected Class<?>[] getServletConfigClasses() {
		return null;
	}
	
	@Override
	protected String[] getServletMappings() {
		return null;
	}
	
}

작성된 WebConfig 클래스는 3개의 추상 메서드를 오버라이드 하도록 작성된다. 이 때 생성된 getRootConfig() 클래스는 'root-context.xml'을 대신하는 클래스를 지정하는데 예제는 RootConfig 클래스를 사용하므로 아래와 같이 메서드의 내용을 변경한다.

@Override
protected Class<?>[] getRootConfigClasses() {
	return new Class[] {RootConfig.class};
}

 


 

 

 

반응형

'Framework > Spring' 카테고리의 다른 글

[Spring] 컨트롤러에서 DATE값 받을 때  (0) 2023.02.06
[Spring] Maven이란?  (0) 2021.07.05