본문 바로가기
BackEnd/Project

[Board] Ch01. 프로젝트 기획

by 개발 Blog 2024. 8. 4.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

게시판 서비스 프로젝트

목표

- 누구나 이해하기 쉬운 소재로 명확한 기능 요구사항을 만든다.
- 요구사항 구현을 위한 문서 작업을 경험한다.
- 자바와 스프링 부트로 프로젝트 요구사항을 구현하는 기술을 익힌다.
- 최신 기술을 사용해 기술 동향을 파악하고 문제 해결 방법을 확인한다.
- 기획, 문서 작성, 개발, 형상관리, 테스트, 배포 등 개발 프로세스를 전반적으로 경험한다.

 

다양한 형태의 문서 작업

- 문서를 통해 프로젝트의 목적, 내용, 진행상황을 공유한다 (특히 이유가 중요)
- 구체적인 업무 가이드를 제공하여 동료의 생산성을 높인다.
- 이유를 공유하여 동료의 제안과 오류 수정을 유도한다.
- 구체적인 내용은 프로젝트 동기화와 진행에 도움을 준다.
- 과도한 정보, 업데이트되지 않은 정보로 인한 혼란에 주의한다.
- 문서는 과거 작업을 쉽게 찾게 도와준다.
- 기억은 왜곡될 수 있지만 문서는 수정 가능하고 발전하며 오래간다.
- 업무 기록은 진척 상황과 성과를 잘 드러낸다.

 

이 프로젝트에서 해볼 문서 작업

diagrams.net (구 draw.io): 도메인과 ERD 설계, 유즈케이스

• 구글 시트: API 디자인

• 깃 + 깃헙: 커밋 메시지 작성, 프로젝트 관리 및 협업 환경 꾸미기

 

개발의 목적 - 고객의 문제를 해결 (+ 하는 과정을 공부)

- 고객의 니즈와 문제를 정리한다.
- 고객의 문제를 해결하지 못하는 개발은 의미가 없다.
- 공부가 목표이므로 실패가 용인된다.
- 문제 -> 요구사항 -> 기능 도출 -> 구현 방안 기획 -> 개발 계획 수립 -> 실행의 과정을 따른다.
- 강의와 함께 모든 과정을 공부하고 연습한다.
- 강의 프로젝트로 기술 스택이 어느 정도 정해져 있다.
- 제약은 집중과 효율을 높인다.
- 가능한 최신 버전의 기술을 사용하여 최신 동향을 파악한다.
- 아직 밝혀지지 않은 이슈를 직접 경험하고 해결 방법을 찾는다.

 

이 게시판에서 진행할 개발 작업

- IDE: IntelliJ IDEA 2022.1.1 (Ultimate Edition)을 사용한다. (현재 2024.01.04가 최신)
  - Community Edition은 스프링 부트 지원 기능이 동작하지 않는다.
  - 강의 초점은 Ultimate Edition에 맞춘다.
- 언어: Java 17
- 프레임워크: Spring Boot 2.7.0
- 빌드 도구: Gradle 7.4.1
- Git GUI: GitKraken 사용, git 형상 관리와 브랜치 전략 활용한다.
- 개발 전략, 도메인 설계, 실무 디자인 패턴, 비즈니스 로직 구현을 경험한다.

 

지난 프로젝트는 Java 11을 사용했고 이번에는 Java 17을 사용한다.
JDK 설정을 쉽게 변환하기 위해 https://eunchaan.tistory.com/52를 참고하자.

 

강의에서 사용하는 인텔리제이 추가 다운로드 플러그인

(기능)

• CamelCase (3.0.12)

• GitToolBox (212.9.0)

• JPA Buddy (2022.2.4-221)

• Key Promoter X (2022.1.2)

• Presentation Assistant (1.0.9)

• Ideolog (203.0.30.0)

• Spring Boot Assistant (0.14.0)

 

(색상/테마)

• ANSI Highlighter (1.2.4) -> 이후 유료 플러그인으로 바뀜

• Atom Material Icons (64.0.0)

• Grep Console (12.12.211.6693.0)

• One Dark theme (5.6.0)

 

테스트와 배포

 

테스트

  • 개발 요구사항이 빠짐없이 모두 구현되었는가 (일이 끝났는가)
  • 구현된 요구사항이 오류 없이 동작하는가 (일이 잘 끝났는가)
  • JUnit 5.8.2 사용
  • Mockito, AssertJ 등 각종 테스트 라이브러리 사용
  • 스프링 부트 슬라이스 테스트 테크닉 활용
  • 깃헙을 통한 테스트/빌드 자동화

배포

  • 깃헙 릴리즈 작성
  • 클라우드 서버에 Heroku로 배포
    • 최근 보안 이슈로 일부 자동화 기능을 이용하지 못할 수 있음
  • Heroku 사용 불가 시 로컬에서 실행
  • 깃헙을 통한 Heroku 배포 자동화

필요한 기술 정리

예상하는 세부 기능들

• 게시판, 댓글 도메인의 설계

• 도메인 데이터를 DB 에 저장

• JSON API 로 데이터 제공

• 사용자에게 웹 화면으로 서비스 제공 + 디자인 요소

  • 게시판 페이지
  • 게시글 페이지
  • 로그인 페이지

• 적절한 입출력 데이터의 검증

• 인증 기능

• 생산성에 도움이 되는 도구들 선택

 

세부 기능으로 부터 예상하는 기술들 

- 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

 

https://start.spring.io/ 에서 예상하는 기술들을 아래와 같이 추가하였다.

 

하단에 EXOLORE를 클릭하면 아래와 같이 어떤 의존성들이 추가되는지 확인할 수 있다.

 

이번 프로젝트에서는 초기부터 모든 기술을 한꺼번에 추가하지 않고, 각 기능을 개발할 때마다 필요한 기술을 추가한다.