본문 바로가기

Spring Boot

(55)
[Spring Boot] 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트란?JPA 에서 엔티티(Entity)를 저장하고 관리하는 메모리 상의 저장소이며일반적으로 EntityManager가 생성될 때 함께 생성되고 EntityManager가 종료되면 함께 사라집니다. EntityManager란?JPA의 핵심 객체로 DB와의 모든 상호작용을 담당하는 객체로써 영속성 컨텍스트도 EntityManager 내부에 존재하며 CRUD 등의 작업은 모두 EntityManager를 통해 이루어집니다. 영속성 컨텍스트 상태에 따른 엔티티 생명 주기비영속성(Transient) : 아직 영속성 컨텍스트에 저장되지 않은 상태(new로 만든 객체 등)영속(Persistent) : 영속성 컨텍스트에 저장된 상태(em.persist() 호출 등)준영속(Detached) : 영속성 컨텍스..
[Spring Boot] QR Code 발급하기 QR 코드 특징어떤 방향으로 스캔을 하여도 인식이 가능합니다최대 숫자 7089자, 문자 4296자에 해당하는 정보 저장이 가능합니다암호화, 위변조 방지 등 보안 기능이 존재합니다수정, 삭제가 불가능합니다. 바코드와 QR Code 차이점 바코드QR 코드정보 저장최대 20자최대 숫자 7089, 문자 4296스캔수평 방향으로 인식어떤 방향으로 스캔해도 인식 가능단점정보 저장량, 인식률수정, 삭제 불가능 의존성implementation group: 'com.google.zxing', name: 'javase', version: '3.5.0'implementation group: 'com.google.zxing', name: 'core', version: '3.5.0' 간단한 예제application.prope..
[Spring Boot] Scheduler 간단한 설명스프링 프레임워크에서 제공하는 작업 스케줄링 기능으로 특정 작업을 일정 주기마다 자동으로 실행하도록 설정할 수 있습니다.주로 배치 작업, 알림, 정기적인 데이터 처리 등에 사용됩니다.저는 지금 캡스톤 프로젝트에서 계정 삭제일로부터 1달이 지난 계정을 삭제할 로직, 통계 데이터, 유저 예약 알림 등을 사용하기 위해 정리했습니다. 주요 어노테이션@EnableScheduling스케줄링 기능을 활성화 할 때 사용됩니다(주로 설정 클래스에서 사용) @Scheduled메서드에 적용하며 스케줄을 설정합니다. 사용 예제스케줄러 설정하기@Configuration@EnableSchedulingpublic class SchedulerConfig { @Bean public TaskScheduler ta..
[Spring Boot] 파일 저장 시스템 파일 저장 시스템을 구현하기 전에 고려해야할 점1. 파일 이름 중복원본 파일 이름을 그대로 저장을 하게 된다면 파일 이름이 중복될 가능성이 존재합니다.이러한 문제점을 해결하기 위해서는 별도의 새이름을 만들어 저장해야합니다.이번 글에서 이 문제점을 UUID + _ + 원본 이름으로 유니크한 이름으로 저장하겠습니다. 2. 한 폴더에 저장할 수 있는 최대 파일 수운영체제마다 다르지만 한 폴더에 저장할 수 있는 최대 파일 수의 한계가 있습니다.해시 기반 : 파일 이름이나 ID를 해시화하여 폴더를 나누는 방법입니다.날짜 기반 : 파일 업로드 날짜를 기준으로 폴더를 나누는 방법입니다.UUID 기반 파일 이름 + 폴더화 : 파일 이름을 UUID로 변경하고, 그 일부를 폴더로 사용합니다이번 글에서는 날짜 기반 파일 분..
[Spring Boot] Optional Optional이란?Optional은 null일 수 있는 객체를 감싸는 Wrapper 클래스입니다.주로 값이 존재할 수도, 존재하지 않을 수도 있는 상황에서 null을 직접 다루지 않고 안전하게 처리하기 위해 사용됩니다. 왜 사용할까?개발자들이 가장 싫어하는 오류 중 하나가 바로 NullPointerException(NPE)입니다.예를 들어, Repository에서 findById() 메서드를 통해 데이터를 조회할 때, 해당 ID에 해당하는 값이 없으면 null이 반환됩니다.이런 경우, 아무런 체크 없이 null 객체에 바로 접근하면 NPE가 발생하게 됩니다.Optional은 이런 상황을 방지하기 위해 사용되며, 값을 감싸는 형태로 존재 여부를 명시적으로 처리할 수 있게 도와줍니다. 주요 메서드메소드..
[Spring boot] 프록시 객체(Proxy Object) 프록시 객체란?원본 객체를 감싸는 객체로 실제 객체를 대신하여 요청을 처리하는 객체입니다.메소드 호출을 가로채 추가적인 기능(로깅, 트랜잭션, 보안 등)을 수행할 수 있도록 합니다.  프록시 객체의 주요 특징AOP 적용 시 프록시 객체 사용AOP는 메소드 실행 전후에 부가 기능을 삽입하기 위해 프록시 객체를 활용합니다.@Transactional을 적용하면 대상 객체 대신 트랜잭션을 관리하는 프록시 객체를 생성동적 프록시 방식런타임에 동적으로 프록시 객체 생성트랜잭션 관리와 관련@Transactional을 사용할 경우 해당 객체의 메소드를 실행할 때 프록시를 통해 트랜잭션을 시작하고 정상적으로 종료되면 커밋을 하고 예외가 발생할 때는 롤백을 합니다. 프록시 객체 종류JDK 프록시 객체인터페이스를 구현한 객..
[Spring Boot] 상속관계 매핑 전략 개발을 진행하던 중 스, 드, 메 테이블을 작성하였고 밑의 그림처럼 테이블을 작성하였습니다.스드메의 공통 속성들을 상품 테이블로 묶고 1대1 관계로 연관관계를 설정하였으며 개발에 들어가니 너무 귀찮은 작업을 하기 시작했습니다. 처음 개발을 진행했을 때 드레스 1개 상품을 등록을 할 때 상품 테이블에 데이터 1개 드레스 테이블에 데이터 1개를 저장하고 있었습니다. 하지만 문뜩 드는 생각은 이렇게 번거롭고 귀찮은 작업을 무수히 많은 사람들이 했을텐데 간편하게 만든게 있지 않을까? 라는 생각을 찾아보았습니다.  상속 관계 매핑에 대해서 검색을 하니 바로 검색으로 나왔었습니다.https://victorydntmd.tistory.com/209 [Spring JPA] 상속 ( JOINED 전략을 중심으로 )객체지향..
[Spring Boot] @PrePersist 어노테이션 @PrePersist란?JPA의 라이프사이클 이벤트 어노테이션 중 하나로, 엔티티가 영속화(저장)되기 전에 실행할 로직을 정의할 때 사용EntityManager.persist() 혹은 save() 중 하나라도 호출이 될 때 데이터베이스에 INSERT 되기 직전 실행되는 메소드  예제 : 유저 가입일 자동 값 입력UserEntityimport jakarta.persistence.*;import lombok.*;import java.time.LocalDateTime;@Getter@Entity@Table(name = "user")@AllArgsConstructor@NoArgsConstructor@Builder@ToStringpublic class UserEntity { @Id @GeneratedVa..