일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이분탐색이란
- 운영체제
- 자료구조
- 최소힙
- 프로세스
- AVL트리
- Kruskal
- 스케줄링
- 연결리스트 종류
- 연결리스트
- spring
- MSA
- 힙트리
- 멀티프로세서
- 엔티티 그래프
- SpringSecurity
- 최대 힙
- 완전이진트리
- JVM
- heapq
- JPA
- 백준장학금
- 점근적 표기법
- HTTP
- 강화학습
- 알고리즘
- 백준 장학금
- python
- posix
- jpa n+1 문제
- Today
- Total
목록백엔드 (27)
KKanging

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

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..

엔티티 그래프를 사용하는 이유는 ? ???연관된 엔티티를 같이 조회할 때 사용하는 방법들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가..

스프링의 @Transactional 어노테이션과 트랜잭션 범위스프링의 Service 계층에 @Transactional 어노테이션을 많이 봤을 것이다.스프링의 @Transactional 어노테이션은 AOP로 구현되었으며, 메소드 시작할때 영속성 컨텍스트와 트랜잭션을 시작한다.대상 메소드가 종료하면 트랜잭션을 커밋하고 종료한다.트랜잭션을 종료하면 영속성 컨텍스트도 종료하고 같은 트랜잭션에는 같은 영속성 컨텍스트를 사용한다.트랜잭션을 커밋하면 컨텍스트를 플러시하고 변경 내용을 데배에 반영한다.그리고 데이터베이스의 트랜잭션을 커밋한다.따라서 영속성 컨텍스트의 변경 내용이 데이터베이스에 정상 반영된다.만약 트랜잭션의 예외가 발생하면 트랜잭션을 종료하는데 이때는 플러시를 하지 않는다.요약스프링의 트랜잭션 어노테이션..

다양한 의존관계 주입 방법생성자 주입수정자 주입필드 주입일반 메서드 주입 생성자 주입생성자를 이용해 의존 관계를 주입 받는 방법특징생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다.불변, 필수 의존관계에 사용수정자 주입( setter 주입)setter 라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법특징선택, 변경 가능성이 있는 의존관계에 사용자바 빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법이다.필드 주입특징코드가 간결 하지만, 외부에서 변경이 불가능해서 테스트 하기 힘들다는 치명적인 단점이 있다.DI 프레임워크가 없으면 아무것도 할 수 없다사용하지 않는걸 추천애플리케이션의 실제 코드와 관계 ..

스프링 기초, 구조 분석과 객체 지향벡엔드란?#클라이언트가 필요로 하는 데이터를 관리, 응답 , 처리를 하는 분야- 데이터 관리는 DB를 통해서 관리하고- 응답은 클라이언트가 필요로하는 데이터를 가공해서 응답한다.- 처리는 비지니스 적인 로직을 이용하여 처리한다.- 웹,앱에 대해 성능 개선을 위한 설계하는 것도 백엔드 엔지니어의 역할이다.스프링 프레임워크는 이를 더욱 효과적이고 안전한 개발을 하도록 지원해주는 자바 기반 백엔드 프레임워크다.스프링이란?스프링 역사스프링 이전에 EJB라는 예전 기술이 존재 하였다.다만 EJB는 개발자가 다루기 어렵고 지나치게 EJB 의존적이라는 이유로 사용하기 어려웠다.유겐 휠러라는 사람이 로드 존슨의 책을 보고 스프링이라는 프레임워..