Lv.4 N+1 문제 개선하기 우선 fetch join과 EntityGraph의 차이를 알고 갈 필요가 있다.https://stackoverflow.com/questions/21549480/spring-data-fetch-join-with-paging-is-not-working Spring-Data FETCH JOIN with Paging is not workingI am trying to use HQL fetching my entity along with sub-entities using JOIN FETCH, this is working fine if I want all the results but it is not the case if I want a Page My entity is @Entity @D...stackoverflow.. 2025. 1. 1. Lv.5 테스트코드 수정하기 1. PasswordEncoderTestmatches메서드에서 encodedPassword와 rawPassword의 위치가 바뀌어있다.코드 누가 짰냐 ㅡㅡ 하면서 수정해줬다boolean matches = passwordEncoder.matches(rawPassword, encodedPassword); 2. CommentServiceTestcomment쪽에서 반환된 result객체를 구체적으로 확인하지 않고 있다. result가 notnull인지만 확인하는 테스트코드를 짠 사람은 정말 혼내줘야한다// thenassertNotNull(result);assertEquals(request.getContents(), result.getContents());assertEquals(user.getId(), resu.. 2025. 1. 1. Lv.3-4 & Lv.6 전체적인 리팩토링 일기 문제1. response가 과도하게 많아 관리하기 힘드며, entity에서 response로 변환하는 과정을 response에 대한 생성자로 처리해 유지보수 하기 힘들다. 2. service계층에서 처리하고 있는 일이 너무 많다. token 생성, entity -> dto 로 변환작업, 비즈니스 로직, request 에대한 validate로직.. SRP를 완벽하게 위반하고 있다. 3. 예외처리가 미흡하다. 1. 과도하게 많은 response 압축과 변환과정 간소화public interface Mapper { S toDto(E entity);}@Componentpublic class UserMapper implements Mapper { @Override public UserRespons.. 2024. 12. 31. Lv.6 의존성에 주목하여 리팩토링 하기: DIP @Service@RequiredArgsConstructorpublic class AuthService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; private final JwtUtil jwtUtil; public SignupResponse signup(SignupRequest signupRequest) { if (userRepository.existsByEmail(signupRequest.getEmail())) { throw new InvalidRequestException("이미 존재하는 이메일입니다."); } .. 2024. 12. 30. DDD와 객체지향에 대한 생각 3-layer architecture로 개발을 하다가 좋은 패키지 구조에 대한 갈증을 느껴서 시작한 DDD가 생각보다 어려운 것 같다.현재 내 DDD 패키지구조를 살펴보면 이러하다.interface layer의 controller는 app layer에 의존하며 service를 호출시켜 client에게 dto를 반환하거나, validation, exception을 처리하거나, session을 체킹한다.app layer의 service는 domain layer에 의존하며 domain model class에 있는 정적 팩토리 메서드 또는 repository를 호출해 새 객체를 만들어서 crud를 수행한다.그리고 domain layer는 그저 존재한다언뜻보면 꽤 괜찮은 듯 하지만 aggregate root가 겨.. 2024. 12. 18. 튜터님의 피드백2 1.세션을 User 엔티티로 저장하고 확인하는데 굉장히 문제가 많다. DDD개념과도 충돌한다.사실 예전에 dto로 묶으려다 안돼서 그냥 User로 냅뒀는데 UserId로 string으로 처리해야겠다. 코드 다 갈아엎어야한다. 하하 2.그 외 추천도서: 객체지향의 사실과 오해(토끼책)object 오브젝트테스트 주도 개발토비의 스프링 3.공부할거리프록시, transaction의 흐름, acid원칙, transactional과 1차캐시의 사용 2024. 12. 17. Redis queue, Spring scheduler + ratelimit 트러블슈팅 원래 updateViewCount 코드의 문제: 그냥 async만 사용해서 비동기적으로 처리하고있다. 하지만 대량의 요청이 들어오면 서버 리소스가 낭비된다거나, 카운팅이 중복될 수 있다. 따라서 분산 처리를 효율적으로 할 필요가 있었다. 해결방법: redis queue와 spring scheduler를 이용해 요청이 있을 때 마다 redis queue에 담고, batch 처리를 통해 일정 시간마다 한번에 반영한다.@Service@AllArgsConstructorpublic class BoardQueueService { private final RedisTemplate redisTemplate; public void addToQueue(Long boardId){ redisTempla.. 2024. 12. 17. 튜터님의 피드백 1. DDD에서의 domain은 repository 등 다른 파일에 의존하지 않아야 한다. DDD를 사용하기보단 3-Layer Architecture도 공부할 거리가 많으니 사용해봐라. DDD는 domain내부에서만 상호작용 해야한다. service검증로직(validtate) 등은 repository가 아닌 user객체로 진행해라. (하지만, DDD 본것중에 거의 제일 잘 썼다 2. get요청에 대한 캐시메모리는 기본적으로 브라우저에서 지원하므로 cache를 사용하는것은 비효율적이다. 거기다, cache를 남용하면 비용이 엄청나다. 기본적으로 redis를 사용하는 이유는 매우 빨라서이고, 단순 cache에 국한되기보다는 다양한 시스템에 많이 사용될 수 있다.메모리에 관한 공부가 필요하다. '운영체제' .. 2024. 12. 17. Redis Insight 테스트코드 없이 테스트 작업을 진행 하면서(.. 테스트코드 공부해야되는데..)redis cache에 대한 직관적인 확인이 필요해졌고, 캐시를 한 눈에 모아볼 수 있는 도구인 redis insight gui에 대해 알게되었다. redis를 실행하고 insight를 실행하면 정상적으로 캐시들이 보이고, 편하게 테스트 할 수 있다.원래 캐시가 꽤 많았는데 테스트 다시 하려고 다 지운 상태다 ㅎ 이제 요 며칠 간 열심히 만든 api들을 테스트 해보자!목표는 캐싱 작업이 정상적으로 진행되는걸 내 눈으로 보는것이다.그리고 swagger가 있음에도 왜 사람들은 postman을 사용하는가? 에 대해 튜터님께 여쭤봤는데, postman이 테스트 기록도 남고 코드에 주는 영향도 적고 확실히 사용이 편하다고 하셨다.post.. 2024. 12. 16. CustomCache(Spring AOP + RedisTemplate) AOPAOP는 관점 지향 프로그래밍의 약자로, 핵심 비즈니스 로직과 부가적인 기능을 분리해서 코드를 더 깔끔하고 유지보수하기 좋게 만드는 프로그래밍 기법이다. XML설정 또는 어노테이션 기반으로 부가기능을 손쉽게 선언 가능하고, 공통 기능을 한 곳에서 관리하므로 변경이 필요할 때도 그 곳만 수정하면 된다. 1.관점(Aspect)공통된 기능을 하나의 모듈로 정의한 것. 로깅, 트랜잭션, 보안 등과 같은 기능은 여러 클래스나 메서드에 중복적으로 나타나는데, 이를 한 곳에서 정의하고 관리하는 것이 Aspect이다. 2.타겟(Target)AOP가 적용될 대상 클래스 또는 메서드다. @service 또는 @repository클래스의 특정 메서드가 AOP의 대상이 될 수 있다. 3.조인 포인트(Join Point).. 2024. 12. 15. 이전 1 2 3 4 5 6 다음