전체 글(171)
-
[리팩토링] TrendPick 프로젝트 정산 프로세스 이슈 해결 및 리팩토링 과정 / 정산 프로세스 개편
[정산 시스템이란 ?] 기존 정산 프로세스는 연월(yyyy-MM) 정보를 기준으로 해당 월에 생성된 주문 상품을 복제하여 정산 데이터를 생성한다. 그래서 정산 데이터를 생성한 후 선택한 정산 데이터를 정산 처리하면 브랜드 관리자에게 수수료를 제외한 캐시가 생성되고 이를 출금할 수 있는 시스템이다. [이슈발생] 정산데이터 생성 후 정산 처리 시 500에러 발견 -> 이미 정산 처리가 되었음에도 다시 정산 데이터가 생성되어 중복이 발생하기 때문 정산 처리가 되었음에 불구하고 출금 가능 캐시가 그대로 -> 정산 처리한 회원이 어느 회원인지를 찾아서 캐시를 처리하는 과정에서 오류가 발생 해당 오류를 처리하기 위해 코드 리팩토링 중 '정산' 이라는 도메인 역할에 이상을 느꼈다. '정산' 이란 '월 정산', '연 ..
2023.08.25 -
[Junit] TrendPick 프로젝트 테스트 코드 작성 중 테스트 실행이 되지 않고 오류가 발생하는 경우
* 같은 오류일지라도 해결 방법이 모두 다를 수 있다. 테스트를 돌렸을때 빌드 오류가 뜨는 경우이다. 물론 더 길지만 알아볼 수 있는 만큼만 가져왔다. FAILURE: Build failed with an exception. 우선 using 2개가 모두 InteliJ 로 되어있는지 확인해보자. Gradle로 되어 있으면 많은 오류가 발생한다. InteliJ로 무조건 변경하자!!!! 그리고 Gradle을 빌드하지 못하는 것이 원인이기 때문에 직접 Gradle user home의 우측 파일 모양을 눌러서 해당 프로젝트의 .gradle을 식별할 수 있게끔 해보자. Command line is too long...shorten 어쩌고 저쩌고 라는 오류도 볼 수 있다. 대부분 이 오류의 해결을 위와 마찬가지로 G..
2023.08.03 -
[트러블슈팅] ILikeYou 프로젝트 - 스프링 이벤트(pub/sub) 처리에서 트랜잭션 관리
https://developer-joon.tistory.com/162 스프링 이벤트 도입에 대한 글입니다. [리팩토링] ILikeYou 프로젝트 스프링 이벤트, pub/sub구조 적용 (의존성 줄이기) 기능을 추가하다 보니, service 에서 다른 service와 결합도가 너무 높아졌다. 그리고 서비스 계층이 수행하는 일이 너무 많아져서 코드가 복잡해져서 가독성도 좋지 않았다. 그래서 코드를 기능(행 developer-joon.tistory.com [문제발생 1] ILikeYou 프로젝트에서 의존성을 낮추기 위해 스프링 이벤트를 적용하여서 코드를 분리했다. 하지만 이슈가 있음을 알 수 있었다. @Transactional public RsData like(Member member, String usern..
2023.08.02 -
[리팩토링] ILikeYou 프로젝트 스프링 이벤트, pub/sub구조 적용 (의존성 줄이기)
기능을 추가하다 보니, service 에서 다른 service와 결합도가 너무 높아졌다. 그리고 서비스 계층이 수행하는 일이 너무 많아져서 코드가 복잡해져서 가독성도 좋지 않았다. 그래서 코드를 기능(행위)에 따라 분리하기 위해서 찾아보다가 스프링 이벤트라는 것을 발견했다. 동작 원리는 위 그림과 같다. pub/sub 구조는 3가지로 분류된다. 1. 이벤트 객체(ApplicationEvent) //이벤트 처리에 필요한 내용을 담고 있음 @Getter public class EventLiked extends ApplicationEvent { private LikeablePerson likeablePerson; public EventLiked(Object source, LikeablePerson likeab..
2023.08.02 -
[트러블슈팅] ILikeYou 필터링 및 정렬 쿼리 JPQL -> Querydsl 코드개선작업
문제점 발견 기존 필터링,정렬 코드 private List findByIdFilteredAndSortedList(Long instaMemberId, int sortCode, String gender, Integer attractiveTypeCode) { switch (sortCode) { case 1: return likeablePersonRepository.findByIdFilteredAndSortedOrderByCreateDateDesc(instaMemberId, gender, attractiveTypeCode); case 2: return likeablePersonRepository.findByIdFilteredAndSortedOrderByHotOfFromInstaMemberAsc(instaMemb..
2023.08.01 -
[Redis] 레디스 사용하면서 발생한 오류를 모아보자 !
ache 'product' does not allow 'null' values; Avoid storing null via '@Cacheable(unless="#result == null")' or configure RedisCache to allow 'null' via RedisCacheConfiguration at org.springframework.data.redis.cache.RedisCache.put(RedisCache.java:144) ~[spring-data-redis-3.1.0.jar:3.1.0] RedisConfig 설정시 아래와 같은 설정을 해서 발생한 오류이다. .disableCachingNullValues() 레디스에 null값을 캐싱하게 되면 쓸데없는 메모리를 잡아먹을 수 있기 때문..
2023.07.12