본문 바로가기

전체 글61

[Test]단위테스트 시 List가 empty & null일 경우 테스트 작성 팁 @Test @WithMockUser(username = "1", authorities = "ROLE_USER") void skillNames_size가_0이고_요청이_유효하면_201_응답을_한다() throws Exception { PostSaveRequestDto requestBody = new PostSaveRequestDto("title", "content", PostType.PROJECT, PostMeeting.ONLINE, Collections.emptyList()); when(postSaveUseCase.createPost(any())).thenReturn(Post.builder().id(1L).build()); mockMvc.perform(post("/posts") .header("Autho.. 2024. 2. 4.
기본 API & Filter 이해 (3) - Logout, LogoutFilter 인증 API - Logout http.logout() // 로그아웃 기능이 작동함 protected void configure(HttpSecurity http) throws Exception { http.logout()// 로그아웃 처리 .logoutUrl("/logout")// 로그아웃 처리 URL .logoutSuccessUrl("/login")// 로그아웃 성공 후 이동페이지 .deleteCookies("JSESSIONID“, "remember-me") // 로그아웃 후 쿠키 삭제 .addLogoutHandler(logoutHandler())// 로그아웃 핸들러 .logoutSuccessHandler(logoutSuccessHandler()) // 로그아웃 성공 후 핸들러 } Logout 요청의 경.. 2024. 2. 2.
기본 API & Filter 이해 (2) - UsernamePasswordAuthenticationFilter 인증 API - Login Form 인증 UsernamePasswordAuthenticationFilter : Login Form 인증 처리를 하는 filter. 1. 사용자가 인증을 시도하면 UsernamePassWordAuthenticationFilter가 이를 처리 2. AntPathRequestMathcher : 사용자가 요청한 요청정보의 URL이 맞는지 확인 (http.loginProcessingUrl( )로 변경 가능. 디폴트 주소 값은 "/login") 3. Authentication : Authentication 객체를 만들어서, 사용자가 로그인 시 입력한 Username과 Password를 저장 4. AuthenticationManager : 인증 관리자. 위에서 만들어진 인증 객체를 전.. 2024. 2. 2.
기본 API & Filter 이해 (1) 1. 인증 API - 사용자 정의 보안 기능 구현 인증 (Authentication) 사용자의 신원을 검증하는 행위 , 회원가입하고 로그인 하는 것. 인가(Authorization) 사용자에게 특정 리소스나 기능에 액세스할 수 있는 권한을 부여하는 프로세스 Spring Security에는 HttpBasic 인증 방식과 formLogin 인증방식 두 가지 인증방식이 있다. HttpBasic 인증 방식 : Http 프로토콜에서 정의한 기본 인증 방식. formLogin 인증 방식 : 서버에 해당 사용자의 session 상태가 유효한지를 판단해서 처리하는 인증 방식. 2. 인증 API - HttpBasic 인증 • HTTP는 자체적인 인증 관련 기능을 제공하며 HTTP 표준에 정의된 가장 단순한 인증 기법이다.. 2024. 2. 2.
[Spring] Service, 인터페이스 사용하는 이유? 개요 지금 진행하고 있는 Socket 이라는 사이드프로젝트를 계획할때, 같은 백엔드 팀원과 최대한 객체지향성을 지키면서 코딩을 하자고 했었다. 그래서 Service에서도 인터페이스를 만들어 진행해 왔다. 이 부분에 대해서 조금더 자세히 파고들어가보자 한다. 그렇다면 왜 예전부터 서비스에 인터페이스를 습관적으로 사용하였을까? 예전에는 Spring 에서 AOP Proxy 를 만드는 방식이 JDK Dynamic Proxy 를 사용하여 인터페이스 기반으로만 만들게 되어 있었다. 예를 들어, 인터페이스가 있어야지 @Transactional 이런 어노테이션이 동작이 가능하기 때문이다. (AOP Proxy 만들어서 트랜잭션을 처리하기 때문에) 특정 버전부터 CGLIB 라이브러리를 사용하여, 클래스 기반으로 AOP P.. 2024. 1. 25.
[Spring] @Transactional에 private 접근 제한자가 불가능한 이유 개요 Socket 사이드 프로젝트를 진행하던 중 git에 push를 하기 전에 외부 패키지에서 사용할 일이 없는 메소드의 경우 private로 접근제한자를 설정하기 위해서 살펴보던 와중에, 아래와 같이 @Transaction이 붙은 메소드는 private 접근 제한자가 불가능한것을 발견했다. 그리고 아래와 같은 오류메시지를 알려줬다. Methods annotated with '@Transactional' must be overridable. @Transactional은 spring AOP를 사용하여 구현되는데 기본적으로 AOP는 proxy패턴 을 사용하여 구현이 된다. 결론부터 말하자면, 1. spring의 @Transactional은 proxy로 동작한다. 2. 그러므로 private 사용이 불가하다... 2024. 1. 25.