Spring

Spring

QueryDSL (1)

QueryDSL 란? QeuryDsl -> 복잡한 쿼리, 동적쿼리 를 위한 라이브러리 이다. 또한 Q 클래스를 생성한다. 장점은 ㄴ 쿼리를 자바 코드로 작성하기 때문에 문법 오류를 컴파일 시점에서 해결. ㄴ 동적 쿼리 문제 해결 ㄴ 쉬운 SQL 스타일 문법 ㄴ 단순 반복 X ㄴ 개발자가 비즈니스 로직에만 집중할수 있도록 도움. 단점은 ㄴ 초기 설정이 불편하다.. 주의사항 Q 클래스들은 버전 up 이 될시 세부적으로 바뀔수 있으므로 git 에 올리지 말것 - 쓰는데 상관 없음. JPQL vs QueryDSL JPA 에서 지원해주는 JPQL 과 QueryDSL 의 차이점은 JPQL 은 직접 쳐야하지만 QueryDsl 은 매서드가 존재함으로 실수 할 가능성이 낮다. 즉 컴파일 오류를 잡아주니 QueryDsl ..

Spring

Filter

Filter 란? - Filter란 Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있습니다. - 주로 범용적으로 처리해야 하는 작업들, 예를들어 로깅 및 보안 처리에 활용합니다. - 또한 인증, 인가와 관련된 로직들을 처리할 수도 있습니다. - Filter를 사용하면 인증, 인가와 관련된 로직을 비즈니스 로직과 분리하여 관리할 수 있다는 장점이 있습니다. Filter는 한 개만 존재하는 것이 아니라 이렇게 여러 개가 Chain 형식으로 묶여서 처리될 수 있습니다. * Spring 에서 모든 호출은 DispatcherServlet 을 통과하게 되고 이후에 각 요청을 담당하..

Spring

Spring Security (3)

Spring Security 란? Spring Security는 일반적인 공격에 대한 인증 , 권한 부여 및 보호 기능을 제공하는 프레임워크이다 Filter Chain FilterChainProxy 를 통해 상세 로직을 구현하고 있다. Spring Security 필터 구조 는 아래와 같다. UsernamePasswordAuthenticationFilter -> UsernamePasswordAuthenticationFilter -> AuthentucationManager Security 대신 Filter 처리 해보기 @Slf4j(topic = "AuthFilter") @RequiredArgsConstructor @Component @Order(2) public class AuthFilter impleme..

Spring

JWT

JWT 란? JSON 포맷을 이용하여 사용자에 대한 속정을 저장하는 Claim 기반의 Web Token 이다. 일반적으로 쿠키 저장소를 사용하여 JWT 를 저장한다. ( Header ) 세션ID 로 해도 되는데 왜 JWT? 먼저 세션 ID 로 관리할때 만약 서버를 여러대 두고 사용하면 세션을 관리할때 서로 서버의 세션들이 있을텐데 어떻게 관리할까... - 해결 방법 : Sticky Session : Client 마다 요청 Server 고정. 또는 세션 저장소 생성하여 모든 세션을 저장. 하지만 JWT 사용하면 로그인 정보를 Server 에 저장하지 않고 Client 에 로그인 정보를 JWT 암호화 저장 -> JWT 통해 인증 / 인가 모든 서버에서 동일한 Secret Key 소유 Secret Key 통한..

Spring

@Configuration 쓰고 안쓰고의 차이점

@Configuration 어노테이션 @Configuration 어노테이션을 안에 보면 @Component 컴포넌트가 있다 즉, @SpringBootApplication 이 실행될때 @Configuration 이 붙은 클래스에 @Bean 매서드들을 바로 IoC컨테이너에 등록이 시켜준다. 해당 @Bean 매서드를 호출하게 되면 IoC 에서 불러오게 된다. 만약 안쓸경우에는 @Bean 매서드를 처음 호출할때 IoC 컨테이너에 등록시키게 되고 다음부터는 IoC 컨테이너에 객체를 가져온다.

Spring

Spring Retry

Spring Retry 가 무엇일까? 다른 서버에게 API 호출 하였을때 1번의 실패로 서비스의 로직을 모두 실패하는것은 큰 리소스 낭비가 될수 있다. 틍정 API 호출 실패 상황에서는 최대 3번의 호출 재시도를 하는 등을 많이 쓰는것으로 알고 있다. 왜 재 시도를 하는지 예시로 들어보자면 일시적장애로 Read Timeout 이나 api throttling 문제가 재시도를 해볼만한 상황이다. 즉, 실패할경우 재시도를 몇번 하고 몇초 간격으로 다시 request 를 보낼수 있는지 다 실패할 경우에도 처리가 가능하게 지원해주는것이 Spring Retry 이다. Spring Retry Template 나는 어노테이션을 쓰면서 배우고 있지만 Template 를 통해 똑같이 또는 설정하여 만들수 있다. 자세한건 ..

Spring

JPA Dirty Checking

Dirty Checking이란? 코드에서 Entity의 값만 변경하였는데 DB 업데이트 쿼리가 발생하는것을 Dirty Checking 이라고 한다. Dirty 란 상태의 변화가 생긴 정도를 의미한다. JPA 에서 트랜잭션이 끝나는 시점에 변화가 있는 모든 entity 객체를 데이터 베이스에 자동으로 반영해준다. Dirty Checking 내부 구조 위의 사진처럼 JPA 는 commit 하는 순간 내부적으로 flush 가 호출되고 이때 Entity 와 스냅샷을 비교 한다. 만약 비교하여 변경된 값이 있으면 update 쿼리를 쓰기 지연 SQL에 넣어둔다. 트랜잭션이 다 끝나면 commit() 를 하여 DB 에 저장을 한다. 주의사항 당연한 소리이지만 Dirty Checking 은 Entity 에만 적용이되..

Spring

Hibernate

Hibernate JPA 인터페이스를 구현하는 실제 구현체는 매우 여러 종류가 있는데 가장 많이 사용하는 것이 Hibernate 이다. Hibernate 는 ORM 으로 객체로 DB 와 매핑해주는 것이다. 이때 우리가 배웠던 String 타입으로 sql 문을 쓰고 DB 에다가 날려 정보를 가져오는것을 Hibernate 을 통해 객체로 매핑하여 가져오는것이다. 즉, Hibernate 내부적으로 쿼리를 날려 그 데이터를 객체로 변환시켜주는 것이다. 이해를 위한 코드 public class DB_Connect { private static DB_Connect db; private final String jdbc = "com.mysql.jdbc.Driver"; private final String url = "..

Spring

JPA 구조 및 이론

JPA 의 구조 JPA 는 기본적으로 데이터베이스에 있는 테이블들을 객체로 가져오는 ORM 이다. ORM 이란? 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 하지만 좀더 깊게 공부해보고 1차캐시 2차캐시 라는것을 알게 되었다. JPA의 1차캐시, 2차캐시 먼저 1차캐시에 대한 설명을 하자면, 1차캐시는 영속성 컨텍스트 에서 엔티티를 자동으로 관리하게 된다. 영속성 컨텍스트가 엔티티를 메모리에 보관하는 공간으로 같은 객체가 있다면 동일성이 보장 된다. 좀 더 찾아보니 우리가 별도의 설정을 안해도 EntityManager 인터페이스에서 관리를 하고 있다. 2차캐시에 대한 설명이다. 1차 캐시와는 다르게 우리가 별도로 설정을 해줘여 된다. ( 캐시 전략, 수명, 공유 범위 등..

Spring

@Component / @ComponentScan

@Component 란? 스프링 프레임워크에서 컴포넌트 스캐닝을 통해 빈으로 등록되는 클래스에 적용되는 어노테이션이다. 즉 @SpringBootApplication 에서 @ComponentScan 를 하기 때문에 자동적으로 Ioc 컨테이너에 등록 된다. 자세한 내용은 아래에 설명 하겠다. @ComponentScan 해당 Bean 들을 전부 Ioc 컨테이너에 등록시켜준다. Spring boot 에서는 어떻게 할까? @SpringBootApplication 에 들어가게 되면 위와 같이 @ComponentScan 이 포함되어 있다. 즉 Spring 에서는 xml 파일을 통해 bean 을 등록했다면, 여기에는 @SpringBootApplication 에서 @ComponentScan 어노테이션을 통해 하위 패키지..

Domae_
'Spring' 카테고리의 글 목록 (2 Page)