인코딩·한글 실무 — UTF-8·EUC-KR·CP949, BOM, 바이트 길이, 정규화
게시판·엑셀·레거시 연동에서 반복되는 "한글이 깨져요" 문의를 원인별로 진단하고, UTF-8·EUC-KR·CP949 차이와 BOM·바이트 길이·정규화·파일명 인코딩을 코드로 확인합니다.
1. 왜 배우는가
한국 SI·SM 현장에서 가장 자주 들어오는 문의 중 하나가 "글자가 깨져요"입니다. 게시판 글이 ???로 보이거나, Excel 로 내려받은 CSV 가 한글만 占쏙옙으로 보이거나, 레거시 EUC-KR 시스템과 연동한 API 응답이 깨지는 식입니다. 원인은 대부분 인코딩 불일치인데, 정확한 원인을 모르면 "일단 UTF-8 로 바꿔보자"는 시행착오만 반복하게 됩니다.
폐쇄망 RHEL 서버는 로케일이 C 또는 ko_KR.euckr 로 설정된 경우가 아직 남아 있습니다. Oracle DB 도 NLS_CHARACTERSET이 KO16MSWIN949인 구축이 많습니다. Spring Boot 는 JDK 18 부터 기본 인코딩이 UTF-8 로 바뀌었지만, 레거시 배치·전문 연동 구간에서는 여전히 EUC-KR·CP949 를 강제로 맞춰야 합니다.
이 레슨은 이 둘 사이를 오갈 때 필요한 원리와 재현 가능한 코드를 다룹니다.
목표는 "왜 깨지는지"를 바이트 단위로 설명할 수 있게 되는 것입니다. 코드는 java-src/extension/14_encoding/Main.java 하나로 되어 있고, 순수 JDK 21 만 사용합니다.