본문 바로가기
TWIL

API 성능 최적화하기 - 1

by swims 2025. 3. 16.

Pinpoint 확인 결과 특정 조회 API의 응답시간이 평균 1초 이상, 최대 3초인 것으로 API 성능이 좋지 않다는 것을 확인할 수 있었다.

내부 서버간 호출 API의 경우 적절한 API 응답 시간은 200ms ~ 300ms수준으로 평균 600ms ~ 1000ms 이상 걸리는 API를 최적화할 필요가 있었다.

더욱이 해당 API는 회원가입시 호출하는 API이므로 회원가입 속도가 느리면, 유저 경험이 좋지 않을 뿐더러 이탈 가능성도 있기 때문에 해당 API 성능 개선을 해보기로 했다.

Pinpoint의 트레이스를 분석한 결과, DB 조회 단계에서 응답 속도가 느려지고 있음을 확인했다.

쿼리 실행 과정을 분석해보면

1. 특정 문자열로 DB조회 → 인덱스 있음  
2. 1번의 조회 결과가 없는 경우, 다른 조건으로 DB를 다시 한번 조회
    - 이 부분에서 조건 필드에 인덱스 없음 → 성능 저하

해결 방법 (예정)

1. 1차 조회 최적화
    - 현재 DB의 기본 문자셋은 utf8mb4인데, 해당 테이블의 컬럼은 latin1으로 설정되어 있음 → 쿼리를 실행할 때, utf8mb4 ↔ latin1 간의 문자셋 변환때문에 인덱스 검색 속도가 느려질 가능성 있음
        - 해당 컬럼의 charset 변경
    - Redis 캐싱 적용
        - 해당 데이터는 실시간으로 변경되는 데이터가 아니므로 캐싱을 활용하면 불필요한 DB 조회를 줄일 수 있다.
    
2. 2차 조회 최적화
    - 인덱스 추가
        - 적절한 인덱스가 없어 Full Table Scan이 발생하므로 적절한 인덱스를 추가