https://github.com/tipi-tapi/ai-paint-today-BE 코드 보고 공부하기 프로젝트 구조 일단 common, domain으로 나뉨. 다른 데서도 보니까 global, domain 이런식으로 공통적인 것들, 도메인들로 패키지를 크게 나누는
https://mangkyu.tistory.com/205 RuntimeException은 unchecked exception! > checked exception의 경우 예외처리가 되지 않으면 컴파일 시점에서 잡힌다. 컴파일러가 확인하기 때문에 checked exc
저번에 Response 사용을 두고 고민을 했었다. 현재로써 결론 지은 것은 success인 경우 SuccessResponse를 따로 정의하지 않고 body에 응답 결과를 담기, error인 경우 ErrorResponse를 따로 정의하여 ResponseEntity로 파싱하기이다. 이때 ErrorResponse에는 code, message, invalid...
Spring security에서 Jwt 인증 과정에서 발생하는 예외처리를 담당할 JwtAuthenticationEntryPoint를 구현하려고 했다. 역시나 그림일기 서비스가 굉장히 깔끔하게 구현이 된 것 같아서 따라하려고 봤더니 일반적으로 구현하는 방식과 차이가 있는 것을 발견했다. JwtAuthenticationEntryPoint는 보통 Authen...
SecurityConfig에서 인증 관련 익셉션 필터를 추가할 때 헷갈리는 점이 생겼었다. 지금 보면 exception filter가 authentication filter보다 앞서게 된다. 저걸 보고 아니 인증 과정에서 예외가 발생하면 그 다음 필터에서 해당 예외를 예외처리 해줘야 하는 거 아닌가? 그러니까 authentication filter ->...
저번에 인증 관련 예외처리를 하기 위해 AuthenticationEntryPoint를 implements한 JwtAuthenticationEntryPoint와 OncePerRequestFilter를 extends한 JwtExceptionFilter에 대해 알아봤다. 난 둘 중 하나만 선택해서 인증 예외를 관리하는 클래스를 하나만 두는 게 좋다고 생각했고,...
유닛 테스트를 만드려고 하고 있다. 처음엔 이런식으로 테스트를 만들었다. https://gist.github.com/zhy2on/f0ae304f951bcdd53420cf584a2e9003 그런데 이 코드는 테스트가 예상한 대로 잘 작동하긴 하는데 다른 데서 본 테스
공식문서 https://docs.spring.io/spring-security/reference/servlet/test/method.html#test-method-withsecuritycontext https://godekdls.github.io/Spring%20Security/testing/ 표 | 특성 | @WithMockUser | @WithAn...
JwtTokenProvider 리팩토링 중에 고민되는 부분이 생겼다. 그림일기 서비스에선 getAuthentication 메서드에서 UserDetailsService를 사용하지 않았고 나는 UserDetailsService를 사용했었다. 무슨 차이가 있나 봤더니 토큰 검증 과정에서 db를 조회 하느냐, 조회 하지 않느냐의 차이였다. 그림일기 서비스에서...
추상 클래스로 만듦으로써, BaseEntity는 직접 인스턴스화될 수 없다.BaseEntity가 독립적으로 사용되는 것을 방지하고, 반드시 다른 클래스에 의해 상속되어야 함을 명시적으로 나타내기 위함. MappedSuperclass일 때 abstract class로 만
Spring Security에서 ROLE\_ 접두사는 권한(Authority)과 역할(Role)을 구분하는 중요한 규약입니다. ROLE\_ 접두사의 의미:Spring Security에서 ROLE\_ 접두사가 붙은 권한은 '역할'로 취급됩니다.ROLE\_ 없이 정의된 권
Soft delete 그림일기 서비스의 User 엔티티에는 @Where 어노테이션과 함께 clause = "deleted_at is null"이 설정되어 있다. 이는 soft delete를 위한 설정인데 soft delete란 실제로 db에서 물리적으로 삭제시키는 것이 아니라 값을 변경하는 등의 조치를 통해 논리적으로 삭제하는 것을 말한다. hard ...
저번에 Soft delete에 대한 건 찾아봤었고 create 메서드를 쓰는 것, table 이름을 어떻게 할지에 대해 고민을 해봤다. 일단 create 메서드는 굳이 필요하지 않은 것 같다. 아래는 김영한님 답변 https://www.inflearn.com/community/questions/16235/생성-메서드-setter-질문 그냥 생성자를...
그림일기 서비스에선 refrencedColumnName이 사용되지 않았다. 연관관계 매핑을 할 때 모두 PK로 연결을 해준 것이다. 하지만 우리 서비스에선 그렇지 않았다. User entity가 이런식으로 되어 있고 다른 곳에서 refrencedColumnName을 사용해서 PK인 id가 아닌 studentNumber를 가지고 연관관계 매핑을 해줬었...
저번에 연관관계 매핑을 User의 String studentNumber가 아니라 Long id로 하기로 결정했다. -> https://velog.io/@zhy2on/JPA-기본키-연관관계-매핑과-3정규형 여기에 따라서 JWT 관련 코드도 변경이 필요해보였다. 원래는 JWT를 만들 때 username을 사용해 줬었다. 여기서 username은 사용자의 학번...