본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

Spring Series97

[Spring] MockMvc 테스트 1. MockMvc란? - 애플리케이션 서버를 구동하지 않고도 Spring MVC 동작을 재현할 수 있는 모의 객체다. MockMvc 공식 문서 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/web/servlet/MockMvc.html MockMvc (Spring Framework 6.0.3 API) Perform a request and return a type that allows chaining further actions, such as asserting expectations, on the result. docs.spring.io 2. Dependencies - spring-boot.. 2022. 12. 20.
[Spring] ModelMapper ModelMapper란? ModelMapper은 서로 다른 두 오브젝트의 필드들을 매핑시켜주는 클래스로 도메인 오브젝트를 통신용 DTO 오브젝트로 만들어 줄 때 유용하게 사용된다. source 오브젝트의 필드값들 중 원하는 필드들을 destination 오브젝트에 매핑해주는 과정을 자동으로 수행해주기 때문에, 매핑 코드를 일일이 getter/setter 메소드에 작성하는 귀찮은 작업을 할 필요가 사라진다. ModelMapper은 기본 매핑 정책을 가지고 있기 때문에 map() 메소드를 통해 간단히 매핑을 수행해도 되고, 여러분들이 원한다면 정책을 바꾸거나 커스터마이징을 할 수도 있다. 예를 들어, 아래 예시를 보자. Order 클래스는 Customer, Address 타입의 필드를 가지고 있다. // A.. 2022. 12. 15.
[Spring Boot] 2개의 DB를 사용하는 방법 SpringBoot 애플리케이션에서 1개의 DB만 사용하는 경우에는 @EnableJpaRepositories를 작성하지 않아도 JpaRepository에 대한 기본적인 설정이 이루어진다. 그러나 2개의 DB를 사용하는 경우에는 2개의 DB 설정 파일을 만들어서 각각 @EnableJpaRepositories에 JpaRepository에 연결할 EntityManagerFactory, TransactionManager를 지정해줘야 한다. Test, User 2개의 DB를 사용한다고 해보자. 필자는 이에 대해서 각각 TestDBConfig.java, UserDBConfig.java 설정 클래스를 만들었다. @Configuration @EnableTransactionManagement @EnableJpaRepos.. 2022. 11. 12.
[Spring] @Enable 어노테이션을 이용한 설정 모듈화 @Enable 설정 어노테이션을 이용하면 xml 전용 태그를 만드는 것보다 훨씬 간단하게 설정 정보를 모듈화할 수 있다. 이번 포스팅에서는 bean 설정 정보를 재사용하는 방법과 이를 응용해서 설정 정보를 모듈화하는 방법을 알아볼 것이다. 1. @Import와 @Configuration 클래스 상속 1) @Import - @Import를 이용해서 다른 @Configuration 클래스를 재사용하는 방법이 있다. 예를 들어, DBConfig라는 @Configuration 설정 클래스를 재사용하려면 아래 코드처럼 작성하면 된다. @Configuration @Import(DBConfig.class) public class AppConfig {...} - 매번 동일한 내용의 설정 정보만 사용할 수 있다는 한계가.. 2022. 10. 28.
[Spring] 캐시 추상화 1. 캐시와 캐시 추상화의 기본 개념 1) 캐시 - 캐시는 동일한 요청이 들어왔을 때 결과를 새롭게 만드는 대신에 저장되어 있던 기존 결과를 돌려주는 기술이다. - 분명히 성능에 도움이 되는 기술이지만, 매번 다른 결과를 돌려주는 작업에 캐시를 적용하면 오히려 성능이 떨어지기 때문에 반복적으로 동일한 결과를 돌려주는 작업에 캐시를 적용해야 한다. 캐시를 확인하는 작업도 어느 정도 비용이 있다. - 캐시의 내용이 유효하지 않게 되면 캐시에서 기존 내용을 바로 지워줘야 한다. 2) 캐시 추상화 - Spring 3.1에서는 AOP를 이용해 bean의 메소드에 캐시를 적용할 수 있으며, 캐시 서비스 구현 기술에 종속되지 않도록 추상화 서비스를 제공해주기 때문에 애플리케이션 코드에 영향을 주지 않는다. - 캐시는.. 2022. 10. 27.
[Spring] Spring의 Task와 Scheduling 1. TaskExecutor 1) TaskExecutor 소개 - 태스크란, 독립적인 쓰레드 안에서 동작하도록 만들어진 오브젝트를 의미한다. TaskExecutor은 이런 태스크를 실행하는 다양한 방법을 추상화한 인터페이스다. public interface TaskExecutor extends Executor { void execute(Runnable task); } - TaskExecutor은 JDK의 java.lang.concurrent.Executor를 구현하지 않은 기술의 태스크 실행기에 대한 어댑터를 제공해주고, Spring에 최적화된 방식으로 태스크 실행기를 확장하고 활용할 수 있게 해준다. - 대부분의 TaskExecutor가 추상화한 기술은 비동기적으로 독립된 쓰레드에서 실행되며, 주로 쓰.. 2022. 10. 25.
[Spring] 리모팅과 EJB 1. 리모팅이란? - 원격 시스템과 Spring 애플리케이션이 연동해서 동작하게 해주는 기술 - Spring 애플리케이션이 클라이언트 시스템에게 원격 서비스를 제공해주거나 다른 원격 시스템의 서비스를 이용할 수 있다. 2. 익스포터와 프록시 - 원격 서비스를 제공할 때나 사용할 때나 모두 인터페이스를 이용해야 한다. 클라이언트에게 제공되는 기능을 담은 서비스 bean도 서비스 내용이 정의된 인터페이스를 구현하고 있어야 하고, 원격 서비스를 사용할 때도 원격 서비스의 내용이 담긴 인터페이스를 이용해야 한다. - Spring이 제공하는 모든 리모팅 지원 기능은 익스포터와 프록시 방식을 사용한다. 1) 익스포터 - 클라이언트와 서비스 bean의 사이에서 클라이언트로부터 원격 요청을 받아서 서비스 bean을 호.. 2022. 10. 25.
[Spring] DelegatingDataSource 1. DelegatingDataSource란? - DataSource와 DataSource 타입의 프로퍼티를 갖는 bean 사이에서 부가기능을 제공해주는 bean을 만들 때 쓰이는 기반 클래스다. - targetDataSource 프로퍼티에 실제 DataSource bean을 넣어 위임만 해준다. 그리고 자신은 DataSource인 것처럼 위장해서 트랜잭션 매니저나 DAO에 DI될 수 있다. - DelegatingDataSource 기반의 클래스로는 대표적으로 LazyConnectionDataSourceProxy와 AbstractRoutingDataSource가 있다. 2. LazyConnectionDataSourceProxy - DB 커넥션(자원)을 최대한 늦게 생성해주는 프록시 패턴이다. 트랜잭션이 .. 2022. 10. 23.
[Spring] 테스트 컨텍스트 프레임워크 1. 테스트 컨텍스트 프레임워크의 개념 - 컨텍스트 테스트는 Spring이 지원하는 통합 테스트 방식이다. - 테스트 컨텍스트 프레임워크는 테스트에 사용되는 애플리케이션 컨텍스트를 생성하고 관리해주는 테스트 프레임워크로, 서버에서와 거의 동일한 구성으로 동작하는 통합 테스트를 쉽게 만들 수 있도록 한다. - Spring은 JUnit, TestNG 등 여러 테스트 프레임워크를 지원하는데, Spring의 컨텍스트 테스트 엔진은 테스트 프레임워크의 종류에 독립적으로 작성되었다. - Spring은 테스트에서 사용되는 컨텍스트를 캐싱해서 여러 테스트(메소드, 클래스)에서 해당 컨텍스트를 공유할 수 있도록 해준다. 테스트 메소드의 개수만큼 테스트 클래스의 오브젝트는 반복적으로 만들어지지만 컨텍스트는 반복적으로 만들.. 2022. 10. 17.