반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 머신러닝
- 파이썬
- 소프트웨어
- 사이버보안
- 자바스크립트
- 웹개발
- springboot
- 보안
- 클라우드컴퓨팅
- 컴퓨터공학
- 데이터분석
- 컴퓨터비전
- 네트워크보안
- 인공지능
- Yes
- 딥러닝
- 데이터과학
- 프로그래밍
- 소프트웨어공학
- 컴퓨터과학
- 알고리즘
- 디자인패턴
- 빅데이터
- 버전관리
- I'm Sorry
- 자료구조
- 프로그래밍언어
- 네트워크
- 데이터베이스
- 데이터구조
Archives
- Today
- Total
스택큐힙리스트
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 2장. 느려진 서비스, 어디부터 봐야 할까 본문
반응형
📄 본문
1. 처리량 vs 응답 시간
- 응답 시간(TTFB, TTLB) : 최초 바이트 도착 시간과 마지막 바이트 도착 시간. 특히 네트워크 상태나 응답 크기에 따라 TTFB와 TTLB 간 격차가 크게 벌어질 수 있어요. 응답 시간 단축을 위해 DB 연동과 외부 API 연동 쪽부터 살펴봐야 합니다.
- 처리량(TPS/RPS) : 초당 얼마나 많은 요청을 처리할 수 있는지. TPS가 한계를 넘으면 요청이 대기하게 되고, 결과적으로 응답 지연이 발생하죠.
2. 서버 성능 개선 기초
- 병목(Bottleneck) 지점 식별:
모니터링 도구 없이도 로그 기반으로 응답 시간 지연 구간을 찾아낼 수 있어요. 대부분 DB나 외부 API 호출 구간에서 문제 발생빈도가 높습니다. - 스케일링 전략:
- 수직 확장(Scale-Up): CPU, 메모리 등 자원을 통째로 업그레이드 — 빠르지만 비용 부담 있음.
- 수평 확장(Scale-Out): 서버를 여러 대 두는 방식 — 무턱대고 늘리면 DB 병목만 악화될 수 있어요. 반드시 병목 식별 후 결정해야 합니다.
3. DB 커넥션 풀
- 이유: 매번 DB 연결-종료하면 처리량 급감 → 커넥션 풀을 통해 연결 초기화 비용 절감.
- 핵심 설정 요소:
- 최대/최소 풀 크기
- 커넥션 대기 시간 설정: 길게 두는 건 응답 시간 지연, 짧게 두면 오류 유발 가능. 때로는 빠른 오류가 무응답보다 나을 수 있습니다.
- 유휴 시간, 유효성 검사 주기, 최대 유지 시간 등도 조정해야 합니다.
4. 서버 캐시
- 캐시 활용 시점: DB 확장이 부담될 때 캐시가 유용합니다.
- 캐시 적중률(히트율): 캐시 내 조회 성공 비율 → 효율성 증가, DB 부하 감소
- 삭제 전략: LRU, LFU, FIFO, TTL 등을 적절히 조합해 메모리 확보와 효율 균형 맞추기
- 로컬 vs 리모트 캐시:
- 로컬: 속도 빠르지만 서버 재시작 시 사라지고 메모리에 제약이 있음.
- 리모트(Redis 등): 확장성 뛰어나고 지속성 있음. 구조 복잡도 있지만 안정적.
5. 정적 자원과 CDN
- 정적 자원(이미지, CSS, JS)은 서버가 아닌 CDN에서 제공하면 네트워크 대역폭 절감과 응답 속도 향상 가능합니다.
6. 대기 처리
- 대기 큐를 사용해 일시적으로 요청을 순차 처리하거나 백그라운드 배치로 넘기는 전략도 유효합니다. 특히 사용자에게 에러를 빠르게 알리고, 내부적으로는 재시도 로직을 관리하는 식으로요.
"긴 시간동안 무응답 상태로 유지되는 것보다 빠르게 에러를 반환하는 것이 더 낫다"는 책의 메시지가 현실 경험과 맞닿아 있어 인상 깊었어요. 급한 시간에는 무조건 응답이 빠른 게 핵심이니까요.
외부 API가 오래 걸릴 것 같으면, 앞단에서 타임아웃을 걸고 빠르게 실패 처리한 뒤 리트라이하거나 사용자 메시지를 주는 게 훨씬 나은 사용자 경험이 될 수 있습니다.
반응형
'개발' 카테고리의 다른 글
수평 확장 vs DB 확장, 어디에 투자할까? (0) | 2025.07.09 |
---|---|
Redis 캐시 3대장: LRU·LFU·TTL, 언제 써야 진가를 발휘할까? (2) | 2025.07.09 |
[JAVA] 람다식과 메서드 레퍼런스 (1) | 2025.07.09 |
자바 스프링 개발 시작하기 - 3일차 컬렉션과 제네릭으로 학생 명단 관리 (1) | 2025.07.09 |
JUnit5로 BankAccount 단위 테스트 작성법 (1) | 2025.07.08 |
Comments