Skip to content

songhaechan/board

 
 

Repository files navigation

인프라 구조

pja.png

기술 블로깅

문제해결

가용성을 높이기 위한 서버 확장

  • 부하를 분산 시키기 위해 2대의 WAS(Tomcat) 서버를 배포
    • 2대의 WAS는 동일한 컨텐츠를 응답하며 서버 처리량이 다르지 않다고 판단해 Nginx의 기본 로드 밸런싱 알고리즘인 Round Robin으로 선택

서버 확장으로 인한 세션 불일치 해결을 위해 Redis 세션 스토리지 사용

  • 세션을 고정할 방법을 고민
    • Nginx의 ip_hash 로드밸런싱 알고리즘
    • Tomcat 자체 세션 클러스터링
    • Redis 세션 클러스터링
  • 각 방식의 장단점을 고려해 Redis 세션 클러스터링을 선택

서버 확장 시 발생하는 메모리 부족 해결을 위한 메모리 스와핑

  • 1GB 메모리 서버에 Redis 1대, Tomcat 2대, Nginx 1대 구축으로 메모리 부족 현상 발생
  • 한정된 자원 속에서 안정적인 서비스를 위해 메모리 스와핑 설정
  • Ubuntu 공식 문서를 통해 권장 크기인 2GB로 설정

이미지,게시글 등록 API분리로 API Latency 개선

  • 게시글 등록과 게시글의 이미지 등록이 하나의 API를 통해 이루어지던 상황
스크린샷 2026-03-04 오후 2 20 45
  • 통합된 API는 게시하려는 이미지가 증가할수록 API Latency가 증가하는 문제 발생
스크린샷 2026-03-04 오후 2 21 08
  • 이미지 등록과 게시글 등록 API 분리를 결정
스크린샷 2026-03-04 오후 2 20 27
  • API를 분리 후 Latency 개선
    • API 분리 이전 [933ms] -> API 분리 이후 [110ms] (이미지 7개 등록 기준)

API 분리로 인한 소유자 없는 이미지 객체가 누적되는 문제 해결

  • 게시글 작성 중 이미지를 S3에 먼저 등록하기 때문에 게시글 등록을 완료하지 않으면 S3에 소유자가 없는 이미지가 누적되는 문제 발생
스크린샷 2026-03-04 오후 2 11 32
  • S3 폴더 도입과 생명주기 설정을 통해 문제 해결
    • 임시 폴더와 원본 폴더를 생성하고 임시 폴더에 남아있는 소유자 없는 이미지는 생성일 기준 24시간 뒤 자동으로 삭제되도록 S3 생명주기 설정으로 문제 해결

실행 화면

  • Main

main.png

  • Board List

boardList.png

  • Board Create

boardDetail.png

  • Board Detail

boardComment.png

About

내 생에 첫 게시판

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 44.0%
  • JavaScript 31.9%
  • HTML 14.7%
  • CSS 8.5%
  • Other 0.9%