본문 바로가기

Back-End/SPRING

build ] spring 프로젝트 tomcat으로 build하기

 

 

그 동안은 sts 에서 tomcat을 run as 했었는데 실제로는 프로젝트 파일을 .war로 압축해 tomcat에 올려야 한다.

어떻게 다른가??

 

우선 톰캣이 어떻게 돌아가는지 살펴본다.

1. tomcat 설치 된 폴더 >  bin > startup.bat 실행 > 인터넷 창에서 localhost:8080 을 실행하면 톰캣이 가지고 있는 index.jsp가 나온다.

startup.bat 경로
startup.bat 실행 창 - 한글 설정이 안되어 있어서 깨져나온다. 그래도 정상적으로 돌아감

 

 

 

프로젝트 폴더 build 과정

1. sts에서 build 하고자 하는 프로젝트 폴더에 마우스 우클릭 > maven > Update project

2. Run as > maven install (프로젝트를 .war 파일로 압축하는 과정)
  - build success 라고 나오면 성공
  - fail : jre 1.6 이냐고 물으면 maven update를 다시 한 번하고 2번 과정을 시도해본다.

BUILD SUCCESS

3. 2번까지 하고 프로젝트에 target 폴더를 살펴보면 member-1.0.0-BUILD-SNAPSHOT.war 파일이 생겼다.
  - 이 .war 파일 이름은 임의로 생성되는 것으로 프로젝트 패키지 두번째 명을 가져와서 생성된다.

target 폴터 아래에 생긴 .war 파일

3-1. 이 ...-SNAPSHOT.war 파일을 복사 > 톰캣 폴더 wepapps 에 붙여넣기 한다.
  - war 파일 이름은 snapshot 이런 거 빼버리고 member로 (마음대로) 수정해준다. 

3-2. bin > startup.bat > localhost:8080/member/  하면 프로젝트가 실행된다
  - 이게 진짜로 프로젝트롤 빌드해서 서버를 실행시켰다고 할 수 있다.
  - 서버를 실행 후 wepapps 를 보면 member 폴더가 생겼다. member.war가 실행되면서 자동으로 생성한 것

4. 주소 뒤에 /member를 안붙이고 싶다면 처음 서버를 실행하면서 생긴 member 폴더를 지운 후
member.war 파일을 ROOT.war 파일로 이름 변경 후 실행해주면 된다.

톰캣 > wepapps 에 넣어놓은 .war 파일들

 

 

 

log 파일 따로 남겨주기

우리가 톰캣에 프로젝트를 build 해서 실행할 때 log는 어디에 찍힐까?

tomcat > logs 폴더에 각 log 파일에 기록이 남게 된다.

tomcat > logs

logs 폴더 안에는 많은 log 파일이 쌓여있는데

  • catalina : 로그를 포함한 모든 콘솔의 내용이 이곳에 찍힌다. 따라서 보통 3기가 이상의 용량을 가지고 있다.
  • host-manager : 
  • localhost_access : 누가 접속했었는지 체크 가능
  • manager :

즉, 우리는 만약 새벽 3시에 에러가 났다라고 하면 catalina 파일을 확인하면 되는데 너무 큰 용량 때문에 열리는 거 기다리다가 지칠 수 있고 새벽 3시의 에러 로그를 찾기도 힘들 것이다.

따라서 log 파일을 따로 볼 수 있도록 설정해줄 것이다.

 

이 설정은 프로젝트의 log4j.xml 에서 해준다.

(sts 에서 수정해줄 수도 있지만 다시 rolled 해주고 싶지 않다면
  ROOT > WEB-INF > classes > log4j.xml 에서 수정해주고 다시 실행해주는 방법도 있다.)

 

log4j.xml

<!-- 
	<param name="ConversionPattern" value="%-5p: %c - %m%n" />
	value 가 로그 표현식
		%p 레벨
		%-5p 레벨을 표시하는데 좌측정렬 5자 ( 5자가 안되면 나머지는 공백으로 채운다.)
		%c 카테고리
		%m 메시지
		%n 줄바꿈
		%d{} {}안의 형태로 날짜 출력
	 -->



<!-- 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="%d{yyyy MM dd HH:mm:ss, SSS} %-5p: %c - %m%n" />
    </layout>
</appender>


<!-- 파일 설정 -->
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
  <param name="File" value="C:/service.log" />
  <param name="DatePattern" value=".yyyy-MM-dd-HH-mm"/>
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p: %c - %m%n" />
  </layout>
</appender>

 

1. Appenders는 log를 어떤 식으로 찍어줄 것인가에 관한 설정이다.

<param name="ConversionPattern" value="%d{yyyy MM dd HH:mm:ss, SSS} %-5p: %c - %m%n" />

 1) Appenders의 value는 로그 표현식을 나타낸다.

  • %p : 레벨
  • %-5p : 레벨을 표시하는데 좌측정렬 5자 (5자가 안되면 나머지는 공백으로 채운다.)
  • %c : 카테고리
  • %m : 메시지
  • %n : 줄바꿈
  • %d{} : {}안의 형태로 날짜를 출력

2) <!-- 파일 설정 --> : 로그 파일이 따로 생성되도록 하는 설정 

  • <appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
  • <param name="File" value="C:/service.log" />       
    : value 는 로그 파일이 저장되는 장소와 이름
  • <param name="DatePattern" value=".yyyy-MM-dd-HH-mm"/>
    : value에 설정된 값이 로그 파일 교체 주기이다.  HH까지 하면 시간마다, mm은 분단위

3) jdbc.sqltiming 에서 <appender-ref ref="file"/>을 추가해준다.

	<!-- SQL LOGGER 설정 -->
	<!-- 실행 쿼리 + 걸린시간 -->
	<logger name="jdbc.sqltiming" additivity="false">
		<level value="info" />
		<appender-ref ref="console"/>
		<appender-ref ref="file"/>       <!-- 추가된 설정 부분 -->
	</logger>

4) <!-- Root Logger --> 에서도 <appender-ref ref="file"/>을 추가해준다.

	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
		<appender-ref ref="file"/>        <!-- 추가된 부분 -->
	</root>

 

설정을 sts 에서 수정했다면 maven install 과정을 다시 해준다.

** 예전 .war 파일 냅다 지우지말고 뭐든 백업하는 습관을 들여두는 것이 좋다. _old 붙여서 따로 보관하기!

** 오류가 나거나 설정이 적용되지 않았다면 

  • Run as > maven clean
  • 상단 메뉴바 Project > clean > 프로젝트 선택

 

로그 파일 설정을 해준 후에 서버 실행하는 방법 (2가지)

1) startup.bat 관리자 권한으로 실행 

2) cmd 관리자 권한으로 실행 > cd 폴더경로(bin) > startup.bat

>> 결과 : c드라이브에 service.log 쌓이면 성공!

 

** 사진 가져오는 경로를 sts 에서 server.xml 에 설정해줬었는데
build 하게 되면 tomcat > conf > server.xml 에서 설정해주면 된다.