분류 전체보기 82

Mybatis 다중 DB 연결 방법 (main, sub)

기존 설정되어있는 SE 데이터베이스 외에 추가로 FC 데이터베이스 연결이 필요한 상황에서 사용한 방법입니다. 각 설정파일 내 어노테이션이나 메소드 등 기능들과 흐름에 대한 설명들은 제외했습니다.일반적이지 않은 상황이라 차후에 저도 참고만 하기위해 단순 사용방법만 작성했습니다. 참고만 해주세요. 나머지는 정보가 많이 있으니 검색해보시기 바랍니다.* 사용 및 구분 명칭기존 사용중인 Database : Se / 신규 추가된 Database : Fc1. properties 또는 yml 설정 * 주의 : 프리픽스(prefix) 설정란에 데이터베이스 주소를 "url" 로 사용중이라면 "jdbc-url"로 변경# SE DBspring.datasource.se.jdbc-url=jdbc:log4jdbc:postgresq..

카테고리 없음 2024.07.04

[JPA] 더티 체킹(Dirty Checking)? + 동시성 이슈/제어

1. 더티 체킹 개념더티 체킹(Dirty Checking): JPA의 기능으로, 영속성 컨텍스트에 담긴 엔티티의 상태 변화를 자동으로 감지하여 트랜잭션 커밋 시점에 변경 사항을 데이터베이스에 반영하는 메커니즘. 2. 영속성 컨텍스트(Persistence Context)정의: 엔티티를 영속성 컨텍스트에 담아 관리하는 일종의 캐시.역할: 엔티티의 상태를 추적하고, 변경된 엔티티를 데이터베이스에 자동으로 반영. 3. 엔티티의 생명주기비영속 상태(New/Transient): 엔티티가 영속성 컨텍스트에 담기지 않은 상태.영속 상태(Managed): 엔티티가 영속성 컨텍스트에 담긴 상태. 더티 체킹의 대상.준영속 상태(Detached): 영속성 컨텍스트에서 분리된 상태.삭제 상태(Removed): 엔티티가 삭제된 ..

JPA 2024.06.13

git clone - intellij 세팅

프로젝트 권한 받기 File -> new -> Get from Version Control (레포지토리 url 또는 깃허브 계정 연결 시 레포지토리 선택) * 레포지토리 구조 그대로 따올경우 gradle 인식 못하는 경우 발생-> build.gradle 우클릭 gradle link? 머머~ 클릭 Project Structure -java version 설정 Setting - Enable annotation processing 체크Build Tools -> gradle -> intelliJ IDEA로 설정(Build and run using, Run tests using) --------------------------- main 레포지토리 fork 후 내 계정에서 관리브런치 하나 만들어서 개발 후  Pu..

Git 2022.05.30

[Security] Success/Failure Handler Custom (인증성공, 인증실패 핸들러 커스텀)

: Security에서 지원하는 인증성공, 인증실패 핸들러를 상속한 클래스를 직접 커스텀하여 사용해보자. 1. 인증성공 핸들러 커스텀 2. 인증실패 핸들러 커스텀 3. config 설정 4. 익명클래스로 처리하는 방법 1. 인증성공 핸들러 커스텀 1. SimpleUrlAuthenticationSuccessHandler를 상속한 커스텀 클래스 CustomAuthenticationSuccessHandler를 만듭니다. 2. requestCache와 RedirectStragey를 사용하여 사용자가 인증 요청 성공시 이전에 접근하려 했던 자원(리소스)의 경로로 바로 보내기 위해서 설정해줍니다. 이전의 접근하려 했던 자원(리소스)가 없는 경우 null을 반환하도록 하여 setDefaultTargetUrl에 설정해..

Spring Security 2021.12.28

[Security] 세션 제어 필터 : SessionManagementFilter, ConcurrentSessionFilter

세션 제어 필터 : SessionManagementFilter, ConcurrentSessionFilter 1. SessionManagementFilter의 핵심적인 4가지 기능 1-1. 세션 관리 : 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리 1-2. 동시적 세션 제어 : 동일 계정으로 접속이 허용되는 최대 세션수를 제한 1-3. 세션 고정 보호 : 인증할 때 마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지 1-4. 세션 생성 정책 : Always, If_Required, Never, Stateless 2. ConcurrentSessionFilter의 기능 매 요청 마다 현재 사용자의 세션 만료 여부 체크 세션이 만료되었을 경우 즉시 만료 처리 session.isE..

Spring Security 2021.12.09

[Security] 동시세션제어, 세션고정보호, 세션정책

1. 동시 세션 제어 : 동일한 계정으로 인증을 받을 떄 생성되는 세션의 개수가 허용 개수를 초과할 경우 어떻게 세션 유지할지 제어하는 것 최대 세션 허용 개수 초과 시 -> 시큐리티에서 2가지 전략을 제공합니다. 1. 이전 사용자 세션 만료 : 새로운 사용자에게 세션 생성, 이전(기존) 사용자의 세션을 만료시킵니다. 2. 현재 사용자 인증 실패 : 이전(기존) 사용자의 세션을 유지시키고, 새로운 사용자의 인증예외를 발생시킵니다. 사용 방법) http.sessionManagement() : 세션 관리 기능이 작동 protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .maximumSessions(1) ..

Spring Security 2021.12.08

[HTTP] 캐시(cache)와 조건부 요청

학습내용 캐시 기본 동작 검증 헤더와 조건부 요청 프록시 캐시 캐시 무효화 1. 캐시가 없을 경우 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다. 인터넷 네트워크는 매우 느리고 비싸다. 브라우저 로딩 속도가 느리다. 느린 사용자 경험 2. 캐시를 적용할 경우 캐시 가능 시간(유효 시간)동안 네트워크를 사용하지 않아도 된다. -> 유효시간이 남아있는 경우에도 매번 검증이 필요한 경우 네트워크 통신이 이루어지지만 Header의 메타 데이터만 주고 받아 데이터 원문이 담긴 Body는 생략되기 때문에 가볍다, 물론 데이터의 수정이 이루어진 경우를 대비해 검증 Header를 가지고 조건부 요청을 해야한다. 검증 헤더 : Last-Modifed ,ETag 조건부 요청 헤더 : If-..

HTTP 2021.12.06

[Spring] 웹 스코프(request scope) 와 Provider / 프록시

웹 스코프의 특징 웹 스코프는 웹 환경에서만 동작합니다 웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료 시점까지 관리하기에 종료 메서드가 호출됩니다 웹 스코프의 종류 request : HTTP 요청 하나가 들어오고 나갈 떄 까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리됩니다 session : HTTP Session과 동일한 생명주기를 가지는 스코프 application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 가지는 스코프 websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프 학습 내용에 따라 requset 스코프를 기준으로 다루어 보겠습니다. 나머지는 범위만 다르고 동작 방식은 비슷합니다 그림과 같이 클라이언트 A..

Spring 2021.11.30

[Spring] 빈 스코프(프로토타입 스코프 / prototype scope)

프로토타입(prototype) 스코프 빈 스코프란? 스프링은 빈을 기본적으로 싱글톤으로 생성하기 때문에 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때 까지 유지됩니다. 스코프는 말 그대로 빈이 유지할 수 있는 범위를 말합니다. 스프링은 다음과 같은 다양한 스코프를 지원합니다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너가 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더 이상 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 application : 웹의 서블..

Spring 2021.11.29

[JPA] 엔티티 설계시 주의점

엔티티 설계시 주의점 1. 엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있다 -> 변경 포인트가 너무 많아서 유지보수가 어렵다 2. 모든 연관관계는 지연로딩(fetch = FetchType.LAZY)으로 설정하자 즉시로딩은 특정 엔티티를 조회할 때(로딩될 떄) 연관된 모든 엔티티를 조회한다. 기본적으로 전부 지연로딩(LAZY)로 셋팅을 하고 필요에 따라 연관된 원하는 엔티티를 같이 조회할 경우 fetch join 또는 엔티티티 그래프로 최적화를 하는 것이 좋다 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다 특히 JPQL을 실행할 떄 N+1 문제가 자주 발생한다 실무에서는 모든 연관관계는 지연로딩(LAZY)로 설정해야 한다 연관된 엔티티를 함께 DB..

JPA 2021.11.26