프로젝트 이후) 트러블슈팅: 일급 컬렉션 버그가 난 것은 아니고 코드에 대한 트러블슈팅이다.현재 createOrder에서 cart의 정보를 메뉴(메뉴id, 메뉴정보) 로 추출하고, 메뉴를 또 validate하는 로직을 담고있다.컬렉션을 남발하는 것은 코드에서의 복잡도가 높고 가독성이 떨어지는 점을 인지하고 있었는데,튜터님이 해당 부분에 대한 피드백을 해주셔서 프로젝트가 끝났지만 트러블슈팅을 작성하게 되었다. https://jojoldu.tistory.com/412 일급 컬렉션 (First Class Collection)의 소개와 써야할 이유최근 클린코드 & TDD 강의의 리뷰어로 참가하면서 많은 분들이 공통적으로 어려워 하는 개념 한가지를 발견하게 되었습니다. 바로 일급 컬렉션인데요. 왜 객체지향적으로, 리팩토링하기 쉬운 코jojoldu.tis.. 2025. 1. 16. 아웃소싱 프로젝트 회고 또 팀장을 했다. 내가 프로젝트 두 번 연속 팀장을 했다는 사실이 별로 믿기지가 않는다...평생 책임을 좀 덜 지는 자리에서 얌전히 꿀 빨(?)았는데.. 이번 프로젝트는 배민 요기요 쿠팡이츠같은 배달 어플을 만드는 아웃소싱 체험하기였다.팀원 구성이 좋아서 발제시간에 아이디어가 샘솟았고 팀장을 맡은 덕에 마음대로 분출해냈다.지난 프로젝트에서 실력이 있는 조였음에도 불구하고 이것저것 도전해보지 못한 게 아쉬워서 이번엔 좀 불도저처럼 밀고 나갔는데 팀원들이 잘 이해해줬다.알림기능에 한이 맺힌 사람처럼 주장했다. 지난 프로젝트때 못한 게 좀 후회가 됐기 때문에..... 여튼 이렇게 첫날에 미친듯이 달렸고 3-4시간만에 api문서, erd, 와이어프레임, 코드 뼈대를 완성해버렸다.팀원들한테 귀찮은 와이어프레임을 .. 2025. 1. 14. 심화 프로젝트 KPT 회고 KPT 회고1. Keep필수 구현 사항을 빠르게 완료하고 각자가 도전하고 싶은 것들을 실행할 수 있어 좋았다.문서화를 체계적으로 진행한 점이 좋았다.새로운 기술이나 경험을 시도해 본 점이 의미 있었다.팀장이 다양한 아이디어와 방향성을 제안해 준 것이 큰 도움이 되었다.초기부터 gitignore를 활용해 GitHub 충돌 확률을 줄인 점이 편리하고 좋았다.기존 프로젝트보다 커밋과 풀리퀘스트 활동이 많아 적극적으로 협업할 수 있었다.CRUD 작성 후 코드의 공통적인 부분을 매퍼나 헬퍼로 분류한 것이 유용했다.테스트 코드를 작성하고 직접 실행해보며 실습해 본 점이 좋았다. 2. Problem발표 준비 부담으로 인해 금요일부터 추가적인 시도를 하지 못한 점이 아쉬웠다.팀원들 간에 코딩 방식의 통일성이 부족해 발.. 2025. 1. 13. 리팩토링 일기: SRP 최대한 준수해보자 1. 엔티티에 도메인 로직 위임하기변경전: rejectOrder, getOrder, getOrdersByShop68~128줄 차지검증, 저장, 레포지토리 호출, 값 변환... 오만 거 다 했다. public void validateIsPending() { if (status != Status.PENDING) { throw new InvalidRequestException(ErrorCode.CANNOT_CHANGE_STATUS); }}public void validateIsNotCompleted() { if (status == Status.COMPLETED) { throw new InvalidRequestException(ErrorCode.ALREADY_COMPLE.. 2025. 1. 13. Spring scheduler로 DB 주기적으로 업데이트하기 요청된 지 오래된 주문이나, 완료된 지 오래된 주문에 대해서도 주문을 수락하고 리뷰가 작성 가능한 구조가 마음에 들지 않았다. 이럴 때 db를 주기적으로 업데이트하도록 해주는 로직을 짤 필요가 있었고 그것은 spring scheduler가 해줄 수 있다. Spring scheduler란?특정 작업을 주기적으로 실행하거나, 예약된 시간에 실행할 수 있도록 도와주는 도구다. 기본적으로 포함된 기능이라 의존성 추가가 필요없으며 @EnableScheduling으로 기능을 활성화해주기만 하면 된다.@Scheduled 어노테이션으로 간단하게 구현 가능하며 @EnableAsync를 통해 비동기 처리도 가능하다. 스케줄링 실패에 대한 예외처리가 필요하며 작업량이 클 경우 스레드 풀을 구성하거나 비동기 작업으로 처리해.. 2025. 1. 10. WebSocket+AOP로 알림 기능 구현하기 webSocket과 aop로 알림 기능을 구현해보자. webSocket vs redis pub/sub장바구니 캐시에서도 redis를 쓰지 않았고 작은 규모의 프로젝트라 단일 인스턴스에서 간편히 하는 게 좋다.그리고 인증인가를 jwt로 처리해서 websocket 테스트가 굉장히 편한데 아래에서 다루겠다. aop vs eventListnereventlistner는 코드가 너무 더러워지고 aop로 해야 알림기능을 한 데 모아 관리하기 편하다. 1. websocket 초기 설정//WebSocketimplementation 'org.springframework.boot:spring-boot-starter-websocket'//AOPimplementation 'org.springframework.boot:spri.. 2025. 1. 9. 이전 1 다음