프롬프트 AI&OpenAPI&공공데이터를 활용한 웹앱개발자 양성 과정 38일차 log4jdbc세팅

서명원·2024년 1월 31일

1. 코드에 대한 고민 1

현재 코드는 ResultData 객체 하나로, 메시지, 메시지 코드와 최종적인 반환타입까지 서비스 계층과 컨트롤러 뷰 사이에서 주고 받고있다.
개인적으로는 반환타입이 서비스계층에 섞이니 약간 계층 구분이 불분명해진다는 인상을 받았다.
어떻게 하면 더 깔끔해질까 생각해봣는데, 컨트롤러와 서비스간 소통에서는 반환타입은 원래 받던대로(ResultData가 아닌 String, Integer, Article등 원래 리턴타입으로) 받고, 메시지와 메시지 코드를 담는 객체를 파라미터로 보내면 어떨까하는 생각이 들었다.
그러면 서비스에서 에러 체크를 하고, 메시지에 메시지 코드와 메시지를 담아 줄 것이고, 반환 타입에 대한 처리는 기존 로직을 유지 할 수 잇을 것이다.


2. 코드에 대한 고민 2

jsp 서블릿 때 한번 필터를 이용한 권한체크를 시도해본 김에
이번엔 spring 인터셉터 기능을 한번 시도해보고싶었다.


권한체크시 인터셉터 기능을 한번 찾아서, 한번 적용해보려했는데 왠지 안되서 한참을 끙끙댔다.

원인은 config 클래스의 위치였다. 설정클래스가 너무 패키지 아래쪽에 있어서 처리가 제대로 안돌아간 것이다.

befor

after

config 클래스위치를 appliction위치와 동급까지 올렸더니 제대로 intercepter이 호출되는 것을 확인할 수 있었다.


3. log4jdbc

JDBC 기반 애플리케이션의 SQL 쿼리를 로깅하는 라이브러리.
실행된 쿼리와 파라미터 값을 자세하게 기록한다.
디버깅과 성능 최적화에 도움을 주며, 다양한 로깅 레벨을 제공하여 로그를 조절할 수 있다.

log4jdbc 디펜던시 주입

		<dependency>
			<groupId>org.bgee.log4jdbc-log4j2</groupId>
			<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
			<version>1.16</version>
		</dependency>

application 야믈파일 수정

server:
  port: 8080
spring:
  datasource:
#    driver-class-name: com.mysql.jdbc.Driver
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    url: jdbc:log4jdbc:mysql://127.0.0.1:3306/Spring_AM_01?useUnicode=true&characterEncoding=utf8&autoReconnect=true&serverTimezone=Asia/Seoul&useOldAliasMetadataBehavior=true&zeroDateTimeNehavior=convertToNull
    username: root
    password: 
mybatis:
  type-aliases-package: com.example.demo.vo

src/main/resources/log4jdbc.log4j2.properties

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength = 0

log4jdbc.dump.sql.maxlinelength sql문의 길이 제한이라고한다. 0은 제한 없음.
log4jdbc.spylogdelegator.name log4jdbc는 SLF4J를 통해 로그를 기록하도록 설정

logback-spring.xml파일: Logback의 Spring 지원을 사용하여 로깅을 구성

profile
백엔드 취업을 꿈꾸는 일본어 전공자

0개의 댓글