일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- jpa n+1 문제
- 멀티프로세서
- HTTP
- 백준장학금
- Kruskal
- 프로세스
- 최대 힙
- 점근적 표기법
- 완전이진트리
- 연결리스트 종류
- 알고리즘
- spring
- python
- 운영체제
- heapq
- 자료구조
- JPA
- 스케줄링
- 백준 장학금
- posix
- SpringSecurity
- 강화학습
- MSA
- 이분탐색이란
- AVL트리
- JVM
- 최소힙
- 연결리스트
- 힙트리
- 엔티티 그래프
- Today
- Total
목록전체 글 (106)
KKanging

CorsFilterCorsFilter는 서버의 Cors 공격을 막기 위한 Fitler이다. 같은 Origin 이 아닌 출처에 대한 요청을 막기위함이다.Cross-Origin이란?위와 같이 프로토콜 + hostname + port 중에 하나라도 다르면 Cross Origin 모두 같으면 동일한 Origin이라고 칭한다.옛날에는 서버 와 프론트 서버가 동일한 서버에 있는 경우가 많았으므로 위와 동일한 Origin 에 대한 요청만 허용하도록 해서 보안을 강화하였다.하지만 요즘에는 API 서버로 많이 사용하기 때문에 프론트 서버와 백엔드 서버가 다른 경우가 많다. 이런 경우에는 대부분 백엔드 서버에서 특정 Origin을 명시적으로 허용해줘야 한다.즉Origin : protocal + hostname + port..

SecurityContextFilter의 역할SecurityContextFilter은 세션 기반의 서버를 구현했을 때 사용자가 인증을 기반을 하는 요청을 보낼 때 세션 id에 해당하는 SecurityContext 를 가져오고 ContextHolder에 Load한다. 코드 뜯어보기SecurityContextHolderFilterGenericFilterBean을 상속 받고SecurityContetRepository 와 SecurityContextHolderStrategy 를 참조 한다.request에 이 FILTER를 거쳤다는 확인을 위해 값을 저장한다.securityContextRepository로 사용자가 보낸 세션 id에 해당하는 객체를 세션 DB에서 조회후 가져온다. Supplier은 지연된 로딩을 ..

SecurityFilterChain 의 Filter들은 어떻게 구현되어 있을까?기본 디폴트로 Security 에서 제공하는 Filter들의 상속도를 그려봤다. 위에 구조를 자세히 보면 제일 최상위 서블릿에서 제공하는 Filter 와 Filter를 상속받는 GenericFilterBean 그리고 GenericFilterBean를 상속 받는 OncePerRequestFilter 가 있는 것을 볼 수 있다. 위에 의존관계가 복잡해 보이지만 패턴이 보인다. SecurityFilterChain에 구현체인 Filter들은 모두 GenericFilterBean 또는 OncePerRequestFilter 를 상속 받음을 볼 수 있다. 그래서 우리가 기본 디폴트로 제공되는 Filter 말고 커스텀을 할려면 위에처럼 ..

Preview(이때까지 배운 것들)해결하고 싶은 문제의 도메인을 MDP 형식에 맞게 문제를 정의하는 법을 배웠다.벨만 기대 방정식과 벨만 최적 방정식을 이용하여 해당 상태와 행동에 대한 가치를 구할 수 있었다.MDP를 알고 문제의 size가 작은 문제를 해결하는 방법을 배웠다.벨류 평가하기 - 반복적 정책 평가최고의 정책 찾기정책 이터레이션벨류 이터레이션MDP를 알 때의 플래닝은 벨만 방정식 2단계를 사용해서 구할 수 있었다.MDP를 모를 때 밸류 평가하기모델 프리란MDP를 모른다는 것은 정확하게 보상함수와 전이 확률을 모른다는 의미이다. 이런 상황을 모델 프리라고 한다. -> 여기서 모델은 Agent 가 행동을 했을 때 환경이 어떻게 응답할지 알려주는 모든 것을 의미하는 model of environm..

Security에서 상태를 저장해야하는 이유SpringSecurity에서 구현된 핵심 로직은 SecurityFilterChain 의 Filter들을 거치면서 수행된다.현재 요청을 보낸 상태를 저장해야 다음 Filter들이 요청의 상태를 확인하여 로직을 수행한다.SecurityContextHolderSecurityContextHolder가 현재 요청을 보낸 사용자들의 상태를 관리한다. 그리고 SecurityContext에 해당하는 정보인 Authentication 객체를 담는다.Authentication 객체는 SecurityContext에 포함되어 관리되며 SecurityContext는 0개 이상 존재할 수 있다.그리고 이 N개의 SecurityContext는 하나의 SecurityContextHolde..

ThreadLocal이란?Thread-safe 하다와 하지 않다의 차이class Data{ int a= 1; }만약 Data 클래스가 Bean 혹은 싱글톤으로 관리되어서 멀티 쓰레드 환경에서 공유되는 객체라면 위와 같은 멤버 변수는 멀티 쓰레드 환경에서 경쟁조건이 발생하는 영역이다. 여기서 thread-safe란 멀티 스레드 환경에서 즉 여러 곳에서 동시에 함수나 변수 등에 접근 가능할 때 서로 다른 스레드들이 동시에 같은 것에 접근해서 이용해도 문제가 생기지 않는다는 것을 의미한다. = 서로 다른 곳에서 동시에 접근해 작업을 수행해도 결과에는 문제가 없다는 것을 의미한다. 위 Data 클래스의 변수 a 는 thread-safe 하지 않다.ThreadLocal 이란?위와 같이 thread-safe..

DelegatingFilterProxyDelegatingFilterProxy란? >> Spring Security 의존성을 추가하면 Security에서 제공하는 Security 기능을 지원하는 Filter인 DelegatingFilterProxy를 추가한다. 요청이 들어오면 DelegatingFilterProxy는 어떻게 filter를 실행시킬까? 스프링 Bean을 찾아 요청을 넘겨주는 서블릿 필터이다. 스프링 Bean으로 등록된 Filter를 찾고 실행을 시킨다. -> 이것이 FilterChainProxy DelegatingFilterProxy 코드 살펴보기public class DelegatingFilterProxy extends GenericFilterBean { ... @Nullable ..

JPA에서 N+1 문제가 생기는 이유JPA를 사용하는 개발자라면 항상 만나는 연관관계는 1대다 혹은 다대다 일 것이다.(굳이 JPA를 사용하지 않더라도 RDB를 사용한다면)우리가 JPA를 유용하게 사용하다보면 블로그나 다른 기업 테크톡 같은 곳을 보면 JPA를 사용할때 N+1 문제를 조심해라 이런 말을 본적 있을 것이다.이번 글은 N+1은 도대체 무엇이고 어떨때 발생하며, 해결 방법은 무엇인지 정리해보겠다.가정Team 과 Member 가 1:N 관계에 있다고 가정한다.Team 에서 Fetch 전략은 LAZY이다.@Entity@Table(name = "team")@NoArgsConstructor@Getter@Setterpublic class Team { @Id @GeneratedValue(str..

Introduction이번 장은 다음과 같은 상황에서의 문제를 해결한다.작은 문제MDP를 알 때이처럼 MDP 에 대한 모든 정보를 알 때 이를 이용하여 정책을 개선해 나가는 과정을 넓게 가리켜 플래닝이라 한다.위와 같이 가장 쉬운 설정에서 정책(파이)가 주어졌을 때 각 상태의 밸류를 평가하는 Prediction 문제최적의 정책 함수를 찾는 Control 문제를 푸는 방법론에 대해 다룬다.내용은 주로 테이블 기반 방법론에 기반한다. 테이블 기반 방법론이란 모든 상태 s 혹은 상태와 액션의 페어(s,a)에 대한 테이블을 만들어서 값을 기록해 놓고 , 그 값을 조금씩 업데이트하는 방식을 의미한다. 작은 문제에서만 적용 가능하다. 4.1 벨류 평가하기 - 반복적 정책 평가(Prediction)가정MDP를 알 때..

엔티티 그래프를 사용하는 이유는 ? ???연관된 엔티티를 같이 조회할 때 사용하는 방법들fetch 옵션 (즉시 로딩)fetch joinfetch 옵션은 사용하면 N+1 쿼리가 날라가기도 하고 원하지 않을때 연관된 엔티티가 같이 조회될 수 있음fetch join 은 좋은 해결책 중 하나지만 페치 조인을 사용하면 다음과 같이 JPQL을 중복해서 작성하는 경우가 많다.// case 1select o from Order o where o.status = ?// case 2select o from Order o join fetch o.member where o.status = ?// case 3select o from Order o join fetch o.orderItems where o.status = ?3가..