- 백엔드 성능 최적화 방법을 설명해주세요
- 데이터베이스 쿼리 최적화를 위한 방법을 설명해주세요
- Redis의 주요 사용 사례를 설명해주세요
- 캐시 매커니즘을 설명하고 캐시를 사용하는 이유를 이야기해주세요
- CDN이 무엇이며 성능 최적화에 어떤 기여를 하는지 설명해주세요
1. 백엔드 성능 최적화
백엔드 성능 최적화 방법을 설명해주세요
데이터베이스 최적화
- 인덱스 사용 : 자주 사용하는 쿼리에 인덱스를 설정하여 검색 속도 향상
- 쿼리 최적화 : 불필요한 데이터 접근을 줄이고 쿼리 성능을 분석하여 개선
- 캐싱 : 자주 조회되는 데이터를 메모리에 캐싱하여 데이터베이스 접근을 줄임
- 조인 최적화 : 복잡한 조인 대신 정규화 또는 비정규화 고려
어플리케이션 레벨 최적화
- 코드 프로파일링 : 애플리케이션의 병목 지점을 찾아 성능 개선
- 비동기 처리 : I/O 작업을 비동기로 처리하여 애플리케이션의 응답성 향상
- 다중 스레드 및 병렬 처리
캐싱
- 애플리케이션 캐시
- 분산 캐시 : Redis와 같은 분산 캐시 시스템을 사용하여 성능 향상
로드밸런싱
- 수평 확장 : 여러 서버에 트래픽을 분산하여 부하 감소
CDN 사용
- 정적 콘텐츠 캐싱 : 이미지, CSS, JS 파일 등 정적 리소스를 CDN에 저장하여 서버 부하 감소, 콘텐츠 제공 속도 향상
2. 데이터베이스 쿼리 최적화
데이터베이스 쿼리 최적화를 위한 방법을 설명해주세요
인덱스 사용
- 적절한 인덱스 생성 : 자주 사용되는 컬럼에 인덱스를 생성하여 검색 속도 향상
- where, join이 자주 사용되는 컬럼에 인덱스 설정
- 복합 인덱스 : 여러 컬럼을 조합하여 인덱스 생성
쿼리 리팩토링
- 필요하지 않은 컬럼을 select 절에서 제외하여 데이터 전송량 감소
- 서브쿼리 대신 조인 사용
데이터 정규화 및 비정규화
- 정규화 : 데이터 중복을 줄이고 데이터 무결성 유지
- 비정규화 : 성능이 중요한 경우 일부 데이터를 비정규화하여 조회 성능 개선
쿼리 캐싱
- 동일한 쿼리가 반복적으로 실행되는 경우 쿼리 결과 캐싱
파티셔닝
- 테이블 파티셔닝 : 큰 테이블을 여러 파티션으로 나누어 데이터 액세스 속도 향상, 효율성 향상
- 인덱스 파티셔닝
배치 쿼리
- 배치 쿼리를 사용하여 트랜잭션 오버헤드 감소
3. Redis
Redis의 주요 사용 사례를 설명해주세요
Redis
-
고성능, 오픈소스 인메모리 데이터 구조 저장소
-
캐싱 : 자주 사용되는 데이터베이스 쿼리 결과를 Redis에 저장하여 응답 속도 향상
- 웹 페이지 및 세션 데이터 캐싱 : 자주 방문하는 웹 페이지나 사용자 세션 데이터를 Redis에 캐싱하여 빠른응답제공
-
세션 관리 : 사용자 세션 데이터를 저장하고 관리하는데 사용, 세션 만료 기능 활용
-
실시간 분석
-
메시지 큐 : pub/sub 기능 사용
-
리더보드 : sorted set을 사용해 랭킹과 리더보드 구현
-
분산락 : 동시성 문제 해결
-
이벤트 소싱
Redis를 사용한 경험에 대해 말씀해주세요
4. 캐시 매커니즘
캐시 매커니즘을 설명하고 캐시를 사용하는 이유를 이야기해주세요
캐싱
- 자주 접근하는 데이터나 연산 결과를 임시 저장해두어 이후에 같은 데이터를 요청할 때 더 빠르게 제공하기 위한 저장소
- RAM을 사용해 속도가 빠르며 데이터베이스나 파일 시스템보다 훨씬 빠르게 데이터 제공 가능
캐싱 단계
- 캐시 조회 : 캐시에 데이터가 있는지 확인, 데이터를 찾으면 즉시 반환(캐시 히트)
- 원본 저장소 조회 : 캐시에 데이터가 없으면(캐시 미스) 데이터베이스나 원본 저장소에서 조회
- 캐시 업데이트 : 원본에서 가져온 데이터를 캐시에 저장하여 다음 요청시 빠르게 접근
- 데이터 반환 : 최종적으로 데이터 반환
사용 이유
- 응답 속도 향상
- 서버 부하 감소
5. CDN
CDN이 무엇이며 성능 최적화에 어떤 기여를 하는지 설명해주세요
CDN (Content Delivery Network)
- 콘텐츠 전송 네트워크
- 지리적으로 분산된 서버 네트워크
- 사용자와 가장 가까운 서버에서 콘텐츠를 제공함으로써 웹 페이지 로딩 시간을 줄이고 서버 부하 분산
- 주로 정적 콘텐츠를 캐싱하여 빠르고 안정적으로 전송하는 데 사용
- 사용자마다 다른 데이터(뉴스, 날씨 등) 동적 콘텐츠 전송
CDN 최적화
- 콘텐츠 전송 속도 향상 : 사용자 위치와 가까운 CDN 서버에서 콘텐츠 제공, 네트워크 지연 시간 감소
- 서버 부하 분산 : 원본 서버에 대한 요청 수 감소
- 대역폭 비용 절감 : CDN서버가 직접 콘텐츠를 제공하여 원본 서버에서 전송되는 비용 절감
단점
- 비용 증가