1. JUnit5 소개 단위 테스트를 작성하는 자바 개발자의 약 93%가 JUnit을 사용하고있다는 Jetbrains의 통계가 있다. 그만큼 JUnit은 자바 개발자가 가장 많이 사용하고있는 대중적인 테스팅 프레임워크이다. Java 8 이상 필요 2. JUnit5 시작하기 스프링 부트 프로젝트 기본적으로 JUnit5 의존성이 추가된다. 스프링 부트 프로젝트가 아니라면 의존성을 추가해주면된다. Gradle testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.6.2' Maven org.junit.jupiter junit-jupiter-engine 5.6.2 test 3. 기본 애노테이션 @Test 단위 테스트 @T..
JAVA에서 JSON 데이터를 응답으로 보내기 위한 다양한 직렬화 방법이 존재한다. 그중Jackson 라이브러리 사용한 직렬화(Serialize) 방법을 알아보자. (예전에 진행했던 카카오톡 챗봇 예제를 이용해 진행했습니다.) 1. 직렬화(Serialize)란? Java에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술 범용적인 API나 데이터를 변환하여 추출할 때 많이 사용된다. Java Object → Json Data 변환 2. 예제 어떤 서드파티 애플리케이션을 사용하기 위해 정해진 Json 응답 형식이 있다고 생각해보자. 정해진 응답 형식을 만족해야만 애플리케이션이 정상적으로 동작할 것이다. 아래는 카카오톡 챗봇에서 요구하는..
백기선님의 스프링 프레임워크 핵심 기술이라는 강좌를 들으며 공부한 내용을 정리한 글입니다. 스프링 5에서 다음과 같은 Null 관련 애노테이션이 추가되었다. @NonNull Null 허용하지 않음 @Nullable Null 허용 @NonNullApi 패키지 레벨에 모든 파라미터와 리턴에 @NonNull을 적용 @NonNullFields 패키지 레벨에서 필드에 Null 허용하지 않음 위의 애노테이션들을 사용하면 IDE의 도움을 받아 컴파일 타임에서 최대한 NullPointerException을 방지할 수 있다. 1. Null-Safety 먼저 간단한 예를 위해 Service와 AppRunner를 만들어보자. @Service public class EventService { // return 타입이 NonN..
백기선님의 스프링 프레임워크 핵심 기술이라는 강좌를 들으며 공부한 내용을 정리한 글입니다. DataBinder라는 Spring의 핵심 인터페이스에 대해 알아보자. 1. 데이터 바인딩 데이터 바인딩이란 기술적인 관점에서 봤을 때 프로터피 값을 어떤 타겟 객체에 설정하는 기능이라고 정의할 수 있다. 즉, 사용자가 어떤 Application 도메인 객체에 값을 동적으로 할당하고 싶을 때 사용한다. 예를들면, 사용자가 주로 입력하는 값은 문자열 값인데 객체가 가지고 있는 다양한 타입(int, long, boolean, Date 등)으로 인식해야 하는 경우가 있다. 이처럼 객체가 가지고 있는 다양한 타입을 변환해주는 기능을 데이터 바인딩이라고 한다. 2. 예제 먼저 가장 고전적인 방법으로 데이터 바인딩에 대해 알..
백기선님의 스프링 프레임워크 핵심 기술이라는 강좌를 들으며 공부한 내용을 정리한 글입니다. 이번에 다룰 내용은 ApplicationContext의 다양한 기능 중 한 가지인 MessageSource이다. ApplicationContext는 다양한 기능을 상속하고 있는데, 그중 MessageSource는 다국어 처리를 할 때 사용되는 객체이다. 간단한 예제로 MessageSource의 사용 방법을 알아보자. 1. 사용 예제 테스트를 위해 먼저 다국어 처리를 해줄 메시지를 만들어야 한다. 스프링 부트 어플리케이션에서는 별다른 설정 없이 messages로 시작하는 properties들을 MessageSource로 읽어 Bundle로 인식할 수 있다. resources 밑에 message.properties와 ..
백기선님의 스프링 프레임워크 핵심 기술이라는 강좌를 들으며 공부한 내용을 정리한 글입니다. 오늘 기록할 내용은 Bean의 스코프에 대한 전반적인 이해와 활용 방법, 사용 시 주의할 사항 등을 다룬다. 1. Bean의 스코프 Bean의 스코프로는 크게 싱글톤과 프로토타입으로 나눌 수 있다. (다양한 스코프가 있지만 이번시간에는 이 두 가지를 다룹니다.) 먼저 싱글톤과 프로토타입의 개념을 설명하자면 싱글톤 스코프는 애플리케이션 전반에 걸쳐 해당 Bean의 인스턴스가 오직 한번 생성되는 것이다. 반면에 프로토타입은 매번 새로운 인스턴스를 생성한다. 싱글톤 해당 Bean의 인스턴스를 오직 한번만 생성 Bean을 생성할 때 별도의 설정을 해주지 않으면 default는 싱글톤 프로토타입 해당 Bean의 인스턴스를 ..
@Bean과 @Component는 어떤 객체를 Bean으로 등록하고 싶을 때 사용되는 애노테이션들이다. 그렇다면 이 둘의 차이점이 뭘까? 두개의 애노테이션 모두 Bean으로 등록하겠다는 목적을 가지는 애노테이션인데 왜 둘로 나누어져 있을까? 항상 헷갈렸던 부분이기도 하고 명확한 이해가 없는 것 같아 이번 글에서 확실히 정리해보고자 한다. 1. @Bean @Bean 같은 경우에는 메서드 위에 선언 가능하고 외부 라이브러리를 Bean으로 등록할 때 사용된다. 이해를 돕기 위해 먼저 @Bean 애노테이션을 살펴보자. @Target이 METHOD로 지정되어있다. 이는 메서드 위에 선언되어야 한다는 의미이다. 이건 알겠는데.. 왜 외부 라이브러리를 Bean으로 등록할 때 사용되는 걸까? 외부 라이브러리는 Read..
Spring으로 개발을 하다 보면 Bean이라는 개념이 자주 등장한다. 자주 사용하는 용어이기 때문에 당연히 알고 있는 개념이라고 생각하지만, 막상 의미를 정의하라고 하면 헷갈리는 경우가 많다. 그래서 오늘은 Bean이라는 개념을 명확하게 정리해보고자 한다. 1. Java Bean 먼저 Java Bean에 대해 알아보자. 결론부터 말하자면 Java Bean은 특정 형태의 클래스를 가르키는 뜻으로 사용된다. DTO 혹은 VO의 형태가 Java Bean이라고 생각하면 쉽다. 필드는 private로 구성되어 getter와 setter를 통해서만 접근할 수 있고, 전달 인자가 없는 생성자를 가지는 형태의 클래스이다. getter / setter public의 no-argument 생성자 모든 필드는 privat..
백기선님의 스프링 프레임워크 핵심 기술이라는 강좌를 들으며 공부한 내용을 정리한 글입니다. 이전에 ApplicationContext와 다양한 빈 설정 방법 글에서 잠깐 다루었던 내용 중 @ComponentScan과 @Component의 기능과 동작 원리를 조금 더 자세히 살펴보자. 1. @ComponentScan @ComponentScan은 스프링 3.1부터 도입된 Annotation이며 스캔 위치를 설정하고, 어떤 Annotation을 스캔할지 또는 하지 않을지 결정하는 Filter 기능을 가지고있다. 중요한 설정으로는 BasePackages와 BasePackageClasses가 있다. 이는 스캔 위치를 설정하는 방법들인데, BasePackages는 String으로 입력된 패키지의 경로를 스캔하는 방법..