[ 성능 최적화 및 캐싱 카테고리 ]

yongcrane·2025년 4월 2일

💡의도

성능 최적화 카테고리는 데이터베이스 및 서버 성능을 최적화하는 능력을 평가합니다. 특히 캐싱, 쿼리 최적화, CDN등은 실무에서 서버 부하를 줄이고 사용자 경험을 향상시키기 위해 필수적으로 알아야 하는 기술입니다. 면접관은 지원자가 성능 문제를 식별하고, 이를 해결할 수 있는 방법을 얼마나 잘 알고 있는지를 확인하고 싶어합니다.

답변에 포함해야할 키워드

  • 캐시(Cache) : 자주 사용되는 데이터를 메모리에 저장하여 성능에 향상
  • Redis : 자주 사용되는 캐시 저장소
  • 쿼리 최적화 : 복잡한 데이터 조회 시 인덱스 사용, JOIN 최적화
  • CDN : 콘텐츠 전송 속도를 높이기 위한 네트워크
  • 성능 모니터링 : 애플리케이션 성능을 지속적으로 추적하고 문제를 해결
  1. [중] 백엔드 성능 최적화 방법을 설명해 주세요.

백엔드 성능 최적화 방법
1. 비동기 처리 : 오래 걸리는 작업(예 : 파일처리, API 호출)을 비동기 방식으로 진행
2. 캐싱 : 자주 사용하는 데이터를 Redis 같은 메모리 캐시에 저장해 DB 부하 줄이기
3. 데이터베이스 튜닝 : 적절한 인덱스를 설정하고, 불필요한 쿼리를 최소화
4. 로드 밸런싱 : 여러 서버에 트래픽을 분산시켜 부하를 줄이기
5. 압축 및 최소화 : API 응답을 gzip으로 압축하고, 불필요한 데이터 전송 줄이기

  1. [상] 데이터베이스 쿼리 최적화를 위한 방법을 설명해 주세요.

데이터베이스 쿼리 최적화 방법
1. 인덱스 사용 : 자주 조회하는 컬럼에 적절한 인덱스를 추가해 검색 속도 향상.
2. 조인 최적화 : 필요없는 조인은 피하고, 조인 순서를 최적화
3. 쿼리 캐싱 : 자주 실행되는 쿼리는 캐시를 활용하여 반복 실행 방지
4. 배치 처리 : 대량의 데이터를 한번에 처리하여 트랜잭션 오버헤드 줄이기.
5. 정규화 & 비정규화 : 데이터 중복을 최소화하지만, 속도를 위해 적절히 비정규화 고려

  1. [중] Redis의 주요 사용 사례를 설명해 주세요.

Redis의 주요 사용 사례
1. 세션 관리 : 사용자 로그인 세션을 Redis에 저장하여 빠른 접근 가능
2. 캐싱 : DB 조회 결과를 Redis에 저장하여 성능 향상.
3. 메시지 큐 : Pub/Sub 기능을 활용해 실시간 알림, 채팅 구현.
4. 분산 락 : 여러 서버에서 동시에 같은 리소스를 수정하는 것을 방지

  1. [중] 캐시(Cache) 메커니즘을 설명하고, 캐시를 사용하는 이유를 이야기해주세요.

캐시 매커니즘과 사용 이유
캐시란? 자주 사용하는 데이터를 빠르게 가져오기 위해 메모리에 저장하는 기술이다.
사용이유

  • DB 부하 감소
  • 응답 속도 향상
  • 네트워크 비용 절감
  1. [상] CDN(Content Delivery Network)이 무엇이며, 성능 최적화에 어떤 기여를 하는지 설명해 주세요.

CDN과 성능 최적화
CDN ? 전 세계 여러 지역에 배포된 서버에 정적 콘텐츠(이미지, CSS, JS)를 저장해 사용자에게 더 가까운 서버에서 제공하는 네트워크
성능 최적화 기여

  • 로딩 속도 향상 : 사용자가 가까운 CDN 서버에서 파일을 받아 빠르게 페이지 로딩
  • 서버 부하 감소 : 원본 서버 대신 CDN이 트래픽을 처리하여 부하 감소.
  • DDos 방어 : 분산된 네트워크로 트래픽을 분산해 공격 방어 효과
  1. [중] 캐시 무효화(Cache Invalidation) 전략에 대해 설명해주세요.

캐시 무효화 전략
캐시된 데이터가 오래되었거나 변경될 때, 이를 제거하거나 갱신하는 전략이다.

주요방법

  • Write-through : 데이터 변경 시 캐시와 DB 모두 업데이트.
  • Write-back : 캐시에 먼저 저장하고 나중에 DB 반영. 성능은 좋지만 데이터 유실 위험있음.
  • Cache-aside (Lazy Loading) : 필요할 때 캐시에 적재, 변경 시 캐시 삭제. 가장 일반적
  • TTL(Time-To-Live) : 일정 시간이 지나면 자동 삭제.
  1. [상] Redis에서 데이터가 영구적으로 저장되지 않는 이유와 이를 방지하기 위한 방법을 설명해 주세요.

Redis에서 데이터가 영구적으로 저장되지 않는 이유 & 방지 방법

이유 :

  • 기본적으로 In-Memory DB이므로 재시작 시 데이터 소실 가능.
  • 정책에 따라 오래된 키가 삭제될 수 있음 (eviction).

방지방법

  • AOF(Append-Only File) : 모든 변경 사항을 로그로 기록.
  • RDB(Snapshotting) : 일정 주기로 데이터를 리스크에 저장.
  • Persistent 설정 조합 : AOF + RDB 함께 사용해 복구 가능성 높임.
  1. [상] JVM 튜닝을 통한 성능 최적화 방법을 설명해주세요.

JVM 튜닝을 통한 성능 최적화

  • Heap 크기 조정 : -Xms(초기 크기), -Xmx(최대 크기) 설정.
  • GC 최적화 : G1,GC,ZGC 같은 최신 GC 사용.
  • 메모리 영역 분리 : Eden, Survivor, Old 영역 크기 조정.
  • 스레드 스택 크기 조정 : -Xss 설정으로 과도한 스택 사용 방지.
  • JIT 최적화 : -xx:+TieredCompilation 등 활용.
  1. [상] 스레드 풀(Thread Pool)과 비동기 작업을 사용한 성능 최적화 방법을 설명해주세요.

스레드 풀과 비동기 작업을 사용한 성능 최적화

  • 스레드 풀 : 필요할 때만 스레드 생성 & 재사용하여 비용 절감.
  • 비동기 작업(Async) : 병렬 실행으로 응답 속도 향상 (@Async 사용).
  • 적절한 큐 크기 설정 : 대기 요청이 너무 많아지지 않도록 조정.
  • ForkJoinPool : 대량의 병렬 작업을 효과적으로 처리하는 데 활용
  1. [상] 서버의 CPU, 메모리 사용률을 모니터링하고 최적화하는 방법을 설명해 주세요.

서버, CPU, 메모리 사용률 모니터링 & 최적화

  • 모니터링 도구 활용
    - top, htop, vmstat(리눅스)
    • jconsole. VisualVM, Prometheus + Grafana (JVM)
  • CPU 최적화 :
    - 불필요한 스레드 감소, GC 튜닝, 적절한 부하 분산
  • 메모리 최적화 :
    - 객체 재사용, 캐시 전략 개선, 메모리 누수 감지(MAT, jmap)
  1. [중] 백엔드 성능 최적화 방법을 설명해 주세요.
    1. 비동기 처리, 캐싱, 데이터베이스 튜닝, 로드 밸런싱 + CDN 적용 , 성능 모니터링
  2. [상] 데이터베이스 쿼리 최적화를 위한 방법을 설명해 주세요.
    1. 인덱스 사용, 조인 최적화, 쿼리 캐싱, 배치 처리(오버헤드 줄이기)
    2. 일부 컬럼만 가지고 조회, where like 검색에 와일드 카드 검색 지향, Order by , Group by
    3. 성능 최적화된 수치를 알 수 있는 방법 : DBMS 마다 실행 계획 분석을 통해서 유추 가능!
    4. 스프링 프레임 워크 - N+ 1문제 (JPA)
  3. [중] Redis의 주요 사용 사례를 설명해 주세요.
    1. 세션관리 , 캐싱, 메시지 큐 , 분산 락 , 지연 우선순위, 카운터 랭크
    2. inpa.tistory.com/entry/REDIS-%F0%9F%93%9A-%EC%BA%90%EC%8B%9CCache-%EC%84%A4%EA%B3%84-%EC%A0%84%EB%9E%B5-%EC%A7%80%EC%B9%A8-%EC%B4%9D%EC%A0%95%EB%A6%AC
  4. [중] 캐시(Cache) 메커니즘을 설명하고, 캐시를 사용하는 이유를 이야기해주세요.
    1. 캐시 - DB 부하감소, 응답 속도 향상, 네트워크 비용 절감
  5. [상] CDN(Content Delivery Network)이 무엇이며, 성능 최적화에 어떤 기여를 하는지 설명해 주세요.
    1. CDN - 인프라 영역 전세계 여러개로 분산된 캐시, 원서버에서 가져오는 것보다 더 빠르게 컨텐츠를 가져오기 위해서 전세계의 인프라가 구축되어 있는 것 (정적 콘텐츠)
    2. Cloud Front, AWS cloud(CDN 서비스)
    3. B2B보단 B2C
  6. [중] 캐시 무효화(Cache Invalidation) 전략에 대해 설명해주세요.
    1. 캐시 무효화 전략
  7. [상] Redis에서 데이터가 영구적으로 저장되지 않는 이유와 이를 방지하기 위한 방법을 설명해 주세요.
    1. In-Memory DB 이므로
    2. snapshotting (RDB), AOF 로그 남기기
  8. [상] JVM 튜닝을 통한 성능 최적화 방법을 설명해주세요.
    1. 성능 저하는 디스로 지연 시간 , Heap, CPU 사용량 급증, 병목 현상 시 사용저하
    2. 힙 메모리 설정 용량, \
    3. 힙/스레드 모니터링 도구: VisualVM, JMC, JFR
  9. [상] 스레드 풀(Thread Pool)과 비동기 작업을 사용한 성능 최적화 방법을 설명해주세요.
    1. CPU 영역
    2. 스레드 풀 : 필요할 때 재사용, CPU 및 메모리 자원 절약
    3. 비동기 @Async를 활용하여 비동기 처리
    4. 가상 스레드도 같이 첨부해서 준비하면 좋을 것 같아
  10. [상] 서버의 CPU, 메모리 사용률을 모니터링하고 최적화하는 방법을 설명해 주세요.
    1. CPU 최적화 : 불필요한 스레드 감소, GC 튜닝, 적절한 부하 분산
    2. 모니터링 도구 활용 jconsole, Prometheus + Grafana 와 합쳐서 자주 사용하는 추세
profile
짧고 강력하게!

0개의 댓글