본문 바로가기

Spring

(14)
스프링 애플리케이션의 주요 테스트와 목적 1. 백엔드 테스트 종류테스트목적예시단위 테스트 (Service / Domain 계층)외부 의존성 없이 핵심 비즈니스 로직 검증가격 계산, 할인 정책, 주문 상태 변경, 재고 차감 규칙Repository 테스트 (Repository + DB)DB 연동, JPA 매핑, 쿼리 동작 검증저장/조회/수정/삭제, 연관관계 매핑, 페이징, 커스텀 쿼리통합 테스트 (Controller + Service + Repository + DB)여러 계층을 함께 실행해 실제 요청 흐름 검증회원가입 요청 시 DB 저장 후 201 응답, 주문 생성 시 재고 차감과 응답 JSON 확인API 테스트 (Postman / Newman)실제 실행 중인 서버를 외부에서 호출해 API 동작 검증배포 서버에서 로그인 요청, 토큰 발급 후 인증 ..
[Spring] CGLIB로 트랜잭션 자동 관리 원리 구현 JDK Dynamic Proxy로 EntityManager 생명주기 자동 관리 원리 구현에서 프록시 객체를 통해 EntityManager 인터페이스의 메서드가 호출될때마다, 런타임에 EntityManager 구현체를 지연 생성 후 메서드 호출이 가능하도록 구현하였다. 이어서 트랜잭션 스코프를 나타내는 @Transactional 애노테이션을 붙인 메서드 내에서 EntityManager 구현체의 생명주기가 관리될수 있도록 구현할것이다.트랜잭션이 시작될 때 프록시 객체가 실제 EntityManager 구현체를 생성 후 트랜잭션을 마칠때 EntityManager 구현체를 닫히도록 로직을 작성하고, 트랜잭션 스코프 내에서 자동으로 트랜잭션이 처리되도록 구현하려고 한다.이를 통해, Spring과 JPA가 통합된 애..
[Spring] JDK Dynamic Proxy로 EntityManager 생명주기 자동 관리 원리 구현 이전에 EntityManger와 Persistence Context 내용에 이어서, JPA를 사용한 스프링 부트 애플리케이션(전반적인 Spring 생태계 이해 (9) - JPA)에서 트랜잭션을 시작하면, 런타임 시점에 어떻게 주입했던 EntityManager 구현체를 다시 생성해서 주입하는지 알아보기 위해서 작성한 내용이다. 그리하여 JPA에서는 이를 java로 어떻게 구현했는지 알아보았다.동적으로 객체 생성과 주입인터페이스로 동적으로 EntityManager 구현체 생성 및 주입웹 애플리케이션 계층구조에서 일반적으로 Service 클래스의 메서드를 트랜잭션 범위로 설정하며, Repository 객체 생성에 EntityManager 구현체를 주입한다. 이 트랜잭션 범위 마다 런타임 시점에 새로운 Enti..
전반적인 Spring 생태계 이해 (9) - JPA JPA (Java Persistence API) 개념JPA 등장 배경데이터 저장 기술은 프로그래밍 패러다임과 다르게 데이터를 효과적으로 저장하기 위해서 발전해왔다. 그래서 애플리케이션 서버와 RDBMS(Relational DataBase Management System)가 상호작용 하기 위하여 SQL 중심적으로 개발해야되는 부분은 자바 애플리케이션 서버의 객체 지향 중심 설계 관점과 달랐다. SQL(Structured Query Language)은 관계형 데이터베이스에 정보를 구조적으로 저장하고 처리하기 위한 프로그래밍 언어이다. Java 애플리케이션은 상속, 인테페이스 구현, 참조를 통해 객체 끼리 연관관계를 맺는다. 반면, RDB(Relational DataBase)는 PK와 FK를 통해 연관관계를 ..
전반적인 Spring 생태계 이해 (8) - 통합 테스트 (Integration Test) 전반적인 Spring 생태계 이해 (7) - JDBC Template를 통한 중복 제거 글에서 순수 JDBC 사용에 이어서 JDBC Template을 사용하여 중복을 제거하였다. 이제 자바 애플리케이션에서 DB 접근 로직까지 작성을 완료했으므로, 애플리케이션과 DB까지 연동하여 테스트를 수행하는 통합 테스트 (Integration Test)을 해볼것이다.Integration Test란?일반적으로 통합 테스트(Integration Test)는 애플리케이션과 DB까지 연동하여 테스트를 수행하는 것을 말한다. 스프링 기반의 애플리케이션에서 통합 테스트는 스프링 IoC 컨테이너를 로드해서 애플리케이션과 DB 연동까지 테스트를 하는 것을 의미한다. 스프링 부트를 사용하여 통합 테스트를 수행하면, 테스트 환경에서 ..
전반적인 Spring 생태계 이해 (7) - JDBC Template를 통한 중복 제거 전반적인 Spring 생태계 이해 (6) - JDBC를 통한 DB 접근 로직 구현 글에서 JDBC를 사용하여 DB 접근 로직을 작성하였다. 하지만 반복되는 중복 코드로 인해 생산성이 떨어졌다. 이를 해결하기 위해 JDBC Template 라이브러리를 도입해보도록한다. JDBC Template는 실무에서도 많이 쓰인다고 한다. 참고로 JDBC Template은 Mybatis와 비슷한 라이브러리라고 한다.JDBC Template위에서 순수 JDBC로 DB 변경 작업을 하였을때, JDBC API 호출 코드에서 반복적인 코드를 제거해준다. 메서드마다 Connection, PreparedStatement, ResultSet, close()을 사용한 코드가 반복적으로 작성했었는데, 스프링 프레임워크에서 제공하는 J..
전반적인 Spring 생태계 이해 (6) - JDBC를 통한 DB 접근 로직 구현 전반적인 Spring 생태계 이해 (5) - DB 접근과 JDBC 글에서 java 애플케이션 서버에서 DB 서버로의 접근에 대한 중요 내용을 다루었다. 이제는 JDBC를 사용하여 웹 애플레케이션 계층의 Reposotiory에서 DB 접근 로직을 작성할 것이다. 그 다음 기존의 메모리 용 Repository를 사용했던것을 실제 DB용 Repository로 객체를 변경을 한다.H2 데이터베이스 설치간단한 데이터베이스 작업을 위해, 자바로 개발된 경량화 관계형 데이터베이스 관리 시스템(RDBMS)인 H2 데이터베이스를 설치한다. 그리하여 H2 데이터베이스는 실무에서도 로컬에서 실행시켜볼때 쓰이곤한다.H2 데이터베이스 설치 가이드h2 다운로드 링크: https://www.h2database.com스프링 부트 3..
전반적인 Spring 생태계 이해 (5) - DB 접근과 JDBC 전반적인 Spring 생태계 이해 (4) - 웹 MVC 글에서 웹 애플레케이션 계층의 모든 클래스를 구현했다. 다음으로 기존으 메모리 저장용 Reposotiory에서 실제 DB 접근 로직을 작성하기 위해, java 애플케이션 서버에서 DB 서버로의 접근에 대한 중요 내용을 다루었다.여러 종류의 데이터베이스 접근에 따른 문제점과 해결클라이언트(애플리케이션 서버)에서 데이터베이스 서버와의 상호작용하는 기능은 크게 3가지로 나뉜다.애플리케이션 서버가 DB 서버로부터 연결된다.애플리케이션 서버가 DB 서버로 SQL문을 전달하고 DB 서버는 SQL문을 수행한 결과를 애플리케이션 서버에게 응답한다.애플리케이션 서버가 DB 서버로부터 연결 끊는다.따라서 위의 기능을 하는 3가지 메서드가 필요할 것이다. 이러한 메서드..