Skip to content

백엔드 기술 스택 및 사용 이유

apptie edited this page Oct 18, 2023 · 2 revisions
  • Java 17
    • 사용 이유
      • 성능
        • Parallel GC의 경우 Java 11 대비 6.54% 속도 향상
        • G1 GC의 경우 Java 11 대비 8.66% 속도 향상
      • 기능
        • 텍스트 블록
        • records
        • sealed classses
        • compact Number Format Support
      • 지원 기간
        • 2029.09로 자바 11보다 지원 기간이 김
      • Spring Boot 3.0 버전 이상에서 17버전 사용
  • Spring Boot 3.0.x
    • 사용 이유
      • 스프링 부트 최신 버전
        • 2.7.x 버전을 그대로 사용하는 경우 추후 3.x.x 버전으로 마이그레이션 할 때 비용이 많이 발생할 것을 고려
        • 기존에는 2.7.x 버전을 사용했으나 스프링은 강력한 하위호환성을 보장하므로 러닝 커브가 덜할 것이라고 판단
  • Github Actions
    • 사용 이유
      • CI에 사용
      • 무거운 Jenkins보다는 가벼운 Github Actions이 더 효율적일 것이라고 판단
  • Jenkins
    • 사용 이유
      • CD에 사용
      • Github Actions에 비해 자료와 플러그인(플러그인 생태계)이 많음
      • Github Actions는 VM 기반으로 동작하므로 Jenkins에 비해 비교적 느림
      • 팀원 중 Jenkins에 더 익숙한 팀원이 존재
  • JPA
    • 사용 이유
      • 객체 관계 매핑 (ORM) 기능
        • 데이터베이스 테이블과 자바 객체 사이의 매핑을 간단하게 처리할 수 있음
        • 데이터베이스와 직접 상호작용하는 것이 아니라 객체를 사용하여 데이터를 조작할 수 있음
    • 간소화된 CRUD 작업
      • 유지 보수성 + 생산성
        • Spring Data JPA는 기본적인 CRUD(Create, Read, Update, Delete) 작업을 지원
        • 데이터베이스 조작에 대한 반복적인 보일러플레이트 코드를 줄일 수 있음
    • Auditing 기능
      • 생성일, 수정일 등의 정보를 자동으로 관리하는 Auditing 기능 제공
  • Querydsl 사용
    • 사용 이유
      • 복잡한 동적 쿼리가 필요한 경우가 많음
      • 다음과 같은 후보를 고려
        • 모든 동적 쿼리를 별도의 메서드로 분리
          • 동일한 리소스의 목록을 조회하기 위해 여러 메서드를 사용하는 것은 바람직하지 못하다고 판단
        • JdbcTemplate을 통한 동적 쿼리 생성
          • 문자열을 활용해야하므로 동적 쿼리를 만드는데 안정적이지 못하다고 판단
  • Jacoco
    • 사용 이유
      • 최소한의 테스트 커버리지에 대한 제한을 지정해 분석해 코드 품질을 관리하기 위해 사용
  • S3
    • 사용 이유
      • 이미지나 로그 같이 서버에 저장할 경우 메모리 문제가 발생할 수 있는 파일을 외부에 저장하기 위함
      • 백업 기능 활용 가능
      • Cloufront를 같이 사용해 효율적인 리소스 제공 가능
  • Mysql
    • 사용 이유
      • 백엔드 인원 모두가 DB 중 Mysql에 대한 이해도가 가장 높음
      • Mysql에서 공간 인덱스, Fulltext Search와 같은 기능 지원
  • flyway
    • 사용 이유
      • 다양한 서버에 데이터베이스 마이그레이션을 편리하게 수행하기 위해 사용

Clone this wiki locally