Spring (19) 썸네일형 리스트형 [Spring] Transactional 트랜잭션을 사용하는 이유 : 데이터의 일관성과 무결성을 보장하기 위해서원자성(Atomicity) → 모두 성공하거나 모두 실패해야 한다.일관성(Consistency) → 트랜잭션 전후 데이터가 항상 규칙을 지킨다.격리성(Isolation) → 동시에 실행돼도 서로 간섭하지 않는다.지속성(Durability) → 커밋된 결과는 영구적으로 보존된다. @Transactional 주요 옵션 총정리1) propagation (전파 속성)트랜잭션이 이미 존재할 때, 현재 메서드를 어떻게 실행할지 결정옵션설명REQUIRED (기본값)현재 트랜잭션이 있으면 참여, 없으면 새로 생성REQUIRES_NEW항상 새 트랜잭션 생성, 기존 트랜잭션은 잠시 보류NESTED중첩 트랜잭션 생성, 부모 트랜잭션 안에 별도 저장점(Sa.. [Spring] Specification vs QueryDSL public interface PostRepository extends JpaRepository { @Query("SELECT t FROM Todo t LEFT JOIN FETCH t.user WHERE t.id = :todoId") Optional findByIdWithUser(@Param("todoId") Long todoId);}JPA를 사용하여 명명 규칙만 지킨다면 자동으로 메서들이 정의되어 실행된다. 그러나 복잡한 조건의 경우에는 @Query를 사용하여 JPQL을 직접 작성해야한다. 위의 경우는 매개변수로 전달받은 todoId와 일치하는 Todo을 조회하는 쿼리문이다. 이때 연관된 user도 함께 조회한다. 이는 간단하고 직관적이지만, 컴파일 시점에 문법 오류를 잡기 어렵고 유지보수가.. [Spring] JPA 엔티티 설정 & 관계 매핑 심화 복합 값 객체 (Embeddable)복합 값 객체는 여러 관련된 값을 하나의 작은 객체로 묶어서 관리하는 것을 말한다. 특징DB 테이블은 각 필드가 컬럼으로 분리코드 재사용, 가독성 향상불변(immutable) 설계 권장 (Setter 지양) @Embeddable : 복합 값 객체로 사용할 클래스 지정 @Embedded : 복합 값 객체 적용할 필드 지정@AttributeOverrides : 복합 값 객체 여러개 지정@AttributeOverride : 복합 값 객체 필드명 선언@Embeddablepublic class Address { private String city; private String street;}@NoArgsConstructor(access = AccessLevel.PRO.. [Spring] Filter vs Interceptor vs AOP 웹 애플리케이션에서 공통 관심사를 처리하기 위해 Filter, Interceptor, AOP 세 가지 기법을 많이 사용한다.각각 동작 시점과 역할, 적용 범위에 차이가 있으며, 올바른 상황에 맞춰 적절히 사용하는 것이 중요하다. Filter (서블릿 필터)클라이언트 요청 → Filter1 → Filter2 → DispatcherServlet → ControllerHTTP 요청/응답을 가로채 공통 관심사를 처리할 때 사용한다.모든 요청이 하나의 입구(서블릿 컨테이너)로 들어오기 때문에, 가장 먼저 동작한다.doFilter() 메소드에서 다음 필터 혹은 서블릿으로 제어를 넘긴다.@Slf4jpublic class CustomFilter implements Filter { @Override publi.. [Spring] Service와 Controller 통합 테스트 개발 중 버그는 피할 수 없다. 수동 테스트는 번거롭지만, 자동화하면 안정성과 유지보수가 훨씬 수월해진다. 이번 TIL에서는 자동화 테스트의 필요성과 방법을 간단히 다룬다. 테스트 코드가 필요한 이유개발 단계에서 버그를 조기에 발견해 디버깅 비용 절감리팩토링이나 기능 개선 시 안정성 확보책임 분리·구조 개선 등 코드 품질 향상문서·예시 코드 역할 → 코드 리뷰 용이배포 안정성, 유지보수 효율성 증가 테스트 코드 작성의 원칙 1) F.I.R.S.T 원칙Fast : 테스트는 빠르게 실행Independent : 서로 독립적Repeatable : 반복해도 결과 동일Self-validating : 자동으로 성공/실패 판별Timely : (TDD 기준) 코드보다 먼저 작성 2) Given-When-Then 패턴 G.. [Spring] H2 In-Memory DB를 활용한 Repository 테스트 Spring Boot에서 데이터베이스 관련 테스트를 진행할 때, 실제 DB 대신 H2 Database를 사용하는 경우가 많다.특히 H2는 In-Memory 모드를 지원하여, 테스트용 DB를 간편하게 구성하고 테스트 종료 후 자동 초기화할 수 있어 매우 유용하다. H2 Database란?Java 기반의 경량 오픈소스 관계형 DBMSIn-Memory 모드로 설정 시,데이터를 메모리에 저장하고 테스트 종료 시 사라지는 특성 (휘발성) → 테스트 전용으로 적합cf.)더보기✔️ 자바 프로젝트의 테스트 환경에서 많이 쓰는 이유별도 설치 없이 의존성 추가만으로 바로 사용 가능테스트 실행 시 DB 자동 생성, 종료 시 초기화 → 깔끔한 환경 유지MySQL, PostgreSQL 등과 SQL 문법이 유사해 실제 운영 DB.. [Spring] JPA 시작하기 JPA란?JPA(Java Persistence API)는 Java와 관계형 데이터베이스 간의 패러다임 불일치 문제를 해결하고,데이터베이스 작업을 객체 지향적으로 처리할 수 있게 해주는 ORM 기술의 표준 인터페이스다. ※ ORM : 객체지향(Object) 을 관계형 데이터베이스(Relation) 에 매핑(Mapping) JPA 특징ORM 기술의 표준 인터페이스: JPA는 자바 진영(Java EE/Jakarta EE)에서 공식 정의한 ORM 표준이다. Hibernate, EclipseLink, OpenJPA 등이 대표적인 구현체이며, 그중 Hibernate가 가장 널리 사용된다.객체 중심의 데이터 조작: 마치 Java 컬렉션에 객체를 저장하듯, 데이터를 객체 형태로 다룰 수 있음SQL 자동 생성 및 실행.. [Spring] 쿠키 / 세션 / 토큰 웹은 기본적으로 Stateless하기 때문에 사용자의 상태를 서버가 기억하려면 별도 저장소 필요하다. 이를 위한 방식으로 쿠키와 세션, 토큰이 있다. 쿠키 (Cookie)웹 브라우저(클라이언트 측)에 저장되는 데이터사용자의 방문 기록, 로그인 상태 유지, 개인 맞춤 설정 등을 저장하여 HTTP의 Stateless 특성을 극복클라이언트 측에 저장되므로, 서버에 요청을 보낼 때마다 포함되어 전송만료 날짜를 설정할 수 있으며, 세션 쿠키: 브라우저 종료 시 삭제 영속 쿠키: 지정된 기간 동안 유지주의할 점: 클라이언트에 저장되므로 민감한 정보는 직접 담지 않도록 주의 (예: 비밀번호 X)// 쿠키에 값 저장Cookie cookie.. 이전 1 2 3 다음