본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.
개인과제가 발제되어 티켓 예매 서비스를 주제로 프로젝트를 진행함
첫 날이기에 기본적인 설계인 ERD와 API 명세서를 작성함
나는 처음부터 도전 과제인 지정 좌석 예매 기능을 넣을 것이기 때문에 ERD가 다소 복잡해짐
공연은 한 번만 진행하는 것이 아니라 시간에 따라 여러 번 진행됨
그렇기에 공연은 공연 시간이라는 테이블을 여러 개 가져야 함
생각보다 ERD에서 시간이 너무 오래 걸려서 기본적인 파일의 구조만 만들었음
관리자만이 사용할 수 있는 공연 등록 기능을 구현함
공연을 등록하는 로직이 생각보다 길어지고 관계가 만들어진 엔티티가 많아서 거의 하루 종일 구현함
그리고 트랜젝션과 Multer & AWS S3를 구현하는 과정에서 원인 모르는 에러가 발생했음
몇 시간동안 에러를 해결하려고 노력했고 결국 .env의 키 이름 오타로 인해 발생했다는 것을 찾음
공연과 관련된 조회 및 검색 기능을 구현함
사실 이 날 작성한 TIL을 모르고 삭제해서 TIL 기록이 남지 않았음
처음에는 다시 작성할까 했는데 양이 너무 많아서 일단 보류함
공연 목록 조회와 상세 조회는 그냥 데이터베이스 Show 테이블에서 해당하는 데이터를 검색함
공연 검색은 사용자가 입력한 검색어를 쿼리 스트링을 통해서 가져와서 Service에 넘김
좌석 정보 추가 및 좌석 예매 기능을 구현함
좌석 정보 생성은 특히나 고민을 많이 했음
그래서 처음에 ERD에서의 관계라든지, 컬럼 설정 등을 굉장히 고민을 많이 했음
공연 하나에는 여러 시간대가 있기 때문에 시간대 별 레코드 데이터가 필요하고 그 시간대별 데이터에는 좌석의 수를 관리하는 테이블이 필요함
그리고 좌석 정보는 공연, 시간에 따라서 좌석의 정보가 필요하기에 그에 대한 관계를 설정하느라 엔티티를 많이 수정함
티켓 예매 취소 기능을 구현함
예매 취소는 좌석 예매 기능과 유사한 점이 많았음
트랜젝션을 이용해서 사용자 포인트, 좌석 수, 좌석 상태, 티켓 상태을 묶어서 진행하면되기에 좌석 예매 기능과 구조는 크게 다르지 않았음
그리고 업데이트한 Insomnia가 망가졌음
수정이 끝나고 Multipart 형태로 공연 등록 API를 테스트하니 무언가 이상한게 보였음
내가 Send 버튼을 눌러서 보낸 값이 바로바로 적용되지 않는 것임
결과적으로 다운그레이드를 통해서 멀쩡한 예전 버전으로 바꿔서 해결을 함
기본적인 기능 구현이 끝났으니 추가적인 예외처리나 빠진 부분이 없는지 확인하는 작업을 진행할 예정
그리고 API 명세서는 아직 내용이 구체적으로 채워지지 않았기에 코드와 Insomnia를 기반으로 작성할 예정
ERD 역시 기능을 구현하면서 추가된 컬럼도 있고 추가로 생긴 관계도 있기 때문에 그에 맞춰서 수정할 예정
마지막으로는 Readme 파일을 작성해서 구현한 내용들을 간단하게 정리할 예정
한 줄 요약 : Nest.js야 살려줘
위에서 말한 것은 농담이고, Nest.js가 어렵긴 하지만 그래도 생각보다 유용한 기능들이 많아서 놀랐음
다만 제공하는 기능들이 너무 많아서 이번 과제랑 강의만으로는 온전히 이해하는 것은 어려웠음
특히, Express와 다르게 Nest.js에서 자동으로 지원해주는 과정들이 있어서 서버가 돌아가는 과정을 한번에 이해하기 어려웠음
그래도 공식문서, 블로그, 튜터님께 헬프 요청을 통해서 어느 정도 실행에 대한 흐름을 파악할 수 있었음
앞으로의 과제는 Nest.js와 TypeORM을 사용할 것 같기 때문에, 조금 더 공부가 필요할 것 같음
(공식문서를 다시 정독하자!!)