백엔드 개발자를 꿈꾸고 있는 학생으로써, 나의 역량을 키우고 어필하기 위해 프로젝트를 준비하고 있었다.
이 프로젝트를 시작하기 전에는 'pullgo' 프로젝트를 진행했다.
기술 스택은 Spring Boot와 JPA, MySQL 정도로, 기본에 충실한 서버 프로젝트를 협업을 통해 진행해볼 수 있었다.
크고 작은 기술적 문제를 맞닥뜨리고, 그때그때 예외나 로그를 통해 원인을 분석하거나, 팀원과의 논의로 의사결정을 만들어냈다.
그 과정 속에서 공식 문서의 중요성에 대해 깨닫거나 효율적인 문제 해결 전략을 고민해보는 등 다양한 면에서 배울 수 있었다고 생각한다.
그러나 문득 지금 돌이켜보면 크게 어려운 문제는 없었던 것 같다.
대부분 예외 메시지를 보고 공식 문서를 참조하면 해결할 수 있었고, 그렇지 않은 경우도 로그 메시지만 보면 원인을 파악할 수 있었다.
나는 스스로를 더 성장시키고 싶었고, 실무에서는 어떤 문제가 발생하고 어떻게 해결하는지 궁금했다.
여러 기업들의 테크 블로그들을 참고하면서 그 사례들을 조금 엿볼 수 있었다.
이를 통해 느끼게 된 것은, 힌트가 많이 주어지지 않는 문제들도 많다는 것이다.
데드락이 발생하거나, 병목이 발생하거나 하는 문제들은 예외를 던져주지 않는다. 특히 동시성과 관련된 부분은 확인해야 할 로그가 너무 많아 디버깅이 어렵다.
그래서 그런 걸 해보기로 했다. 내게 너무 어려울 수도 있지만, 어렵다면 이번 기회에 정복하고 싶었다.
수강신청은 왜 항상 렉이 걸릴까?
나는 졸업하기 전까지 수강신청이 빠릿빠릿하게 작동한 것을 본 적이 없다. (최근에는 나아졌다고 한다)
많은 트래픽이 한 순간에 발생하니까 그럴 수도 있겠다만, 다양한 IT서비스에서는 훨씬 더 많은 트래픽을 장애 없이 버텨내고 있는데 말이다.
그래서 직접 구현해보고 싶어졌다. 내가 모르는 부분이 무엇인지 알아내고, 어떻게 하면 개선할 수 있는지 연구해보고 싶었다.
프로젝트 이름은 'my-klas'로 지었다.
'KLAS'는 내가 졸업한 학교의 행정 시스템이었다.
강의 게시판이나 과제 업로드, 성적 열람 등 다양한 기능을 학생과 교수(혹은 조교)에게 제공하는 웹 시스템이다.
공부를 위한 프로젝트이므로 'my-' 접두사를 붙였다. 이름은 크게 중요하지 않으니까.
프로젝트의 목적은 "많은 트래픽을 버텨낼 수 있는 수강신청 애플리케이션 개발"을 목표로 한다.
성능과 관련없는 기능은 최소화한다. 일단은 생산성에 집중하되, 실무 환경을 고려해서 확장성 또한 중요시한다.
기술 스택도 저번 프로젝트와 비슷하게 구성한다. 비록 연구를 위한 프로젝트이지만, 성능뿐 아니라 다른 것도 고려해야 하는 상황에서 성능을 최대한 개선해보는 것을 목표로 한다.