스프링 환경 설정
목표:스프링을 공부하기 위한 환경을 설정한다
미리 설치한 프로그램: eclipse 2022-06 버전, 자바 11버전, apache-tomcat-9.0.67
1. eclipse 2022-06 버전을 사용한다.
2. 이클립스 설치 폴더 안에 eclipse.ini 설정 파일을 JAVA 11 버전으로 수정한다.
ini 형식의 폴더가 보이지 않을 경우 다음처럼 설정하면 보인다.
숨김 파일, 폴더 및 드라이브 표시는 체크하고
알려진 파일 형식의 파일 확장명 숨기기를 체크 해제한다.
그 이후에 eclipes.ini가 보인다.
메모장으로 연결하여 파일을 열고
아래쪽의 사진처럼 수정한다.
수정 전
-vm
plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_17.0.3.v20220515-1416/jre/bin
수정 후
-vm
C:\Program Files\Java\jdk-11.0.16.1\bin
즉, jdk를 설치한 경로로 연결해준다. 마지막에 \bin 붙이는 거 잊지 않기.
3.
이클립스 실행 후
eclipse 메뉴에서 preferences->JAVA->Installed JREs로 이동하고 자바 11버전으로 수정
eclipse 메뉴에서 preferences->JAVA->Colkpiler ->JAVA 11버전으로 수정
4. 고급 시스템 설정 보기에서 환경 변수를 고치거나 생성한다.
이전 수업에 시스템 변수에서 만든 JAVA_HOME가 있었기 때문에 기존에 있던 JAVA_HOME을 자바 버전 11을 설치 경로로 연결한다.
이후 사용자 변수에 있는 Path에 %JAVA_HOME%\bin을 추가한다.
%JAVA_HOME%\bin
설정이 끝난 후 제대로 설정되었는지 확인하기 위해 명령 프롬프트 창을 열고 javac을 입력한다.
javac
위처럼 뜨면 된다.
또한 java -version을 입력하여 자바 버전을 확인한다.
java -version
자바 버전이 11로 나오면 된다.
5. Dynamic Web Project를 생성하여 톰캣 서버가 돌아가는지 확인한다.
프로젝트 이름은 w1으로 하였고 톰캣 서버가 없기 때문에 생성한다.
설치한 v9.0을 선택한다
설치 파일과 연결시켜준다
프로젝트 생성 후 프로젝트를 우클릭하여 서버를 작동시켜본다.
다시 v9.0를 선택하고
서버에 w1 프로젝트를 넣어주고 Finish를 누른다.
프로젝트 내부에 아무런 소스 코드를 만들지 않았기 때문에 404가 뜨는 것이 정상이다.
아래 페이지가 보이면 톰캣 서버가 돌아가고 있는 것을 알 수 있다.
6. servlet이 작동하는지 테스트해본다.
servlet을 생성한다.
패키지 명은 org.zerock.contoller
클래스 명은 HelloServlet
URL mappings에 있는 경로를 /hello로 수정해준다.
다음 페이지가 보이면 Finish를 눌러서 생성한다.
프로젝트를 생성한 후 실행시켜 본다.
++원래라면 정상적으로 작동해야하지만 'The selection cannot be run on any server.'이 적힌 창이 나오면서 작동이 되지 않았는데 다음의 과정으로 고쳤다.
프로젝트 우클릭 후 Properties->Server에서 <None>이 아니라 톰캣 서버를 고르고 Apply를 누른다.
정상적으로 작동되면 아래와 같은 경로에서 내용이 출력되어야한다.
7. JSP 파일을 생성하여 테스트 해본다.
webapp에서 JSP파일을 생성 후 실행해본다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>Hello JSP!!!</h1>
</body>
</html>
정상 작동시 아래처럼 출력되어야한다.
8. 이클립스에 Spring을 설치한다.
이클립스 메뉴창->Help->Eclips Marketplace 클릭
검색 창에 spring을 검색하고 Spring Tools 3 Add-On for Spring Tools 4 3.9.22.RELEASE를 인스톨한다.
설치하면서 아래와 같은 창이 뜨면 x509를 체크하고 Trust Selected를 누른다.
설치 후 이클립스를 다시 시작한다.
9. Spring을 설치한 후 Maven Repository, Java의 버전을 맞춘다.
File에서 Other을 눌러본다.
Select a wizard에 Spring 폴더가 있으면 제대로 설치가 된 것이다.
폴더 안의 Spring Legacy Project를 누르고 생성해본다.
프로젝트명은 ex01로 입력하고 Spring MVC Project를 선택하여 Next를 누른다.
누른 후 추가적으로 다운로드를 한다.
패키지 명은 org.zerock.controller로 입력한다.
프로젝트 생성후 에러가 뜨는 상황이었는데 다음과 같이 해결하였다.
프로젝트 우클릭 후 Run as에서 Maven install을 누른다.
그 후에 오류가 사라졌다.
++Maven은 다운로드 되면서 사용자 폴더 밑의 .m2 폴더 내에 다운로드 되는데 이 때 사용자 폴더의 이름이 한글인 경우 문제가 발생할 수 있으므로 바꿔주는 것이 좋다.
다음과 같은 과정으로 .m2의 설정을 바꿀 수 있다.
구글에 Spring Maven을 검색하여 Maven Repository의 버전을 확인해본다.
Spring Maven
구글 검색 결과 중 아래의 주소로 접속한다.
해당 페이지에서 Maven Repository의 버전을 확인할 수 있으며 그 중에서 5.3.21을 사용하였다.
프로젝트에서 pom.xml을 연다.
해당 파일의 <org.springframework-version>을 바꿔 준다.
<org.springframework-version>
5.3.21을 입력한다.
버전을 바꾼 후 프로젝트를 새로 고침해보면 Libraries->Maven Dependencies의 Spring 버전이 바뀐 것을 알 수 있다.
다시 pom.xml에서 자바 버전을 바꿔준다.
사진에서 붉은색으로 밑줄 친 부분을 11로 바꿔준다.
수정하고 저장한 뒤 프로젝트를 다음과 같이 실행하면 버전이 11로 바뀐다.
ex01 프로젝트 우클릭->Maven->Update Project
OK를 눌러 실행
다음과 같이 JavaSE의 버전이 11로 바뀐다.
10. jsp 파일을 생성하고 실행해본다.
src->main->webapp->WEB-INF->views에서 home.jsp를 생성한다.
home.jsp의 코드
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>
<P> The time on the server is ${serverTime}. </P>
</body>
</html>
프로젝트를 실행해 본다.
기존의 v9.0 서버를 선택한다.
이전에 사용했던 w1은 빼고 ex01을 넣고 Finish를 누른다.
아래와 같은 콘솔창의 내용이 출력된다.
다음과 같이 출력되어야한다.
11. Tomcat 서버 실행 경로 설정
톰캣 서버가 돌아가고 있다면 정지한다.
서버 아이콘을 더블클릭하여 아래와 같이 창이 나오게 하고 왼쪽 아래의 Modules를 누른다.
Path의 /controller을 클릭하고 Edit을 누른다.
경로를 /로 수정한다.
아래와 같이 바뀌고 나면 Ctrl+s로 반드시 저장한다.
12. Lombok 라이브러리 설치
https://projectlombok.org/download
Download
projectlombok.org
해당 링크로 접속하고 Download를 클릭하여 lombok.jar을 다운한다.
다운이 완료 되고 나면 lombok.jar 파일을 이클립스가 설치된 파일로 옮긴다.
jar이 다음처럼 나오고 실행이 되지않아서 cmd를 사용하여 실행시켰다.
'cd 이동 경로'로 이클립스가 있는 파일로 이동하여
java -jar lombok.jar을 입력하여 실행시켰다.
cd C:\project\2022-10-05 study files\Eclipse - Enterprise Java and Web Developers\eclipse-jee-2022-06-R-win32-x86_64\eclipse_2022-06
java -jar lombok.jar
정상적으로 실행될 경우 아래와 같이 출력된다.
실행은 되었지만 IDEs에 아무것도 뜨지 않았는데 이 경우에는 Specify location으로 이클립스를 찾아야한다.
사용하는 eclipse.exe를 선택하고 Slect를 누른다.
아래와 같이 이클립스가 들어가면 Install/Update를 누른다.
설치가 성공하면 아래와 같이 나온다.
다시 eclipse.ini을 메모장으로 열어서 제대로 연결됐는지 확인한다.
맨 마지막 줄에 -javaagent: 설치경로\lombok.jar이 나오면 성공한 것이다.
-javaagent:C:\project\2022-10-05 study files\Eclipse - Enterprise Java and Web Developers\eclipse-jee-2022-06-R-win32-x86_64\eclipse_2022-06\lombok.jar
다시 ex01의 pom.xml파일로 들어가서 아래 코드를 넣고 저장한다.
넣는 위치는 <dependencies></dependencies> 태그 사이이다.
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
</dependencies>
프로젝트 생성시 만들어진 HomeController.java에 Lombok관련 어노테이션을 추가하여 문제가 있는지 확인해본다.
import lombok.Getter;
import lombok.ToString;
@Getter
@ToString
13. Log4j 변경
Log4j의 보안 문제로 Log4j가 아닌 Log4j2를 이용하는 것을 권장한다
생성된 프로젝트의 log4j.xml파일을 삭제.
pom.xml파일에서 <!-- Logging -->과 <!-- @Inject --> 사이의 코드를 전부 삭제한다.
삭제된 위치에 아래 코드를 넣고 저장한다.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.18.0</version>
</dependency>
삭제한 log4j.xml 자리에 log4j2.xml을 생성한다.
log4j2.xml
처음에는 아무 코드도 없어서 오류가 난다.
파일을 열고 왼쪽 아래의 Source를 누른다.
아래의 코드를 넣는다.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- Appender, Layout 설정 -->
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern=" %-5level %c(%M:%L) - %m%n"/>
</Console>
</Appenders>
<!-- Logger 설정 -->
<Loggers>
<Root level="INFO">
<AppenderRef ref="console"/>
</Root>
<Logger name="org.zerock" level="INFO" additivity="false" >
<AppenderRef ref="console"/>
</Logger>
<Logger name="org.springframework" level="DEBUG" additivity="false"> <AppenderRef ref="console"/>
</Logger>
</Loggers>
</Configuration>
실행시 콘솔창에 아래와 같은 메세지가 나온다.
HomeController.java의 코드를 아래의 코드로 바꾼다.
package org.zerock.controller;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import lombok.Getter;
import lombok.ToString;
import lombok.extern.log4j.Log4j2;
/**
* Handles requests for the application home page.
*/
@Controller
@Getter
@ToString
@Log4j2
public class HomeController {
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
log.info("Log4j2..................");
log.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
}
실행시 콘솔창에 아래와 동일한 내용이 출력되면 성공한 것이다.