전체 글 100

Spring > Logging > 서버의 파일 로그의 한글 깨짐

문제애플리케이션이 특정 예외를 던졌고 파일 로깅을 하였는데 아래와 같이 한글이 깨져서 나왔다Exception: ??? ?? ??????? 리눅스 시스템 Locale 확인$ localeLANG=ko_KR.UTF-8LC_CTYPE="ko_KR.UTF-8"LC_NUMERIC="ko_KR.UTF-8"LC_TIME="ko_KR.UTF-8"LC_COLLATE="ko_KR.UTF-8"LC_MONETARY="ko_KR.UTF-8"LC_MESSAGES="ko_KR.UTF-8"LC_PAPER="ko_KR.UTF-8"LC_NAME="ko_KR.UTF-8"LC_ADDRESS="ko_KR.UTF-8"LC_TELEPHONE="ko_KR.UTF-8"LC_MEASUREMENT="ko_KR.UTF-8"LC_IDENTIFICATION=..

Spring/Logging 2025.04.30

HTTP 요청과 응답의 데이터 구성

Header fieldRequestQuery Parameters위치: URL GET /search?q=cat&page=1 q=catpage=1 ?q=cat&page=1 부분을 Query string이라고 함Path Parameters위치: URL GET /users/1Header Fields 또는 HTTP Headers위치: 요청 헤더 Authorization: Bearer 토큰값Content-Type: application/jsonForm Data Parameters위치: 요청 본문application/x-www-form-urlencoded나 multipart/form-data로 전송됨웹 폼에서 주로 사용 POST /submitContent-Type: application/x-www-form-urle..

HTTP Specification 2025.04.24

Linux > Bash > 파일 암/복호화

여기서는 gpg를 사용해 암/복호화하는 방법을 다룬다 암호화encrypt.sh 패스프레이즈passphrase=$1for file in *.log*; do echo $file gpg --batch --passphrase $passphrase -c $filedone 암호화 시 output을 지정할 수 없음원본 파일명이 access.log라면 access.log.gpg로 생성됨 복호화decrypt.sh 패스프레이즈passphrase=$1for file in *.log*; do echo $file output_file=${file%.gpg} gpg --batch --passphrase $passphrase -o $output_file -d $filedone access.log.gpg ..

OS/Linux 2025.04.18

Linux > Bash > Here Document (<<EOF)

Here DocumentShell script에서 여러 줄의 텍스트를 한 번에 명령어로 전달할 때 사용하는 문법 외부 파일에서 읽지 않고 스크립트 안에 문서를 직접 삽입하기에 이렇게 이름 붙음. ( 보통 cat 변수 사용name=까마귀cat 변수해석 없이 그대로 출력하려면 종료 구분자를 홑따옴표로 감싸면 된다name=까마귀cat 임의 종료 구분자 사용cat 더 알아보기Here String(

OS/Linux 2025.04.16

Java > Local 개발 환경을 위한 애플리케이션에 TLS 설정 (keytool)

keytoolJava에서 Key 및 Certificate(인증서)를 생성하고 관리하는 명령줄 도구 Key와 KeyStore 생성keytool -genkeypair -alias my-tls-key -keyalg RSA -validity 3650 -keystore my-tls-key.p12 -storetype PKCS12RSA 2048비트 개인 키 생성Self-Signed(자체 서명된) 인증서 포함유효기간 3650일 (10년) 이후에 입력한 Keystore password를 잘 기억해두자 KeyStore 목록 확인keytool -list -keystore my-tls-key.jks Spring Boot에 KeyStore 설정server: ssl: key-store: file:api/cert/my-tl..

Java 2025.03.19

Linux > 프로세스를 백그라운드로 실행

여기서는 SSH 터미널을 사용해 Executable jar를 실행하는 것을 설명한다 단순 자바 프로세스 실행java -jar application.jar 해당 터미널에 표준 출력/에러가 출력됨Foreground에서 실행되므로 다른 작업 불가Ctrl + c를 눌러 프로세스를 중단할 수 있다터미널 세션이 끊기면(터미널 종료도 동일) 프로세스 중단됨 Background로 프로세스 실행java -jar application.jar &[1] 3443849 명령어 실행 직후 PID를 출력함해당 터미널에 표준 출력/에러가 출력됨백그라운드에서 실행되므로 다른 작업 가능터미널 세션이 끊기면(터미널 종료도 동일) 프로세스 중단됨 터미널 세션이 끊겨도 프로세스 실행nohup java -jar application.jar &..

OS/Linux 2025.03.06

Logging > Logback > MyBatis

MyBatis를 사용할 때 기본적으로 SQL 쿼리 로그에 출력되는 클래스명은 어떻게 될까? DAO나 Mapper의 클래스명이 출력될까? 아니다. Mapper XML로 쿼리를 설정한 경우 XML에 설정한 Namespace의 값으로 출력된다 따라서 해당 Namespace의 값이 폴더 구조를 따르는 규칙적인 경우라면 Logger 설정이 쉬우나, 만약 규칙적이지 않다면 쉽지 않을 것이다. 예를 들어 아래와 같이 설정되어 있다면.. 이와 같이 mapper라는 이름으로 시작하는 Logger 설정이 가능할 것이다.. 하지만 아래와 같이 설정되어 있다면 Logger 설정이 거의 불가능할 것이다.... 이런 경우에는 log4jdbc-remix 같은 라이브러리를 사용하면 아래와 같은 Logger를 사용하여 설정 가능하다..

Java/Logging 2025.02.11

Logging > Logback > additivity

Logback은 계층적 로깅을 따름 Logger의 로깅은 상위 Logger에게 전파됨. 이는 중복 로깅이 될 수 있다는 말이다 예를 들어 아래와 같이 Root logger의 레벨은 INFO로 설정하고, MyBatis 관련 로깅은 DEBUG로 설정한다고 해보자  org.mybatis 패키지 하위에서 DEBUG 로그를 출력한 뒤 Root logger에도 전파되지만, INFO 레벨에 막혀 출력이 되지 않는다additivity의 기본값은 true이다 additivity의 값을 false로 설정하면 어떻게 될까?  false로 설정하면 org.mybatis의 로그는 더이상 출력되지 않는다이를 출력하기 위해서는 별도의 Appender를 설정해야 한다

Java/Logging 2025.02.11