HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            HttpEntity<Board> entity = new HttpEntity<>(board, headers);
            try {
                ResponseEntity<HttpStatus> result = template.postForEntity("https://localhost:8081/board2", entity, HttpStatus.class);
                if (result.getStatusCode().is4xxClientError()) { // new ResponseEntity<HttpStatus>(HttpStatus.OK)로 return이 올 경우 entity안에 들어간 HttpStatus는 body가 아닌 status로 들어가서 getStatusCode()로 꺼내야함
                    return "boardWrite";
                }
                return "redirect:/boardList";
            } catch (Exception e) {
                return "boardWrite";
            }

HttpEntity에 보내고 싶은 객체를 넣으면 된다.

타임리프에서는 naver.com?a=22

이런 식이 아니라

naver.com(a=22)로 해야된다.

?를 ()로 바꾸니 해결되었다.

 

parameter를 여러 개 보내고 싶을 경우

naver.com(a=22, b=11) 이렇게 ' , '로 구분한다.

정적컨텐츠의 루트가 static 폴더로 되어있다.

타임리프의 th:href="@{}"를 사용했을때 폴더가 static에 있으면 바로 /css 하면되지만, static에 없으면 ../ 같이 static 기준으로 상대경로를 해줘야된다.

build.gradle 설정

implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4'

 

나머지 설정

 

Spring boot 마이바티스, Spring boot mybatis, 스프링부트 mybatis 적용

스프링부트에서 mybatis 설정은 기존 스프링, 전자정부 프레임워크보다 적용하기 훨씬 간편하다. 뭔가..이래도 되나 싶을 정도로 간단하다. 먼저 라이브러리를 적용한다. 버전은 올려도되고 낮추

lts0606.tistory.com

 

이 방법은 스프링 프로파일을 설정해줘야한다.

 

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 60초마다 설정 파일의 변경을 확인 하여 변경시 갱신 -->
<configuration scan="true" scanPeriod="60 seconds">
    <springProfile name="local">
        <property resource="logback-local.properties"/>
    </springProfile>

    <!--Environment 내의 프로퍼티들을 개별적으로 설정할 수도 있다.-->
    <property name="LOG_LEVEL" value="${logging.level.root}"/>

    <!-- log file path -->
    <property name="LOG_PATH" value="${logging.file.path}"/>

    <!-- log file name -->
    <property name="LOG_FILE_NAME" value="${logging.file.name}"/>

    <!-- err log file name -->
    <property name="ERR_LOG_FILE_NAME" value="err_log"/>

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

    <!-- Console Appender -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %5p [%c] %m%n</pattern>
        </encoder>
    </appender>

    <!-- File Appender -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 파일경로 설정 -->
        <file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>

        <!-- 출력패턴 설정-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>

        <!-- Rolling 정책 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
            <fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 파일당 최고 용량 kb, mb, gb -->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>

            <!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
            <maxHistory>99999999</maxHistory>
            <!--<MinIndex>1</MinIndex>
            <MaxIndex>10</MaxIndex>-->
        </rollingPolicy>
    </appender>

    <!-- 에러의 경우 파일에 로그 처리 -->
    <appender name="Error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${LOG_PATH}/${ERR_LOG_FILE_NAME}.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>

        <!-- Rolling 정책 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
            <fileNamePattern>${LOG_PATH}/${ERR_LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 파일당 최고 용량 kb, mb, gb -->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>

            <!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
            <maxHistory>99999999</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- root레벨 설정 -->
    <root level="${LOG_LEVEL}">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="Error"/>
    </root>
    <!-- 특정패키지 로깅레벨 설정 -->
    <!-- additivity="false"로 해야 상위 로거를 안찾아서 로그가 중복을 뜨지 않음 -->
    <logger name="com.board.boardproject.repository" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="Error"/>
    </logger>
</configuration>

 

application-local.properties

# 서버 포트 변경
server.port = 8081
# jpa 설정
spring.jpa.hibernate.ddl-auto=update
# 데이터베이스 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/board_db?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=boardUser
spring.datasource.password=board1234

# put, delete, patch 등 get, post 외의 다른 method를 사용하기 위한 필터
spring.mvc.hiddenmethod.filter.enabled=true

# mybatis 설정
mybatis.type-aliases-package=com.board.boardproject.repository
mybatis.mapper-locations=mybatis/mapper/**/*.xml

 

logback-local.properties

# 루트 레벨 설정
logging.level.root=info

# 로그 파일 이름
logging.file.name=local_log

# 로그 파일 경로
logging.file.path=logs/local
 

[스프링부트 (5)] Spring Boot 로그 설정(1) - Logback

[스프링부트 (5)] Spring Boot Log 설정(1) - Logback 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 부트 Log 설정 - 로그백] 입니다. : -) 1. Logback 이란? 특징?  - 자바 오픈소스 로깅 프레임..

goddaehee.tistory.com

 

+ Recent posts