Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 한번 해블로그

[토이 프로젝트 1] 여행 여정을 기록, 관리하는 SNS 서비스 본문

과제

[토이 프로젝트 1] 여행 여정을 기록, 관리하는 SNS 서비스

hide on bush 2024. 1. 3. 15:08

새해가 밝았습니다 :) 다들 새해 복 많이 받으십숑 ૮꒰ ྀི〃´꒳`〃꒱ა

이번에는 토이 프젝 관련 얘기를 해보려합니다... 토이 프로젝트는 개인 혹은 소규모 그룹이 남는 시간을 쪼개서 단기 프로젝트를 개발하는 것을 의미하는데,,, 상업적인 것 보다 개인의 능력 향상, 새로운 아이디어나 기술 개발 등을 위해 시작되는 것이 일.반.적입니다. 하지만 저에겐 토이 프로젝트가 아니라 그냥 대형 프로젝트 느낌이 낭낭하죠.. 다른 조원분들은 혼자서도 할 수 있을 거 같다라는 아주 easy한 프로젝트라고 합니다 ^^,,,,

토이 프로젝트 이전에도 영화, 계산기 관련 프로젝트를 진행했었는데 그 때는 각자 만들어서 어떻게 구현했는지 공유를 했다면 이번에는 실제로 기능별로 역할 분담을 해서 프로젝트를 진행했다.

토이 프로젝트 1 관련 문서를 확인했을 때 영화, 계산기를 구현했던 방식과 비슷했지만 JSON 파일 형태로 저장한다는 점과 사실 아직 코드를 어떻게 짜야하는지 모르겠다...ㅎㅎ..! 그래도 다같이 오프라인으로 만나서 직접 얘기를 나누고 막히는 부분을 바로바로 해결하면서 진행하니까 쪼오끔 괜찮았다.


1. 계획 및 밑작업

  • 하나의 여행 json에 여러 여정 json을 함께 저장하는 방식
  • Gradle, Java 17, IntelliJ
    • 여기서 발생한 문제는 내 맥북에는 Java 11이 설치되어있는데 터미널에서 아무리 17로 바꿔도 터미널을 빠져나오면 11로 돌아간다는 점.. 그래서 몇시간동안 이 문제를 해결한다고 진땀을 뺐다 ㅠㅠㅠ
  • 사용한 API
    • Jackson
  • 역할분담
    • 여행/여정 입력 (강서진, 김지영)
    • 여행/여정 조회 (최건, 이주성)
  • GitHub - feature 브랜치 만들어서 push → 기능 완성 되면 dev에 merge, feature 브랜치 삭제
  • 플로우 차트


2. 기능 구현

  • 입력 기능
    • 저장 데이터 확인
    • 입력 기능 (여행)
      • 여행 기록 입력
      • JSON 파일로 저장
    • 입력 기능 (여정)
      • JSON → 여행 기록 객체 변환
      • 여정 입력 & 추가
      • JSON 파일로 저장
  • 조회 기능
    • 여행 조회
    • 여정 조회
      • 가지고 있는 전체 Json파일 조회
      • travelId를 콘솔로 받아 해당 id에 해당하는 여행의 전체 여정을 조회
    • view, service, controller로 분리
    • JSON 파일은 data 패키지에 저장
    • 예외처리
    • LocalDate, LocalDateTime 검증 로직 추가
Package Class Method  
controller TravelController applicationStart  
service TravelService isDataEmpty 파일 유무 확인
    saveRecordToJSONFile 여행 기록 저장
    convertAllTravelRecord JSON 읽어서 여행 기록 목록으로 반환
    selectItinerary 여행 기록 안에 저장된 여정 기록 반환
view ConsoleView start 시작화면
    getTravelInput 여행 입력
    getItineraryInput 여정 입력
    selectItinerary 조회할 여행 번호 반환
    printAllTravel 여행 목록 출력
    printSelectItinerary 여행 목록 내 여정 출력

3. 테스트 및 리팩토링

⛔️ 에러 발견 및 해결 사항

    • Itinery → Itinerary 오타 수정
    • java 11, 17 호환 오류
      • SpringBoot 호환 고려하여 java 17로 변환
    • 의존성 주입 오류로 StackOverflowError
      • 추후 Config 로 빼서 한번에 주입
    • LocalDateTime, LocalDate 파싱 오류
      • DateTimeFormatter
    • InvalidDefinitionException (LocalDate java 8 타입 호환x)
      • gradle build에 time module추가
    • UnsupportedOperationException
      • model 생성자에 immutable collection → new 생성자로 생성하여 mutable하게 바꿈
    • 파일 저장 상대경로로 잡을 시 FileNotFoundException
      • / 위치 수정
    • itineraryId 상수로 설정했을 때, 재실행할 때마다 Id가 1로 초기화
      • tripId, itineraryId 변수 설정하여 해결
    • 여정 기록 추가 시 itinerary_id가 이미 저장된 itinerary_id에 누적되지 않고 다시 1로 저장되는 에러
      • 여정 추가 시 저장되어있는 list 원소 개수를 불러와서 ++로 수정
      • indexOutOfBoundException
    • 예외처리 ) 여정 조회 시 문자열을 입력하면 프로그램 종료되는 에러
      • InputMismatchException
      • NullPointerException
    • 여행, 여정 기록 시 공백 문자열도 저장
      • isBlank() 확인하여 공백 받지 않도록 설정

❗️ 추가 기능

  • 여행 기록 시 중단을 원하는 경우 tripName에 “-1” 입력시 다시 메뉴로 돌아가는 기능 추가

4. 결과물

 

1) 여행 기록

 

2) 여정 기록

 

3) 여행 조회

 

※  현재 13개의 여행이 저장되어있지만 만약 JSON 형태로 여행이 저장되어있지 않을 경우 다시 메뉴 리스트로 돌아가게함

 

4) 여정 조회

※  저장된 여행이 없을 경우 다시 메뉴 리스트로 돌아가도록 함

 

5) 종료

 


시행착오가 많았지만 다들 똑똑이셔서 그런지 그냥 뭐 뚝딱뚝딱,,,
첫날에 조원분이 지속적인 에러때문에 너무 힘들어하시는데 나는,, 그 자리에서 뭔가 크게 도움이 되질 못해가지고 괜찮다고 천천히 하면된다라는 무한의 긍정 응원을 하고 집에 돌아와서 지피티 멱살을 끌어잡고 답을 달라고 계속 대화를 했다. 그렇게 문제가 뭔가 해결된 것 같아서 코드 전달드렸더니 다행스럽게도 뭔가 해결된거 같아 다행이였음 (。O ⩊ O。),,, 내 역할은 거의,, 응원단장,,, 하지만 조원들끼리 같이 맛난 밥도 먹고 모여서 얘기도 하니까 한동안 집에서 안나오던 집순이에게는 좋은 시간이였다 ....후후...
앞에 말한 것처럼 토이프로젝트는 개인 능력 향상도 포함되니까,, 깃헙으로 커밋해서,, 머지하고 하는 능력을 얻었다고 생각해야할 듯 ,, 아직 2달밖에 지나지않았지만,, 사실 너무 힘듦 ㅠㅠ (포기하고 싶을 정두 ^^ 아무리 찾고 유튭으로 봐도 모르겠음... 8ㅅ8) 그래서 아직 2달밖에,,,,, 지나지않았다는 마인드로 열심히 하려고는하지만 의욕이 팍팍 떨어질 때가 있다 ,, 이번 토이프젝처럼 다들 잘하는데 나는 할 줄아는게 없으니까 너무 민폐된 기분 8ㅅ8.. 더 열심히 해보겠습니다 (•́ε•̀;ก)💦

'과제' 카테고리의 다른 글

[개인과제] MVC 기반 온라인 쇼핑 카트  (0) 2024.01.24
[멘토링] 얕은 복사와 깊은 복사  (0) 2024.01.17
[Java 과제] 4일차  (0) 2023.11.24
[Java 과제] 3일차  (0) 2023.11.22
[Java 과제] 2일차  (0) 2023.11.20