기능
예매내역확인 (예약확인) - 예약취소기능
- 아래 기획서 내용대로 인터랙션이 동작한다.
- 취소를 누르면 취소하겠냐는 메시지 레이어가 화면 가운데 뜨고 확인/취소를 통해 즉시 반영된다. 취소된 이후에는 '취소된 예약' 으로 새롭게 화면에 결과가 나온다.
소스코드
JAVA - 이름규칙
- JAVA Naming Conventions 을 지킨다.(참고 1) (참고 2)
- 클래스의 이름과 메소드의 이름은 직관적으로 작성하도록 한다. 클래스의 이름과 메소드의 이름만 보아도,어떤 기능을 가지고 있을지 어떤 내용이 구현되어 있을지 짐작할 수 있어야 한다.
- 코드를 읽는 사람이 개념을 쉽게 파악할 수 있도록 읽기 쉬운 코드를 작성하도록 한다. 예를 들어 변수 이름을 구체적으로 작성하도록 한다.
JAVA - 중복된 코드 제거 및 코드 구조화 - 중복된 코드가 있다면, 별도의 메소드나 클래스로 분리하도록 한다.
- 하나의 메소드가 너무 많은 코드를 담지 않는다. 코드의 양이 많을 경우 private한 메소드를 이용해서 메소드를 분리하거나 별도의 객체를 만들어 사용하도록 한다.
- 클래스의 코드 길이가 너무 길어진다면, 해당 클래스가 몇개의 클래스로 분리될 수 있는지 고민한다.
- 변수는 최대한 덜 사용하고, 최대한 가볍게 만들어 가독성을 높이도록 한다.
JAVA - 가독성 - 조건문의 경우 긍정적이고 흥미로운 (주 흐름에 해당하는) 경우가 앞쪽에 위치하도록 한다.
- 삼항연산자, do-while문장은 코드 가독성을 떨어트리니 되도록 사용하지 않는다.
- 블럭이 너무 많이 중첩되면 코드를 읽기 어려워진다. 블록을 private메소드로 추출할 수 있는지 고민한다.
- 코드는 빈줄을 이용해 커다란 블록을 논리적인 문단으로 구분한다.
- 코드는 들여쓰기를 잘 지키도록 한다.
- 필요하지 않은 코드는 제거한다.
JAVA - 프로젝트 구조 - Controller, Service, Repository를 사용하여 구현되어 있어야 한다.
- Controller에서 Service를 Service에서 Repository의 기능을 호출할 수 있지만, 그 반대는 허용되지 않는다.
Java - Web API - 티켓 정보, 예약자정보를 전달받아 저장하는 Web API를 작성한다.
- email을 입력받아, 해당 email로 예약된 예약정보 목록을 보여주는 Web API를 작성한다.
- email로 검색된 결과가 1건 이상이 있을 경우 세션에 email정보를 저장한다.
Java - JSP - 세션에 email이 있을 경우 메인 페이지의 우측 상단의 "예약확인" 은 세션의 email값으로 변경된다.
- 메인 페이지의 email링크를 클릭하면 해당 email로 예약된 예약 정보 목록을 보여주는 Web API를 호출한 결과가 보여진다.
먼저 할 일을 나눠보았다.
- 비회원 유저 예약 목록 가져오기 (GET)
- 예매 내용 저장하기 (POST)
목록을 가져오는 부분은 swagger 를 보고 dto 모델을 생성하고 그 모델에 대한 쿼리문들을 짰다. 반복 학습의 힘일까, 데이터를 가져오는 부분은 금방 끝낼 수 있었다. 예매하기 부분은 강의에서 알려주신 것처럼 insert 는 쿼리문을 쓰지 않는 방법을 사용했다.
ReservationInfoDao.java
ReservationInfo selectReservationInfoOnlyOne(Integer reservationInfoId) // 예매 내역 번호로 내역 하나만 가져옴
List<ReservationInfo> selectReservationInfo(String reservationEmail) // 예매 내역을 가져옴
Integer selectReservationInfoCount(String reservationEmail) // 예매 내역 개수를 가져옴
ReservationDao.java
Integer insertReservationInfo(ReservationParam reservationParam, String nowDate) // 예매 정보 저장 (reservation_info)
int updateReservationInfoCancelYn(Integer reservationInfoId) // 예매 내역 취소
ReservationPriceDao.java
int insertReservationPrice(ReservationPrice reservationPrice, Integer reservationInfoId) // 고른 티켓과 개수 저장 (reservation_info_price)
insert 를 할 때 MapSqlParameterSource 를 사용하여 .addValue 로 해당 테이블의 각 컬럼명에 해당하는 파라미터 값을 넣어주었다.
reservation_info_price 에서 reservation_info 의 id 값을 필요로 하기 때문에 reservation_info 정보를 insert 한 뒤, 얻은 id 값을 reservation_info_price 에 insert 할 때 사용하였다.
예매일을 오늘로 부터 +1 ~ +5 일로 해야하는 부분은 ReservationDateResponse 라는 이름의 dto 를 따로 만들어서 controller 단에서 조작해주었다.
취소하는 부분은 update 로 cancel_flag 를 1로 간단히 바꿔줄 수 있었다.
헉 저번에 너무너무 꼼꼼하게 리뷰를 해주신 moons 리뷰어님께 다시 한 번 리뷰를 받게 되었다. 아싸 !!!!!!!!!!!
항상 가독성을 생각하면서 삼항 연산자를 사용할 때는 한 번 더 생각해야겠다.
리뷰어님 말씀대로 다 지워보았는데 훨씬 깔끔해보이고 좋았다.
정말 꼼꼼히 리뷰해주신게 느껴지는 부분이였습니다.... ㅠㅡㅜ 감사합니다
부끄럽지만 삼항 연산자 실수가 하나 또 있다. 리뷰어님 말씀이 백번 옳다. 앞으로 조심하자 !
아래로 옮기고 나니 훨씬 보기도 좋고 찾아보기도 쉬운 느낌이였다.
기본값이 false 였다니... 리뷰어님 말씀대로 true 일 경우에만 사용하면 훨씬 가독성이 좋을 것 같다. (바로 싹 다 지웠습니당)
리뷰어님께서 중요한 부분을 콕 찝어 주셨다. 항상 어려웠던 변수명, 함수명 짓기..... 그래서 네이밍 규칙을 찾아보았고 프로젝트에 적용해 보았다.
이번 파트를 하면서 내가 실수했던 것들을 적어보았다.
reservation service 에 insert 하는 부분에서 readOnly 를 true 로 해놓고 꽤 오랜시간 삽질을 했다...윽.....
예약 조회 쿼리에서 예매 가격 총합이 이상하게 나와서 쿼리문을 봤더니 group by 를 안했었다.
cancel_flag 대신에 cancelYn 을 적어놓는 너무 창피한 실수....
this.jdbc = new NamedParameterJdbcTemplate(dataSource); 를 빼먹는 실수...
똑같은 실수를 두 번 반복하는 바보가 되진 않을 것이다.
정말 꼼꼼하게 리뷰해 주신 리뷰어님께 다시 한 번 감사드립니다 :D
#부스트 코스
'부스트 코스' 카테고리의 다른 글
[부스트코스] 프로젝트6-1.한줄평:기능:BE 리뷰 후기 (0) | 2019.09.16 |
---|---|
[부스트코스] 프로젝트5-2.예약:기능:FE 리뷰 후기 (5) | 2019.09.11 |
[부스트코스] 프로젝트4-2.예약:상세:FE 리뷰 후기 (0) | 2019.08.26 |
[부스트코스] 프로젝트4-1.예약:상세:BE 리뷰 후기 (0) | 2019.08.14 |
[부스트 코스] 쿠키 세션 예제 (0) | 2019.08.12 |