- 단순히 기능을 빠르게 구현하는것보다 중요한 것은
사용 기술을 정확하게 이해
하고 사용하는 것이라고 생각합니다. - 새로운 기술을 적용할 때
기술서적과 공식문서를 통해 해당 기술에 대한 깊이 있는 학습
을 진행하여 이를 최대한 코드에 녹이기 위해 노력했습니다.
- 올바른 기능 구현과
예상한대로 코드가 동작하는지 검증
하기 위해새로운 기능을 구현할 때 마다 통합테스트 및 단위테스트를 구현
하도록 하였습니다. - 새로운 개발자가 합류했을 경우 기능을 추가하거나 수정할 때 테스트 코드를 통해 문제가 없음을 보장하고 자신감을 줌으로써 빠르게 프로젝트에 적응할 수 있습니다.
- 또한 테스트 코드는 작성된 코드에 대한
문서
자체의 역할을 하기도 합니다.
- 새로운 개발자가 중간에 프로젝트에 참여하더라도 Wiki와 같은 문서를 통해 프로젝트에 대해 쉽게 이해하고 적응할 수 있도록 하였습니다.
- PR, Issues, Commit Template을 통해 협업하는 개발자간의
커뮤니케이션 미스에 대한 비용을 최소화
하기 위해 노력하였습니다.
- 발생한 이슈가 사소한것일지라도 추후에 다시 문제가 생기지 않도록 예방해야 합니다.
- 문제의 원인을 파악하기 위한 학습을 진행하였고 이를 기술블로그에 정리하였습니다.
- 프로젝트를 시작하게된 동기와 최종목표는 대용량 트래픽에도 견고하고 안정적인 서비스를 개발하는 것입니다.
- nGrinder를 통한 부하테스트를 진행하면서 이를 지키기 위해 노력했습니다.
- nGrinder과 Pinpoint를 통한 부하 테스트 및 힙덤프 분석
- 부하테스트를 통한 HikariCP의 적절한 Connection Pool Size 도출
- Redis Pipeline를 통한 네트워크 병목 해결
- MySQL Replication을 통한 부하 분산
- @Async를 통한 비동기 처리
- Junit5와 Mockito Framwork를 통한 단위테스트, 통합테스트 필수 작성 및 지속적인 리팩토링
- 이슈 트래킹 중 스프링 내부 동작원리에 대한 깊이있는 학습
- 메모리 누수를 방지하기 위한 자바 힙 메모리 설정
- 요청 본문에서 JSON 메시지를 읽어들이거나 작성할 때 쓰이는 Spring HTTP 메시지 컨버터
- REST API란?
- 객체 지향 설계 5원칙
- Java 11
- Spring Boot
- JUnit5
- Mockito
- MySQL
- MyBatis
- Jenkins
- nGrinder
- Pinpoint
- AWS