Spring Security Stream 스프링 시큐리티의 제일 중요한 포인트는 인증(Authentication) 과 허가 (Authorization)이다. 인증 - '누구인지 증명하는 과정' 인가(허가) - '권한이 있는지 확인하는 과정' 모든 HTTP 통신이 거쳐야하는 FilterChain 크게 보면 사용자가 건드려야 할 것 인증 필터 => AuthenticationFilter 인가 필터 => FilterSecurityInterceptor AuthenticationFilter 의 AuthenticationManager 에서 인증을 위임 FilterSecurityInterceptor 의 AccessDecisionManager 에서 인가를 위임 Authentication 과정 만약 Authenticati..
🚀 트랜잭션 🤔 트랜잭션 알기 데이터베이스를 사용하는 이유? transaction (commit 과 rollback) 다른 서비스와의 데이터 공유 동시성 트랜잭션의 ACID 원자성 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 한다. 일관성 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 격리성 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. transaction의 isolation level을 생각하면 된다. 트랜잭션 격리 수준 (Isolation level) READ UNCOMMITED(커밋되지 않은 읽기) READ COMMITTED(커밋된 읽기) REPEATABLE READ(반복 가능한 읽기) SERIALIZABLE(직..
커넥션 풀 Jdbc의 DriverManager 를 생각 해보면... url, password, user 에 해당하는 DB 드라이버를 통해 커넥션 조회 이과정에서 TCP/IP 통신에 필요한거 사용 + 인증 과정 DB는 ID, PW를 통해 내부 인증 완료, 내부에 DB 세션 생성 커넥션 생성되었다고 어플리케이션 쪽에 알림 DriverManager는 커넥션 객체를 생성해서 비지니스 로직에 사용 => 매우 비싼 비용 미리 커넥션을 생성해두고 관리하는 pool 을 하나 만들자 어플리케이션을 시작하는 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해서 풀에 보관. 커넥션 풀에 들어 있는 커넥션은 TCP/IP로 DB와 커넥션에 연결되어 있는 상태 이기 때문에 언제든지 즉시 SQL을 DB에 전달가능 🤔 커넥션 풀은..
JDBC 사용 이유 관계형 데이터 베이스에는 상당히 많은 종류가 존재 문제점 데이터 베이스를 다른 종류의 데이터 베이스로 변경하면 애플리케이션 서버에 개발된 데이터 베이스 사용 코드도 함께 변경 개발자가 각각의 데이터 베이스마다 커넥션 연결 SQL 전달 결과 응답 받는게 다 다름 ❗ 해결을 위해 JDBC 표준 인터페이스의 등장 ✅ JDBC 표준 인터페이스 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API 데이터 베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공 크게 3가지 기능을 제공 연결 SQL을 담은 내용 SQL 요청 응답 🤔 jdbc 에서 connection 얻기 JDBC가 제공하는 DriverManager.getConnection() 의 사용 DataSource 상속 받은 Driver..
🌱 값 타입 JPA 의 데이터 타입은 2가지 이다. Entity - @Entity 로 영속 대상 객체 식별자를 통해 지속적인 추적이 가능 (dirty check 가능) 엔티티의 속성 값을 변경하더라도 같은 엔티티 값 타입 - 자바 기본 타입 or 객체 식별자가 없고 숫자나 문자같은 속성만 있으므로 추적 불가 변경시에 side effect를 주의 해야한다. ❓side effect? 래퍼 클래스나 primitive 자료형을 사용했었더라면 신경을 쓸 일이 없었다. 하지만 클래스 객체들의 경우 setter같은 메서드들이 열려 있을 경우 참조로 복사가 일어나기 때문에 한쪽에서 변경을 했을경우 다른쪽에서 변경이 일어나는 부수 효과가 발생 할 수 있다. (래퍼 클래스는 setter 메서드 존재 하지 않아 불가능) J..
⭐ 프록시와 연관관계 관리 🚀 프록시 엔티티를 조화 할 때 연관된 엔티티가 항상 불러와지는 가에 대한 문제 🤔 프록시 그게 뭔데? 간단히 설명하자면 JAVA에서 프록시는 타겟의 기능을 확장하거나 타깃에 대한 접근을 제어하기 위한 목적으로 사용하는 클래스를 말한다. 프록시에 주요 기능 접근제어 권한에 따른 접근 차단 캐싱 지연로딩 부가 기능 추가 원래 서버가 제공하는 기능에 더 해서 부가 기능을 수행 ex) 요청 값이나, 응답 값을 중간에 변형 ex) 실행 시간을 측정해서 추가 로그를 남기기 후에 프록시에 대해서 더 자세히 포스팅 해보자 아무튼 JPA 또한 지연로딩과 캐싱, 그리고 Repeatable Read를 지원하기 위해 Entity 단에서 프록시를 사용한다. JPA 에서 프록시 나오게 된 이유? 🤔 ..
😼 고급 매핑 상속 관계 매핑 🤔 객체지향언어는 상속의 개념이 존재 관계형 db는??? 없다... 비스무리하게 구현을 해보자 ❗슈퍼타입 서브타입 관계 모델링 기법 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑 물리 모델인 테이블로 구성이 될 때는 3가지 방법을 택할 수 있다. 각각의 테이블로 변환 : join 전략 통합 테이블로 변환 : 하나의 테이블에서 관리 dtype 같은 구분자로 구분 서브타입 하나당 테이블을 하나씩 생성 알아둘 annotation @Inheritance : 상속 매핑은 부모 클래스에 @inheritance를 사용해야한다. @DiscriminatorColumn : 부모 클래스에 구분 칼럼을 지정한다. 이 컬럼으로 저장된 자식 테이블을 구분할 수 있다. @Discri..
🤔 연관관계 이해하기 객체 vs 테이블 🚀 테이블의 연관관계 표현 외래키를 사용하여 다른 테이블 과의 pk로 연관 관계를 표현 1:1 과 1:N 의 관계만 표현이 가능 N:N 은 2차원으로 쉽게 매핑이 불가능 🚀 객체의 연관관계 표현 다른 객체간의 관계가 있다면 참조로 연관 관계를 표현 방향성을 표현 가능 예를 들자면 한쪽 객체에서만 참조를 표현 할 수 있다. 1:1 과 1:N 말고도 N:N 관계가 표현 가능 🤔 객체와 테이블의 차이에서 오는 애매모호함 주목해야 할 점은 JPA 는 Table을 객체화 시키는 것 + java에서 손쉬운 db사용을 제공 테이블은 다른 테이블의 정보를 가져올 때 pk와 fk로 join을 한다. 즉, sql을 통해 정보를 가져와도 fk 값만 가져온다는 의미이다 하지만 이런식으로..
- Total
- Today
- Yesterday