Back-end/Spring Boot25 [JPA] JPA의 Entity의 Equality 동일성에 대하여 문제 상황 어떤 회원이 한 게시물의 조회수를 최초에 한번만 올릴 수 있도록 로직을 짜는 과정에서, NullPointer에러가 발생했습니다. 회원과 게시물 Entity를 다:다 관계로 연결하기위해서 조인 테이블 역할을하는 엔티티를 중간에 껴서, 회원 -다-------1-->조인테이블 2022. 11. 5. [Oauth2] Oauth2로 회원가입 / 로그인 기능 구현하기 Oauth2란? 간단하게 말하자면, 지금은 너무나도 익숙한 소셜 로그인 서비스이다. 어떤 특정 서비스에서 인증을 직접 진행하는 것 대신에 구글이나 네이버, (카카오...) 등의 신뢰할 수 있는 기관에서 대신 인증을 진행하는 것이다. 사실, Oauth는 여러 인증 방법(flow)를 여러 웹서비스 등의 여러 서버스에게 제공하는 '규약'이고, 이 규약을 지켜 구글 페이스북 등의 회사에서 실제 인증 서비스를 진행하는 것이다. OAuth 2.0 is the industry-standard protocol for authorization. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for w.. 2022. 11. 3. [JPA] Infinite Recursion 해결법 Infinite Recursion이란? 양방향 연관관계를 가진 Entity를 Json으로 직렬화할 때, 서로가 서로를 무한히 참조하면서 발생하는 에러이다. 해결법 @JsonIdentityInfo 이 어노테이션을 클래스레벨에 붙이게 되면, Mapper가 직렬화할 때매다 지정한 ID 객체를 추가해서 다시 스캔되지 않도록한다. 아래는 Member와 WIshlist가 일대다 양방향 관계일 때, 위시리스트에 @JsonIdentityInfo를 추가한 모습. @JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class) public class Wishlist extends BaseEntity { @Id @GeneratedValue(strate.. 2022. 10. 23. [SpringBoot] HttpSecurity 보안 설정 정리 SpringSecurity에 보안 설정을 하기위해서 Configuration Class에서 HttpSecurity를 통해 SecurityFilterChain을 Bean으로 생성하는데요. 이때 HttpSecurity에 어떤 설정들을 해줄 수 있는지 정리해보았습니다. 기본 형식 기존에는 WebSecurityConfigurerAdapter를 통해 보안설정되었지만, 현재는 deprecated되어 SecurityFilterChain를 통해 아래처럼 보안설정을 하게 되었습니다. @Configuration @EnableWebSecurity public class FormLoginSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecu.. 2022. 10. 13. [SpringBoot] SpringSecurity 인증 처리 흐름 목적 주 목적 입력한 ID를 가지고 DB에서 매칭되는 비밀번호를 불러와서, 입력한 비밀번호와 비교하여 일치하는지 검사. 유효하다면, 해당 사용자 정보를 어딘가에 저장해두어, 어플리케이션이 이 사용자를 특정 권한을 가진 인증된 사용자라는 것을 검사하게 함. 부 목적 다양한 인증 방식을 유연하게 적용할 수 있도록 함. 흐름 기본적으로 스프링시큐리티는 필터에서부터 작업을 시작합니다. 필터는 아래 그림처럼 Spring Context로 진입하기 전과 후에 SevletContext에서 공통적인 전처리 / 후처리 작업을 진행하는 역할을 합니다. 그래서 이 필터는 서블릿임으로 스프링 빈을 비롯한 스프링 기술들을 사용할 수 없었지만, 더욱 복잡한 기능을 위하여 사용할 필요가 생기게 됐습니다. DelegatingFilte.. 2022. 9. 26. [SpringBoot] WebClient 이해하기(feat. block/non-block과 동기/비동기) WebClient란? WebClient는 간단히 말하면 http Request를 보내고 Response를 받아오는 일련의 과정을 편리하게 하는 패키지의 인터페이스이다. 원래 같은 역할을 하는 가장 대표적인 기능이 RestTemplate이지만, Spring 5.0부터 maintenance 모드가 되었고, WebClient를 사용하라고 권고하고 있다. 그렇다면 WebClient와 RestTemplate의 공통점과 차이점은 무엇일까? 공통점은 위에서 말한 것처럼, Http Request를 보내고 Response를 받아오는 역할을 하는 것이고, 차이점은 RestTemplate는 block방식이고, WebClient는 non-block방식입니다. 그리고 RestTemplate은 동기 방식을 사용하고, WebCli.. 2022. 8. 1. [SpringBoot] 빌더 어노테이션(@Builder)와 빌더 패턴 https://esoongan.tistory.com/82 빌더 패턴이란 객체일관성/객체불변성과 가독성을 만족시키기 위해 자바 빈즈 패턴을 내부 클래스를 활용하여 발전시킨 디자인패턴입니다. 자바빈즈 패턴 클래스를 구현할 때 필수적인 필드는 생성자로 받고, 선택적인 필드는 setter를 통해서 받는 디자인 패턴. 기존의 점증적 생성자 패턴의 가독성 문제를 해결할 수 있다. //점증적 생성자 패턴 class Employee { private String name; // 필수 정보 private String hobby; // 선택적 정보 public Employee(String name) { //필수정보를 생성자에 담음 this.name = name; } public Employee(String name, St.. 2022. 7. 22. [SpringBoot] 스프링부트 이해하기 - 6편 리플렉션과 어노테이션으로 디스패처 필터 만들어보기 이번 시간에는 지난번에 살펴본 리플렉션과 어노테이션을 활용하여 디스패처 필터를 직접 만들어보고자합니다. 간단하게 만들어보면서 스프링에서 제공하는 디스패처 서블릿의 일부를 이해할 수 있을 것 같습니다. 이번엔 '메타코딩'님의 유튜브 자료를 참고했습니다. https://www.youtube.com/watch?v=P5fPc2tjOko&list=PL93mKxaRDidFGJu8IWsAAe0O7y6Yw9f5x 컨트롤러와 DTO 구현하기 디스페처를 통해 최종적으로 동작시킬 컨트롤러와 DTO를 우선 구현합니다. 참고로 리플렉션을 배우면서 하나 더 알게 된 DTO를 사용하는 이유가 있습니다. 호출한 메서드 마다 필요한 값(필드, key)가 다 달라서, 어떤 메서드가 호출될지 모르기 때문에 어려운 점이 있지만, 메서드마다.. 2022. 7. 21. [SpringBoot] 스프링부트 이해하기 - 5편 Annotation 지금까지 알아본 것을 정리해보면 스프링부트가 어떤 기술을 활용하여 사용자의 요청을 개발자가 작성한 컨트롤러까지 연결시켜주는가에 대해 정리해보고 있습니다. IoC/DI부터 서블릿, 리플렉션까지. 하지만 스프링부트를 사용할 때는 우리는 결국 어노테이션을 사용하여 컨트롤러를 만듭니다. 그래서 오늘은 어노테이션에 대해서 다뤄볼까합니다. Annotation(@) 더보기 In the Java computer programming language, an annotation is a form of syntactic metadata that can be added to Java source code. -wikipedia 위키피디아의 정의는 다음과 같습니다. 무언가 추가적인 정보를 주는 기능을 하나봅니다. 어떻게 추가적인.. 2022. 7. 16. 이전 1 2 3 다음