본문 바로가기

반응형

Spring

(53)
@MappedSuperclass @MappedSuperclass public abstract class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; } @Entity public class Member extends BaseEntity { @Id @GeneratedValue( strategy = GenerationType.IDENTITY ) @Column( name = "MEMBER_ID" ) private Long id; @Column( name = "USRNAME" ) private String username; @Man..
스프링 시큐리티 아키텍처 스프링 시큐리티 아키텍처 정리 요청이 서블릿 컨테이너에 들어오면, delegatingFilterProxy라는 서블릿 필터가 등록이 되면, FilterChainProxy는 springSecurityFilterChain 이라는 이름으로 빈이 등록된다. 참고 https://spring.io/guides/topicals/spring-security-architecture https://docs.spring.io/spring-security/site/docs/5.1.5.RELEASE/reference/htmlsingle/#overall-architecture
ExceptionTranslationFilter 필터 체인에서 발생하는 AccessDeniedException과 AuthenticationException을 처리하는 필터 AuthenticationException 발생 시 (인증 실패 시) AuthenticationEntryPoint(인증 처리기) 실행 AbstractSecurityInterceptor 하위 클래스(예, FilterSecurityInterceptor)에서 발생하는 예외만 처리. 그렇다면 UsernamePasswordAuthenticationFilter에서 발생한 인증 에러는 ExceptionTranslationFilter가 처리하는 것이 아닌 UsernamePasswordAuthenticationFilter 안에서! 에러 처리 로직이 들어있음 AccessDeniedException 발..
연관관계 맵핑 영속성 전이 CASCADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들도 싶을 때 예: 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장. @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany( mappedBy = "parent" ) private List childList = new ArrayList(); } @Entity public class Child { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn( name = "parent_id" ) priva..
Entity Mapping @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용X 저장할 필드에 final 사용 X 속성: name JPA에서 사용할 엔티티 이름을 지정한다. 기본값: 클래스 이름을 그대로 사용(예: Member) 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. 데이터베이스 스키마 자동 생성 application loading 시점에 자동 DDL 생성 테이블 중심 -> 객체 중심 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 이렇게 생성된 DDL은 개발 장비에서만 사..
준영속 상태 준영속 상태 영속 상태인 경우, 준영속 상태가 될 수 있다. 영속 상태의 엔티티를 영속성 컨텍스트에서 분리하는 것(detached) 영속성 컨텍스트가 제공하는 기능(1차 캐시, 더티체킹 등)을 사용 못함 영속이란? 엔티티가 영속성 컨택스트에 의해 관리되는 상태를 말한다. 영속 상태로 만드는 2가지 방법 1. em.persist(entity); 를 통해 엔티티를 영속성 컨택스트에 저장 2. em.find(entity); 를 통해 데이터베이스에서 조회하는 경우, 엔티티를 영속성 컨택스트에 저장 // 영속 (db에 조회한 후, 영속성 컨텍스트에 올림) Member member = em.find( Member.class, 150L ); member.setName( "AAAAA" ); // JPA의 관리 대상에서..
플러시 플러시 란? 영속성 컨텍스트의 변경내용이 데이터베이스에 반영되는 것 변경 감지 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록 쓰지 지연 SQL 저장소의 쿼리(등록, 수정, 삭제 쿼리)를 데이터베이스에 전송 플러시가 발생한다고해서 데이터베이스 트랜잭션이 커밋되는 것은 아님, 데이터베이스에 반여이되고, transaction.commit() 시 커밋 됨 또한, 영속성 컨텍스트의 쓰기 지연 SQL 쿼리들이 데이터베이스에 반영될 뿐, 1차 캐시의 내용이 삭제되는 것은 아님. 영속성 컨텍스트를 플러시하는 방법 em.flush() 로 직접 호출할 수 있다. 트랜잭션 커밋하면 플러시가 자동으로 호출된다. JPQL 쿼리 실행시 플러시가 자동으로 호출된다 Member member = new Member( 200L, "m..
영속성 컨텍스트 영속성 컨텍스트란 ? 엔티티를 영구 저장하는 환경 entityManager.persist(entity); // entity를 영속성 컨텍스트에 저장하겠다. 영속성 컨텍스트를 이용해서, 엔티티를 영속화 한다. 즉, 디비에 저장하는 것이 아니라 엔티티를 영속성 컨텍스트에 저장한다. 엔티티 매니져를 통해 영속성 컨텍스트에 접근한다. Entity Manager Factory 란? 요청이 들어오면, 엔티티 매니저를 생성한다. Entity Manager 란? 내부적으로 데이터베이스 커넥션을 이용하여 디비에 접근한다. Entity manager factory 를 통해 요청이 올 때마다 Entity manager를 생성하게 되고, 이 Entity manager는 내부적으로 db의 커넥션을 사용하여 디비에 접근하게 된다..

반응형