대용량 트래픽(초당 1000 TPS 이상)을 처리할 수 있는 고성능 게시판 애플리케이션 개발을 목표로 합니다. 주요 목표는 다음과 같습니다:
- 대용량 트래픽을 고려한 성능 최적화.
- 객체지향 원칙과 디자인 패턴을 적용한 가독성 높은 코드 작성.
- 실무 코드 리뷰 경험 및 공유.
- 모니터링 및 문제 해결 전략 공유.
- 젠킨스를 활용한 자동 배포로 개발 생산성 향상.
- 회원 가입/탈퇴: 안전한 회원 데이터 관리.
- 로그인/로그아웃: 비밀번호 암호화를 통한 보안 강화.
- 중복 체크: 아이디 및 닉네임 중복 검사.
- 카테고리 관리: 추가, 삭제, 수정 기능.
- 게시글 관리:
- 게시글 및 파일의 생성, 수정, 삭제, 조회.
- 게시글 검색 (작성자 ID, 제목, 내용 기반).
- 태그 기능 (태그 추가 및 조회).
- 댓글 관리:
- 대댓글 지원 및 CRUD 기능.
- 댓글 소프트 삭제.
- 공지사항 작성 및 관리.
- 백엔드: Java 17, Spring Boot 2.3, MyBatis, Redis
- 데이터베이스: MySQL
- 성능 테스트: Python 3.9, Locust
- CI/CD: Jenkins
- 캐싱: Redis를 활용한 검색 결과 캐싱.
- 비동기 처리:
@Async를 이용한 병렬 처리. - 계층형 설계: RESTful API 기반의 명확한 역할 분리.
Locust를 활용해 검색 및 게시글 작성 API에 대한 성능 테스트를 진행했습니다.
- 스트레스 테스트: 최대 500명의 사용자가 초당 50회 요청, 사용자를 분당 50명씩 증가.
- 내구성 테스트: 100명의 사용자가 초당 100회 요청을 10분간 지속.
- 피크 테스트: 100명의 사용자가 초당 50회 요청, 1분 내 1000명으로 급증.
| 테스트 유형 | 총 요청 수 | 평균 응답 시간 | 실패 요청 수 |
|---|---|---|---|
| 스트레스 테스트 | 100,354 | 5 ms | 0 (0.00%) |
| 내구성 테스트 | 191,376 | 2 ms | 0 (0.00%) |
| 피크 테스트 | 154,303 | 4 ms | 0 (0.00%) |
- Redis 캐싱을 통해 평균 응답 시간이 50% 감소했습니다.
- 비동기 처리로 병렬 요청 처리를 개선, 피크 로드에서도 안정적인 성능 유지.
- Redis 캐싱:
@Cacheable로 검색 결과 캐싱 구현. - 비동기 처리:
PostSearchService의getPosts메서드에@Async적용. - 동적 쿼리: MyBatis를 사용한 유연한 쿼리 생성.
- 보안 강화: SHA-256을 활용한 비밀번호 암호화 및 세션 유효성 검사.
- Locust 설치:
pip install locust - 테스트 스크립트 실행:
locust -f BoardTest.pylocust -f AddPost.py
- Locust UI 접속: http://localhost:8089
- MyBatis SQL 로그를 사용해 쿼리 성능 분석.
- CPU, RAM, DISK 지표를 실시간으로 모니터링.
- 검색 API 및 로그인 로직의 병목 현상을 해결.
시퀀스 다이어그램
- 검색 API 성능 개선 (캐싱 및 비동기 처리 도입).
- 피크 트래픽 환경에서도 실패 없는 안정적인 서비스 제공.
