기술 스택 선택 조건
- 조직에게 익숙하거나, 러닝커브가 감당할 수 있는 수준인가?
- 다양한 라이브러리를 사용할 수 있는가?
- 마이너한 기술 스택을 사용하게 된다면 커뮤니티의 사이즈가 작고, 직접 만들어야 하는 도구의 범위가 넓어질 수 있다.
- 예약 시스템 특징을 위한 기술 스택을 선택해야 한다.
1. Programming Languages
Java 11
- 조직에게 가장 익숙하다.
- Java 8, Java 11, Java 17 LTS 버전 중 하나를 선택하려고 하였다.
- LTS(Long Term Support)
- 장기간에 걸쳐 지원
- 보안 업데이트와 버그 수정이 지원된다. (안정성 확보)
- Java 8 부터 새롭게 만들어진 기능들을 모두 사용할 수 있다.
- lambda, stream API, 새로운 날짜와 시간
- 현업에서 Java 8과 Java 11 버전이 가장 많이 사용되고 있다.
- Java 17 (2021년 9월) 출시
- Java 17에서 새롭게 추가된 기능
record
,스위치 표현식
등의 기능들을 사용하지 않기 때문에 Java 17까지의 버전이 필요 없다고 결정
2. Backend
Spring Framework
- 조직에게 가장 익숙하다.
- 웹 어플리케이션을 만들기 위해 Spring에서 제공하는 도구가 다양하다.
- Spring Security, Spring Jdbc
- 외에도 Spring 생태계에서 필요에 따라 쓸 수 있는 다양한 라이브러리가 있다.
Spring Data JPA
- 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
- 재사용 및 유지보수의 편리성을 증가한다.
- 특정 DB에 한정 되지 않기 때문에 나중에 어떤 DB로든 쉽게 migration 가능
3. Database
배경과 요구사항
- 모든 스키마가 고정되어 있다.
- 예약 시스템이므로 빈번한 update 발생
RDB vs NoSQL
⇒ RDB 선택
- ‘NoSQL은 schemaless여서 유연한 형태로 데이터를 저장할 수 있다’ 하지만 우리가 개발하려는 프로젝트는 스키마가 유동적이지 않기 때문에 RDB를 선택하는 것이 더 좋다고 판단.
- RDB는 NoSQL보다 scale out에 어려움이 있다.
- 프로젝트 과정에서 scale out 상황을 고려하지 않을 것이다.
- RDB에서도 master-slave 모델을 사용하면 문제를 해결할 수 있다.
- 이를 통해 어느 정도 수준의 서비스 트래픽을 감당할 수 있다.
MySQL
- 조직이 MySQL에 익숙한 상태
- 비용이 발생하지 않는다.
- Update 기능이 다른 RDMS(Postgresql) 보다 우수하다.
- nested loop join 기능이 다른 RDMS 보다 우수하다.
Nested Loop Join 2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 Row를 결합하여 원하는 결과를 조합하는 조인 방식
4. 협업 Tool
Gihub
- 조직에게 가장 익숙하다.
- Gihub에 내장되어 있는 이유 트래커(GitHub Issues), 특정 브랜치를 향한 pull Request 등의 기능은 협업을 하기에 매우 유용하다.
Jira
- 애자일 Scrum 방식의 협업을 진행하기로 계획
- 작은 주기(Sprint)로 개발 및 검토
- 에픽, user story, task 단위로 작업을 나눈다.
- Scrum 방식으로 협업을 진행하는데 있어서 Jira의 기능이 가장 최적이라고 생각되었다.
Notion
- 프로젝트 진행시 다양한 문서작업 필요
- 회의록, 기능 명세서, API 명세서, 회고록 등
- 문서 작업을 빠르고 편리하게 진행할 수 있다.