Skip to content
mjmj edited this page Aug 28, 2024 · 3 revisions

BE 프로그래밍 요구사항

  • Spring Boot 3.2.2 를 사용한다. (start.spring.io 참고)
  • Java 17을 사용한다.
  • Gradle을 사용한다.
  • AssertJ 를 사용한다.
  • 학습을 위해 Spring Security는 사용하지 않는다. 인증을 위해 필요한 부분은 직접 구현한다.
  • 데이터베이스는 MySQL 8.0을 사용한다.
  • 학습을 위해 RDS는 사용하지 않고 직접 EC2에 MySQL을 설치하고 관리한다.
  • 기타 필요한 라이브러리는 사용해도 무방하지만 최소화 할 것
  • RDBMS 프로그래밍

아래 리스트 중 하나를 선택한다.

  • Spring JDBC template

  • Spring Data JDBC

  • JPA (Spring Data JPA)

  • 동적 쿼리 작성을 위해 QueryDSL도 사용할 수 있음

  • NoSQL

  • DB는 RDBMS인 MySQL을 사용하는 것을 기본으로 하지만 필요한 경우 추가적으로 NoSQL을 활용할 수 있다. 배포

  • AWS EC2 인스턴스 (t3.small 또는 t2.small)을 이용해서 배포를 진행한다.

  • 자주 배포를 수행하도록 배포 환경을 구성한다.

  • 필요에 따라 도커는 사용할 수 있지만 K8S, EKS, ECS 는 사용하지 않는다.

  • 데이터베이스는 도커가 아닌 EC2에 직접 설치해서 운영한다.

  • 클라우드

  • 기본적으로 EC2 인스턴스 2EA(웹 및 DB용 각 1), S3를 사용한다.

  • CodeDeploy도 사용가능하다.

  • 그 외 AWS 서비스를 사용하고 싶을 때는 사용 전 개별적으로 문의할 것 설계

  • ERD를 작성해서 README에 링크를 추가한다.

  • 그 외 설계와 관련된 문서의 링크 등을 저장소에 추가한다.

  • 테스트와 리팩토링

  • 테스트 코드를 작성을 권장한다.

  • 리팩토링을 통해서 코드 품질을 개선한다.

Q&A

  • JPA를 도입한 이유

    • SQL 중심적인 개발보다는 객체 중심의 개발을 위해서
    • jdbc template 같은 경우에는 SQL 중심적임
  • RDS를 안쓴 이유

    • 처음 요구사항에 RDS를 사용하지 말도록 명시
    • 추후 허용했지만 이미 구축한 상태이기 때문에 사용했다.
  • ALB를 도입한 이유

    • AWS Certificate Manager(ACM)과 통합이 쉽기 때문에
  • route53

    • 도메인을 클라우드 프론트에 매핑함
  • cloudfront

    • 성능 향상
      • 분산 엣지 로케이션을 통해 가까운 곳에서 컨텐츠 제공
    • https를 통한 안전한 데이터 전송 가능
  • locust

    • 백엔드 팀원 둘다 파이썬 프로그래밍에 익숙하기 때문에 도입했습니다.
    • JMeter는 상대적으로 무거울 뿐아니라 설계상 gui를 쓸 수 없었다.
  • 채점 로직

    • 정답점을 기준으로 가장 짧은 유저 점 데이터를 찾아서 거리를 구함
  • 대기열에 queue가 아니라 sorted-set을 사용한 이유

git flow

  • 다른사람의 개발 결과에 영향을 받지 않는 독립적인 개발환경을 만들어줍니다