2025년 10월 30일 목요일 (104일차)

Jeonghoon·2025년 10월 30일

jeonghoon's Study

목록 보기
107/128

⚙️ 프로젝트 설계 및 성능 고려사항 정리


🖼️ 1️⃣ JS loading="lazy" 속성

항목설명
정의HTML <img> 태그에서 이미지가 뷰포트에 진입할 때 로드되도록 설정하는 속성
기능초기 로딩 시 모든 이미지를 불러오지 않고, 사용자가 스크롤할 때 필요한 이미지만 불러옴
장점페이지 로딩 속도 향상, 초기 트래픽 감소, 사용자 경험(UX) 개선
적용 예시<img src="thumbnail.jpg" loading="lazy" alt="이미지 설명">
주의사항이미지가 바로 보여야 하는 영역(대표 이미지 등)에는 사용하지 않는 것이 좋음

💡 “Lazy Loading”은 네트워크 자원을 절약하고 UX를 개선하지만, 캐싱 및 스크롤 처리와 함께 고려해야 한다.


🧠 2️⃣ 서버 이미지 캐싱 과부하 문제

문제 상황설명
장시간 페이지 체류 시 문제이미지 캐싱을 서버 메모리 또는 Redis에 유지하면, 시간이 지날수록 캐시 데이터가 누적되어 과부하 발생 가능
원인캐시 데이터의 TTL(Time To Live) 설정 부재 또는 삭제 로직 미흡

✅ 해결 방안

방법설명
TTL 설정redisTemplate.opsForValue().set(key, value, Duration.ofMinutes(30)); 처럼 TTL(유효기간) 설정
LRU 캐시 정책오래된 캐시부터 자동 삭제되도록 설정
정적 리소스 분리CDN 또는 별도 이미지 서버를 두어 API 서버의 부하를 분산
모니터링Redis 메모리 사용량 및 캐시 히트율 모니터링

🧩 3️⃣ 멀티테넌시 DB 생성 시 스레드 과부하 문제

문제 상황설명
DB 생성 로직 병목현상멀티테넌시 환경에서 신규 테넌트(DB)를 생성할 때, 각 요청이 새로운 스레드를 사용하면 스레드 풀이 포화될 수 있음
결과다른 요청(로그인, 데이터 조회 등)이 대기 상태로 밀림 → 서버 응답 지연 발생

✅ 해결 방안

해결 전략설명
비동기 큐(Async Queue)DB 생성 요청을 큐에 저장하고, 백그라운드에서 순차적으로 처리
Thread Pool 제한 설정Spring의 @Async 또는 ExecutorService에서 스레드 수 제한
비동기 이벤트 기반 설계ApplicationEventPublisher 등을 통해 논리적 비동기 처리
백엔드 분리 아키텍처“DB 생성 전용 서버”를 분리하여 메인 서버의 부하를 방지

🧱 4️⃣ 서버 분리 전략

구분설명장점단점
단일 서버 구조모든 기능이 하나의 서버에서 동작관리 용이, 배포 간단부하 집중, 장애 확산 위험
서버 분리 구조 (Microservice)DB 생성, 인증, API 서버를 각각 분리안정성 향상, 병목 최소화배포 및 유지보수 복잡, 네트워크 오버헤드 발생

⚖️ 선택 기준: “트래픽 규모 + 유지보수 인력 + 서비스 안정성”


0개의 댓글