IT/Java
스프링 부트: 윈도우와 맥에서 한글 파일명 다운로드 문제 해결하기(2)
Dev. Sean
2024. 1. 25. 09:39
반응형
문제 상황은 이렇습니다.
파일 업로드 기능을 구현했을 때, MacOS에서는 한글 파일명이 정상적으로 데이터베이스에 저장되었지만, Windows에서는 한글 파일명이 자음과 모음이 분리되어 저장되는 현상이 발생했습니다.
이는 운영 체제 간 문자 인코딩 처리 방식의 차이 때문에 발생하는 일반적인 문제였습니다.
처음 시도한 해결책은 다음과 같은 방식이었습니다:
try {
// 파일 데이터 조회
ResponseFile list = fileService.getFile(attachId, fileId);
...
// 파일명 UTF-8 인코딩 후, ISO-8859-1로 재인코딩
String encodedFileName = new String(list.getOriginalName().getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
...
}
이 방법은 UTF-8 인코딩된 파일명을 ISO-8859-1로 재인코딩하는 것이었습니다.
그러나 이 접근법으로는 문제가 해결되지 않았습니다.
더욱이, 데이터베이스에 한글 파일명이 자음과 모음이 분리되어 저장되는 현상을 발견했습니다.
그 후, 다음과 같은 새로운 방법을 시도했습니다:
public RequestFile uploadFile(final MultipartFile multipartFile) {
...
// 파일 이름을 NFC 형식으로 변환
String originalNameNFC = Normalizer.normalize(multipartFile.getOriginalFilename(), Normalizer.Form.NFC);
...
}
이 방법에서 핵심은 파일명을 NFC(Normalization Form Canonical Composition) 형식으로 변환하는 것이었습니다.
NFC는 문자를 조합형으로 표현하는 방식으로, MacOS와 Windows 간의 인코딩 차이를 해결하는 데 매우 효과적이었습니다.
이를 통해 Windows에서도 한글 파일명이 자음과 모음이 분리되지 않고 정상적으로 처리될 수 있었습니다.
- 운영 체제 간 인코딩 차이의 이해: MacOS와 Windows는 내부적으로 다른 문자 인코딩 방식을 사용합니다. 이 차이를 이해하고 해결책을 모색하는 것이 중요합니다.
- NFC 변환의 중요성: 파일명을 NFC 형식으로 명시적으로 변환하는 것은 MacOS와 Windows 간의 인코딩 문제를 해결하는 효과적인 방법입니다.
반응형