-
Notifications
You must be signed in to change notification settings - Fork 8
백엔드‐기술 스택 선택 및 이유
2024.07.25 변경 사항
- 개발용 데이터 관리를 위한
h2
항목이 추가되었습니다. - 배포 인프라 구축을 위한
AWS
항목이 추가되었습니다. - 프론트엔드와 백엔드 상호 소통을 위한
Docker
항목이 추가되었습니다.
선택지: 8, 11, 17
, 21
- record, 텍스트 블록 등의 기술이 지원되지 않는 17 미만의 버전을 사용할 이유가 없음
- 21 버전에서 등장한 virtual thread 등의 새로운 기술을 사용할 이유가 없음
- SpringBoot 3.0 프레임워크가 Java 17 이상의 버전부터 호환 가능함
- ⭐️ 레벨 1, 레벨 2의 과정을 거치며 전원이 기존 러닝커브와 작업 환경을 갖추고 있음
→ 17 버전을 사용하기로 결정
선택지: gradle
, maven, …
-
maven 보다 빠른 속도
-
DSL 사용으로 인한 가독성 향상
-
⭐️ 레벨 1, 레벨 2의 과정을 거치며 전원이 기존 러닝커브와 작업 환경을 갖추고 있음
참고 자료 - Gradle 공식 사이트 (gradle vs maven)
참고 자료 - Gradle 공식 사이트 (gradle과 maven의 성능 비교)
선택지: 3.2.4, 3.3.0
-
⭐️ SpringBoot 프레임워크의 지원 기간 라이프 사이클이 짧음(12개월~3년)
- 지원이 종료된 프레임워크의 경우 아래와 같은 추가 비용이 발생
- 보안 취약성
- 호환성 문제
- 업데이트(마이그레이션)
→ 추후 서비스 가능성을 위해서라도 최신 버전을 선택하기로 결정
참고 자료 - Spring 공식 사이트 (스프링부트 지원 기간)
- 지원이 종료된 프레임워크의 경우 아래와 같은 추가 비용이 발생
선택지: h2
, MySQL, PostgreSQL, MongoDB…
-
개발용 기본 데이터베이스로
h2
를 사용함- ⭐️ 빠르고 가벼운 In-Memory DB
- 설치와 활용이 간편하다
- 단위 테스트 및 초기 프로젝트 설정에 용이하다
- 하지만 낮은 안정성 때문에 실제 운영 서버의 DB 역할을 수행하기에는 부적합하다고 판단됨으로 이후 변경할 예정
참고 자료 - H2 공식 사이트(homepage)
-
이후 서비스용 DB 스택 별도 선택 예정
-
⭐️ 작업 능률을 올릴 수 있음
- 게터, 생성자 등 작성 불필요
- 반복작업 최소화
-
백엔드 팀원들 중 기존 사용 경험이 있는 2명(조이썬, 뽀로로)이 위와 같은 장점을 피력, 남은 2명(무빈, 애쉬)도 새로운 스택을 사용해보고 싶다는 기조로 동의
참고 자료 - lombok 공식 사이트(feature)
- ⭐️ 작업 능률을 올릴 수 있음
- 쿼리 작성 시간 절약
- JDBC 연결 등을 관리하는 데에 드는 비용 절약
- 편리한 transaction 처리 가능
→ 비즈니스 로직에 집중 가능
선택지: SpringDocs
, RestDocs, Notion…
- ⭐️ swagger 문서 내에서 테스트 가능
- 프론트엔드 단에서 api 테스트 가능
- 소통 과정 간소화
- 프론트엔드 단에서 api 테스트 가능
- ⭐️ Controller 단위 테스트를 작성하지 않아도 됨
- 불필요한 테스트 작성 시간 생략
- 테스트 문서 작성 시간 최소화
- Notion과 같은 경우 개발자 수동 업데이트 필요
- ⭐️ RestDocs의 경우 백엔드 전원 관련 경험이 없어 swagger에 비해 투자 시간이 늘어남
- ⭐️ 편리한 가독성
- 전원 기존 사용 경험이 존재하여 추가 투자 시간 없이 도입 가능
- ⭐️ 실제 요청을 기반으로 한 사용자 스토리 검증
- 전원 기존 사용 경험이 존재하여 추가 투자 시간 없이 도입 가능
-
⭐️ 정적 코드 분석을 통한 최소한의 코드 퀄리티 보장
- 다인 프로젝트의 코드 품질 향상 & 균일화
- 컨벤션에 맞지 않는 코드 수정 제안 기능 지원
- 변경 사항 commit 전 전체 코드 자동 검사 기능 지원
-
팀원(조이썬)의 기존 사용 경험이 긍정적이고, 경험이 없는 기타 팀원들도 새로운 스택을 사용해보고 싶다는 기조로 동의
참고 자료 - sonarlint 공식 사이트 (homepage)
선택지: EC2
, S3
, CloudFront, ElastiCache, ES/OpenSearch, Lambda, SNS, SQS, SES, ACM, CloudWatch, CodeBuild
, CodeDeploy
, CodePipeline
, RDS
-
EC2: 배포 서버로 사용
-
S3: 리소스 및 빌드 파일 업로드용으로 사용
-
CodeBuild, CodeDeploy, CodePipeline: 백엔드 지속적 배포(CD) 자동화를 위해 사용
- ⭐️ Github Action 등의 기타 플랫폼을 경유하지 않고 AWS의 기능만으로 코드 push 시 자동 빌드와 배포를 가능하게 함
- self-hosted runner의 경우 pulling을 통해 깃허브 코드 변화를 감지하기 때문에 추가 서버 리소스가 발생함
- CodePipeline: 블루/그린 배포와 같은 무중단 배포 기능을 AWS의 기능만으로 설정할 수 있음
참고 자료 - AWS 공식 문서(ECS & Code Deploy Blue/Green)
- ⭐️ Github Action 등의 기타 플랫폼을 경유하지 않고 AWS의 기능만으로 코드 push 시 자동 빌드와 배포를 가능하게 함
- ⭐️ 백엔드, 프론트엔드의 서로 다른 개발 환경을 하나로 통합하여 관리하기 위함
- 일종의 개발 서버 역할을 기대
- 전원 기존 사용 경험이 존재하여 추가 투자 시간 없이 도입 가능