본문 바로가기

Back-end/Spring Boot25

[소셜 로그인 / SpringSecurity] authorization_request_not_found 에러 해결 문제 상황앱에서 소셜 로그인을 진행했을 때, authorization_request_not_found 에러를 응답 받았다.다만 조금 특이한 상황에서 발생했는데,1) 소셜 로그인 화면에서 로그인까지는 성공. 그 이후에 에러 리턴2) 한번 실패한 후에 브라우저에 로그인 기록이 남아있는 채로 다시 로그인하면 정상적으로 응답 원인우선 authorization_request_not_found이 어디서 발생하는 곳은 OAuth2LoginAuthenticationFilter의 attemptAuthentication 메서드입니다. 여기서 보면 removeAuthorizationRequest의 응답 값이 null이어서 문제가 발생하고 있습니다.OAuth2LoginAuthenticationFilter는 스프링 시큐리티에서.. 2024. 5. 26.
[DDD] SpringBoot에서 Repository 추상화하기 DDD에 따라 Repository를 구현할 때 추상화해서 구현합니다. 언제든지 DB가 바뀔 가능성을 고려해서 더 유연하게 만들어야하기 때문입니다. 그런데 SpringBoot를 비롯한 프레임워크에서는 주로 기술을 사용하기 쉽도록 추상화된 인터페이스를 사용하고 여기엔 지켜야할 규칙이 있기 때문에 바로 적용하기 어렵습니다. 어려움 도메인 엔티티와 기존 JpaRepository를 사용할 때 사용한 @Entity의 차이 @Entity 애노테이션을 비롯해서 여러 Jpa 기술에 종속적인 코드가 첨가된다. 애그리거트 안에 여러 값객체를 가지고 있다. ID 전략 JpaRepository를 사용하면 자동으로 ID를 부여하는데 이것 또한 기술 종속적이다. 위의 문제들을 해결하기 위한 방법을 알아보겠습니다. 도메인의 비즈니스.. 2023. 8. 8.
SpringBoot 3.1의 ConnectionDetails abstraction https://spring.io/blog/2023/06/19/spring-boot-31-connectiondetails-abstraction를 간단히 요약해보았습니다. spring.datasource.url 와 같이 properties로 remove service와 연결하던 것을 ConnectionDetails 라는 추상화를 통해 표현하게 됐습니다. 이것은 주로 새롭게 추가된 Docker Compose 와 Testcontainers 기능에 쓰입니다. ConnectionDetails Bean이 등록되어 있으면 이것을 사용하고, 그렇지 않으면 기존처럼 properties를 사용합니다. public interface JdbcConnectionDetails extends ConnectionDetails { St.. 2023. 8. 1.
SpringBoot 3.1의 Docker Compose MSA처럼 여러 어플리케이션을 구동하고 각각이 독립적인 DB를 가지게 되는 상황에서, 각 DB Server의 port 를 관리하는 것이 어렵기 때문에 중복 문제가 발생할 수도 있습니다. SpringBoot 3.1에서는 이러한 문제를 해결해줍니다. 각각 DB의 port를 명시하지 않고 random port를 사용하고 properties에 명시할 필요도 없어졌고, username, password 등등 또한 명시할 필요가 없어졌습니다. SpringBoot 3.1에서는 서비스를 구동하기 전에 docker compose up 를 먼저 구동해서 서비스들을 연결해줍니다. 이미 구동중이라면 그것을 감지해서 그것을 사용합니다. 서비스를 멈추면 자동으로 docker compose stop을 실행합니다. Docker Co.. 2023. 8. 1.
Entity의 PK은 Wrapper Type? Primitive Type? 결론: Wrapper Type으로 해야한다. 이유: null을 표현해야하기 때문이다. Wrapper와 Primitive의 대표적인 차이점은 1) Stack 메모리에 무엇이 저장되느냐 2) null을 표현할 수 있는가입니다. Primitive type은 Stack 메모리에 할당된 실제 값이 저장됩니다. 그렇기 때문에 메서드에 인자로 primitive type을 넘겨주게 되면, 항상 실제 값이 복사되어 넘어가기 때문에 공유가 되지 않습니다. 반면 Wrapper type의 실제 값은 Heap 메모리 영역에 저장이되고, Stack에는 실제 값이 저장된 주소를 가리킵니다.. 따라서, 메서드에 인자로 넘겨주게되면 주소값을 넘겨주게 됨으로 공유가 됩니다. 두 번째 차이점은 Null 표현 여부이다. Primitive .. 2023. 1. 29.
[애러해결] Could not resolve all files for configuration ':classpath'. 스프링부트 3.0 이상의 버전은 JAVA 17을 요구하고 있습니다! 저는 이렇게 generate해서 빌드해보니 제목과 같은 애러가 계속 발생해서, 고생했습니다...ㅎㅎ 스프링부트 버전을 3 미만으로 낮추거나, 자바 버전을 올리면 문제가 해결됩니다! Preparing for Spring Boot 3.0 Spring Boot 2.0 was the first release in the 2.x line and was published on Feburary 28th 2018. We’ve just released Spring Boot 2.7 which means that, so far, we’ve been maintaining the 2.x line for just over 4 years. In total spri.. 2023. 1. 27.
IntelliJ, 실수로 작업 내용이 날라갔을 때 복구 방법... 중 하나! 작업을 하다가 다른 브런치에서 작업 중임을 확인해서, IntelliJ의 smart checkout를 사용하다 실수로 abort를 룰렀습니다... 설마 설마,,, 다 날라갔습니다!! 이전 브런치에도 없고,,, 검색을 해보니,, 원래 이럴 때는 stash 기능을 사용하죠! 그런데 혹시나 인텔리제이님께서 호오옥시 저장해두지 않을까하는 마음에 이것저것 눌러보다가 shelf라는 탭을 발견했고, 이곳에 저장되어 있었습니다!! 여러분도 비슷한 일을 겪으신다면, Shelf 한번 눌러보십쇼... Shelf 이참에 슬쩍 찾아보니, Git의 Stash 기능을 조금 더 고도화한 기능이었습니다. 저의 상황처럼 commit하지 않고 브랜치를 옮기는 등 임시로 저장해둬야할 경우에 사용하죠. 둘의 차이점은 , Shelf는 원하는 파.. 2023. 1. 24.
[SpringTest] @MockBean과 @Mock 차이 들어가며 테스트를 작성하며 MockBean과 Mock을 둘 다 사용하게 되어, 간략하게 정리해볼까합니다. SpringBean이 필요하면 @MockBean, 아니면 @Mock을 사용하자 가장 중요한 것은 바로 이거라고 생각합니다. 테스트해야할 클래스가 Spring으로 부터 빈을 주입받아야하는 상황이라면 -> @MockBean을 그렇지 않다면 -> @Mock을 사용하는 것입니다. @MockBean이 붙은 필드의 클래스는 SpringBoot 실행 시 Bean을 구성할 때, 가짜 객체로 Bean을 만들어 DI 해줍니다. @Mock은 SpringBoot를 실행하지 않고 @Mock이 붙은 필드의 클래스를 가짜 개체로 만들어 직접 사용해야합니다. 대체로 단위테스트는 가장 작은 단위로 의존성을 제거하고 보는 것이 좋기.. 2022. 12. 1.
[WebSocket] 웹소켓이란? 들어가며 프로젝트를 진행하다 실시간 채팅 기능을 구현하게 되어, 구현하면서 공부한 것들을 정리해보았습니다. Before websocket ajax : 새로고침 없이 사용자 몰래 요청을 주고 받고 렌더링 가능 polling : 주기적으로 http 통신을 보내는 방식 장점: 응답간격 일정하게, 일괄처리 단점: 실시간은 아님, 보낼 것이 없어도 일단 보내야해서 자원 낭비. http header는 무겁다. long polling : time-out 될 때까지 소켓을 열어두는 방식, 연결이 끊기면 다시 연결하기 장점 : 실시간 단점 : 여전히 보낼 것이 없어도 계속 보내야함. What is WebSocket? 특징 양방향 전이중 통신을 위한 TCP 기반의 transport protocol 소켓 연결을 계속해서 유.. 2022. 11. 29.