군만두의 IT 공부 일지

[Java] 패스트캠퍼스 백엔드 개발 부트캠프 8기 토이 프로젝트 1 DAY1 본문

개발일지/패스트캠퍼스

[Java] 패스트캠퍼스 백엔드 개발 부트캠프 8기 토이 프로젝트 1 DAY1

mandus 2024. 4. 1. 21:18

목차

    📅진행기간: 2024년 4월 1일 ~ 2024년 4월 5일

     

    프로젝트 환경 설정도메인 클래스 설계

     

    ⭐서론


    프로젝트 소개
    - 주제: 여행 여정을 기록과 관리하는 SNS 서비스
    - 목표: Java 문법, 파일 입출력, 예외처리, 클래스 설계
    - 구성원: 7팀(4명)

     

    슬랙과 노션에 토이 프로젝트에 대한 공지사항이 올라옴. 토이 프로젝트는 총 3단계로 진행될 예정이며, 이번 주는 데이터베이스나 스프링 사용 없이 자바만을 활용하여 진행하는 것임.

     

    ▲ 토이 프로젝트 안내 Notion

    ⭐프로젝트 세팅


    5일밖에 시간이 없기 때문에 토이 프로젝트에 대해서 처음 정해야 할 것이 정말 많았음. 프로젝트의 첫 단계이므로 환경 설정, 기능 정의 등을 해야 될 것임.

     

    🚀오늘 정해야 할 것

     

    • Service 클래스에 json 파일 입출력을 구현할 것인데, Service라는 이름이 적절한지
    • json 파일을 어떻게 저장할 것이고, 어떻게 나눌 것인지
    • 여행, 여정을 기록할 때 입력을 어떻게 받을 건지

    1. 협업 도구 변경

    우리 팀은 앞서 자바 프로젝트를 진행한 경험이 있었는데, 각자 한 일을 공유할 때 카카오톡이나 디스코드, 줌에서 직접 말해야 하는 불편함이 있었음. 이를 개선하고자 팀원의 건의로 새로운 협업 도구를 찾음. Trello와 Jira를 각자 사용해 보고 체계적으로 프로젝트 관리가 가능한 Jira를 사용하기로 함.

     

    ▲ Jira 프로젝트 타임라인

    2. 프로젝트 기능 정의

    과제 내용 설명에 모호한 부분이 있어 매니저님께 질문할 내용을 정리했음. 답변을 보니까 팀별로 정해서 하면 될 것 같음.

     

    Q1. 여행1, 여행2, ..., 여행3.json 각 파일 안에 여러 여정들이 있는 것인지, 아니면 여정을 따로 여행1-여정1.json같은 형식으로 만드는 것인지?
    A1. 팀별로 정하면 됨. 하나로 만들면 파일이 커질 것이고 검색하는 데 속도가 떨어질 수 있음. 여러 개로 나누면 1(여행):N(여정) 관계로 구성해서 여행에 따를 여정 파일을 찾아서 검색을 하면 됨.

    Q2. 평가 기준을 보면 '출발지, 도착지, 출발 시간, 도착 시간을 조회하는 기능이 구현되었는가 / 체크인, 체크 아웃 시간을 조회하는 기능이 구현되었는가' 로 나누어져 있는데, 이것들을 따로 출력하는지 하나로 출력하는지
    A2. 팀별로 구현하면 됨.

    Q3. 기능 설명에 '여행 및 여정의 수정과 삭제 기능'에 대한 내용이 없는데, 이 부분을 구현하는 건지 등
    A3. 팀별로 구현하면 됨.

     

    프로젝트 기능
    - 사용자는 여행 및 여정 정보를 기록하고 조회할 수 있음.
    - 하나의 여행에는 여러 개의 여정 정보를 기록해야 함.
    - 여정 정보를 N개 입력 후 계속 기록 여부를 묻고(Y/N) 기록을 종료 할 수 있음.
    - 여행 전체 리스트에서 확인된 여행 아이디를 입력하면 해당 여행 정보와 여정 정보를 조회 할 수 있음.
    - 여행 정보가 없으면 오류 메시지를 출력함.
    - 여행에 여정이 없으면 추가할 수 있어야 함.
    프로젝트 요구사항 추가
    - 여행, 여정 정보의 시간 데이터는 시간 순서에 맞게 입력되어야 함.(가정)
    - 여정 정보는 여행 시작 날짜와 종료 날짜 사이에 있어야 함.(예외)
    - 여행의 시작-종료 및 여정의 출발-도착, 체크인-체크아웃은 시간 순서대로 입력되어야 함.(가정)
    - 도착을 하기 전에는 체크인을 할 수 없으며, 체크아웃을 하기 전까지는 출발을 할 수 없음.(예외)
    - 요구사항이 지켜지지 않으면 프로그램은 데이터를 저장하지 않고 오류를 발생시킴.(예외)

    ▲ 토이 프로젝트 정의

    3. json 파일 관리 방법

    각자 방법을 찾아보다가 메모리 사용량이 적고, 데이터 처리 속도가 빨라 가벼운 프로젝트에 사용하기 좋은 json-simple 모듈을 선택함. json-simple은 이름에서 알 수 있듯이 json 파일을 관리하기 간단하면서 속도가 빠른 라이브러리임.

     

    처음에는 json-simple 모듈을 직접 다운받아서 추가했는데, 이렇게 하면 새로 이 프로젝트를 다운받을 때마다 직접 추가해야 하는 번거로움이 있음. 자바 수업에서 배운 적이 있는 maven 프로젝트에서 json-simple 모듈을 사용하기로 함. 이렇게 하면 pom.xml 파일에 다음과 같은 의존성을 추가하기만 하면 자동으로 json-simple 모듈을 다운로드하게 됨.

    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
    </dependency>

     

    여행 및 여정 json 파일을 관리할 때, 팀원의 의견으로 아래와 같이 TripTable.json으로 전체 여행을 관리하고 tipId.json으로 여행별 여정을 관리하기로 함.

    // TripTable.json
    {
       "trips": [
          {
             "trip_id": 1,
             "trip_name": “Family Vacation”,
             "start_date": “2023-07-15”,
             "end_date": “2023-07-20”
          },
          {
             "trip_id": 2,
             "trip_name": “Family Vacation”,
             "start_date": “2023-07-15”,
             "end_date": “2023-07-20”
          },
       ]
    }
    // 1.json
    {
        "trip_id": 1,
        "itineraries": [
            {
               "itinerary_id": 1,
               "departure_place": "City A",
               "destination": "City B",
               "departure_time": "2023-07-15T08:00:00",
               "arrival_time": "2023-07-15T10:00:00",
               "check_in": "2023-07-15T12:00:00",
               "check_out": "2023-07-30T10:00:00"
            },
            {
               "itinerary_id": 2,
               "departure_place": "City B",
               "destination": "City C",
               "departure_time": "2023-07-16T09:00:00",
               "arrival_time": "2023-07-16T11:00:00",
               "check_in": "2023-07-16T13:00:00",
               "check_out": "2023-07-20T10:00:00"
            }
       ]
    }


    tripId 값을 관리하기 위해서 HashMap을 사용하려고 했는데, 수정과 삭제 기능을 구현할지 다른 기능부터 구현하고 정하기로 해서 최종 아이디 값에 1을 더하는 방식으로 구현하려고 함.

    4. 도메인 클래스 설계

    패키지 및 클래스 구조를 설계함. MVC 패턴을 적용하려고 했음. 특히, 핵심 기능인 Trip과 Itinerary라는 두 가지 주요 도메인 모델을 중심으로 설계를 진행함.

     

    Trip 클래스는 여행의 전반적인 정보를 관리함. 여행의 시작일, 종료일, 여행 이름 등의 정보를 포함함. Itinerary 클래스는 여행 중 발생하는 개별 일정들을 관리함. 각 일정의 출발지, 도착지, 시간 등의 세부 정보를 포함함. 이런 모델 클래스들을 기반으로, TripService와 ItineraryService 클래스에서는 각각의 비즈니스 로직을 처리함. TripJsonManager와 ItineraryJsonManager는 json 파일 입출력을 담당하는 클래스임.

     

    TripService의 클래스명을 json 파일을 읽고 쓰는 성격에 맞춰 Manager로 변경함. 서로의 역량 강화를 위해 Trip과 Itinerary의 JsonManager를 분리해서 나와 팀원 한분이 맡아 구현하기로 함.

    📦src
     ┣ 📂imp
     ┃ ┣ 📜Controller.java
     ┃ ┣ 📜ItineraryJsonManager.java
     ┃ ┗ 📜TripJsonManager.java
     ┣ 📂Itinerary
     ┃ ┣ 📜Itinerary.java
     ┃ ┣ 📜ItineraryController.java
     ┃ ┗ 📜ItineraryService.java
     ┣ 📂resources
     ┃ ┗ 📜test.json
     ┣ 📂Trip
     ┃ ┣ 📜Trip.java
     ┃ ┣ 📜TripController.java
     ┃ ┗ 📜TripService.java
     ┣ 📂view
     ┃ ┣ 📜ItineraryView.java
     ┃ ┣ 📜MainView.java
     ┃ ┣ 📜TripView.java
     ┃ ┗ 📜View.java
     ┗ 📜Main.java

    5. 역할 분배

    • 여행 및 여정 입력 → person2
    • 여행 json 파일 관리 → 
    • 여정 json 파일 관리 → person1
    • 여행 및 여정 출력 → person4

    4월 2일 오전 10시까지 여행 및 여정 json 파일 관리 기능부터 구현하기로 함. 그리고 출석 스크린샷을 찍은 후 다시 회의를 진행하기로 계획함.

    ⭐후기


    • 프로젝트 진행 첫날이어서 생각해야 할 것이 정말 많았음. 프로젝트 기능을 정의할 때 json 파일을 어떻게 관리해야 하는지에 대한 고민도 많이 함. 어떤 식으로 해야 더 좋을 지 계속 생각하게 됨.
    • 무엇을 하든지 처음이 늘 어려운 것 같음. 인터넷에 개발 단계를 검색하면 많은 결과물이 쏟아짐. 어떤 과정으로 진행하는 것이 정답일까? 경험을 많이 쌓으면 알게 되겠지만 당장에는 모르겠음. 부족한 부분은 구글링과 chatGPT의 도움을 받아 보충했음.
    • 도메인 클래스 설계를 다 같이 하기에는 어려움이 있을 것 같았음. 팀장의 화면을 공유 받아 설계하고, 결과물을 깃 레포지토리에 푸시하여 클론하기로 함. 스프링을 사용하지 않아서 그런지 디렉토리 구조나 MVC 패턴에 대해서는 아직 모르는 것이 너무 많은 것 같음.
    • 다들 열심히 참여해서 첫날을 잘 마무리했음. 다른 사람들과 함께 작업하면 '아, 그것도 있었지.'하고,  내가 놓치고 있던 아이디어나 이슈를 캐치할 수 있는 점이 정말 좋은 것 같음. 일정이 빠듯하지만, 남은 기간 동안 성실하게 참여해서 좋은 결과를 얻고 싶음.

    ⭐참고자료


    1) 나비와꽃기린, "[Java] JSON.simple 라이브러리를 사용해서 JSON을 핸들링 하자!!!!", 2016.10.20, https://mkil.tistory.com/323

     

    이 글은 패스트캠퍼스백엔드 개발 캠프에서 공부한 내용을 작성한 것입니다.
    Comments