패스트캠퍼스/과제

토이 프로젝트1 : 여행 여정을 기록과 관리하는 SNS 서비스 1단계 제작

개발중인 감자 2023. 9. 14. 23:59

📌 토이 프로젝트1

여행 여정을 기록과 관리하는 SNS 서비스 1단계 제작 


 

📝 플로우 차트

 

💡 실행 결과

 

더보기

 

[ JSON 파일 ]

 

[CSV 파일]

 

 

💡 나는 -를 구현하였다. 

1. ID 검색을 통한 여정 검색 기능 및 상세 정보 조회 기능.

2. 여행이 1개도 저장이 되지 않았을 경우, 여행 입력 뷰로 이동하는 기능

3. 전반적인 뷰 리팩토링 

4. 여정 조회 및 입력을 하기 위한 여행 요약 조회 기능

5. CSV 파일 조회 기능 

 

 

👩🏻‍💻 나는 -를 알게 됐다.

1. Git Flow 

- 깃에 정말 약했지만 이번 프로젝트를 통해 이슈 해결 및 PR에 익숙해질 수 있었다. 또한 다른 사람들의 코드와 직접 충돌을 해결한 경험도 겪을 수 있었다. 그리고 쓸데 없는 커밋을 안하도록 노력했다. 또한 main에 머지 안할려고 손 달달 떨며 푸쉬했음 ㅎㅎ

더보기

✏️ Git Flow branch 전략

  • lv.3 : Main(Master) : 정상적으로 애플리케이션의 작동을 보장하는 Master Branch
  • lv.2 : Develop : 개발 Branch
  • lv.1 : Featrue : 각 기능별 개발 Branch
  • hotfix : 긴급 수정 branch

 

  1. git flow 전략에서 개발팀의 상황에 맞게 전략 설정합니다.
  2. 모든 기능 개발은 dev 에서 나온 feature branch에서 개발합니다.
  3. 개발이 완료된 feature branch는 dev로 Pull Request를 합니다.
  4. PR 리뷰가 완료 되었다면 merge 합니다.
  5. dev에서 충분한 목표까지 완성 되었다면 main으로 merge 합니다.
  6. intellij git flow intergration 설치해서 사용 하면 branch 생성을 편리하게 할 수 있습니다.

 

 

2. 뷰 리팩토링 

- 객체 지향적 설계를 할려고 많이 노력했다. 반복적인 코드를 최소화하고자 여러번의 리팩토링을 거쳤다. 여정 조회 및 입력을 하기 위해서는 여행 요약 조회 기능이 둘다 필요했는데, 이런 경우 여행 조회 뷰를 보여주고 여정 조회, 입력 뷰로 이동하게 뷰를 리팩토링하였다. 

 

 

 

3. 예외 처리 방법 

- 날짜 입력 예외처리 방법에서 사용자 커스텀 예외처리 클래스를 선언하여 예외를 throw할 수 있도록 하였고, StringUtil 클래스를 활용하여 예외를 catch 하여 날짜형식이 맞을 때까지 반복적으로 날짜를 입력하도록 설계하였다. 

- Optional 객체의 활용을 통해 예외 처리하는 방법을 배울 수 있었다. 예외를 발생시키면 객체에 null을 받아 뷰로 전송하고 뷰는 Optional의 상태를 통해 값을 다르게 표현하는 방법으로 구현하였다. 

- 멘토님 피드백 결과, Optional.null로만 객체의 예외처리를 할 경우 후에 어떤 경우에 예외가 발생할 때 찾아내기 어려울 수 있다고 한다. 앞으로는 try-catch 문을 사용해서 예외를 잡도록 해야겠다!

 

 

 

4. 함수형 인터페이스를 활용한 예외 발생 안 할 때까지 반복적으로 값을 입력받는 방법

더보기
 

람다식, 메서드 참조를 이용하여 예외 발생시 성공할 때 까지 반복 구현 - 함수형 인터페이스

우아한테크코스를 진행하면서 "예외사항이 발생하는 경우 예외를 던진 후 예외사항이 발생한 지점부터 다시 입력을 받아라" 라는 요구사항이 있었다. 그래서 처음 생각한 방법은 while 반복문으

dev-dongmoo.tistory.com

 

이 방법을 응용하여 Scan 클래스를 만들었다. 숫자같은 경우는 정규식을 활용하였다. 

View에서 입력받은 값들을 검증하는 클래스이며, 틀렸다면 예외를 발생시켜 반복으로 값을 입력받도록 하는 클래스이다. 

내가 만든 클래스는 아니지만, 보면서 많은 공부가 됐던 기능이었다. 

 

 

5. JUnit을 활용한 테스트 코드

- 이번 프로젝트를 진행하면서 테스트 코드를 많이 실행시켜보며 코드를 수정하였다. 여기서 알게된 점이, 테스트랑 메인의 상대경로가 다르기 때문에 파입 입출력을 진행할 때, 테스트에선 잘 불러와졌던 파일들이 메인에서는 불러와지지 않는다. 이걸로 정말 개고생했다! 알아내서 참 다행이다. 

 


사용 기술 

  • 언어 : Java OpenJDK 11
  • 빌드 : Gradle 8.1.1
  • 테스트 : Junit Jupiter 5.7.2
  • 버전 관리 : Git
  • 저장소 : GitHub
  • 라이브러리 의존성 : Gson, Lombok, OpenCSV

 

프로젝트 학습 목표

  • 객체 지향적 설계를 생각해보기
  • Git을 이용한 협업
  • 테스트 코드의 사용
  • MVC 패턴의 구조 학습