[패스트캠퍼스 X 야놀자: 백엔드 개발 부트캠프] Java 기반 토이 프로젝트 후기

정의정·2023년 9월 12일
0

FC

목록 보기
3/6
post-thumbnail

나는 2023. 07. 10 ~ 2024. 01. 30 기간동안 내일배움카드로 수강하는 국비지원교육 중 K-digital training(패스트캠퍼스 X 야놀자: 백엔드 개발 부트캠프 4기)에 참여하고 있다.

💡 토이 프로젝트 1

토이 프로젝트는 총 세 단계로 진행된다.
1 단계 : 09. 04 ~ 09. 10
2 단계 : 10. 23 ~ 10. 29
3 단계 : 11. 13 ~ 11. 19

지난 주 09. 04 ~ 09. 10 토이 프로젝트 1단계를 진행했다.
이번 토이 프로젝트를 어떻게 진행했고, 어떤 어려움이 있었는지 후기를 남겨보려고 한다.

🌟 Java 기반 토이 프로젝트

이번 토이 프로젝트는 웹을 사용하지 않고 여행 여정을 기록하고 관리하는 SNS 서비스를 개발하는 프로젝트였다.
나를 포함하여 5명이 팀을 이루어 개발하는 팀 프로젝트로서, 개발 능력 뿐만 아니라 커뮤니케이션 능력이 요구됐다.
나는 본 프로젝트에서 조장으로 활동하여 프로젝트를 총괄하며 회의 및 개발을 수행했다.

요구사항 분석🧐

  • 여행 및 여정 정보 기록기능
    • 여행일정을 기록해야 한다.
    • 하나의 여행에 여러 개의 여정 정보를 기록해야 한다.
    • 여정 정보를 N개 입력 후 계속 기록 여부를 묻고(Y/N) 기록을 종료 할 수 있다.
  • 여행 및 여정 조회 하는 기능
    • 여행 전체 리스트를 조회 할 수 있어야 한다.
    • 여행 전체 리스트에서 확인된 여행 아이디를 입력하면 해당 여행 정보와 여정 정보를 조회 할 수 있어야 한다.
    • 여행정보와 여정 정보 조회는 JSON 파일에서, CSV 파일에서 각각 조회가 가능해야 한다.
  • 예외처리
    • 여행 정보가 없으면 오류 메시지를 출력한다.
    • 여행에 여정이 없으면 추가할 수 있어야 한다.
    • JSON, CSV 형식에 맞지 않으면 오류 메세지를 출력한다.
    • 한글 문자가 깨지지 않도록 해야 한다.

플로우 차트📌

분석한 RFP에 맞게 플로우 차트를 작성했다.

기능 명세서 작성✏️

RFP와 플로우 차트를 보며 기능 명세서를 작성했다.

구분기능세부 기능설명
여행여행 기록입력받은 여행정보를 CSV, JSON파일로 저장입력받은 여행 정보를 CSV, JSON파일로 저장합니다.
전체 여행 조회CSV, JSON 파일로 저장되어 있는 여행 정보를 조회CSV, JSON 파일로 저장되어 있는 여행 정보를 조회합니다.
특정 여행 조회CSV, JSON 파일에서 특정 여행 정보만 조회CSV, JSON 파일에서 특정 여행 정보만 조회합니다.
여행 삭제특정 여행 정보가 저장되어 있는 CSV, JSON 파일 삭제특정 여행 정보가 저장되어 있는 CSV, JSON 파일을 삭제합니다.
-------------------------------------------------------------------------------------------------------
여정여정 기록입력받은 여정정보를 해당 여행의 CSV, JSON 파일에 저장입력받은 여정 정보를 해당 여행의 CSV, JSON파일에 저장합니다.
여정 조회CSV, JSON 파일에서 특정 여행의 여정 정보들을 list로 조회CSV, JSON 파일에서 특정 여행의 여정 정보들을 list로 조회합니다.
여정 삭제CSV, JSON 파일에서 특정 여행의 특정 여정 정보를 삭제CSV, JSON 파일에서 특정 여행의 특정 여정 정보를 삭제합니다.
-------------------------------------------------------------------------------------------------------
공통JSON 파싱Json 문자열을 Object로 변환Json 문자열을 파싱하여 객체로 변환합니다.
Object를 Json 문자열로 변환객체를 Json 문자열로 변환합니다.
CSV 파싱CSV 파일을 Object로 변환CSV 파일을 파싱하여 객체로 변환합니다.
Object를 CSV 파일로 변환Object를 CSV파일로 변환합니다.
파일 조회 및 파싱특정 경로에서 CSV, JSON 파일에서 정보를 불러와 객체로 변환특정 경로에서 CSV, JSON 파일을 읽고 객체로 변환합니다.
CIPR 시 빌드 및 테스트 검사 수행PR 시 빌드 및 테스트 검사를 수행하며, 통과 시에만 병합이 가능합니다.
종료프로그램 종료프로그램을 종료합니다.

사실 파일 조회 및 파싱 기능과 CI 기능은 처음부터 정해둔 기능은 아니었으나, 기능 제안을 통해 기능 명세서에 추가하였다.

역할 분담👥

각 기능을 누가 구현할 것인지는 회의를 통해 정했다.
나는 위 기능명세서에서

  • 전체 여행 조회
  • 특정 여행 조회
  • 여행 삭제
  • 파일 조회 및 파싱
  • CI

기능을 맡았다.
그 외에도 추가로 필요했던 몇 가지 클래스를 맡아 구현하게 되었다.

  • CSV 파싱을 위한 DTO 클래스
  • 글로벌 익셉션 클래스
  • 입출력 및 서비스 연결(Controller와 View가 혼합된 클래스) 클래스
  • 메인 클래스

프로젝트 일정📅

프로젝트 일정은 아래 이미지에 맞게 수행되었다.

Convention🫱🏻‍🫲🏻

프로젝트 진행에 앞서 개발 규칙을 정할 필요가 있었다.
회의를 통해 다음 규칙들을 정했다.

  • 프로그램 환경 설정
    • 버전
    • 의존성
  • 깃허브 브랜치 전략
    • Git-Flow
  • 커밋 메시지
  • PR & 병합
    • 2인 이상 approve
    • conversation 모두 resolve
    • 빌드 및 테스트 통과
  • 코드 스타일
    • 구글 코드 스타일
  • 패키지 구조
    • 도메인형
  • 리팩토링
    • 주석

자세한 규칙 내용은 포스트가 너무 길어질 것 같아 생략하도록 하겠다.

입출력 화면🎯

  1. 여행 등록

    ----------[메뉴  선택]----------
    1. 여행 등록
    2. 여정 등록
    3. 여행 조회
    4. 여행 삭제
    5. 여정 삭제
    6. 종료
    ------------------------------
    1
    여행 이름: 테스트 여행
    여행 시작 날짜 (yyyy-MM-dd): 2023-09-09
    여행 종료 날짜 (yyyy-MM-dd): 2023-09-10
    여행정보가 등록되었습니다.
  2. 여정 등록

    ----------[메뉴  선택]----------
    1. 여행 등록
    2. 여정 등록
    3. 여행 조회
    4. 여행 삭제
    5. 여정 삭제
    6. 종료
    ------------------------------
    2
    
    ------------------------------
             [여행  목록]
    ------------------------------
    여행 ID: 1
    여행 이름: 부산 여행
    시작일: 2022-08-10
    종료일: 2022-08-12
    ------------------------------
    여행 ID: 2
    여행 이름: 가평 여행
    시작일: 2023-09-02
    종료일: 2023-09-03
    ------------------------------
    여행 ID: 3
    여행 이름: 테스트 여행
    시작일: 2023-09-09
    종료일: 2023-09-10
    ------------------------------
    여정을 추가할 여행 ID를 입력하세요: 3
    출발지: 테스트 도시 1
    도착지: 테스트 도시 2
    출발 날짜 (yyyy-MM-dd HH:mm): 2023-09-09 10:00
    도착 날짜 (yyyy-MM-dd HH:mm): 2023-09-09 12:00
    체크인 날짜 (yyyy-MM-dd HH:mm): 2023-09-09 12:20
    체크아웃 날짜 (yyyy-MM-dd HH:mm): 2023-09-10 12:00
    추가로 여정 정보를 저장하시겠습니까? (y/n) : y
    출발지: 테스트 도시 2
    도착지: 테스트 도시 3
    출발 날짜 (yyyy-MM-dd HH:mm): 2023-09-10 12:30
    도착 날짜 (yyyy-MM-dd HH:mm): 2023-09-10 14:00
    체크인 날짜 (yyyy-MM-dd HH:mm): 2023-09-10 14:30
    체크아웃 날짜 (yyyy-MM-dd HH:mm): 2023-09-10 21:00
    추가로 여정 정보를 저장하시겠습니까? (y/n) : n
  3. 여행 조회

    ----------[메뉴  선택]----------
    1. 여행 등록
    2. 여정 등록
    3. 여행 조회
    4. 여행 삭제
    5. 여정 삭제
    6. 종료
    ------------------------------
    3
    여행 기록을 불러올 파일 유형
    1. JSON
    2. CSV
    번호를 입력하세요: 1
    
    ------------------------------
             [여행  목록]
    ------------------------------
    여행 ID: 1
    여행 이름: 부산 여행
    시작일: 2022-08-10
    종료일: 2022-08-12
    ------------------------------
    여행 ID: 2
    여행 이름: 가평 여행
    시작일: 2023-09-02
    종료일: 2023-09-03
    ------------------------------
    여행 ID: 3
    여행 이름: 테스트 여행
    시작일: 2023-09-09
    종료일: 2023-09-10
    ------------------------------
    해당 여행의 여정을 조회하시겠습니까?(y/n) y
    여정을 조회할 여행 ID를 입력해주세요: 3
    ------------------------------
             [여정  목록]
    여정 ID: 1
    출발지: 테스트 도시 1
    도착지: 테스트 도시 2
    출발 시간: 2023-09-09T10:00
    도착 시간: 2023-09-09T12:00
    체크인: 2023-09-09T12:20
    체크아웃: 2023-09-10T12:00
    ------------------------------
    여정 ID: 2
    출발지: 테스트 도시 2
    도착지: 테스트 도시 3
    출발 시간: 2023-09-10T12:30
    도착 시간: 2023-09-10T14:00
    체크인: 2023-09-10T14:30
    체크아웃: 2023-09-10T21:00
    ------------------------------
    ----------[메뉴  선택]----------
    1. 여행 등록
    2. 여정 등록
    3. 여행 조회
    4. 여행 삭제
    5. 여정 삭제
    6. 종료
    ------------------------------
    3
    여행 기록을 불러올 파일 유형
    1. JSON
    2. CSV
    번호를 입력하세요: 2
    
    ------------------------------
             [여행  목록]
    ------------------------------
    여행 ID: 1
    여행 이름: 부산 여행
    시작일: 2022-08-10
    종료일: 2022-08-12
    ------------------------------
    여행 ID: 2
    여행 이름: 가평 여행
    시작일: 2023-09-02
    종료일: 2023-09-03
    ------------------------------
    여행 ID: 3
    여행 이름: 테스트 여행
    시작일: 2023-09-09
    종료일: 2023-09-10
    ------------------------------
    해당 여행의 여정 기록을 조회하시겠습니까?(y/n) y
    여정을 조회할 여행 ID를 입력해주세요: 3
    ------------------------------
             [여정  목록]
    여정 ID: 1
    출발지: 테스트 도시 1
    도착지: 테스트 도시 2
    출발 시간: 2023-09-09T10:00
    도착 시간: 2023-09-09T12:00
    체크인: 2023-09-09T12:20
    체크아웃: 2023-09-10T12:00
    ------------------------------
    여정 ID: 2
    출발지: 테스트 도시 2
    도착지: 테스트 도시 3
    출발 시간: 2023-09-10T12:30
    도착 시간: 2023-09-10T14:00
    체크인: 2023-09-10T14:30
    체크아웃: 2023-09-10T21:00
    ------------------------------
  4. 여행 삭제

    ----------[메뉴  선택]----------
    1. 여행 등록
    2. 여정 등록
    3. 여행 조회
    4. 여행 삭제
    5. 여정 삭제
    6. 종료
    ------------------------------
    4
    
    ------------------------------
             [여행  목록]
    ------------------------------
    여행 ID: 1
    여행 이름: 부산 여행
    시작일: 2022-08-10
    종료일: 2022-08-12
    ------------------------------
    여행 ID: 2
    여행 이름: 가평 여행
    시작일: 2023-09-02
    종료일: 2023-09-03
    ------------------------------
    여행 ID: 3
    여행 이름: 테스트 여행
    시작일: 2023-09-09
    종료일: 2023-09-10
    ------------------------------
    삭제할 여행 ID를 입력하세요.
    3
    JSON 파일이 삭제됐습니다.
    CSV 파일이 삭제됐습니다.
  5. 여정 삭제

    ----------[메뉴  선택]----------
    1. 여행 등록
    2. 여정 등록
    3. 여행 조회
    4. 여행 삭제
    5. 여정 삭제
    6. 종료
    ------------------------------
    5
    
    ------------------------------
             [여행  목록]
    ------------------------------
    여행 ID: 1
    여행 이름: 부산 여행
    시작일: 2022-08-10
    종료일: 2022-08-12
    ------------------------------
    여행 ID: 2
    여행 이름: 가평 여행
    시작일: 2023-09-02
    종료일: 2023-09-03
    ------------------------------
    여행 ID: 3
    여행 이름: 테스트 여행
    시작일: 2023-09-09
    종료일: 2023-09-10
    ------------------------------
    삭제할 여정의 여행 ID를 입력하세요.
    3
    ------------------------------
             [여정  목록]
    여정 ID: 1
    출발지: 테스트 도시 1
    도착지: 테스트 도시 2
    출발 시간: 2023-09-09T10:00
    도착 시간: 2023-09-09T12:00
    체크인: 2023-09-09T12:20
    체크아웃: 2023-09-10T12:00
    ------------------------------
    여정 ID: 2
    출발지: 테스트 도시 2
    도착지: 테스트 도시 3
    출발 시간: 2023-09-10T12:30
    도착 시간: 2023-09-10T14:00
    체크인: 2023-09-10T14:30
    체크아웃: 2023-09-10T21:00
    ------------------------------
    삭제할 여정 ID를 입력하세요.
    2
    CSV 파일에서 해당 여정 기록이 삭제됐습니다.
    JSON 파일에서 해당 여정 기록이 삭제됐습니다.
  6. 종료

    ----------[메뉴  선택]----------
    1. 여행 등록
    2. 여정 등록
    3. 여행 조회
    4. 여행 삭제
    5. 여정 삭제
    6. 종료
    ------------------------------
    6
    프로그램을 종료합니다.
    
    Process finished with exit code 0

어려움과 극복🤯

이번 프로젝트를 진행하면서 무엇이 어려웠고 이를 어떻게 극복했는지 기록하려고 한다.

1. 기능이 많지 않기 때문에 두 명 이상이 같은 도메인의 기능을 구현해야 한다.

Solution

애자일 스크럼 방식을 일 단위 스프린트로 진행하여 잦은 회의와 소통을 통해 최대한 서로의 개발에 영향을 주지 않고, PR과 병합 시 충돌을 최대한 피할 수 있도록 신경쓰며 프로젝트를 진행했다.

2. CI 구현 중 테스트 검사 중 디렉토리를 찾을 수 없다는 오류가 발생했다.

Solution

이는 단순히 샘플 데이터를 넣지 않아, 브랜치 디렉토리 자체가 존재하지 않아 생긴 오류로, 샘플 데이터를 넣어 해결했다.

3. 프로젝트가 주말까지 이어지면서, 팀원들의 주말 스케줄이 맞지 않아 소통이 원활하지 못했다.

Trouble

조장 역할을 맡은 내가 제출 전 최종 테스트를 진행했다.
최종 테스트 중 문제가 발생한 부분에 대해 담당 팀원에게 연락을 취했지만, 연락이 닿지 않았다.

Solution

정해진 기한 내에 프로젝트를 마무리하고, 제출을 해야 하는 상황이 었기 때문에 공지 후 직접 문제를 파악하고 코드를 수정했다.

🎀 느낀 점

기능 구현이 어려웠다기 보다 협업에 있어서 몇 가지 어려움이 있었는데, 이를 극복하고 무사히 개발을 마칠 수 있어서 다행이었다.

다음 토이 프로젝트는 좀 더 타이트하게 일정을 잡아 주말까지 이어지지 않도록 하고, 만약 주말까지 이어지더라도 최종 테스트 및 수정을 위한 회의를 잡아야겠다.

아쉬운 점을 꼽자면, 후에 든 생각이지만 입출력과 서비스와의 연결 클래스를 작성한 View 클래스를 Controller와 View로 나눴다면 좀 더 좋았을 것 같다는 점이다.

MVC 구조에 맞춰 작성하려고 했으나 웹 개발이 아니었기 때문에 Controller의 필요성이 약화되어 결국 Model, Service, View로 나뉘게 된 것 같다.

다음 토이 프로젝트는 스프링 프레임워크를 사용하여 개발하게 되는데, 이 부분을 개선할 수 있을 것 같다.

profile
배움 기록

0개의 댓글