Replies: 13 comments
-
Spring 3.1.1Java 17스프링 부트 Spring AOT
요약하자면 기존 JVM 방식에서는 프로그램이 올라갈 때 바이트 코드를 컴파일하지만, AOT는 바이트코드를 분석하고 최적화해서 실행하기에 빠르고 메모리 효율적인 코드를 생성합니다. 따라서 성능 향상을 경험할 수 있다고 판단하였습니다. 지원 기간우선 프로젝트를 진행할 시점에 프로젝트 생성위의 사진에서는 확인할 수 없지만, 프로젝트를 시작할 시점에서는 Spring Initializr 사이트에서 가장 최근의 참고 |
Beta Was this translation helpful? Give feedback.
-
Swagger
문서화에 사용되는 어노테이션이 프로덕션 코드에 존재하기에 가독성을 떨어뜨린다는 단점도 존재합니다. API 스펙이 변했을 때 어노테이션 메타 데이터를 적절하게 바꿔주지 않으면 잘못된 정보를 전달할 수 있습니다. 저희 팀에서 Spring REST Docs와 비교하여 Swagger를 선택한 이유는 다음과 같습니다. 1. 개발 속도스프린트마다 빠르게 개발을 진행해야만 하는 상황이었기 때문에 복잡한 설정과 학습 난도가 있는 Spring REST Docs보다는 간편하게 API 문서화가 가능한 Swagger를 사용하기로 하였습니다. 2. 사용자 친화적인 UISwagger는 Spring REST Docs와 달리 사용자 친화적인 UI를 제공하기에 문서화에 있어 큰 장점으로 다가왔습니다. 3. 단점 보완컨트롤러에 붙어 있는 어노테이션은 컨트롤러 인터페이스를 생성해서 해당 위치로 옮길 수 있습니다. 이를 통해 실제 로직이 담겨있는 코드의 가독성을 높일 수 있도록 개선할 수 있습니다. 현재는 위와 같은 장점으로 인해 Swagger를 선택하였지만, 추후 Swagger의 단점을 직접 경험하게 되었을 때 Spring REST Docs로 기술을 바꿔보는 과정도 직접 경험해보고자 합니다. |
Beta Was this translation helpful? Give feedback.
-
Docker도커는 컨테이너 기술을 활용한 가상화 플랫폼입니다. 도커를 사용함으로 얻을 수 있는 장점은 아래와 같습니다. 1. 애플리케이션의 개발과 배포가 편리해진다.동일하게 작성된 애플리케이션이라도 실행 환경이 달라지면 예상하지 못한 결과가 발생할 수 있습니다. 도커는 이미지에 애플리케이션뿐 아니라 개발 환경까지 담을 수 있기에 쉽게 같은 환경에서 애플리케이션을 실행합니다. 개발을 진행하는 로컬 환경과 배포를 진행하는 EC2의 환경이 다름에도 도커를 사용한다면 같은 환경에서 테스트하고 애플리케이션을 실행할 수 있게 됩니다. 추가로 독립된 커널 OS가 존재하지 않기에 이미지 크기가 작아 애플리케이션 배포 속도가 빠르고 자원을 효율적으로 사용할 수 있습니다. 개발 서버 & 운영 서버 분리, 고가용성을 위한 운영 서버 여러 대 운영 등과 같은 상황에서도 동일한 환경을 쉽고 빠르게 구축할 수 있다는 장점도 있습니다. 2. 환경 격리도커 이미지를 실행시킨 상태를 도커 컨테이너라고 합니다. 해당 기술은 독립된 환경에서 프로세스를 실행시키는 기술로 컨테이너는 각각 독립적으로 실행됩니다. 따라서 컨테이너 내부에서 발생하는 에러를 호스트 OS에 전파되지 않도록 격리할 수 있다는 장점이 존재합니다. 3. 버전 관리도커 파일이나 도커 컴포즈 파일을 통해 버전과 환경 설정과 같은 정보들을 코드 레벨로 관리할 수 있습니다. 서버에 직접 들어가서 운영 중인 애플리케이션의 버전을 확인하는 작업 없이도 어떤 환경의 어떤 버전을 사용하는지 코드를 통해 명시할 수 있기에 버전 관리에 쉽다는 장점이 있습니다. 추가적인 버전 설치 없이 이미지만 바꾸면 버전도 쉽게 바꿀 수 있습니다. 위와 같은 장점이 존재하기에 저희 팀에서는 도커를 사용하도록 결정하였습니다. |
Beta Was this translation helpful? Give feedback.
-
JWTJWT는 Json Web Token의 약자로 json형식을 사용한 claim기반의 웹 토큰입니다. 세션세션은 웹 애플리케이션에서 사용자의 상태 정보를 서버에 유지하기 위한 메커니즘입니다. 사용자가 웹 서버에 접속하고, 웹 서버는 해당 사용자에 대한 정보를 기억하고 유지하기 위해 세션을 사용합니다. 장점
단점
토큰세션과는 다르게 클라이언트에서 직접 정보를 가지고 있는 방식입니다. 주로 JWT를 많이 사용합니다. 장점
단점
위와 같은 이유를 고려하여 추후에 서버를 확장하는 경우가 가장 크게 다가왔기 때문에 JWT에서도 어떤 라이브러리를 사용할지에 대해 많이 고민했는데, 크게 java-jwt와 jjwt가 있었습니다. Java-JWT
JJWT
실제로 jwt.io에서 확인할 수 있는 것은 더 jjwt에서 더 많은 암호 알고리즘을 제공한다는 것이었습니다. |
Beta Was this translation helpful? Give feedback.
-
RestAssruedMockMvc@WebMvcTest를 사용할 때 어떤 방식을 통해 검증하는 것이 좋을지 고민을 해보았습니다. 1. 가독성이 좋고, 사용하기 편하다.먼저 BDD스타일의 given, when, then의 구조를 사용하기 때문에 MockMvc에 비해서 가독성이 훨씬 뛰어납니다. 2. MockMvc에 비해 속도가 확연하게 차이나지 않는다.MockMvc(빠름) > RestAssuredMockMvc > RestAssured(느림)순으로 속도가 빠릅니다. 결과적으로 위와 같은 이유로 컨트롤러에 대한 단위테스트를 진행할 때는 RestAssuredMockMvc로 검증을 진행하기로 했습니다. |
Beta Was this translation helpful? Give feedback.
-
Lombok롬복은 자바에서 제공하는 라이브러리로 getter, setter, toString등의 반복되는 보일러 플레이트 코드를 어노테이션 형태로 대체하여 사용할 수 있도록 도와줍니다. 1. 반복되는 코드 제거 및 코드 가독성 상승보일러 플레이트 코드를 어노테이션으로 대체하여 프로덕션에서 가독성 좋은 코드를 유지할 수 있습니다. 2. 편한 설정 및 팀원들의 이해도롬복을 설정하는 것을 어려운 일이 아닙니다. 누구든지 쉽게 설정하고 사용할 수 있습니다. 물론 무분별한 롬복 사용은 가독성을 해칠 수도 있지만, 실제로 사용해봤다면 단점보다 장점이 훨씬 와닿는 라이브러리라고 생각했습니다. |
Beta Was this translation helpful? Give feedback.
-
nginxnginx를 사용함으로서 얻을 수 있는 이점은 크게 다음과 같습니다.
nginx는 Apache에 비해 다양한 모듈이 없다는 단점이 있지만 모듈이 많다는 거에서는 큰장점으로 느껴지지 않았고 앞서 말한 장점들이 더 크게 느껴졌기에 nignx를 사용하였습니다. 참고자료 |
Beta Was this translation helpful? Give feedback.
-
Github Actions보투게더 팀은 CI 테스트 자동화 툴로 Github Actions를 사용하기로 했습니다. 1. Github와의 통합Github Actions는 github에서 제공하기 때문에, github를 버전관리 툴로써 사용하는 입장에서는 가장 사용하기 좋다고 생각했습니다. 2. Workflow 관리에 유용.yml 파일을 통해서 workflow를 관리하기 때문에 팀원들이 이해하기 쉽고, 유지보수하기 편합니다. 위와 같은 이유 때문에 보투게더에서는 Github Actions를 CI 테스트 자동화 툴로 사용하기로 했습니다. |
Beta Was this translation helpful? Give feedback.
-
Jenkins자동 CI/CD 툴로는 대표적으로 젠킨스(Jenkins)와 깃허브 액션(github actions)이 있습니다. CI로 깃허브 액션을 사용하고 있었기에 깃허브 액션으로만 사용할 수 도 있었지만 다음과 같은 이유로 젠킨스도 사용하였습니다. 먼저 젠킨스는 깃허브 액션에 비해 많은 플러그인을 지원하고 관련문서 또한 많이 있어 원하는 리소스를 찾기가 수월합니다. 참고자료 |
Beta Was this translation helpful? Give feedback.
-
Java 17많은 Java 버전 중 왜 17 버전인가?
|
Beta Was this translation helpful? Give feedback.
-
Spring Data JPAJPA는 자바 진영의 ORM 기술 표준입니다.. Spring Data JPA는 JPA를 더 쉽게 사용하기 위해 스프링에서 제공하고 있는 프레임워크 입니다. Spring Data JPA의 장점
|
Beta Was this translation helpful? Give feedback.
-
MySQLMySQL의 장단점
다른 DB와의 비교MySQL VS OracleMySQL의 장단점
MySQL VS PostgreSQLMySQL의 장단점
사용한 이유현재 VoTogether 프로젝트의 규모와 목적을 고려했을 때, 비교적 간단하고 빠른 MySQL이 어울리다고 판단했습니다. |
Beta Was this translation helpful? Give feedback.
-
H2 DatabaseH2 Database는 용량이 매우 가볍고 디스크 기반, 인메모리 데이터베이스 입니다. |
Beta Was this translation helpful? Give feedback.
-
주제
기술을 사용할 때 기술의 장단점과 기술을 사용한 이유에 대한 근거가 명확하다면 해당 기술을 더욱 효과적으로 사용할 수 있을 것 같아요.
따라서 이를 정리하여 문서화하고자 합니다!
현재 저희가 사용하고 있는 대표적인 기술 스택은 아래와 같습니다. 기술의 장단점, 사용한 이유, 다른 선택지와 비교 등을 정리해서 답변으로 남겨주시면 좋을 것 같아요 :) 빠진 기술 스택이 존재한다면 추가해주시면 감사합니다 🙇🏻♂️
기술 스택
Backend
Infra
Beta Was this translation helpful? Give feedback.
All reactions