본문 바로가기
ETC

EML 조회 시 이슈

by J_Remind 2024. 11. 3.

회사에서 메일 서비스 운영 중 원문 조회 시 CPU가 급격하게 올라가고 조회하는데 오랜 시간이 걸리는 성능 문제가 발생하였다.

AS-IS

public InputStream getFileInputStream(MessageDto.Search search) {
    try {
    	File file = getFile(search);
        return new FileInputStream(file);
    } catch (IOException e) {
        ...
    }
}

 

애플리케이션에서 코드를 조회하는 로직을 확인했을 때, FileInputStream 으로 매번 직접 파일 시스템에 접근하여 파일을 읽어오고 있었다. 

TO-BE

파일 시스템에 매번 접근하여 파일을 읽게되면 I/O 접근이 많아 CPU 사용량이 높아지고 성능이 늦어 질 수 있기 때문에, 파일을 읽어 올때 여러 바이트를 읽어 오는 BufferedInputStream (DEFAULT_BUFFER_SIZE = 8192)을 적용하여 I/O 접근을 줄여 CPU 사용량을 낮췄다. 또한, CPU 사용량을 낮춤으로 성능을 향상시킬 수 있었다.

 

public InputStream getFileInputStream(MessageDto.Search search) {
    try {
        File file = getFile(search);
        return new BufferedInputStream(new FileInputStream(file));
    } catch (IOException e) {
        ...
    }
}

 

FileInputStream vs BufferedInputStream

'ETC' 카테고리의 다른 글

메모리 누수 분석  (0) 2024.07.28
센드 메일서버 구현  (0) 2019.02.27
마스터 네임서버 구축  (0) 2019.02.26