[게시판 서비스] 프로젝트 기획

황인권·2023년 7월 25일

게시판 서비스


1. 개발 환경

개발도구(IDE) : Intellij IDEA Ultimate 2023.1.3
Spring Boot와의 연동 기능 때문에 Ultimate버전 사용
Git 호스팅 : GitHub
Git GUI: GitKraken Version 9.6.0


2. 프로젝트 기획

2.1 개발 목적 이해하기

게시판 서비스 프로젝트의 목표

  • 누구나 이해하기 쉬운 소재로 명확한 기능 요구사항을 만든다.
  • 요구사항을 구현하는데 도움이 되는 각종 문서 작업을 경험한다.
  • 자바 + 스프링 부트로 프로젝트 요구사항을 실제로 구현하는 기술적인 방법을 익힌다.
  • 최신 버전의 기술을 사용해 보면서 기술 동향을 파악하고, 새로운 문제와 해결 방법을 확인한다.
  • 기획과 문서 작성부터 개발, 형상관리, 테스트, 배포까지 개발 프로세스 전반을 경험한다.

다양한 형태의 문서 작업 - 원활한 협업의 초석

  • 문서를 통해 개발할 프로젝트의 목적, 내용, 진행상황을 공유(왜 하는지가 특히 중요)
    • 무엇을, 어떻게 : 업무의 가이드. 동료의 생산성을 높여준다.
    • 왜 : 함께 움직이는 원동력, 동료가 더 나은 방법을 제안하거나, 내 생각의 오류를 잡아줌
  • 내용이 구체적일수록, 동료들의 프로젝트 개발 내용이 잘 동기화되고 진행이 막히지 않는다.
    • 주의 - 과도한 정보의 범람, 업데이트되지 않았거나 잘못된 정보가 주는 혼란
  • 백업이 용이 : 문서는 지나간 일을 다시 꺼내야 할 떄 쉽게 찾게 도와준다.
  • 기억은 짧고 왜곡되지만, 문서는 수정 가능하고 발전하며 오래 간다.
  • 업무 기록을 남김으로써 업무 진척 상황과 내 성과가 잘 드러난다.

문서 작업

  • diagrams.net(구 draw.io) : 도메인과 ERD 설계, 유즈케이스
  • 구글 시트 : API 디자인
  • 깃 + 깃헙 : 커밋 메시지 작성, 프로젝트 관리 및 협업 환경 꾸미기

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

  • 고객의 니즈와 문제를 정리
    • 고객이 원치 않거나 고객의 문제를 해결해줄 수 없는 개발은 의미가 없다.
    • 공부가 목표 - 이 부분에서 다소 자유롭게(실패가 용인된다.)
  • 문제 -> 요구사항 -> 기능(feature) 도출 -> 구현 방안의 기획 -> 개발 계획 수립 -> 실행
  • 공부 목표의 특전 : 가능한 한 최신 버전의 기술을 사용
    • 최신 동향 파악
    • 아직 밝혀지지 않은 이슈를 직접 경험 -> 해결방법 찾기 -> 할 수 있다면 해결까지

게시판 만들기 프로젝트에서 해볼 개발 작업

  • IDE : Intellij IDA 2023.1.3 (Ultimate Edition)
  • 언어 : Java 17
  • 프레임워크 : spring boot 3.1.1
  • 빌드 도구 : gradle 7.4.1
    spring boot 프로젝트를 만들 떄, spring initializr를 사용할 것인데 이때 Spring boot 설정한 버전에 맞춰서 적합한 gradle 버전이 선택되므로 중요하지 않다. 즉, 직접 결정하지 않기 때문에 상대적으로 덜 중요.
  • git GUI : Gitkraken - git 형상관리와 브랜치 전략 활용
  • 각종 개발 전략과 도메인 설계, 실무 디자인 패턴, 비즈니스 로직의 구현을 경험

테스트와 배포 - 고객에게 제품을 보여주고 성과를 확인하는 순간

  • 테스트
    • 개발 요구사항이 빠짐 없이 모두 구현되었는가(일이 끝났는가)
    • 구현된 요구사항이 오류 없이 동작하는가(일이 잘 끝났는가)
  • 배포
    • 깃헙 릴리즈 작성
    • 클라우드 서버에 배포(Heroku)

게시판 만들기 프로젝트에서 해볼 테스트와 배포는

  • 테스트
    • JUnit 5.8.2
    • 각종 테스트 라이브러리(Mockito, AssertJ 등)
    • 스프링 부트 슬라이스 테스트 테크닉
    • 깃헙 : 테스트 / 빌드 자동화
  • 배포
    • 클라우드 서버에 배포(Heroku)
      • 최신 보안 이슈로 일부 자동화 기능을 이용하지 못할 수 있다.
      • Heroku를 사용하지 못할 경우, 다른 클라우드 서비스 이용 또는 로컬에서 실행
    • 깃헙 : Heroku 배포 자동화

2.2 필요한 기술 정리하기

필요 세부 기술 목록을 뽑는 방법

  • 미리 사용 기술을 모두 파악한 후 처음부터 프로젝트에 넣는 방법
  • 기능 하나를 만들 때마다 필요한 기술을 추가해 나가는 방법(Selected)

예상하는 세부 기능들

  • 게시판, 댓글 도메인의 설계
  • 도메인 데이터를 DB에 저장
  • JSON API로 데이터 제공
  • 사용자에게 웹 화면으로 서비스 제공 + 디자인 요소
    • 게시판 페이지
    • 게시글 페이지
    • 로그인 페이지
  • 적절한 입출력 데이터의 검증
  • 인증 기능
  • 생산성에 도움이 되는 도구들 선택

세부 기능으로부터 선택을 예상하는 기술(Spring 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

2.3 깃헙 프로젝트와 이슈 정리하기

gitignore

Create a new repository

Tip
gitflow 도구는 여전히 master라는 이름을 쓰고 있기 때문에 의도치 않게 첫번째 커밋으로 master 브랜치를 자동생성해서 넘겨줄 수 있는 실수를 막기 위해 README file를 생성하여 자동으로 main 브랜치로 만드는 방법이 있다.

GitKraken을 사용하여 레포지토리 연동

Github issues탭에서 일정 관리 가능

문서화

  • issue

    • 오류, 버그 및 '새로운 기능', 작업요청, 사소한 질문이나 의견 등 제품에 관해 대화의 대상이 되는 거의 모든 것을 의미한다.
    • 종류는 BUG(문제점), Improvement(개선사항), enhancement(새로운 기능) 등 커스터마이징하여 사용할 수 있다.
  • milestone

    • 일반적으로 이정표라는 뜻으로 사용되지만 회사에서 진행하는 특정 프로젝트와 관련해서는 어떤 중요한 시점이라고 생각하시면 되겠다. 예를 들어 소프트웨어 개발 프로젝트라면 릴리즈 일정이나 알파, 베타 버전 릴리즈 일정 어떤 연구와 관련된 것이라면 연구 마감시한이나 프로시저 완료일, 논문 마감일 등 듯으로 해석하면 된다.
    • 프로젝트 진행 과정에서 특정할 만한 건이나 표를 말한다.
    • 프로젝트 일정관리를 위해 반드시 필요한 지점을 체크하기 위해 사용한다.
    • 프로젝트 성공을 위해 필수적인 사항들을 각 단계별로 체크함으로써 전체적인 일정이 늦춰지지 않고 제 시간 안에 과업이 종료될 수 있도록 관리하는데 도움을 준다.
  • Pull requests(PR)

    • 실제로 완성한 기능을 반영해달라고 요청하는 것이다.
    • PR이 이루어지기 위해 코드 리뷰가 이루어지게 되며 조건에 부합하게 되면 기능이 반영되게 된다.
  • Actions

    • 빌드와 배포 자동화 도구
      즉 CI(Continuous Integration, 지속 통합)와 CD(Continuous Deployment, 지속 배포) 서비스
  • Projects

    • Agile process을 적용하면서 칸반 보드가 많이 사용되면서 github에서 구현한 서비스이다.
    • 크게 Projects와 Projects(Beta)가 있다.

      구체적으로 기본 동작(In progress 내에 있는 개발을 마치고 PR하여 In reviews로 넘어가는 것 또는 PR 코드가 merge 되었을 떄는 github에서 이미 자동화 해주고 있다.)하는 것 외에 자동화 하고 싶은 Flow를 특정한 시나리오에 맞게 자동으로 하고 싶을 떄 Workflows를 통해 설정할 수 있다.

  • Wiki

    • 문서를 만드는 것
    • confluence wiki와 유사
profile
inkwon Hwang

1개의 댓글

comment-user-thumbnail
2023년 7월 25일

공감하며 읽었습니다. 좋은 글 감사드립니다.

답글 달기