본문 바로가기

분류 전체보기139

[JPA] 프록시에 대하여 JPA에 대해 공부하다보면 프록시라는 단어를 알게된다. 이전의 나는 그냥 가짜 객체다 정도까지만 알고 있었다. 이번에는 조금더 자세히 알아보기로 한다 JPA를 공부하면 연관관계 로딩 방식중 지연로딩이라는 것을 알게된다. 연관된 엔티티를 실제로 사용하기 전까지 조회하지 않는 것이 지연로딩이다. 이렇게 지연하면 즉시 로딩 방식에 비해 최초 로딩 시간이 빠르고 메모리 소모가 적다. 그런데 어째든 해당 연관 필드에 null이 들어가는 건 좀 그러니 뭘 채워야하는데 그게 바로 가짜 엔티티 프록시 객체이다. 프록시 객체는 엔티티 객체의 상속이다 프록시 객체가 엔티티 객체를 대체하지만 초기화후에는 엔티티처럼 작동해야한다. 때문에 엔티티 객체를 상속해서 만들어진다. 이때문에 JPA에서 엔티티 객체의 기본 생성자 접근제.. 2023. 11. 12.
[JPA] JPA 와 Hibernate , Spring Data JPA JPA를 공부하다보니 Hibernate라는 개념이 자주 나왔다. 예전에는 아 그냥 JPA하면 Hibernate라는 개념이 쓰이는 구나 했지만 요즘은 하나를 공부해도 해당 클래스의 시작점을 보고 싶다. 그래서 JPA와 Hibernate에 대해 공부하게 되었다 JPA는 기술 명세이다 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 여기서 인터페이스라는 점을 주목해야한다. 특정기능을 하는 라이브러리가 아니라 관계형 데이터베이스를 어떻게 사용해야하지는 정의하는 하나의 방법인 것이다. JPA를 정의한 javax.persistence 패키지를 보면 Interface, enum, exception,annotaion등 다양한 것들로 구성되어있다 그렇다면 Hibernate는 무엇이냐? JPA.. 2023. 11. 10.
[JPA] JPA엔티티에 기본생성자가 필요하다? JPA는 엔티티에 기본생성자, 즉 매개변수를 받지 않는 생성자를 만드는 것을 강제하고 있다. 물론 기본 생성자 없이도 정상적으로 작동하는 경우가 있지만 공식 스펙에따르면 기본생성자가 있어야한다고 기재되어있다. 그렇다면 왜 기본 생성자를 만들도록 강제할까?? 앞서 기본 생성자를 강제하는 경우 @RequestBody와 @ModelAttribute에 대해서 알아봤다. 그중에서도 @RequestBody는 Reflection을 이용해 필드, 메서드 등의 클래스의 모든 정보에 접근하여 매핑해주었다. 다만 Reflection은 생성자 호출을 할 수없었다. 그래서 기본생성자를 강제하였다. https://haebing.tistory.com/72 [Spring] @ModelAttribute와 @RequestBody에 대해.. 2023. 11. 10.
[Spring Security] 권한 부여 구성 : 액세스 앞에 얘기한 스프링 시큐리티는 회원가입할때 비밀번호 해시화, 로그인시 비밀번호 확인하고 토큰 지급 까지의 과정이다. 이제는 인증이 완료된후 사용자 세부정보가 보안 컨텍스트에 저장된후 요청이 권한 부여 필터로 위임되어 어떤 단계를 걸치는지 알아볼 것이다. 간단하게 얘기하자면 권한 부여 필터가 요청을 허용할지 결정하고 권한이 부여되며 요청이 컨트롤러로 전달된다 앞의 UserDetails 구현한 클래스를 보면 Collections 2023. 11. 10.
[Spring] @ModelAttribute와 @RequestBody에 대해 컨트롤러로 들어오는 데이터 객체를 매핑하는 어노테이션으로 @ModleAttribute와 @RequestBody가 있다. @ModelAttribute는 여러개의@RequestParam을 하나의 객체로 매핑할때 쓰이고 @RequestBOdy는 Json형태로 들어오는 body를 객체로 매핑할때 쓰인다. 스프링은 이 두 어노테이션을 통해 클라이언트가 보내주는 데이터를 객체로 역직렬화 할 수 있다 다만 데이터를 객체로 역직렬화해주는데는 필요한 규칙들이 있다. 이 규칙을 지키지 않으면 정상적으로 객체 매핑이 될 수 없다 빈 생성자가 있어야한다 두 어노테이션모두 역직렬화 과정에서 기본적으로 아무 필드도 할당하지 않는 빈 생성자를 호출해서 객체를 생성한다. 물론 빈 생성자만 있다고 되는 것은 아니다. 빈 생성자를 만든.. 2023. 11. 9.
[Spring Security] UserDetails, UserDetailsService, PasswordEncoder, AuthenticationProvider로 간단 예제 간단하게 앞에 배웠던 내용을 정리해보자 AuthenticationFilter는 요청을 가로채서 인증 책임을 AuthennticationManager에 위임하여 AuthenticationManager는 AuthenticationProvider를 이용해 요청을 인증한다 여기서 AuthenticationProvider는 UserDetailService와 PasswordEncdoer를 호출해 암호를 검증하는 인증논리를 정의한다 이후 반환된 성공한 인증 호출의 세부정보는 AuthenticationFilter에 의해 SecurityContext에 저장된다 간단한 예제에서는 bcryt 및 scrypt로 해시된 암호를 검사하고 formLogin 인증방법으로 구성할 것이다 @Entity public class User .. 2023. 11. 8.
728x90