🥽 내가 구현한 기능
항해는 프로젝트의 요구사항의 큰 줄기를 알려준다. 때문에 해당 요구사항을 기반으로 제작하게 된다.
우선 큰 줄기만 보자면 우리는 쇼핑몰을 구현한다. 많은 기능이 있겠지만 그중 필수요소인 로그인과 주문 그리고 사용자의 위시리스트로써 찜하는 기능 같은 것 같다
우선 그 기능을 기반으로 원하는 기능은 모두 구현이 완료된 상태이다. 테스트를 마친 상태로 따로 문제가 있던 기능이 없었다.
🥽 기술적 의사결정
- 로그아웃은 Redis를 많이 사용하지만 굳이 초반부터 후반 기능을 사용하고 싶지 않았다. 때문에 RefreshToken을 이용한 로그아웃을 구현했다.
- 데이터를 암호화하는 것은 가장 대중적으로 사용되는 AES를 사용했고 데이터의 암호화를 위해 만들어진 암호화 방식은 JPA의 AttributeConverter를 사용했다
- JPA에서 단방향이 아닌 양방향 관계를 맺어 따로 DTO를 사용하지 않고 다양한 물건안에 추가적인 정보를 가져오게 만들었다
- JPA에서 제공하는 page 처리는 page말고도 slice가 있다. slice는 page보다 쿼리문이 적기 때문에 가장 빠른 응답을 해야하는 메인 화면에서 사용되었다. 하지만 검색을 이용한 상품을 찾을때는 page로 사용해도 성능상의 큰 문제가 없을것이라 판단되어 사용했다
- 각 주문의 배달 상태를 파악하기 위해 Spring의 기능인 스케줄러를 사용했다. 크론식을 사용하지 않고 delay를 사용해서 주기적으로 체크하도록 만들었다
🥽 트러블 슈팅
- mail을 인증 할때 메일이 저장되어 있어야 확인이 가능했기 때문에 해당 메일을 어디에 저장해야 할까 고민이 많았다. 이는 Session에서 저장하기로 했다
- 주소와 전화번호를 수정하면서 Dirty checking으로 수정하고 싶었는데 문제가 발생했다. MapStruct를 사용하기에 작동이 잘 안되는 것이였다. 때문에 해당 내용을 setter의 이름을 바꿔주면서 제작을 했다. 이건 나의 미숙이다...
- 사용자의 정보를 조회하면서 양방향 관계로 인해 stackoverflow가 발생했다. 이는 서로의 관계를 계속해서 불러오기 때문에 발생했다
- 만약 다양한 사람이 같은 물건을 동시에 주문한다면 문제가 발생한다. 그래서 이를 고치기 위해 동시성 문제를 lock을 통해 해결했다.
🥽 인사이트
- 공부를 하면서 인사이트의 내용을 알기로는 너무 많은 사이트를 활용했기에 정확히 알 수 없었다.
'항해99' 카테고리의 다른 글
🥨 [항해99 취업 리부트 코스 학습일지] 프로젝트 시작 2주차 (0) | 2024.04.30 |
---|