20240408 (월) 이력서 세션, 이력서 준비
2024. 4. 8. 21:36ㆍTIL
이력서 세션을 맞이해서 내가 여태까지 했던 프로젝트들을 정리해보았다.
주로 쓸건 최종프로젝트 티켓레이더와 바로 이전에진행한 대용량 트래픽 동시성제어프로젝트
1. 티켓레이더 (최종 프로젝트)
- 간단한 구현이나, 기능을 수정했던 경험이 있다면 적어주세요.
- CRUD
- Category
- Place
- AvailableSeat
- Price
- Redisson
- Pub/Sub Lock
- AOP를 활용한 Pub/Sub Lock 어노테이션
- Vue
- 웹페이지 디자인 뼈대
- 티켓예매시 좌석배치도 구현
- Axios를 활용한 Front-Back 구현
- CRUD
- 트러블슈팅이나, 어떤 기능 또는 성능을 개선했던 경험이 있다면 적어주세요.
- 이벤트 조회시 N+1 문제 발생 우려
- 문제
이벤트 리스트 조회시 N+1문제 발생 우려 - 원인 관계를 다시 LAZY로 설정하고 리스폰스시에 필요한 엔티티는 트랜잭션 내에서 불러와서 같이 리스폰스에 담을 수 있도록 변경LAZY는 트랜잭션이 끝난 시점에서 간접적으로 불러온 객체의 프로퍼티에 접근할수 없음 엔티티간의 관계설정에서 LAZY로 안불러와 지던 것을 임시로 EAGER로 바꿔놓고 변경하지 않았음
- 해결방법
엔티티간의 관계를 FetchType.EAGER 에서 LAZY로 전부 변경
- 문제
- 락 구현관련(고민한 부분 2가지)
- 첫째, 락키를 생성하는 기준은 무엇인가, 둘째, 락 점유를 시작할 부분은 어디인가 입니다.공연 하나하나를 Event라고 칭했을 때 Event 생성시 설정한 기간(startDate~endDate)만큼의 AvailableSeat가 생성이 됩니다.저희는 어떤 한 좌석을 누군가가 예매중이면 같은 좌석에 접근하지 못하게 하고 싶었습니다. 따라서 락 키를 생성하는 기준은 Event, Date(공연날짜), SeatGrade, SeatNo 가 됐습니다.
- 둘째로는 락 점유 시점입니다.
- 사용자는 Event를 고른 후 좌석예매를 위한 정보를 선택하고 좌석 예매버튼을 누릅니다.
- 좌석 예매 버튼을 클릭하면 CreateTicket을 호출하여 key를 생성(락이 점유 중이라면 대기, 타임아웃시 유저에게 이미 예매중인 좌석이라는 알림창을 띄웁니다.)
- 락이 점유중이지 않다면 key를 이용하여 락을 점유합니다.
- 락 점유 기간동안 티켓의 정합성(예를 들자면 예매가능여부, 좌석번호 등)를 확인하며 정합성이 맞지 않는다면 유저에게 오류 메시지를 띄우고 락을 해제합니다
- 정합성 확인 이후 DB의 Ticket테이블에 Ticket 정보 저장
- 이후 락 해제
- 티켓 예매페이지 구현
- 이벤트 상세페이지에서 티켓 예매 버튼을 누를시 모달창으로 티켓 예매 페이지가 뜨게 되어있습니다. 여기서 티켓 예매할때 필요한 리퀘스트에는 총 좌석개수(1~4개)와 그에 맞는 좌석 등급과 번호를 정해야합니다. 그렇다면 이 정보를 넘겨받을때 예매페이지에선 어떤 방식으로 이 정보들을 입력해야할까요? 방법은 2가지를 생각해보았습니다.
- 좌석배치도, 드롭다운 중 택 1
- 드롭다운으로 좌석갯수, 좌석등급, 번호를 입력후 보낸다.
장점 러닝커브가 낮음 부트스트랩, 뷰티파이 등 참고할 곳이 많음
단점 선택할 좌석 개수에 따른 유동적인 드롭다운창이 필요함 유저가 티켓예매시 좌석배치가 어떻게 되어있는지 알수 없음 - 일반 티케팅웹페이지에서 나오는것처럼 좌석배치도를 구현한다.
- 장점
좌석개수, 등급, 번호가 한눈에 보이고 스크린 위치가 보임 - 단점
러닝커브가 높음
- 이벤트 조회시 N+1 문제 발생 우려
-
-
- 2번 방법인 좌석배치도로 구현하기로 결정!
이유
1. 유저 관점에서 봤을때 좌석배치도로 구현하는 것이 조금더 직관적, 유저친화적이라 판단함
2. 드롭다운으로 구현할시에도 좌석개수에 따른 유동적인 드롭다운창의 변화가 필요한데 좌석배치도 만큼은 아니지만 나름의 러닝커브가 있을것 같음
3. 이미 예약된 좌석을 표시해줄수 있음
- 2번 방법인 좌석배치도로 구현하기로 결정!
-
2. 대용량프로젝트
- 간단한 구현이나, 기능을 수정했던 경험이 있다면 적어주세요.
- 각종 Lock 연습
- JpaAuditing을 이용한 생성과 수정시간 자동기록+소프트딜리트시 isDeleted도 추가
- 소프트 딜리트 SQLDelete : Delete쿼리를 날릴때 다른 내용으로 바꿔줌 SQLRestriction : 어느 쿼리를 날려도 뒤에 해당 쿼리를 (where절에) 붙여줌
- 트러블슈팅이나, 어떤 기능 또는 성능을 개선했던 경험이 있다면 적어주세요.
- 동시성 제어를 위해 사용할 방법 선택 Lettuce, Redisson, Synchronized??
'TIL' 카테고리의 다른 글
20240412 (금) 이력서 준비 - 이력서 코칭 제출 (0) | 2024.04.12 |
---|---|
20240409 (화) 이력서 준비 - PDF, 이력서 (0) | 2024.04.09 |
20240405 (금) 최종 프로젝트 티켓레이더 6주차 - 최종발표회 (0) | 2024.04.05 |
20240404 (목) 최종 프로젝트 티켓레이더 6주차 - 피드백 수용 (0) | 2024.04.04 |
20240403 (수) 최종 프로젝트 티켓레이더 6주차 - 유저테스트 시작 (0) | 2024.04.03 |