inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Batch 입문: 3시간 만에 끝내는 대용량 처리의 기초

[실습] 스프링 배치 프로젝트 생성(Spring Boot 4.x & Gradle)

콘솔 로그가 깨져나오는데 혹시 방법이 있을까요?

47

naje

작성한 질문수 4

0

혹시 배치를 명령문으로 실행시 System.out.print로 출력시 콘솔로그가 깨져나오는데 혹시 해결방법이 있을까요? 버전들은 최대한 맞췄고, 여러 방법들로 조치를 해봤지만 안되네요. 혹시 해결책이 있을까요?

mysql jenkins spring-boot spring-batch gradle

답변 2

0

JSCODE 시니

안녕하세요, naje님! JSCODE 시니입니다~!


명령문(CLI)으로 배치 실행 시 한글 콘솔 로그가 깨지는 현상 때문에 많이 답답하셨겠어요..! 버전도 맞추시고 여러 방법을 시도해 보셨음에도 해결이 안 되셨군요..!!ㅠㅠ


우선 어떤 명령어를 입력하셨는지, 어떤 툴을 사용하고 계신지, 문제화면을 캡쳐해주시면 더 정확하게 확인드릴 수 있을 것 같은데요~!


일반적으로 이 문제는 운영체제(특히 Windows)의 기본 인코딩과 자바(JVM)가 사용하는 인코딩 설정이 일치하지 않을 때 자주 발생하곤 합니다!ㅎㅎ


다음 두 가지 방법을 순차적으로 적용해 보시기를 권장해 드릴게요!


1. JVM 실행 옵션에 UTF-8 인코딩 추가하기

java -jar 명령어로 실행 중이시라면, 명령어 중간에 -Dfile.encoding=UTF-8 옵션을 추가해서 실행해 보세요!


  • 예시:java -Dfile.encoding=UTF-8 -jar 파일명.jar

  • 주의: 옵션은 반드시 -jar 앞에 위치해야 합니다.


2. 터미널(명령 프롬프트/파워쉘) 인코딩을 UTF-8로 변경하기 (Windows 환경)

Windows 터미널의 기본 코드페이지가 확장 완성형(CP949)으로 되어 있어 깨질 수 있습니다..!

실행 전 터미널에 아래 명령어를 입력해 코드페이지를 UTF-8로 변경해 보세요.


  • 명령어:chcp 65001

  • 입력 후 "Active code page: 65001"이라는 메시지가 나오면 다시 배치를 실행해 보세요.


3. (Gradle로 실행하시는 경우) build.gradle 인코딩 설정 확인


만약 gradlew 명령어로 실행 중이시라면, build.gradle 파일 하단에 아래 설정이 있는지 확인하고 추가해 보세요.


  • 추가 코드:

    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }
    


만약 위 방법들을 적용한 후에도 계속해서 로그가 깨진다면, 사용 중이신 운영체제(Windows/Mac)와 터미널에 입력하신 정확한 실행 명령어, 캡쳐본을 새로운 질문이나 답글로 남겨주세요! 빠르게 추가 확인을 도와드리겠습니다..!


혹시라도 더 빠른답변 원하시면 저한테 1대1 오픈채팅방으로 질문남겨주셔도 됩니다!ㅎㅎ

해결이 잘 되실 때까지 함께 찾아볼 테니 너무 걱정 마세요. 화이팅입니다! 💪


0

naje

시니님, 안녕하세요.

먼저 환경은 Windows11 사용중이고, 개발툴은 인텔리제이 2023.3 버전 사용중입니다.

1번의 경우 해당 명령어 사용해봤고,
.\gradlew bootRun "-Dfile.encoding=UTF-8" "-Dconsole.encoding=UTF-8" --args="--spring.batch.job.name=cafeJob"

2번의 경우도 마찬가지고

3번도 마찬가지로 안되네요.

사실, 이미 다 해봤던 부분이긴합니다.

잘 되는경우가 있긴한데,

"제어판>국가또는지역>시스템 로캘 변경>베타 체크 박스 체크"하면 되긴합니다.

다른 프로그램에서 한글이 간혹 깨져서 혹시나 다른 방법이 있을까 해서 문의 드렸습니다.

한번 봐주시고 다른 방법이 있다면 알려주세요. 없으면 그냥 이렇게 바꾸고 사용하면 될듯합니다.

감사합니다.

0

JSCODE 시니

안녕하세요 naje님! JSCODE 시니입니다~

윈도우 11환경에서 옵션을 켰을 때 해결이 되셨군요!

그렇다면 제 생각에는 윈도우 os의 기본 인코딩과 자바/스프링 애플리케이션의 인코딩 간의 충돌로 보이네요..!


naje님께서 겪으신 것처럼 해당 베타 옵션을 켜면 아마도,,

다른 일반 윈도우 프로그램에서 한글이 깨지는 문제가 생기실거에요...!

따라서 그 옵션은 다시 체크 해제 해 주시는게 좋을 것 같습니다..!


작성해주신 명령어가 적용이 잘 안됐다면 스프링 부트 애플리케이션이 아니라 Gradle 실행 데모 자체에 옵션이 먹혀버려서 해당 배치 프로그램에는 적용이 잘 안된 것 같네요..!


우선은 application.yml 파일이나 application.properties 파일에 인코딩을 명시적으로 설정해보시길 추천드립니다!

application.yml 인 경우에는

logging:
  charset:
    console: UTF-8

로 작성하셔서 실행해보시면 좋을 것 같고,


application.properties인 경우에는

logging.charset.console=UTF-8

로 작성하셔서 실행해보시면 좋을 것 같습니다!


만약 이 방법이 잘 되지 않으시다면 가장확실한 방법으로는

CLI 명령어로 그때그때 넘기지 않고, bootRun이 실행될 때 사용할 JVM 옵션을 Gradle 설정 파일에 넣어서 사용해보는 것도 방법이 될 수 있는데요..!


작성해주신 명령어 중에

프로퍼티를 console.encoding이 아닌 stdout.encoding / stderr.encoding 으로 수정하셔서 돌려보셔도 좋을 것 같아요! 해당 프로퍼티가 존재하지 않아 옵션 자체가 무시됐을 가능성이 있습니다.

bootRun {
    jvmArgs = ['-Dfile.encoding=UTF-8', '-Dstdout.encoding=UTF-8', '-Dstderr.encoding=UTF-8', '-Dsun.jnu.encoding=UTF-8']
}

해당 코드를 build.gradle 파일에 추가하셔서 확인해보시길 바랍니다!

해당 방법으로 시도하실때는 기존처럼 인코딩 명령어는 제외하고 실행해서 확인해보시면 됩니다!


그리고 추가적으로 인텔리제이를 사용중이시라면, 인텔리제이 내부 터미널의 콘솔 인코딩도 확인해시길 권장드립니다~


베타옵션 때문에 다른 프로그램들에서 한글이 깨지면 학습하시는데 너무 불편하실것 같아 해당 방법으로 해결이 됐으면 좋겠네요..!!


적용해보시고 그래도 잘 안 된다면 편하게 다시 문의 남겨주세요~!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. naje님!

콘솔 로그가 깨지는 문제는 주로 인코딩 설정과 관련이 있습니다. Spring Batch나 Java 애플리케이션에서 로그를 출력할 때 환경 설정이 올바르지 않으면 이러한 문제가 발생할 수 있습니다. 다음은 문제를 해결할 수 있는 몇 가지 방법입니다:

  1. 콘솔 인코딩 설정 확인하기:

    • 터미널이나 콘솔의 인코딩 설정을 확인하고, UTF-8로 설정되어 있는지 확인하세요.
    • 예를 들어, Windows에서 cmd를 사용하고 있다면 chcp 65001 명령어로 UTF-8로 변경해 보세요.
  2. JVM 인코딩 설정:

    • 애플리케이션 실행 시 JVM 옵션에 -Dfile.encoding=UTF-8 을 추가하여 명시적으로 인코딩 설정을 변경해 보세요.
  3. 운영체제 환경 변수 설정:

    • 환경 변수에서 JAVA_TOOL_OPTIONS에 -Dfile.encoding=UTF-8을 설정하실 수 있습니다. 이렇게 하면 모든 Java 애플리케이션에 대해 기본 인코딩이 설정될 것입니다.
  4. 로그 파일 인코딩 확인:

    • 만약 로그를 파일로 출력하고 있다면, 로그 파일의 인코딩이 정상적인지도 확인할 필요가 있습니다.

간단하게 위 방법들을 적용하면 콘솔 로그 문자깨짐 문제를 해결할 가능성이 높습니다. 관련해서 더 많은 정보가 필요하다면 아래 링크를 참고해 보세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

네이버 API | '검색 - 책' API 제공 중단

0

11

0

ArticleReadService 관련 질문

0

9

0

마스터패스...

0

12

1

kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.

1

30

1

domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다

1

22

1

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

26

2

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

14

1

아무도 모르게 책 내시면 모르실 줄 알고!!

1

41

2

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

57

1

스크립트에 대해 질문 있습니다.

1

51

1

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

54

1

리뷰

0

37

2

조건 검색 질문

0

31

1

vagrant up 설치 에러

0

32

2

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

46

3

upload_file_id가 1,3,4 순서인 건에 대해

0

33

1

p.created_at vs u.name 인덱스 문의

0

42

2

노션링크가 접근되지 않습니다.

0

53

1

소스코드 빈 파일 문의드려요

0

80

2

소스코드 빈파일 문의

0

129

1

jobParameter를 통한 멱등성 질문

1

132

2

bootRun FAILED 에 대한 문의

1

137

2

[참고] Tasklet 인터페이스로 단일 배치 작업 처리 수업에 나온 코드 돌리는 방법

2

132

2

batch_db 생성 관련 문의 드립니다.

1

147

1