티스토리 뷰

[Spring 프로젝트를 생성할 때 다양한 방법]

✔️ Spring Starter Project

- Spring Boot 기반 

 

✔️ Spring Legacy Project

- 설정을 하나하나 해줘야 함. 전자정부프레임워크는 이걸 사용하고 있음.

- sts 기본 설정 적용됨

 

✔️ Dynamic Web Project

- 사용자가 직접 설정 

 

cf> Spring MVC Project requires a download of 16608 bytes.

-> 무슨의미? jar 파일 다운로드 받는 크기 


※ Maven (= 빌드툴) 

▶ 소스 -> 컴파일 -> 빌드 (해당 애플리케이션에 실행 가능한 구조로 만드는 행위 )

▶ 빌드 후 최종적으로 .war 산출물이 생긴다.

▶ 메이븐 종류 : Gradle(안드로이드 기본), Ant(옛날), Maven(전자정부 프레임워크 기본)

pom.xml : 메이븐 설정 파일 

더보기

[POM 구성]

1. 프로젝트 기본 정보

- 프로젝트 이름

- 프로젝트 URL

- 프로젝트 참여자

- 라이센스 

 

2. 빌드 설정 

- 소스/테스트 소스 디렉토리 

- 리소스(자원) 디렉토리 

- 플러그인 

- 리포팅(문서화)

 

3. 프로젝트 관계 설정 

- groupId/artifactId/version

- 모듈

- 상속

- 의존 라이브러리 관리 

 

4. 빌드 환경 

- 빌드할 환경에 따른 정보 

- 프로파일 

더보기

[pom.xml dependencies]

▶ groupId - 어떤 회사에서 만들었느냐

▶ artifactId - 프로젝트의 이름 

▶ packaging - 프로젝트의 최종 산출물이 뭐냐 

▶ properties - Java version (내 프로젝트 - 1.8) / SpringFramework version 등

 

 

최종적으로 Effective POM을 가지고 빌드하게 된다.  ★☆

메이븐이 가진 공통설정(최상위 pom.xml)프로젝트별 pom.xml을 더해서 최종적으로 Effective POM을 만들고, 이걸 가지고 빌드한다.

(Effective POM은 수정할 수 없다.)

 

 maven에서 다운로드 받은 것을 다 .m2 밑에 갖다둔다. 


[Spring Framework legacy project 구조]

✔️ maven 프로젝트가 제대로 빌드되려면 위 사진과 같은 구조가 필요하다.

✔️ java 폴더에는 java 파일, resources 폴더에는 나머지(프로퍼티 ,xml등)

✔️ main폴더에는 실제 애플리케이션과 관련된 파일들

✔️ test 폴더에는 개발 도중 테스트할 때 필요한 파일들 

✔️ target 폴더에는 빌드 후에 최종 산출물을 저장하는 곳이다. 

✔️ webapp 폴더 밑에 WEB-INF 폴더가 있고, 그 안에 기본으로 폴더들과 web.xml이 들어가 있다. 


[Spring Framework legacy project 설정할 것]

1. servlet spec 변경 (2.5 -> 4.0)

2. Java Build Path / Libaries 에서 JRE 버전 1.6 -> 1.8 변경 

- servlet spec 4.0을 사용하려면 자바8 이상 되어야 하기 때문에 필수로 수정하기 

3. Java Compiler 1.8로 변경 

 

4. Project Facets - Dynamic Web Module(4.0)과 Java(1.8) 버전 변경 

5. web.xml을 잠시 web2.xml 이름으로 바꾸고, 프로젝트 이름 우클릭 -> Java EE Tools -> Generate Deployment Descriptor stub

-> web.xml 자동 생성됨 (refresh 하기) -> <web-app> 태그가 4.0 버전으로 바뀜 

 

6. pom.xml 에서 자바버전 1.8로 바꾸기 

 

7. pom.xml 에 변경해야 할 사항이 너무 많다.

방법(1)  -> 아예 파일을 없애버리고 필요한것만 추가해서 사용하기 -> 밑에 설명함 

방법(2) -> 아래 8번처럼 하나씩 변경하기 

 

8. Maven Repository에 가서 dependency 하나씩 변경하는 방법 (매우중요 )

mvnrepository.com

 

Maven Repository: Search/Browse/Explore

Dependencies that are installed and should not be included in artifacts with dependencies. Last Release on Mar 15, 2021

mvnrepository.com

8-1. servlet spec 4.0으로 변경 

https://mvnrepository.com

8-2. jsp 2.3으로 변경 (servlet 버전에 따라서 함께 수정해야 한다.)

https://mvnrepository.com

 

8-3. junit 4.9버전으로 수정해야 함.

https://mvnrepository.com

8-4. 자바 버전 1.8로 수정 


[Spring Boot project 설정할 것]

1. pom.xml에 추가 

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
</dependency>

<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

2. application.properties 수정 

3. WEB-INF 폴더 생성

4. controller 패키지 생성

5. Boot Dashboard에서 devtools 추가 

- devtools를 이용하면 코드를 저장했을 때  자동으로 reload 된다. 

 

 


[(방법2) SpringFramework  pom.xml에 처음부터 필요한것만 추가하기]

0. 새로운 Spring legacy project 복사해서 만들기 

1. 프로젝트 우클릭 -> Maven -> Disable Maven Nature -> pom.xml 삭제

2. 프로젝트 우클릭 -> Configure -> Convert to maven project -> pom.xml 생성됨 

3. dependency 4개 추가 

3-1. webmvc 

https://mvnrepository.com

3-2. log4j 

https://mvnrepository.com

<scope>test</scope> : test 할때만 적용된다. 그래서 이걸 지워준다. 

 

3-3. jstl

https://mvnrepository.com

3-4. javax.servlet-api

<scope>provided</scope> 생략하면 안됨.

->  실제 실행할 때는 WAS의 서블릿을 제공받아서 실행하겠다는 의미이다. 즉, 이 서블릿은 최종 산출물에 포함하지 않는다. 

-  컴파일할 때는 WAS가 없어도 실행이 되어야 하므로 서블릿 설정을 추가한 것이고, 최종 산출물(.war)에서는 제거한다. 

 

3-5. jsp 

 


[Maven 프로젝트의 최종 산출물을 만드는 방법]

Maven 에서 산출물을 만들 때 Export로 산출물을 만드는 것은 이클립스의 방식이라 정석은 아니다. 

▶ 프로젝트이름 우클릭 -> Run As -> Maven install -> refresh -> 최종 산출물 생성 (.war)


[메이븐 저장소]

▶ 중앙 저장소 : 오픈 소스 라이브러리 관리 

mvnrepository.com

 

Maven Repository: Search/Browse/Explore

Dependencies that are installed and should not be included in artifacts with dependencies. Last Release on Mar 15, 2021

mvnrepository.com

▶ 로컬 저장소 

: 내 프로젝트에서 메이븐 빌드하거나, pom.xml 파일에서 dependency 라이브러리 설정하게 되면 

로컬 저장소 (.m2/repository)폴더에 의존 라이브러리가 다운로드된다. 

내 프로젝트에서는 이 로컬 저장소를 참조해서 라이브러리를 사용하게 된다. 

(만약 라이브러리를 참조하지 못하면 .m2/repository를 삭제하고 다시 메이븐 빌드해보기 )

 


[Log4j 설정]

1. dependency 추가 

2. Java Resources > src/main/resources > log4j.xml

✔️ log4j.xml의 Appenders

<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c.%M() - %m%n" />
		</layout>
	</appender>

-> 로그를 출력하는 곳을 console로 지정하겠다. 

이 로그를 디비나 파일에 출력할 수 있다.

 

[ConversionPattern 해석한 것] 👇🏻

더보기

%-5p는 왼쪽 정렬, 5글자, 로그레벨 출력 의미

%c는 클래스 이름 

%m은 로그메세지 

%n은 개행 

.%M() 메소드 이름 출력 

cf> log4j 도큐먼트 -logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

 

Log4j – Log4j 2 Layouts

facility String The facility is used to try to classify the message. The facility option must be set to one of "KERN", "USER", "MAIL", "DAEMON", "AUTH", "SYSLOG", "LPR", "NEWS", "UUCP", "CRON", "AUTHPRIV", "FTP", "NTP", "AUDIT", "ALERT", "CLOCK", "LOCAL0",

logging.apache.org

✔️ log4j.xml의 Application Loggers

<!-- Application Loggers -->
<logger name="com.mycompany.webapp">
	<level value="info" />
</logger>

-> name : 로그레벨(여기서는 info)을 적용할 패키지를 의미한다. 

 

✔️ log4j.xml의 Root Logger

<!-- Root Logger -->
<root>
	<priority value="warn" />
	<appender-ref ref="console" />
</root>

-> 아무것도 적용하지 않은 패키지의 디폴트 레벨을 warn으로 지정하겠다. 

 

3. 로그 출력하는 코드 실습 

@Controller
public class HomeController {
	
	// 현재 클래스 이름과 똑같이 주기. 로그가 어디서 출력되는지 위치를 알려주는 역할 
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	@RequestMapping(value = "/")
	public String home() {
		// 메소드 이름이 로그 레벨이다. 
		logger.error("error 메세지"); 
		logger.warn("warn 메세지"); // error level 일때는 출력이 안됨 
		logger.info("info 메세지"); // warn level 일때는 출력이 안됨 
		logger.debug("debug 메세지"); // info level 일때는 출력이 안됨 
		
		return "home";
	}
}

[로그 출력 실행 결과 - log level info로 설정했을 때]


▶ Spring Framework 버전 선택 

github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions

 

spring-projects/spring-framework

Spring Framework. Contribute to spring-projects/spring-framework development by creating an account on GitHub.

github.com

주의) 자바 버전 7을 사용한다면 스프링 5점대 버전은 사용할 수 없다. 

 

▶ Spring Framework의 모듈(라이브러리, jar) 종류

github.com/spring-projects/spring-framework/wiki/Spring-Framework-Artifacts 

 

spring-projects/spring-framework

Spring Framework. Contribute to spring-projects/spring-framework development by creating an account on GitHub.

github.com

▶Spring Framework document

spring.io/projects/spring-framework#learn

 

Spring Framework

 

spring.io

API doc 참고하기 

Reference doc은 교과서이다.