[Spring Boot] Tomcat

KDH59·2024년 5월 27일
0

[SPRING BOOT]

목록 보기
4/7

Tomcat

□ 우리가 지금까지 사용하는 Tomcat은 Spring Boot 안에서 제공되는 내장 Tomcat 이다.
□ 우리는 이전에 설치 했던 Tomcat 을 사용 할 수도 있다.
□ 이 둘은 물론 각각의 장점이 있다.

intermal Tomcat

□ Tomcat 을 따로 설치 할 필요가 없다.
□ Run AS > Spring Boot App
□ 별도의 설정이 필요 없다.(대신 단순한 형태로 이용)
□ 수정이 거의 일어나지 않는 운영에 유용하다
□ Jar 형태로 빌드 할 때 주로 사용 된다.

external Tomcat

□ 더 많은 트래픽 처리를 할 수 있다.
□ Run As > Run On Server
□ Sever.xml 이나 web.xml 로 여러 설정이 가능하다.
□ 수정이 자주 일어나는 운영에 유용 하다.
□ War 형태로 빌드 할 때 주로 사용 된다.

외부 톰켓에서 FileUpload 하는 방식

□ server.xml 에서 수정

  • <!-- 모든 이미지에 대한 if 문을 가져올 수 없으니 type이 무엇인지 찾아서 가져와야된다. 뿌리는 방법을 고민해야된다. -->
    
    <c:if test="${list.size() > 0}">
        <c:forEach items="${list}" var="path">
            <c:set var="ext" value="${path.substring(path.lastIndexOf('.') + 1)}"/> <!-- 마지막 . 뒤에 있는 확장자 찾기 위해서 / substring() 함수는 문자열에서 지정된 인덱스 범위에 해당하는 부분 문자열을 반환 -->
                <c:choose>
                    <c:when test="${ext eq 'jpg' or ext eq 'jpeg' or ext eq 'png' or ext eq 'gif' or ext eq 'bmp'}">
                        <img width="250px" src="photo/${path}"/>
                    </c:when>
                <c:otherwise>
                    <!-- <c:otherwise/> 태그로 특정 조건을 검사하고, 어떤 조건도 만족하지 않을 때 실행될 기본 동작을 정의할 때  -->
                    <!-- 일반 파일인 경우 -->
                        <a>${path}</a>
                        <a href="download/${path}">다운로드</a>
                </c:otherwise>
                </c:choose>
        <a href="delete?file=${path}">삭제</a>
        <hr/>
        </c:forEach>
    </c:if>
    
    <c:if test="${list.size()==0 }">업로드 된 사진이 없습니다.</c:if>	
    
    <p><a href="./">돌아가기</a></p>

내부 톰켓에서 FileUpload 하는 방식

// 파일 리스트
public List<Map<String, String>> getList() {
	
	List<Map<String, String>> fileList = new ArrayList<Map<String,String>>();
	try {
		for (String fileName : new File(root).list()) {
			Map<String, String> map = new HashMap<String, String>();
			String type =Files.probeContentType(Paths.get(root+"/"+fileName));
			map.put("name", fileName);
			
			// type 이 null 이 dkslrh image 를 포함하고 있으면 "true"
			if(type != null && type.contains("image")) {
				map.put("image", "true");
			}else {
				map.put("image", "false");
			}
			fileList.add(map);
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	
	logger.info("fileList : {} ",fileList); //image/png 
	return fileList;
}


  <!-- 모든 이미지에 대한 if 문을 가져올 수 없으니 type이 무엇인지 찾아서 가져와야된다. 뿌리는 방법을 고민해야된다. -->

  <c:if test="${list.size() > 0}">
      <c:forEach items="${list}" var="path">
          <c:set var="ext" value="${path.substring(path.lastIndexOf('.') + 1)}"/> <!-- 마지막 . 뒤에 있는 확장자 찾기 위해서 / substring() 함수는 문자열에서 지정된 인덱스 범위에 해당하는 부분 문자열을 반환 -->
              <c:choose>
                  <c:when test="${ext eq 'jpg' or ext eq 'jpeg' or ext eq 'png' or ext eq 'gif' or ext eq 'bmp'}">
                      <img width="250px" src="photo/${path}"/>
                  </c:when>
              <c:otherwise>
                  <!-- <c:otherwise/> 태그로 특정 조건을 검사하고, 어떤 조건도 만족하지 않을 때 실행될 기본 동작을 정의할 때  -->
                  <!-- 일반 파일인 경우 -->
                      <a>${path}</a>
                      <a href="download/${path}">다운로드</a>
              </c:otherwise>
              </c:choose>
      <a href="delete?file=${path}">삭제</a>
      <hr/>
      </c:forEach>
  </c:if>

  <c:if test="${list.size()==0 }">업로드 된 사진이 없습니다.</c:if>	

  <p><a href="./">돌아가기</a></p>
  
  
  
  

Build 란?

logger 작업

□ logback-spring.xml □

<!-- 패턴 등록 -->
<!-- INFO  24-05-27 12:11:42[http-nio-80-exec-1] [BoardController:28] - 게시글 목록 페이지 요청 -->
<!--
	%-5 : 좌측 정렬 5자(5자가 안되면 공백 처리)
	level : 로그 레벨
	%d{yy-MM-dd HH:mm:ss} : 로그의 기록 시간, 출력 형식{년-월-일 시:분:초}
	[%thread] : 프로그램을 실행시키고 있는 쓰레드, http-nio-80-exec-1 exec 로 실행시키는거고 -1 은 쓰레드 번호이다
	[%logger{0}: : 로거의 소스 단계(수정 가능) 
	%line] : 로그가 찍힌 소스의 줄 번호
	- %msg : 메시지
	%n : 줄바꿈
-->


<property name="LOG_PATTERN" value="%-5level %d{yy-MM-dd HH:mm:ss} [%logger{0}:%line] - %msg%n"/>

<!-- Appenders :  CONSOLE -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">	
	<!-- 출력 패턴 -->
	<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
		<pattern>${LOG_PATTERN}</pattern> 		
	</encoder>
</appender>

<!-- 로그의 파일 저장 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
	<!-- 저장 위치 -->
	<file>C:/logs/service.log</file>
	<!-- 출력 패턴 -->
	<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
		<pattern>${LOG_PATTERN}</pattern> 		
	</encoder>
	<!-- 롤링 정책(언제 끊어서 말아줄 것인가?) -->
	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
		<!-- 어떤 이름으로 저장할래? -->
		<fileNamePattern>C:/service.%d{yy-MM-dd}.log</fileNamePattern>
		<!-- 얼마나 저장할래? (일단위)-->
		<maxHistory>30</maxHistory>
	</rollingPolicy>
</appender>

외부 톰캣에 빌드하는 방식

□ run as -> maven install -> target / ROOT로 이름 변경

내장 톰캣에 빌드하는 방식

□ java -jar ROOT.war [서버 실행]
□ ctrl + C [서버 종료]

Profile

□ Window 에서 개발 하고 Linux 에서 배포할 경우 파일 시스템 등을 신경 써야 한다.
□ 개발 시 사용하는 DB 와 실제 서비스에서 사용하는 DB 가 다를 수 있다.
□ 개발 시 사용하는 포트와 서비스에서 사용하는 포트도 다를 수 있다.
□ 이러한 내용들을 경우에 맞게 활용하기 위해 우리는 profile 이라는 것을 만든다.
□ 우선 사용할 프로필의 properties 파일을 준비 해야 한다.

1. 내장 톰캣 배포 시

□ Spring Boot 옵션에서 profile 을 dev 로 선택 후 실행

2. 외장 톰캣 배포 시

□ arguments 에서 -Dspring.profiles.active=dev 추가

□ Environment 에서 spring.profiles.active=dev 추가

3. 실제 톰캣에 배포 시

□ 1. cof/catalina.properties 에 다음 내용을 추가 해 준다.

□ 2. spring.profiles.active=dev

□ 3. meven install -> apache-tomcat-9.0.86 -> webapps -> ROOT 파일 설정 후 추가

□ 4. apache-tomcat-9.0.86 -> bin 파일에서 cmd -> startup 서버 실행 확인

4. war 자체 실행 시 ( 내장 톰켓 - BOOT에서만 가능 )

□ java -jar ROOT.war -- spring profiles.active=dev

profile
[JAVA]

0개의 댓글