🎯 BufferedWriter 사용 시 비동기 작업을 피하는 이유
- 파일 쓰기 작업은 I/O 중심 작업이라 CPU 성능보다는 디스크 I/O 성능에 의존합니다.
따라서 여러 스레드에서 동시에 파일에 쓰기를 시도하면 디스크 I/O가 병목이 될 수 있으며, 여러 스레드가 파일을 동시에 수정하려고 하면 충돌이 일어날 수 있습니다. - BufferedWriter는 한 스레드에서 순차적으로 파일을 쓸 때 가장 안정적이고 효율적입니다.
여러 스레드가 같은 파일을 다루면, 동시에 데이터를 덮어쓰거나 충돌할 위험이 높습니다. 특히, BufferedWriter 같은 버퍼링 스트림은 동기화(synchronization)가 자동으로 처리되지 않기 때문에, 여러 스레드에서 파일에 쓰는 작업을 할 때 오류가 발생할 가능성이 큽니다. - 디버깅과 오류 추적이 더 쉬워짐
동기 작업으로 작성하면 코드 흐름이 명확하고, 파일 쓰기 작업이 순차적으로 이루어지기 때문에 예외가 발생했을 때 오류의 원인을 추적하기가 더 쉬워집니다.
🚀 비동기 사용하지 않는 것이 나은 이유
- 스트림 충돌 방지: ZipOutputStream이나 FileOutputStream은 여러 스레드에서 동시에 접근하면 안 되므로, 비동기 작업을 사용하지 않으면 이 문제를 자연스럽게 피할 수 있음.
- 동기적으로 처리할 때 더 명확한 흐름: 비동기 작업 없이 순차적으로 압축 작업을 처리하면, 코드 흐름이 더 단순하고 관리하기 쉬움. 작업이 끝날 때까지 기다리는 부분도 명확하고, 작업을 완료한 후에 zipOut을 닫을 수 있음.
- 성능 저하 방지: I/O 작업(파일 읽기/쓰기)은 대부분 CPU보다는 디스크와 네트워크 속도에 의존하므로, 병렬 처리의 성능 향상이 크지 않을 수 있음. 특히 파일 크기가 작거나 디스크 I/O가 병목인 경우 순차 처리로도 충분히 빠를 수 있음.
파일 다운로드 기능을 구현하는데
상상으론 병렬로 읽어오고 처리하면 좋을 것 같은데?! 싶었는데 그런 것이 아니었다고 한다
'업무' 카테고리의 다른 글
textarea에 링크 기능 추가 (0) | 2024.08.16 |
---|---|
textarea에 bold 추가 안 된다 (2) | 2024.06.27 |
오라클 substr (0) | 2024.06.25 |
라디오버튼 / 체크박스 (0) | 2024.06.05 |
[FWB] Freight Waybill (1) | 2024.06.03 |