。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

업무

IO스트림에는 비동기 NO

quarrrter 2025. 4. 18. 13:32

🎯 BufferedWriter 사용 시 비동기 작업을 피하는 이유

  1. 파일 쓰기 작업은 I/O 중심 작업이라 CPU 성능보다는 디스크 I/O 성능에 의존합니다.
    따라서 여러 스레드에서 동시에 파일에 쓰기를 시도하면 디스크 I/O가 병목이 될 수 있으며, 여러 스레드가 파일을 동시에 수정하려고 하면 충돌이 일어날 수 있습니다.
  2. BufferedWriter는 한 스레드에서 순차적으로 파일을 쓸 때 가장 안정적이고 효율적입니다.
    여러 스레드가 같은 파일을 다루면, 동시에 데이터를 덮어쓰거나 충돌할 위험이 높습니다. 특히, BufferedWriter 같은 버퍼링 스트림은 동기화(synchronization)가 자동으로 처리되지 않기 때문에, 여러 스레드에서 파일에 쓰는 작업을 할 때 오류가 발생할 가능성이 큽니다.
  3. 디버깅과 오류 추적이 더 쉬워짐
    동기 작업으로 작성하면 코드 흐름이 명확하고, 파일 쓰기 작업이 순차적으로 이루어지기 때문에 예외가 발생했을 때 오류의 원인을 추적하기가 더 쉬워집니다.

 

 

🚀 비동기 사용하지 않는 것이 나은 이유

  1. 스트림 충돌 방지: ZipOutputStream이나 FileOutputStream은 여러 스레드에서 동시에 접근하면 안 되므로, 비동기 작업을 사용하지 않으면 이 문제를 자연스럽게 피할 수 있음.
  2. 동기적으로 처리할 때 더 명확한 흐름: 비동기 작업 없이 순차적으로 압축 작업을 처리하면, 코드 흐름이 더 단순하고 관리하기 쉬움. 작업이 끝날 때까지 기다리는 부분도 명확하고, 작업을 완료한 후에 zipOut을 닫을 수 있음.
  3. 성능 저하 방지: 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