[프로젝트 기획] 개발 환경 도구 및 기술 스택 선택하기
Updated:
👩🏻💻 Java + Spring Boot 기반으로 만드는 게시판 서비스입니다.
개발 환경 도구
- 개발도구 : Intellij IDEA Ultimate 2022.1
- 소스코드 관리 : Git 2.24.1 (git 버전은 git
--version
명령어로 확인할 수 있다.) - Git 호스팅 : GitHub
- Git GUI : Gitkraken Pro 8.5.0
Git - 형상관리란?
git은 대표적인 형상관리 도구이다. 문서를 계속 수정하다보면 .ver1, .ver2처럼 수정본을 남기지 않는 이상 결국 남는 건 가장 최종 버전이다. 그렇다면 중간 편집 과정을 기억하게 만들 순 없을까? 하는 니즈가 생겼고 그 니즈에 따라 나온 개념이 형상관리, 그 도구가 바로 git이다.
형상관리 도구에는 대표적으로 SVN, Git이 있고 현재는 많은 프로젝트에서 Git을 이용해 버전관리를 하고 있다. 형상관리를 하게 되면 중간의 어떤 편집 지점으로든 언제든 열람할 수 있고, 변경사항과 차이점을 쉽게 비교할 수 있다. 필요에 따라 편집점을 기준으로 뒤로 돌아가는 rollback과 같은 추가 기능을 제공하므로 실무에서는 반드시 필요한 도구이다. 그렇다고 Git이 개발에만 국한된 도구는 아니다. 어떤 형식이든지 예를 들어 이미지도 형상관리를 할 수 있다.
Github
Git으로 형상관리를 하면 해당 내용은 로컬 컴퓨터에 저장된다. 협업을 하는 동료 개발자와 정보를 나누기 위해선 인터넷에 작업한 소스가 올라가야 하는데, 이때 작업물을 올릴 수 있는 호스팅 서비스가 필요해진다. 이 호스팅 서비스를 제공하는 것이 Github이다. 오픈소스 진영에서 가장 널리 알려져있고 가장 많은 개발자들이 협업을 하기 위해 사용하는 서비스이다.
GitKraken
Git은 기본적으로 CUI이므로 명령어를 직접 입력하여 사용한다. 명령어 하나하나를 다 기억해야하므로 진입장벽이 다소 높은 문제가 있다. 또한 기능들을 시각적으로 보는 부분이 부족해 이해하기가 다소 어렵다. 이 단점을 보완하기 위해 만들어진 GUI가 있는데, 대표적인 서비스가 소스트리가 있다. 소스트리는 무료이므로 접근성이 용이하여 현업에서 많은 개발자가 이용하고 있다.
Gitkraken은 현재 인지도가 높아지고 있는 Git GUI 도구이다. Github을 사용할 경우 issue와 pull request를 GitKraken에서 작성하는 것도 가능하여 용이하다.
필요 세부 기술 목록을 뽑는 방법은
첫째, 미리 사용 기술을 모두 파악한 후 처음부터 프로젝트에 넣는 방법. 둘째, 기능 하나를 만들 때마다 필요한 기술을 추가해 나가는 방법이 있다. 일단 예상되는 세부 기능들을 먼저 살펴보자.
- 게시판, 댓글 도메인의 설계
- 도메인 데이터를 DB에 저장
- JSON API로 데이터 제공
- 사용자에게 웹 화면으로 서비스 제공 + 디자인 요소
- 게시판 페이지
- 게시글 페이지
- 로그인 페이지
- 적절한 입출력 데이터의 검증
- 인증 기능
- 생산성에 도움이 되는 도구들 선택
세부 기능으로부터 선택될 것으로 예상되는 기술들은 다음과 같다. 주로 Springboot에 들어있는 dependency 위주로 뽑은 목록들이다.
- Java + Spring Boot 기반에서 선택
- 웹 서비스 제공 -> Spring Web
- 도메인의 설계와 DB 저장 -> Spring Data JPA, H2 Database, MySQL Driver
- JSON API 로 데이터 제공 -> Rest Repositories, Rest Repositories HAL Explorer
- 웹 화면: 강의 목표에 맞춰 서버 사이드 렌더링으로 접근 -> 템플릿 엔진 -> Thymeleaf
- 디자인 요소 -> Bootstrap 5.2
- 적절한 입출력 데이터의 검증 -> Validation
- 인증 기능 -> Spring Security
- 생산성 -> Lombok, Spring Boot DevTools, Spring Boot Actuator
위 기술들은 모두 spring initializr에서 셋업할 수 있다. (https://start.spring.io/)