전체 글

전체 글

    AWS EC2, Lightsail Linux timezone 변경방법

    Timezone 변경 방법 date 명령어로 현재 시간을 확인할 수 있습니다. $ date 2023. 06. 21. (수) 18:21:38 UTC Timezone을 다음 명령어로 같이 변경할 수 있습니다. 아래의 명령어를 차례대로 입력합니다. $ rm /etc/localtime $ ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 변경 확인 $ date 2023. 06. 22. (목) 03:23:04 KST 인스턴스 재시작시 이전 설정인 UTC로 롤백되는 경우 아래 명령어를 순서대로 입력합니다. $ sudo rm /etc/localtime $ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 다음 /etc/sy..

    Logback + MDC를 이용한 request 로깅

    MDC를 이용한 로깅 MDC Mapped Diagnostic Context Logging 을 남기고, 문제가 발생하여 Logging을 추적할 때 멀티쓰레드 환경에서 로그가 뒤섞여 요청별로 흐름을 파악하기가 힘듭니다. 이때 요청(Request)별로 요청의 흐름별로 로깅을 파악하면 문제 파악을 훨씬 용이하게 할 수 있습니다. MDC는 로깅 프레임워크에서 사용되는 기능이며 현재 실행중인 컨텍스트(혹은 쓰레드)에 메타 정보를 넣고 관리할 수 있는 공간입니다. 각각의 로그 메시지에 대한 컨텍스트 정보를 추가하여 제공하고, 로그 메시지를 보다 구체적이고 유용하게 만들어줍니다. 내부적으로 쓰레드 로컬을 사용하며 Map 형태로 되어있어, Key Value 형태로 값을 보관하고 꺼낼 수 있어 관리에 용이합니다. 즉 스레..

    Logback.xml include 태그 사용하여 깔끔하게 분리하기

    Logback을 사용하다 보면, 엄청나게 길어지는데요 이걸 줄여 깔끔하게 관리할 수 있는 방법이 있습니다. 태그는 주 구성 파일 내에서 외부 구성 파일을 포함하는 데 사용됩니다. 태그를 이용해 구성을 여러 파일로 분할하여 구성을 더 조직화하고 재사용할 수 있습니다. 먼저 분리할 파일을 생성합니다. console-appender.xml [%d{HH:mm:ss.SSS}][%-5level] [%thread] [%logger.%method:line%line] - %msg%n utf8 분리된 파일에 태그로 감싸줘야 합니다 다음 메인 파일에서 include(포함) 시킵니다. logback-spring.xml 태그로 포함시켜 줍니다. 이 때 디렉토리와 일치시켜줘야 합니다. 일반적으로 로그백 파일은 /src/main/..

    Logback 을 이용하여 AWS Cloud Watch에 로그 전송

    Spring 애플리케이션에서 Logback을 이용하여 AWS Cloud Watch로 전송하여 수집하는 방법에 대해 정리합니다. 의존성 추가 // https://mvnrepository.com/artifact/ca.pjer/logback-awslogs-appender implementation 'ca.pjer:logback-awslogs-appender:1.6.0' 2021년 1.6.0 버전 이후로 업데이트 되지 않고 있어서 유심히 알아보고 사용하는 것이 좋습니다. aws log dependency 1.5.0 을 사용하면 accessKey, secretAccessKey를 logback-spring.xml에 추가하지 않아도 동작합니다. 1.5.0은 aws cloudwatch credentials 인증을 ac..

    Logback 로그 Logger마다 다른 파일에 기록하는 방법

    SpringBoot에서 Logger마다 각기 다른 파일에 분리하는 방법에 대해 정리합니다. 1. 요구사항과 예제 에러 로그는 logs/error/error.log 에 기록되어야 한다 sql 실행 시간을 기록한 로그는 logs/sql/sql_execute_time.log 에 기록되어야 한다 warn 로그는 logs/warn/warn.log에 기록되어야 한다. 요구사항과 예제를 간단하게 구현한 클래스입니다. public class LoggerTest { private ErrorLogger errorLogger = new ErrorLogger(); private WarnLogger warnLogger = new WarnLogger(); private SqlLogger sqlLogger = new SqlLogg..

    Logback 사용 정리

    logback이란 log4j 이후에 나왔으며 log4j 보다 향상되고 가장 널리 사용되고 있는 Java 로깅 라이브러리 입니다. https://logback.qos.ch/index.html- 공식 문서 https://github.com/qos-ch/logback - Github https://logback.qos.ch/documentation.html - Docs slf4j의 구현체로써 SpringBoot의 기본 log로 사용되고 있으며 spring-boot-starter-web안에 spring-boot-starter-logging의 logback이 기본적으로 포함되어 있어서 별다른 dependency 추가 없이 사용할 수 있습니다. 또한 Automatic Reloading 기능을 제공하여 별도에 재시작..

    Java 로깅 logger, log4j, logback, slf4j 비교

    로그(log)는 소프트웨어의 이벤트를 시스템의 상태 및 동작 정보를 시간 경과에 따라 기록하는 것을 의미합니다. 소프트웨어 개발 과정 혹은 개발 후에 동작상태를 파악하여 문제가 발생했을 때 진단하고 해결하는데 도움이 됩니다. 또한 로그들은 운영과 관리에 도움이 되는 정보가 될 수 있으며 좋은 데이터가 되기도 합니다. 로그를 기록하는 행위를 로깅(logging)이라고 하며, Java 언어에서는 다양한 로깅 라이브러리를 지원합니다. 하지만 각각 로깅 라이브러리가 내부적으로 어떻게 동작하는지 모르면 성능상 이슈를 발생시킬 수 있기 때문에 어떤 상황에서 어떤 로깅 라이브러리를 써야할지 잘 알고 사용하는 것이 좋습니다. 디버깅이나, System.out.println(이하 sysout)이랑 비교했을 때 로깅 라이브..

    Java 메소드 실행 시간 측정하기

    각 로직들에 대해 성능 테스트를 하기 전, 시간을 측정하고 로그로 남긴다면 분석시에 도움이 됩니다. Java에서 시간을 측정하는 다양한 방법들이 있지만 다음에 대해서 우선적으로 정리합니다. System.currentTimeMillis()를 사용하는 방법 System.nanoTime()를 사용하는 방법 Spring StopWatch를 사용하는 방법 Guava의 Stopwatch를 사용하는 방법 Apache Commons Lang의 StopWatch를 사용하는 방법 모든 클래스가 thread-safe하진 않으므로 주의해서 사용해야 한다는 단점이 있습니다. 개인적으로 Spring StopWatch가 가장 사용하기 좋고 편리하였습니다. 이를 AOP나 Interceptor 등과 같이 유용하게 이용할 수 있습니다...

    Docker MySQL 컨테이너 콘솔(터미널) 한글 입력 문제 해결

    Docker MySQL Container 콘솔(터미널) 에서 한글 입력이 되지 않는 경우에 해결한 방법에 대해 기록합니다. 결론부터 말씀드리면, 컨테이너의 로케일 설정 때문입니다. 해당 컨테이너의 리눅스 배포판에 맞춰 로케일 설정을 바꿔주면 됩니다. 상황 - 한글 입력 무시 한글 입력이 되지 않는 상황은 다음과 같습니다 select * from '사원'; 위 명령어 입력시 select * from ''; 식으로 한글 입력이 무시되어 입력 되지 않습니다. 버전마다 상이할 수 있지만, 이 글에서는 MySQL 공식 이미지 + 오라클 리눅스 기준으로 해결법을 정리하겠습니다. MySQL 컨테이너 정보 확인 MySQL Charset 확인 MySQL charset 설정은 uf8로 다음과 같이 문제없이 되어있었습니다...

    동시 삭제 요청 ObjectOptimisticLockingFailureException

    Spring Boot + Spring Data Jpa 환경에서 특정 resource를 delete하는 api를 사용할 때 ObjectOptimisticLockingFailureException 예외가 발생하였습니다 슬랙으로 온 예외메시지를 확인하고 원인 분석을 하였습니다. 다음은 슬랙으로 온 예외 메시지를 간략히 줄인 내용입니다. exception : ObjectOptimisticLockingFailureException time : 202x년 0x월 xx일 1x시 14분 24초 - 24 request_path: /api/contents/21678 request_method: DELETE log level: warn cause: org.hibernate.StaleStateException: Batch u..