본문 바로가기

스터디 기록

(5)
Long 타입 비교와 동적 쿼리 그리고 Join Long 타입 크기 비교 시 주의할 점1) ==, equals() 차이 기억하기Java에서 Long 타입은 객체로 취급되는 래퍼 클래스이다. 따라서 Long 객체를 비교할 때 참조 값 비교와 값 비교를 혼동하지 않도록 주의해야 한다.- == : 객체를 비교할 때, 객체의 참조 주소를 비교한다. 따라서 값이 같더라도 참조 주소가 다르면 false를 반환한다.- equals() : 객체를 비교할 때, 객체의 값 자체를 비교한다. 따라서 값이 같으면 참조 주소가 달라도 true를 반환한다.  2) 되도록이면 longValue() 로 사용하기Long 객체는 내부적으로 -128, 127까지의 값은 캐싱하여 동일한 객체를 재사용한다. 그러나 이 캐싱 범위를 벗어나는 값들은 새로운 객체로 생성되기 때문에 == 로 비..
서비스 테스트와 컨트롤러 테스트 서비스 테스트보통 Mock 테스트를 진행한다.테스트할 서비스 클래스에는 @InjectMocks 어노테이션을 달아준다. 여기 Mock 객체들을 주입할 것이다.나머지 레포지토리, 서비스는 가짜 객체를 생성하 @Mock 어노테이션을 달아준다.진짜 객체를 InjectMocks에 주입하고 싶으면 @Spy 어노테이션을 달아주면 된다.@ExtendWith(MockitoExtension.class) // 전체를 띄울 필요 없고, 내가 원하는 것만 띄울 때 ExtendWith 사용public class AccountServiceTest extends DummyObject { @InjectMocks // 모든 Mock 들이 InjectMocks 로 주입됨 private AccountService accountS..
Jwt 토큰 생성 세팅과 필터 등록하기 먼저 Jwt 란 뭔지 간단하게 알아보자Jwt(Json Web Token)Jwt은 주로 사용자 인증 및 정보 전달에 사용하는 토큰 기반 인증 방식이다. 토큰 자체에 사용자 정보를 포함하고 있기 때문에 서버 측 세션 저장소가 필요하지 않다는 장점이 있다.  - 헤더 : 어떤 알고리즘을 사용해서 서명했는지에 대한 내용- 페이로드 : 인증 또는 인가에 필요한 사용자 정보를 담고 있는 부분- 서명 : 토큰의 신뢰성을 보장하기 위한 부분. 헤더와 페이로드의 데이터 무결성을 확인하기 위해 서버는 헤더와 페이로드를 조합하고, 서버의 시크릿키로 서명하여 이 서명을 생성한다.  인코딩되어있는 Jwt 토큰을 디코딩해보면 위처럼 헤더, 페이로드, 서명값을 얻을 수 있다. Jwt 기본 정보 세팅을 해보자jwt 폴더 안에 먼저 ..
SpringSecurity 세팅 UserDetails UserDetailsSerive시큐리티 세팅법을 간단하게 알아보자!먼저 UserDetails와 UserDetailsSerive 인터페이스를 각각 구현해야한다.@Getter@RequiredArgsConstructorpublic class LoginUser implements UserDetails { private final User user; @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean i..
나만의 Exception 만들기 & 유효성검사와 AOP CustomException을 직접 만들어보자서버단에서 터지는 예외가 프론트단에게 그 모습 그대로 넘어가지 않도록 예쁘게 처리해줘야한다. 즉, 예외를 내가 직접 컨트롤할 수 있어야 한다.    +) 참고로 핸들러 클래스에서 사용하는 ResponseDto 내부는 Dto 패키지 밑에 이렇게 설정해두었다.  이를 응용하면 SecurityConfig에서 발생하는 Exception로 예쁘게 응답해줄 수 있다.util 패키지 아래에 CustomResponseUtil 클래스를 생성하고 실패와 성공 시 응답을 각각 json으로 예쁘게 만들어준다.  @Valid와 BindingResult로 에러 처리하기사용자로부터 정보를 받을 때, 적절한 제한을 둬야한다. 이 제한을 쉽게 관리할 수 있는 방법이있다.RequestDto에..