📁 Spring에서 대용량 XML 파일 처리하기
MultipartFile → File 변환 + JAXB 파싱 (Namespace 문제 해결 포함)
1. MultipartFile → File 변환 (스트림 방식)
// 대용량 파일 처리에 최적화
public File convertToFile(MultipartFile multipartFile) throws IOException {
File tempFile = File.createTempFile("upload_", ".xml");
try (InputStream is = multipartFile.getInputStream();
FileOutputStream fos = new FileOutputStream(tempFile)) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
}
return tempFile;
}
2. JAXB를 이용한 XML → VO 파싱
⚠️ 핵심: Namespace 설정
XML 구조 | VO 클래스 설정 |
---|---|
|
|
파싱 코드 예시
public TaxInvoiceVo parseXml(File xmlFile) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(TaxInvoiceVo.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
return (TaxInvoiceVo) unmarshaller.unmarshal(xmlFile);
}
3. 전체 처리 흐름
- MultipartFile 수신
- 임시 File 생성 (스트림 방식)
- JAXB로 XML 파싱
- 임시 파일 삭제
4. 필수 의존성 (build.gradle)
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'
implementation 'com.sun.xml.bind:jaxb-impl:4.0.0'
🚨 주의사항
- XML 네임스페이스와 VO 설정 반드시 일치시킬 것
- 대용량 파일은
transferTo()
대신 스트림 방식 사용 - 파일 사용 후 반드시 삭제 처리 권장
반응형
'개발 > Java' 카테고리의 다른 글
MS Sql Server Express JDBC 연결 (0) | 2021.02.24 |
---|---|
log4j 특정 sql 제거하기 (2) | 2020.08.05 |
Request.getRemoteAddr()을 호출하였을 때 IPv4 주소체계로 받고싶다 (0) | 2019.01.25 |
[WAS] GC 모니터링 및 튜닝하기 (0) | 2018.10.16 |