구체적으로 사용할 기술을 선택 해 본다. 사용 기술 및 프레임워크, 라이브러리 등을 선택한다.
나름대로의 선택 이유도 함께 기술하기로 한다.
Svelte는 계속 관심이 있던 프론트엔드 기술이다. React를 찍먹정도는 해 봤는데 누가 만들어 놓은 컴포넌트를 가져다 쓰는건 할 수 있겠는데, 내가 직접 체계적으로 구조를 만들어서 구현하기에는 너무 전문영역인 것 같아서 완전 배제를 했다.
다른 프론트엔드 기술도 비슷한 상황이긴 했는데, 이 Svelte자체의 문법이나 추구하는 바(가상DOM 같은 것은 사용하지 않고, 결과물은 순수 자바스크립트이다)가 마음에 들어서 선택 했다.
자바와 스프링 버전은 특별히 코멘트 할 부분은 없다고 생각한다. 특별히 해당 버전에서 사용하는 문법이 필요하거나 하지는 않을 것 같고, 자바는 17버전 이상, SpringBoot도 3버전 이상이면 어떤 버전을 써도 문제 없다.
데이터베이스 접근에 관해서는 JPA를 사용하기로 한다. 빠른 구현을 위해서 SpringDataJPA를 사용하려고 한다. 아마 Querydsl까지 사용할 일이 있는 경우 (JPA에서 조회를 구현하기 까다롭거나, 동적쿼리 등을 구현 해야하는 경우를 예상함)도 예상을 했다. 단순하게 구현한다고 생각하면 네이티브 쿼리로 구현하면 되는데, 개인적으로는 네이티브 쿼리 자체가 오히려 명확하고 쉬운 구현은 가능하지만, 유지보수성이 떨어지는 단점과, 쿼리에 대한 에러를 런타임에서 확인 해야 하는 단점 등이 있다고 생각해서 Querydsl의 사용을 상정했다.
유명하고 사용 사례가 많은 DB를 선택 했다. Redis의 경우 올해 초에 유료화 관련으로 말이 많았는데 나의 토이프로젝트 구현에는 특별히 문제 될 것은 없을 것으로 예상된다. 아니면 Redis에서 다시 오픈소스의 포크 버전을 선택하는 선택지도 고려 할 만하다.(결론적으로 기술의 근간은 Redis인 것은 변함이 없다)
이 DB도 솔직히 대규모트래픽을 전혀 예상하고 있지 않기 때문에 사실 Postgresql을 사용하여 순전히 관계형 DB만으로도 모든 것을 구현 할 수 있다. 다만 역시 이 토이프로젝트 사전 기획에서 인지한대로, 학습의 목적을 위해 가상의 대규모 트래픽을 가정하고 Redis와 MongoDB의 사용을 해 보려고 한다.
쿠버네티스를 사용해 보려고 한다. 다만 고민인 것은 개발 단계에서 부터 쿠버네티스 Pod와 Service 등을 정의하고 테스트 하는 것 자체가 시간을 많이 잡아먹는 요인이 될 것 같아서 처음에는 쿠버네티스를 상정하지 않고 개발 및 테스트를 거칠 예정이다.
직접적으로 빌드가 가능한 시점에서 쿠버네티스로의 전환을 예상하고 있다.