728x90

Spring 31

[Spring] 스프링 트랜잭션 AOP 동작 흐름

1. 스프링 트랜잭션 AOP 동작 흐름 @Transactional어노테이션을 사용한 선언적 트랜잭션 관리(Declarative Transaction Management)의 전체 흐름에는 크게 3가지 요소가 등장한다. 트랜잭션 매니저, 트랜잭션 AOP 프록시, 트랜잭션 동기화 매니저가 이에 해당된다. 클라이언트 코드로부터 요청이 들어오면 트랜잭션 AOP 프록시가 트랜잭션 매니저를 획득하고, 트랜잭션을 시작하기 위해서 트랜잭션 매니저에게 요청한다. 트랜잭션 시작 요청 받은 트랜잭션 매니저는 데이터소스를 통해 커넥션을 받아오고 트랜잭션을 시작한다. 그리고, 트랜잭션 매니저는 트랜잭션이 시작된 커넥션을 동기화 매니저에 보관한다. 이후 트랜잭션이 종료되는 경우 트랜잭션 매니저는 트랜잭션 동기화 매니저에 보관한 커..

[Kotlin] 코틀린 + 스프링부트로 단숨에 완성하는 초강력 JWT 인증 시스템!💡 보안과 성능을 모두 잡아라!🔥

코틀린 스프링부트로 JWT구현해봤다. 제목은 어그로 ㅎㅎ GPT가 만들어준..   1. 코틀린으로 프로젝트 생성한다.라이브러리는dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-security") implementation("org.springframework.boot:spring-boot-starter-validation") implementati..

[Spring] Annotation 알아보기

스프링에서 제공하는 어노테이션에 대해서 알아보자 !!!  1. 개념@Component, @Service, @Controller, @Repository는 각각의 클래스를 특정 역할을 수행하는 Spring Bean으로 등록할 때 사용된다.각 애너테이션은 클래스가 어떤 역할을 하는지를 명시적으로 나타내며, Spring의 @ComponentScan 기능을 통해 자동으로 Bean으로 등록된다.@Service, @Controller, @Repository 어노테이션은 내부적으로 @Component 어노테이션을 사용하고 있다.    2. 광고   3. 종류@Component 가장 일반적인 형태의 어노테이션으로, 특정 역할에 종속되지 않는 일반적인 Spring Bean을 나타낸다. 공통 기능을 제공하는 유틸리티 클래스..

[JPA] Spring Data JPA에서 새로운 Entity 판단하는 방법

Spring Data JPA에서 새로운 Entity를 저장할 때 public interface SaveTestRepository extends JpaRepository {} save @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } Repository의 save 메소드로 저장한다.   저장할 때 Entity가 insert 인지 update 인지 확인하는 로..

[Spring] Expo FCM 푸시알림 구현하기 (3)

Expo FCM 푸시알림 구현하기!  클라이언트 설정 및 구현은 여기서![RN] Expo FCM 푸시알림 구현하기 (2) (tistory.com) [RN] Expo FCM 푸시알림 구현하기 (2)Expo FCM 푸시알림 구현하기!  설정은 여기서![RN] Expo FCM 푸시알림 구현하기 (1) (tistory.com) { const fcmToken = await messagi" data-og-host="devhooney.tistory.com" data-og-source-url="https://devhooney.tistory.com/315" data-og-url="devhooney.tistory.com   1. 서버쪽 firebase 설정https://console.firebase.google.com/u..

[Spring] AbstractAuthenticationProcessingFilter, OncePerRequestFilter 차이

AbstractAuthenticationProcessingFilter, OncePerRequestFilter 차이를 알아보자!!   Spring Security에서 AbstractAuthenticationProcessingFilter와 OncePerRequestFilter는 두 가지 주요한 필터 유형이다. 이들은 인증 및 요청 처리에 사용된다.  각 필터의 역할과 차이를 살펴보면,  1. AbstractAuthenticationProcessingFilter역할AbstractAuthenticationProcessingFilter는 인증 요청을 처리하는 데 사용주로 폼 기반 로그인, JWT 토큰 인증, OAuth 인증 등 다양한 인증 메커니즘을 구현하는 데 사용.특징인증 요청 전용: 특정 URL 패턴(예: ..

[Spring] 정적파일 캐시에 담기

스프링부트로 정적파일(JS, CSS 등)들을 캐시에 담아서 자원낭비를 막아보자. 1. WebConfig 생성 후 WeMvcConfigurer 인터페이스를 상속 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { } 2. registry에 리소스핸들러, 리소스로케이션, 캐시컨트롤 등을 추가 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { VersionResourceResolver versionResourceResolver = new VersionResourceResolver(); versionResourceResolver.addC..

[Spring] addAttribute, addFlashAttribute 차이

addAttribute, addFlashAttribute 차이에 대해서 알아보자 addAttribute와 addFlashAttribute는 Spring의 RedirectAttributes 인터페이스의 메서드이다. 이 둘의 차이점은 리다이렉트된 후에 사용할 수 있는 속성의 수명에 있다. addAttribute: 이 메서드를 사용하여 전달된 속성은 URL 쿼리 문자열의 일부로 전달된다. 즉, 속성은 URL에 직접 노출되므로 보안에 취약할 수 있다. 또한, URL의 길이 제한이 있을 수 있다. 주로 데이터가 작은 경우나 보안 상 문제가 없는 경우에 사용된다. addFlashAttribute: 이 메서드를 사용하여 전달된 속성은 일회성으로 저장되어 다음 요청에만 사용할 수 있다. 이러한 속성은 URL에 직접 노..

[Java] 오브젝트: 코드로 이해하는 객체지향 설계 (2)

조영호님의 오브젝트 읽고! 자세한 내용은 도서를 구입해서 보세요! 1. 영화 예매 시스템 만들기 - 상영클래스 public class Screening { private Movie movie; private int sequence; private LocalDateTime whenScreened; ... 생성자 ... public LocalDateTime getStartTime() { return whenScreened; } public boolean isSequence(int sequence) { return this.sequence == sequence; } public Money getMoviceFee() { return movie.getFee(); } public Reservation reserve..

[Java] 오브젝트: 코드로 이해하는 객체지향 설계 (1)

조영호님의 오브젝트 읽고... 자세한 내용은 도서 구입 후 확인... 1. 티켓 판매 애플리케이션 구현 - 초대장 클래스 public class Invitation { private LocalDateTime when; } - 티켓 클래스 public class Ticker { private Long fee; public Long getFee() { return fee; } } - 관람객 가방 클래스 public class Bag { private Long amount; private Invitation invitation; private Ticket ticket; public boolean hasInvitation() { return invitation != null; } public boolean ha..

728x90