트러블 슈팅과 같은 의미로 프로젝트를 진행하며 생겼던 이슈와 논의과정 등을 기록해두려고 한다. 본 글은 24.03.01의 기록이다.
https://www.notion.so/2-03-01-2024-38661b4c7e1d4189ba463d504ff4c696
우리 웰체크 프로젝트의 백엔드 개발환경을 정하기 위한 논의를 진행했다.
정해야할 항목은 다음과 같았다.
1. Java 버전
2. Spring Boot 버전
3. Dependency
4. DBMS
- Java 버전
Spring Initializer에서 선택할 수 있는 자바 버전이 21과 17이 있었다.
21은 최신 버전인 만큼 새로 추가된 문법을 사용할 수 있다는 장점이 있고, 17은 비교적 보편적으로 사용되고 있어 다른 환경들과 호환에 있어서 안정적인 면이 더 크다고 생각했다. 우리가 Java의 새로운 문법을 사용할 여지는 없다고 판단하여 17을 선택하였다.
- Spring Boot버전
처음에 Spring Boot의 버전을 알아보기 위해 검색해보니 Spring Initializer의 선택 항목에 없는, 완전 동떨어진 숫자의 버전들이 나왔다. 그래서 이상하게 여기며 계속 검색해보다가, 사실은 Spring 버전과 Spring Boot 버전이 따로 존재하는데 우리는 그동안 "Spring 버전"이라고 검색했던 문제라는 사실을 알게 되었다.(당연히 Spring과 Spring Boot는 별개이므로 각각의 버전이 존재했던 것이다.)
아무튼 존재하는 스프링 부트의 버전 중 옆에 괄호로 SNAPSHOT이라던가 M3등의 표시가 붙은 버전은 아직 개발이 완전히 끝나지 않은 버전이라고 한다. 따라서 이를 제외한 3.2.2버전을 선택했다.
- Dependency
- Spring Web : 웹 Spring Web mvc를 이용해 개발을 진행하므로 당연히 추가했다.
- H2 Database : 간편하게 DB테스트에 사용할 수 있는 H2를 활용해 개발을 진행하기로 하여 추가했다.
- Spring Data JPA : JPA를 사용해 개발하므로 활용할 여지가 있다고 생각해 추가했다.
- Lombok : 당연한 이야기지만 Getter, Setter 각종 다양한 편의기능 애노테이션을 제공하므로 추가하였다. 이게 없으면 안된다..
- Spring Boot Devtools : 마찬가지로 편의기능을 제공하는 dependency다. 스프링을 공부하며 써보았는데 별거 아닌 수정에도 일일이 서버를 재시작하지 않아도 되어 굉장히 마음에 드는 편의기능이었다. 그래서 이것도 꼭 사용하자고 어필하여 추가하였다.
+ 필요할만한 Dependency를 검색하던 중 Spring Security가 보안과 관련해 반드시 필요하다고 하여 추가하려다가 이야기 한 결과, 알지도 못하는 걸 갖다 붙이기보다 나중에 필요한 상황이 생기면 그 때 추가하는 것이 맞지 않나 라고 결론이 나와 일단 보류하는 것으로 결정했다.
- DBMS
기본적으로 관계형 데이터베이스인 Oracle, MySQL, MariaDB, 등등에서 고민하였다. Oracle은 비용적인 측면에서 아직 우리 입장에서 사용할만한 DB가 아니었고 거의 MySQL과 MariaDB중에서 고민하였다. 특별한 이유가 아닐 수 있지만 공부하면서 많이 들어보기도 했고 예전부터 궁금했어서 MySQL을 한번 써보고 싶었다. 그래서 그냥 MySQL을 선택했다. 어차피 DIP에 따라 개발을 진행하므로 추후 변경도 얼마든지 가능하고, 같은 맥락에서 개발 과정에서는 편리한 H2를 사용하다 나중에 dependency도 MySQL로 변경할 예정이다.