로컬에서 개발할 때와 알파 서버에 배포하였을 때, 경로를 다르게 설정하기 위해 Maven Profile을 사용.

프로필 정의

local(개발용), alpha(배포용) 프로필 설정

여기서 사용하는 프로필에 따라 <env>...</env> 값이 다르게 설정되는 것을 볼 수 있다. 

이 값은 빌드시 어떤 Resource 경로를 참조할 건지 결정하는데 사용된다.

리소스 정의

아래 설정에서 env 값을 어떻게 사용하는지 볼 수 있다. 

프로필이 local일 때는 resources-local 디렉토리를 추가로 참조한다.  (local 서버용)

alpha일 때는 resources-alpha를 참조한다. (alpha 서버용)

이클립스에서 보면 아래와 같은 구조

resource-local/image-config.properties에는 로컬의 설정 파일 경로가 저장되어 있다.

resource-alpha/image-config.properties에는 alpha라는 서버의 설정 파일가 저장되어 있다.

이클립스에서 프로필 선택

프로필을 설정하면 프로젝트 우클릭 > Maven > Select Maven Profiles에서 프로필 선택이 가능하다. 

이 프로젝트의 경우 local이 <activeByDefault>true</activeByDefault>로 설정되었기 때문에 자동으로 선택되어 있다.

배포시 프로필 설정

알파라는 서버에 배포할 때는 alpha 프로필을 선택해야 한다. 

mvn package 명령어 실행시 -P 옵션으로 프로필을 지정할 수 있다.

> mvn package -P alpha

pom.xml에 의존성 추가하기

 

참조 : https://mvnrepository.com/ -> apache log4j 검색

 

 

src/main/resources 경로에 log4j.xml 설정파일 만들어주기 

(구조만들기 참조 : https://nuji-94.tistory.com/8)

 

log4j.xml 파일 내용

 

PatternLayout의 패턴 정의

 

PatternLayout에서 로그를 출력할 때 사용할 패턴을 정의.

프로퍼티 이름은 ConversionPattern 이다.


###############################################

# FaTAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.
# ERROR : 일반 에러가 일어 났을 때 사용합니다.
# WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.
# INFO : 일반 정보를 나타낼 때 사용합니다.
# DEbUG : 일반 정보를 상세히 나타낼 때 사용합니다.

################################################



######################################################################
#%p  debug, info, warn, error, fatal 등의 priority 가 출력된다.  
#%m  로그내용이 출력됩니다 
#%d  로깅 이벤트가 발생한 시간을 기록합니다.
#  포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다 
#%t  로그이벤트가 발생된 쓰레드의 이름을 출력합니다.  
#%%  % 표시를 출력하기 위해 사용한다.  
#%n  플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다.  
#%c  카테고리를 표시합니다 
#  예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다. 
#%C  클래스명을 포시합니다. 
#  예)클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다 
#%F  로깅이 발생한 프로그램 파일명을 나타냅니다. 
#%l  로깅이 발생한 caller의 정보를 나타냅니다 
#%L  로깅이 발생한 caller의 라인수를 나타냅니다 
#%M  로깅이 발생한 method 이름을 나타냅니다. 
#%r  어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds) 
#%x  로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다. 
#%X  로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다. 

#######################################################################

 

log4j 예시

 

 



 

'공통' 카테고리의 다른 글

[공통] JSON이란?  (0) 2021.01.05
[공통] Proxy 설정하기 (Feat. Putty)  (0) 2021.01.05

Dynamic Web Project 생성

File > New > Dynamic Web Project 선택합니다.

프로젝트 이름 입력 > NextSource folders on build path 에서 기본으로 있는 "src"를 삭제합니다.

그리고 "Add Folder" 버튼으로 아래와 같이 Maven 관례에 따라 디렉토리 구조를 만듭니다.

src/main/java

src/main/resources

src/main/webapp

src/test/java

src/test/resources

프로젝트 속성으로 보면 아래와 같은 모습이 됩니다.


Maven Project로 변환

프로젝트 이름 위에서 오른쪽 마우스 클릭 > Configure > Convert To Maven Project


Group Id, Artifact Id, Version을 입력합니다.

입력을 마치면, 새로운 디렉토리가 몇 개 생기고 pom.xml 파일이 생성됩니다.

pom.xml을 열어보면, <build> 에 2개의 plugin이 존재합니다.

하나는  maven-war-plugin 이고 다른 하나는 maven-compiler-plugin 

이 중에서 우리가 만들 Dynamic Web Project를 war로 패키징 해주는 plugin이  maven-war-plugin 입니다.

지금 글을 쓰는 시점에서는 2.4 버전이 최신입니다.

Maven 프로젝트 구조의 관례에 따라, 모든 웹 관련 리소스 들은 src/main/webapp에 두게합니다. 

그런데 Eclipse에서 Dynamic Web Project를 만들 때에 동일한 역할을 하는 디렉토리가 WebContent입니다.

 WebContet를 그대로 써도 되긴 하지만 Maven 관례를 따르는 것이 좋습니다. 

그래야 나중에 다른 사람이 봐도 이해하기 쉬우니까요.

pom.xml 파일을 다시보면 maven-war-plugin에 <warSourceDirectory>가 있습니다. 

이 값이 현재는 WebContent로 되어 있습니다. 

이것을 src/main/webapp로 변경합니다.

그리고 WebContent 하위의 디렉토리와 파일을 src/main/webapp로 복사하고 WebContent는 삭제합니다.

최종 디렉토리 구조는 아래와 같습니다.


Deployment Assembly 설정

이제 마지막으로 확인해야 할 것이 있습니다.

프로젝트 이름위에서 마우스 오른쪽 클릭 > Properties > Deployment Assembly

WebContent 는 위에서 디렉토리를 삭제했기 때문에, 제거합니다.

m2e-wtp/web-resources 도 삭제합니다.

src/main/webapp는 WEB-INF/classes 로 되어 있는 것을 "/"로 변경합니다. 

그래야만 src/main/webapp 아래있는 리소스들이 war 패키징될 때에 최상위에 있게 됩니다. 

Edit 안된다면 삭제한 후에 "Add..."를 합니다

Maven 실행

먼저 프로젝트를 clean 합니다 (맨 처음 한번 clean을 먼저 실행 해 주는 것이 좋습니다)

프로젝트 이름 위에서 마우스 오른쪽 클릭 > Run As... > Maven clean

프로젝트 이름 위에서 마우스 오른쪽 클릭 > Run As... > Maven install

 

터미널에서 pom.xml이 있는 곳으로 이동하여

mvn clean install

정상적으로 실행되는지 확인합니다.

 

+ Recent posts