profile
渽晛
post-thumbnail

필터를 사용한 API 성능 로깅 (without Spring AOP)

서비스를 개발하다보면 자신이 만든 API가 잘 동작하는지 확인해야 합니다.물론 꼼꼼한 슬라이스 테스트를 통해서 잘 동작하는 지 검증할 수 있습니다.성능 또한 테스트가 수행되는 시간, 발생하는 쿼리 등을 보며 확인할 수 있죠.하지만 실제 돌아가는 환경처럼 디버깅이 힘든

약 8시간 전
·
0개의 댓글
·
post-thumbnail

N+1 총 정리

JPA 사용자라면 피해갈 수 없는 N+1 문제에 대해서 정리해보려고 합니다.아주 간단한 예시로 살펴봅시다!위와 같이 Team이라는 엔티티에서 Member, Dog 라는 두 엔티티를 @OneToMany로 가지고 있습니다.cascade 옵션과 fetch 옵션은 테스트하기

2023년 9월 12일
·
4개의 댓글
·
post-thumbnail

RestAssured + RestDocs 문서화

프론트엔드와 노션의 API 명세를 통해 협업하고 있었습니다.어느날 백엔드측에서 API를 수정하고 노션의 명세를 최신화하지 않았습니다.그 결과…프론트엔드 극대노SwaggerRestDocsSpringdoc위의 선택지들이 있었고, 저희는 2번을 선택하기로 했습니다.이유는 테

2023년 8월 31일
·
0개의 댓글
·
post-thumbnail

단방향 매핑에서 관계의 주인이 아닐 때 같이 삭제하는 방법

매우 간단한 Team이 존재합니다.Team과 다대일 관계를 가지는 Member가 존재합니다.이렇게 한 Team에 여러 Member가 존재할 때 Team을 삭제하면, 해당하는 Member들도 모두 삭제되면 좋겠습니다.Member 테이블에 Team의 ID가 존재합니다. T

2023년 8월 15일
·
0개의 댓글
·
post-thumbnail

테스트 메서드에서 @Transactional 주의 사항

간단한 이름을 가지는 Member 엔티티가 있습니다.MemberService에서 Member의 이름을 변경시키는 메서드를 만들었습니다.JPA의 변경감지를 통해 업데이트하려고 합니다.잘 동작하는지 검증하기 위해 테스트를 작성했습니다.앗? 실패하는 군요.하지만 당연합니다.

2023년 8월 15일
·
0개의 댓글
·
post-thumbnail

RestAssured 테스트에서 영속 컨텍스트가 보이지 않아요!

위와 같이 간단한 Member 조회용 API가 있습니다.잘 동작하는지 보기 위해서 위와 같이 테스트를 짰습니다.@Transactional을 붙인 이유는 \`MemberRepository존재하지 않는 멤버라고 합니다…!우리는 보통 JPA Repository, JPQL 등

2023년 8월 15일
·
0개의 댓글
·
post-thumbnail

소름 돋는 OrElse, OrElseGet

요즘 카페 서비스에 가입한 유저가 존재한다.원하는 카페들을 좋아요를 눌러서 자신의 좋아요 목록에 저장된 것을 확인했다.다음 번에 다시 들어와서 로그인을 하니…좋아요 목록이 초기화됐다ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ간단한 예시를 가져왔다.\`MemberService테스트를 하기

2023년 8월 9일
·
0개의 댓글
·
post-thumbnail

Lazy Loading, Eager Loading에 관한 고찰

JPA 연관관계에서는 Fetch Type을 정해줄 수 있다.Lazy, Eager 둘 중 하나를 선택할 수 있다.무엇을 하는 설정이냐면,JPA를 사용해서 엔티티를 조회해올 때 연관 관계의 엔티티들도 Select 해올 것인지 아니면 프록시 객체로 대체할 것인지를 정하는 것

2023년 8월 9일
·
0개의 댓글
·
post-thumbnail

Spring Boot3 OAuth2 구현

OpenID와 OAuth2.0Spring Boot만으로 OAuth2 로그인 기능을 구현한다 (RestTemplate을 곁들인)인증 코드를 받는다받은 인증 코드를 통해서 Provider(Google, Kakao)에게 토큰을 받는다토큰으로부터 Open ID를 파싱한다파싱해

2023년 8월 8일
·
4개의 댓글
·

백준 1107 리모컨

수빈이는 TV를 보고 있다. 수빈이는 채널을 돌리려고 했지만, 버튼을 너무 세게 누르는 바람에, 일부 숫자 버튼이 고장났다.리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있다. +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로

2023년 7월 7일
·
0개의 댓글
·
post-thumbnail

MySQL 락 실험

한 세션에서 글로벌 락 획득다른 세션에서 insert문 실행이 불가능한 모습한 세션에서 네임드 락 획득다른 세션에서 “salmon” 락 얻기 대기한 세션에서 테이블 전체에 대해서 S락을 걸은 모습테이블 레벨에 IS 락도 걸린 모습 \* for share, in sh

2023년 6월 23일
·
2개의 댓글
·
post-thumbnail

인터페이스의 디폴트 메서드를 사용한 요금 정책 도메인 구현

지하철 미션과 장바구니 미션에서 요금 정책에 대한 설계가 필요했다.요금 및 할인 관련은 바뀔 가능성이 높은 도메인이므로 매우 유연한 설계가 필요하다!!요금 정책이 좀 더 복잡했던 지하철 미션을 예시로 들어서 바꿔보자.우선 기존 내가 설계했던 방식은 아래와 같다.요금 정

2023년 6월 5일
·
0개의 댓글
·
post-thumbnail

도메인 엔티티에서의 Equals, HashCode

위처럼 (DB의 PK값, 출발역, 도착역, 거리)를 가지는 경로(Path) 객체가 있다.같은 Path 끼리의 동등성을 비교해야 하는 상황이 있다.이때 처음에는 다음과 같이 생각했다.도메인 비즈니스를 수행하는 도메인 객체이지만 DB의 식별자를 가지는 엔티티이므로 ID값만

2023년 5월 22일
·
0개의 댓글
·
post-thumbnail

Interceptor, ArgumentResolver와 함께 보는 스프링 동작 원리

이번 미션에서 학습하면서 사용했던 Interceptor, ArgumentResolver에 대해서 다시 정리해보려고 한다.인증 등을 인터셉터로 구현하면, 컨트롤러의 책임이 줄어들고 중복 코드를 제거할 수 있다.Handler의 실행을 가로챈다.HandlerIntercept

2023년 5월 9일
·
0개의 댓글
·
post-thumbnail

@Transactional(readOnly = true) ??

레벨 2의 자동차 미션을 진행하던 중에 Service 레이어에서 @Transational 어노테이션을 사용했다.어떤 메서드에 대해서 Atomic 하게 처리하기 위해서 사용했는데, 이때 영속 레이어의 읽기 작업만 호출할 때는 추가로 readOnly 옵션을 적용해줬다. 그

2023년 4월 24일
·
0개의 댓글
·
post-thumbnail

Chapter 17 리액티브 프로그래밍

빅데이터: 페타바이트 단위로 구성다양한 환경: 모바일 디바이스 ~ 클라우드 기반 클러스터사용패턴: 24시간 서비스, 밀리초 단위 응답리액티브 프로그래밍의 핵심 원칙반응성 : 빠르면서 일정하고 예상할 수 있는 반응 시간을 제공한다.회복성 : 장애가 발생해도 시스템은 반응

2023년 3월 24일
·
0개의 댓글
·
post-thumbnail

Chapter 8 컬렉션 API 개선

세 문자를 리스트로 저장하려면 위와 같이 많은 코드가 필요하다.Arrays.asList() 메서드를 사용하면 간단하게 줄일 수 있지만 추가, 삭제 등의 연산이 불가능하다.그렇다면 집합은 어떻게 만들까?컬렉션을 인수로 받는 HashSet의 생성자를 사용할 수 있다.또는

2023년 3월 13일
·
0개의 댓글
·
post-thumbnail

Chapter 2 동작 파라미터화 코드 전달하기

동작 파라미터화(behavior parameterization)를 이용하면 자주 바뀌는 요구사항에 효과적으로 대응할 수 있다.사과의 색이 GREEN이라면 result로 반환하는 상황이다.다른 색의 결과가 받고 싶을 때는 ??색상을 파라미터화하면 위와 같이 원하는 색으로

2023년 2월 19일
·
0개의 댓글
·

백준 2887 행성 터널

때는 2040년, 이민혁은 우주에 자신만의 왕국을 만들었다. 왕국은 N개의 행성으로 이루어져 있다. 민혁이는 이 행성을 효율적으로 지배하기 위해서 행성을 연결하는 터널을 만들려고 한다.행성은 3차원 좌표위의 한 점으로 생각하면 된다. 두 행성 A(xA, yA, zA)와

2023년 1월 30일
·
0개의 댓글
·

백준 3665 최종 순위

올해 ACM-ICPC 대전 인터넷 예선에는 총 n개의 팀이 참가했다. 팀은 1번부터 n번까지 번호가 매겨져 있다. 놀랍게도 올해 참가하는 팀은 작년에 참가했던 팀과 동일하다.올해는 인터넷 예선 본부에서는 최종 순위를 발표하지 않기로 했다. 그 대신에 작년에 비해서 상대

2023년 1월 29일
·
0개의 댓글
·