토이프로젝트 발자취(1_5.기술스택선정)

0
post-thumbnail

기술스택선정

구체적으로 사용할 기술을 선택 해 본다. 사용 기술 및 프레임워크, 라이브러리 등을 선택한다.
나름대로의 선택 이유도 함께 기술하기로 한다.

프론트엔드 기술

  • HTML, JavaScript, CSS
  • Sveltekit
  • Tailwind CSS
  • Daisy UI

선정이유

  • 1인 개발의 한계와 프론트엔드 개발의 기술력이 상대적으로 부족한 상황에서 생산성 향상을 위해 선택
  • 모던 웹 개발을 지향하면서도, SPA 구현과 함께 상대적으로 러닝 커브가 작은 Sveltekit 을 사용하기로 함(React, Vue에 비해 쉽고, 백엔드 개발자 입장에서 구현하기 쉬운 선택을 함)
  • UI나 디자인에서도, 이미 어느정도 구현되어있는 CSS, UI 프레임워크/라이브러리를 활용해서 생산성을 높이려 함

Svelte는 계속 관심이 있던 프론트엔드 기술이다. React를 찍먹정도는 해 봤는데 누가 만들어 놓은 컴포넌트를 가져다 쓰는건 할 수 있겠는데, 내가 직접 체계적으로 구조를 만들어서 구현하기에는 너무 전문영역인 것 같아서 완전 배제를 했다.
다른 프론트엔드 기술도 비슷한 상황이긴 했는데, 이 Svelte자체의 문법이나 추구하는 바(가상DOM 같은 것은 사용하지 않고, 결과물은 순수 자바스크립트이다)가 마음에 들어서 선택 했다.

백엔드 기술

  • JAVA 21
  • SpringBoot 3.2.3
  • JPA (SpringDataJPA)
  • Querydsl
  • SpringSecurity

선정이유

  • 1인 개발자의 주요 언어를 선택 하였으며, 생산성 향상을 위해 SpringBoot 및 관련된 추상화로 구현된 기술 사용
  • JAVA, SpringBoot의 버전은 현재 문서 작성 기준, 안정화 버전으로 제공 중.
  • DB접근 및 영속성 관련 기술은 JPA를 채택하였고, SpringDataJPA를 사용하면 생산성 향상을 가질 수 있음, 또한 일부 부족한 기능은 Querydls을 사용하여 문제를 해결 예정

자바와 스프링 버전은 특별히 코멘트 할 부분은 없다고 생각한다. 특별히 해당 버전에서 사용하는 문법이 필요하거나 하지는 않을 것 같고, 자바는 17버전 이상, SpringBoot도 3버전 이상이면 어떤 버전을 써도 문제 없다.
데이터베이스 접근에 관해서는 JPA를 사용하기로 한다. 빠른 구현을 위해서 SpringDataJPA를 사용하려고 한다. 아마 Querydsl까지 사용할 일이 있는 경우 (JPA에서 조회를 구현하기 까다롭거나, 동적쿼리 등을 구현 해야하는 경우를 예상함)도 예상을 했다. 단순하게 구현한다고 생각하면 네이티브 쿼리로 구현하면 되는데, 개인적으로는 네이티브 쿼리 자체가 오히려 명확하고 쉬운 구현은 가능하지만, 유지보수성이 떨어지는 단점과, 쿼리에 대한 에러를 런타임에서 확인 해야 하는 단점 등이 있다고 생각해서 Querydsl의 사용을 상정했다.

데이터베이스 기술

  • Postgresql
  • Redis
  • MongoDB

선정이유

  • 선정한 3개의 DB 모두 오픈소스 기반의 선택을 가장 중점으로 두었음
  • Postgresql은 관계형 DB에서 개발자 본인이 실무에서 가장 많이 접한 DB로 별다른 문제없이 DB구성 및 사용이 가능할 것으로 예상하여 선택 함
  • K8s 환경에서 서비스를 운영 할 예정이며, 해당 환경에서 인증/인가와 관련된 보안처리는 Redis를 사용하여 고가용성과 보안을 동시에 충족시킬 수 있는 선택으로 채택함
  • 일부 대용량처리나 이벤트처리 등은 성능적인 측면에서 비관계형DB를 사용하는 것이 유리하고, 그것을 구현하기 위해 가장 보편적으로 사용되는 MongoDB를 채택함 (기술 사용 사례가 많음)

유명하고 사용 사례가 많은 DB를 선택 했다. Redis의 경우 올해 초에 유료화 관련으로 말이 많았는데 나의 토이프로젝트 구현에는 특별히 문제 될 것은 없을 것으로 예상된다. 아니면 Redis에서 다시 오픈소스의 포크 버전을 선택하는 선택지도 고려 할 만하다.(결론적으로 기술의 근간은 Redis인 것은 변함이 없다)
이 DB도 솔직히 대규모트래픽을 전혀 예상하고 있지 않기 때문에 사실 Postgresql을 사용하여 순전히 관계형 DB만으로도 모든 것을 구현 할 수 있다. 다만 역시 이 토이프로젝트 사전 기획에서 인지한대로, 학습의 목적을 위해 가상의 대규모 트래픽을 가정하고 Redis와 MongoDB의 사용을 해 보려고 한다.

인프라 기술

  • Docker
  • Kubernetes

선정이유

  • MSA 구조를 구현하는데 현시점에서 가장 보편적인 방식의 기술을 채택하였음
  • 배포와 운영에서 확장성 및 안정성이 보장되는 사실상 업계 표준 기술 스택임

쿠버네티스를 사용해 보려고 한다. 다만 고민인 것은 개발 단계에서 부터 쿠버네티스 Pod와 Service 등을 정의하고 테스트 하는 것 자체가 시간을 많이 잡아먹는 요인이 될 것 같아서 처음에는 쿠버네티스를 상정하지 않고 개발 및 테스트를 거칠 예정이다.
직접적으로 빌드가 가능한 시점에서 쿠버네티스로의 전환을 예상하고 있다.

profile
오늘도 머릿속에 인덱스를 새겨넣는 개발자

0개의 댓글

관련 채용 정보