100% 혼자서 진행했던 프로젝트가 어느정도 마무리 되었고 그 과정에서 느꼈던 점들을 풀어보려고 한다.
구현한 기능
- 회원
- 회원가입
- 로그인
- 상품
- 등록/조회/수정/삭제
- 채팅
- 상품 아이디를 통해 판매자와 구매자가 메세지 주고 받기
- 상품 아이디로 그 상품에 대한 채팅 내역 조회
- 내가 채팅한 모든 내역 조회
- 주문 및 결제
- 토스페이먼츠 API로 가상계좌 발급
- 웹훅 이벤트 적용
- 결제상태 조회
느낀 점/배운 점
우선 프로젝트를 진행하면서 가장 중점적으로 생각한 것은 써보지 않았던 기술을 써보는 것이었다.
1. jwt
토큰을 사용하는 권한 관리는 내가 직접 해본 적이 없어서 꼭 해 보고 싶었다.
물론 처음이라 개념 공부도 하고 실제 적용까지 시간이 좀 걸렸지만 이게 이렇게 쓰이는 거구나라는 걸 알게 되었다.
토큰의 단점을 고려해 Refresh 토큰은 Redis에 저장하는 방식을 사용했다.
2. Optional/Stream/Collectors
Optional
프로젝트 진행하면서 김영한 님의 스프링 강의를 듣는 것도 병행했는데 그 강의에서 처음 알게 되었다.
NullPointerException을 방지하기 위해 이런 방법도 있구나를 알았고 프로젝트에 적극 활용했다.
Stream/Collectors
Optional을 쓰다 보니 자연스레 같이 쓰게 되었는데 문제는... 이전의 나는 이 두 가지를 잘 사용하지 않았다.
그래서 처음에는 조금 어려움이 있었는데 열심히 구글링을 한 결과, 어느정도 쓸 수 있게 됐다. (조만간 공부한 내용을 정리해 볼 것이다.)
역시 모르는 기술은 직접 부딪혀 가며 공부하는 게 가장 효율이 좋은 것 같다!
3. 채팅
테이블의 구조를 설계하는 데 다른 테이블에 비해 시간을 좀 썼다.
처음에는 채팅 내역을 저장하는 테이블을 하나 만들었는데 저장은 수월하겠지만 조회할 때가 문제였다.
주고 받은 메세지들을 그룹으로 보여주고 싶은데 어떻게 하지? 보낸 사람과 받는 사람 기준으로 해야 하나?
고민의 결론은 채팅방을 관리하는 테이블이 있어야 한다는 것이다.
채팅 메세지마다 채팅방의 pk를 가지고 있으면 이것만 가지고도 내가 채팅했던 모든 내역을 그룹화 해서 보여줄 수 있다.
테이블은 여러 상황을 고려하여 좀 더 신중하게 설계해야 한다는 것을 다시금 되새기는 계기가 되었다.
4. 토스페이먼츠 API
여기서 꽤나 고생했다...
우선 토스페이먼츠 API의 이해도가 필요했고 실제 적용해 보는 과정에서 시간을 많이 소요했다.
프로젝트 중 여기서 제일 많이 시간을 쏟은 듯...
그래도 끈기는 못 이긴다.
몇 날 며칠 밤새가며 씨름한 결과, 내가 생각했던 기능들을 완벽히 구현해냈다!
적용 과정에 대해서는 따로 포스팅 해두었다.
5. 테스트 코드
실무에서도 테스트 코드를 작성해 보긴 했지만 세세하게 모든 케이스들에 대해서 테스트 해보진 않았다.
하지만 테스트 코드가 얼마나 중요한지를 김영한 님의 강의를 들으며 알게 되었고 프로젝트에 적극 활용했다.
테스트 코드에 대해 공부하는 과정에서 Mockito를 사용한 테스트 방식도 알게 되었다.
하나하나 테스트 해보니 실제 비즈니스 로직을 구현하는 데 확실히 도움이 되었다.
앞으로도 테스트 코드의 중요성을 항상 생각하며 업무에도 적용해야겠다고 다짐했다.
우선 내가 생각한 기능들은 다 구현이 되었다.
하지만 좀 더 다듬고 싶다는 욕심이 생긴다.
TODO
- SpringSecurity 적용해 보기!
- 소셜로그인 구현해 보기!
- MySQL, SpringBoot Server를 도커로 변경하기!
- AWS로 실제 배포해 보기!
하나하나 찬찬히 해보자.
느려도 꾸준하게!
'Project > 중고타운' 카테고리의 다른 글
| 컨트롤러 계층 단위테스트 중 No qualifying bean of type 'JwtProvider' available (0) | 2025.02.19 |
|---|---|
| 프로젝트 개요 (0) | 2025.02.09 |
| Swagger 사용 중 java.lang.NoSuchMethodError (1) | 2025.02.04 |