군만두의 IT 공부 일지

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

개발일지/패스트캠퍼스

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

mandus 2024. 4. 3. 23:16

목차

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

     

    예외 처리 구현

     

    ⭐요약


    • 1일차에는 프로젝트 환경 설정과 도메인 클래스를 설계하고, json-simple 모듈을 사용하여 여행 정보를 관리하는 json 관리 기능을 구현하기로 결정함.
    • 2일차에는 JsonManager의 개발 현황 및 개선해야 할 점을 공유하고, 오늘까지 예외 처리를 고려해서 구현하기로 함.

    ⭐진행 상황 공유


    설계된 도메인 클래스 구조에 따라 여행 json 파일 관리 기능을 구현하면서 팀원들에게 전달사항이 있었음.

     

    1. Trip 클래스에서 startDate와 endDate 필드는 시간 정보를 포함하지 않는 게 적절하다고 판단하여 데이터 타입을 LocalDateTime에서 LocalDate로 변경함.

    public class Trip {
        private int tripId; // 여행 ID
        private String tripName; // 여행 이름
        private LocalDate startDate; // 여행 시작 날짜, LocalDateTime에서 LocalDate로 변경
        private LocalDate endDate; // 여행 종료 날짜
        private List<Itinerary> itineraries; // 여정 목록
    }

     

    2. TripView 클래스에서 tripId는 자동으로 설정하기 때문에 setTrip() 메소드를 사용하지 않음.

    2-1. 임의로 추가해둔 메소드라서 삭제하면 된다고 전달받음.

     

    3. TripJsonManager 클래스에서 json 파일을 관리하는 기능을 하고 있기 때문에 TripService 클래스의 용도가 이해가 안 됨.

    3-1. TripJsonManager 클래스를 사용하기로 했으니 TripService 클래스를 사용하지 않는다고 전달받음.

     

    json 파일 생성 및 저장 테스트를 위해서 TripController 클래스에서 addTrip() 메소드에 아래 코드 추가함.

    // 파일 생성 및 저장 테스트를 위해 임의로 구현
    public boolean addTrip() {
        Trip trip = new Trip();
        
        // 사용자 입력을 받아 여행 정보 생성
        System.out.print("여행 이름을 입력하세요: ");
        String tripName = scanner.nextLine();
        System.out.print("시작 날짜를 입력하세요 (yyyy-MM-dd): ");
        String startDate = scanner.nextLine();
        System.out.print("종료 날짜를 입력하세요 (yyyy-MM-dd): ");
        String endDate = scanner.nextLine();
    
        // 입력 받은 정보로 Trip 객체의 속성 설정
        trip.setTripName(tripName);
        trip.setStartDate(LocalDate.parse(startDate)); // 문자열을 LocalDate 객체로 변환
        trip.setEndDate(LocalDate.parse(endDate));
    
        boolean result = tripJsonManager.writeTrip(trip); // Trip 객체를 json 파일로 저장
        System.out.println("\n" + trip);
        System.out.print("여행을 계속 입력하시겠습니까? (y/n):");
        String answer = nextLine("END_MSG");
        answer.toUpperCase();
        if (answer.equals("N")) return true;
    
        return false;
    }

     

    Main 클래스에서 애플리케이션을 실행하면 사진과 같이 값을 입력했을 때, TripTable.json 파일과 1.json 파일이 생성되는 것을 확인할 수 있음.

    ▲ Main 실행 화면
    ▲ resources 패키지에 생성된 여행 json 파일

     

    그리고 팀원에게 ItineraryJsonManager 클래스의 구현 상황도 공유 받은 후에, 입출력을 구현할 수 있도록 JsonMager 클래스들의 구현을 오늘까지 마무리해보기로 함.

    ⭐예외 처리 구현


    TripJsonManager 클래스에서 json 파일을 생성할 때, 입력받은 날짜의 유효성 검사 로직 등 예외 처리도 추가해야 함. 데이터의 정확성을 보장하고, 예상치 못한 오류를 방지하여 프로젝트의 안정성을 높이기 위해 중요함.

     

    예외 처리 과정에서 궁금한 점이 있어 팀원들에게 질문함. 고려해야 할 사항이 많은 것 같음.

     

    Q1. 출발날짜가 도착날짜보다 앞뒤에 있는지 검사할 때, 여행1의 출발날짜와 출발날짜가 겹쳐도 되는지?

    A1. 겹쳐도 된다고 전달받음.

     

    Q2. 여행2와 여행1의 출발 도착 날짜가 겹치지 않는지?

    A2. 여정을 구현할 때, 여행의 출발시간과 도착시간을 0시부터 24시까지로 가정했기 때문에 겹치면 안 될 것 같다고 전달받음.

     

    Q3. 날짜 포맷를 제대로 입력했는지 검사해야 하는지?

    A3. 입력을 구현하는 팀원분이 검사하면 된다고 전달받음.

     

    예외 처리 조건에 대해서 정리된 후에 예외 처리 방법을 선택하는 것은 고민이 많이 되는 것 같음. try-catch 문으로 구현하게 될 텐데, 애플리케이션의 안정성과 사용자 경험에 직접적인 영향을 미치기 때문에 신중하게 선택해야 함.

     

    🚀예외를 던지는 방식


    예외를 throw 하는 방식이 적절한지에 대해 고민됨. 특히, 사용자에게 보이는 부분인 view에서 예외를 직접 던지고, 이를 상위 레벨까지 전파하는 방식이 올바른 접근인지에 대해서 의문이 있음. 예외를 너무 상위 레벨까지 전파하면, 처리하기 어려운 복잡성이 증가하지는 않을지, 어떻게 하면 좋을지 생각이 많이 됨. 예외를 발생시킨 가장 가까운 지점에서 적절히 처리하는 방향으로 접근하는 것이 어떤가 싶음.


    간단히 정리하면, 여정 json 파일 관리를 구현한 팀원과 각자 예외처리를 구현하기로 함. 그리고 코드를 이해할 수 있게 주석을 작성하기로 했음. 4월 3일 오전 10시에 다시 회의를 진행하기로 함.

    ⭐후기


    • json 파일을 처리하는 것이 어려웠으나, 어찌저찌 기능을 구현할 수 있어 다행이었음. 프로젝트의 두 번째 날을 마무리하며, 어떻게 해야 프로젝트를 한 단계 더 발전시킬 수 있을지 계속 고민함.
    • 발표회를 고려하여 json-simple 라이브러리의 사용 이유와 싱글톤 패턴의 적용에 대해 더 고민하기로 했음.
    • 이 두 가지를 사용한 이유가 뭘까? json-simple 라이브러리는 json 데이터를 쉽게 파싱하고 조작할 수 있게 해주는 자바 라이브러리이며, 싱글톤 패턴은 특정 클래스의 인스턴스가 오직 하나만 생성되고 애플리케이션의 어느 곳에서나 그 인스턴스에 접근할 수 있도록 하는 디자인 패턴임. 생각할 시간이 필요함.

     

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