콘솔 로그가 깨져나오는데 혹시 방법이 있을까요?
47
작성한 질문수 4
혹시 배치를 명령문으로 실행시 System.out.print로 출력시 콘솔로그가 깨져나오는데 혹시 해결방법이 있을까요? 버전들은 최대한 맞췄고, 여러 방법들로 조치를 해봤지만 안되네요. 혹시 해결책이 있을까요?
답변 2
0
안녕하세요, 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
시니님, 안녕하세요.
먼저 환경은 Windows11 사용중이고, 개발툴은 인텔리제이 2023.3 버전 사용중입니다.
1번의 경우 해당 명령어 사용해봤고,
.\gradlew bootRun "-Dfile.encoding=UTF-8" "-Dconsole.encoding=UTF-8" --args="--spring.batch.job.name=cafeJob"
2번의 경우도 마찬가지고
3번도 마찬가지로 안되네요.
사실, 이미 다 해봤던 부분이긴합니다.
잘 되는경우가 있긴한데,
"제어판>국가또는지역>시스템 로캘 변경>베타 체크 박스 체크"하면 되긴합니다.
다른 프로그램에서 한글이 간혹 깨져서 혹시나 다른 방법이 있을까 해서 문의 드렸습니다.
한번 봐주시고 다른 방법이 있다면 알려주세요. 없으면 그냥 이렇게 바꾸고 사용하면 될듯합니다.
감사합니다.
0
안녕하세요 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 인턴입니다. naje님!
콘솔 로그가 깨지는 문제는 주로 인코딩 설정과 관련이 있습니다. Spring Batch나 Java 애플리케이션에서 로그를 출력할 때 환경 설정이 올바르지 않으면 이러한 문제가 발생할 수 있습니다. 다음은 문제를 해결할 수 있는 몇 가지 방법입니다:
콘솔 인코딩 설정 확인하기:
- 터미널이나 콘솔의 인코딩 설정을 확인하고, UTF-8로 설정되어 있는지 확인하세요.
- 예를 들어, Windows에서 cmd를 사용하고 있다면
chcp 65001명령어로 UTF-8로 변경해 보세요.
- 터미널이나 콘솔의 인코딩 설정을 확인하고, UTF-8로 설정되어 있는지 확인하세요.
JVM 인코딩 설정:
- 애플리케이션 실행 시 JVM 옵션에
-Dfile.encoding=UTF-8을 추가하여 명시적으로 인코딩 설정을 변경해 보세요.
- 애플리케이션 실행 시 JVM 옵션에
운영체제 환경 변수 설정:
- 환경 변수에서 JAVA_TOOL_OPTIONS에
-Dfile.encoding=UTF-8을 설정하실 수 있습니다. 이렇게 하면 모든 Java 애플리케이션에 대해 기본 인코딩이 설정될 것입니다.
- 환경 변수에서 JAVA_TOOL_OPTIONS에
로그 파일 인코딩 확인:
- 만약 로그를 파일로 출력하고 있다면, 로그 파일의 인코딩이 정상적인지도 확인할 필요가 있습니다.
- 만약 로그를 파일로 출력하고 있다면, 로그 파일의 인코딩이 정상적인지도 확인할 필요가 있습니다.
간단하게 위 방법들을 적용하면 콘솔 로그 문자깨짐 문제를 해결할 가능성이 높습니다. 관련해서 더 많은 정보가 필요하다면 아래 링크를 참고해 보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
네이버 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





