728x90
반응형
1. 프로젝트 개요
- 프로젝트명: 대규모 트래픽을 고려한 프로젝트 Board Server
- 기간: 2024.11.17 ~ 2024.11.27
- 목표
- 대규모 트래픽을 고려해 부하를 줄이는 방향으로 개발한다.
- MyBatis 활용 능력을 향상 시킨다.
- 팀원: 본인
- 기술 스택
- IntelliJ
- Java 17
- Spring Boot 3
- MyBatos
- MySql
- Redis
- AWS
- Jenkins
- Locust
2. 프로젝트 진행 과정
- 주요 기능 개발:
- 회원
- 회원가입
- 비밀번호 암호화
- 로그인
- 로그아웃
- 게시판
- CRUD
- 검색
- 댓글, 대댓글
- CRUD
- 태그 CRUD
- 검색
- 알림 기능
- AWS SNS/ publish, subscribe
- 에러시 슬랙 알림 기능
- 회원
- 기술적 도전:
- 주로 사용하던 JPA 대신 MyBatis 를 사용해 프로젝트를 진행했다.
- CICD 를 처음 해보았다.
- Jenkins, Putty, AWS, Locust 를 처음 사용해보았다.
- 알림 서비스를 연동해보았다.
- 대규모 트래픽에 대응한 성능 최적화를 해보았다
- TTL을 60초에서 600초로 수정하였다.
- 검색 API 서비스 로직에 @Async 어노테이션을 사용해 비동기 처리 방식으로 수정하였다.
- 레디스 검색키를 세분화 하였다.
3. 성공적인 점
- 잘 된 부분.
- 설치, 설정 과정 때문에 새로운 툴을 사용하는 것을 꺼려했었는데 이번 기회를 통해 새로운 툴을 많이 사용해보았다. 이제 다른 툴도 다뤄보고 싶다.
- 이전 두 번의 프로젝트에서 성능 테스트를 진행했을 때 K6 를 사용했었는데 이번엔 Locust 를 사용해보았다. 모니터링이 가능하고 결과를 파일로 다운받을 수 있다는 장점이 있다.
- CICD 과정을 전보다 깊이 있게 이해하였고, CI 과정을 진행해보았다.
- 처음으로 알림 기능을 구현해보았다. 서버가 다운되었을 때 알림이 가게 하면 좋을 거 같다.
- 설치, 설정 과정 때문에 새로운 툴을 사용하는 것을 꺼려했었는데 이번 기회를 통해 새로운 툴을 많이 사용해보았다. 이제 다른 툴도 다뤄보고 싶다.
4. 개선할 점
- 어려운 부분
- 처음 사용해 보는 것이 많은 만큼 아직은 미숙하다. 지속적인 학습을 통해 익숙하게 만들어야겠다.
- CICD, 배포에 관한 지식이 깊지 않다. 이해도가 프로젝트 전보다 향상되긴 했지만 능숙하진 못하다. 시간을 들여 공부해야겠다.
5. 배운 점
- 기술적 배움:
- 전 프로젝트에서는 검색값cache null 처리를 할 때
이런 방식으로 진행하였다. 이번 프로젝트에선// null 허용 @Bean public KeyGenerator customKeyGenerator() { return (target, method, params) -> { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getSimpleName()); sb.append(".").append(method.getName()); if (params != null) { for (Object param : params) { sb.append(".").append(param != null ? param.toString() : "null"); } } else { sb.append(".null"); // params가 null인 경우를 처리 } return sb.toString(); }; }
unless = "#result == null") 을 사용해보았다. 어떤 방식이 더 좋다고는 말 못하겠지만 새로운 기능을 알게되었다.@Cacheable(value = "getPosts", key = "'getPosts' + #request.getName() + #request.getCategoryId()", unless = "#result == null")
- 인덱스를 걸고, TTL 을 늘리고, 비동기 방식을 사용하고, cache key 를 세분화 하는 등 대규모 트래픽을 핸들링 하는 방법을 배웠다. Locust 를 통해 시각화된 것을 볼 수 있어 흥미로웠다.
- 전 프로젝트에서는 검색값cache null 처리를 할 때
- 프로젝트 관리와 협업:
- 혼자 하는 프로젝트라 블로그에 정리하며 진행할 수 있었고, 공부해가며 진행할 수 있어 좋았다. 하지만 내가 처음 사용해보는 툴을 먼저 사용해본 선구자와 함께 했다면 더 높은 이해도로 프로젝트를 마무리 할 수 있었을 거 같다.
6. 향후 계획
- 향후 개선 사항:
- 예외 처리를 서비스에서 하는 것이 좋을 거 같다. JPA는 default 메서드를 사용해 repository 에서 발생하는 메서드를 repo에서 처리하는 단일 책임의 원칙을 준수할 수 있는데, MyBatis mapper에서 default 메서드 사용이 가능한지 알아봐야겠다.
- 배포 전엔 properties 값을 ignore에 등록해 커밋했는데 배포하려니 properties 값이 필요해 깃허브에 properties 원본을 올렸다. 안전한 방법을 찾아봐야겠다.
- 개선된 프로세스:
- 지난 프로젝트서 사용해보지 못해 아쉬웠던 깃허브 이슈를 사용해보았다. 혼자 혹은 2명 정도서 프로젝트를 진행하거나, 요약본 올릴 때 좋을 거 같다. 프로젝트가 무거워지면 노션에 상세히 정리하는 편이 좋을 거 같다.
혼자 하니 실수해도 돼서 편하게 새로운 툴을 많이 사용해보았다.
728x90
'회고록' 카테고리의 다른 글
쿠폰 선착순 발급 이벤트 회고록 (3) | 2024.12.10 |
---|---|
파이널 프로젝트 회고록 (4) | 2024.10.24 |
미니 프로젝트 회고록 (3) | 2024.10.24 |