오늘 진행한 학습 요약
1. CH 3 일정 관리 앱 만들기
- 테이블 생성
- Lv1 일정 생성 및 조회
- 일정 등록 API 구현
- 전체 일정 조회 API 구현
- 선택 일정 조회 API구현
- 트러블 슈팅
- Lv2 일정 수정 및 삭제
- 선택 일정 수정 API 구현
- 선택 일정 삭제 API 구현
- 트러블 슈팅
일정관리 앱 Git-hub 링크 : https://github.com/chews26/Schedule-jdbc
2. 알고리즘 코드카다 Day23(작성 생략)
CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest
학습 정리
1. CH 3 일정 관리 앱 만들기
- 테이블 생성
- 요구사항을 보고 명세를 다시 정의하였다.
- 작성자, 비밀번호를 추가하였다.
- 작성일, 수정일을 추가하였다.
create table schedule
(
id bigint auto_increment comment '일정 id'
primary key,
title varchar(100) not null comment '제목',
name varchar(100) null,
password varchar(10) not null comment '비밀번호',
creation_date timestamp not null comment '작성일',
revision_date timestamp null comment '수정일',
start_datetime datetime not null comment '시작 일자',
end_datetime datetime null comment '종료 일자',
description text null comment '일정 설명'
);
Lv1 일정 생성 및 조회
일정 등록 API 구현
전체 일정 조회 API 구현
선택 일정 조회 API구현
- 👾 트러블 슈팅
- 🤔 문제
- 처음에는 DB에 생성된 일자를 수정일에 계속 업데이트하는 방법으로 구현하고자 했다.
- ALTER TABLE schedule ADD COLUMN create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '작성일';
ALTER TABLE schedule ADD COLUMN revision_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일'; - 그러나 원하는 값이 제대로 입력 반환되지 않는 문제가 발생하였고 java문법을 통해 해결할 수 있는 방법을 고민했다
- 해결방법
- 🤔 문제
Lv2 일정 수정 및 삭제
선택 일정 수정 API 구현
선택 일정 삭제 API 구현
- 👾 트러블 슈팅
- 🤔 문제
- 값을 수정해도 응답값에 최신값이 응답되지 않는 문제가 발생하였다.
- DB에는 입력값이 정상적으로 저장되는 것을 확인했고 Service에서 문제가 발생한 것 같았다.
- 해결 방법
- ScheduleService 일정수정을 구현한 부분에 DB id값을 처음에 가져왔는데 수정된 값이 업데이트 되고 나서 수정된 값을 조회하지 않아 기존값을 return하는 문제였다.
- 따라서 아래에 Schedule updatedSchedule = scheduleRepository.findScheduleByIdOrElseThrow(id);를 한번 더 선언해서 새로운 값을 가져오도록 하여 해결하였다.
- 🤔 문제
- 비밀번호를 처음에 int로 선언했다가 0000과 같은 번호는 입력할 수 없는 문제가 있었다.
- 해결방법
- DB에 password 데이터형을 VARCHAR(10)으로 바꾸고 Java에는 String으로 선언하여 문제를 해결하였다.
- 🤔 문제
- Password를 입력받고 값을 반환하면 안되는데 값이 0으로 반환되는 문제가 있었다.
- 해결방법
- scheduleRowMapper는 ScheduleResponseDto를 return하고 scheduleRowMapperV2는 Schedule를 return하는데 ScheduleResponseDto를 반환하는 RowMapper에 password를 작성하여서 그 값이 반환이 됐던 것이다.
- ResponseDto에는 Password를 반환하지 않도록 수정하고 scheduleRowMapperV2에서 password값을 매핑할 수 있도록 수정했다.
- 👀 그런데 왜 수정메서드에서는 RowMapper를 사용하지 않는데 scheduleRowMapperV2에서 password필드를 포함하지 않으면 에러가 발생할까? >> 이 점은 더 찾아봐야될 것 같다..
- 🤔 문제