전체 글

전체 글

    Java EE 빈 검증 (Bean Validation)

    Bean Validation 소개 유저에게 받은 입력 값을 검증하는 것은 애플리케이션에서 중요하며 자주 쓰인다. Validation 은 이러한 검증을 책임진다. Java Bean Validation 은 오브젝트, 오브젝트 멤버, 오브젝트 메서드, 오브젝트 생성자 에 대한 검증을 제공한다. Bean Validation 은 Java EE 컨테이너와 통합하여, 개발자가 쉽게 검증 제약조건을 정의할 수 있도록 도와준다. Bean Validation 은 어떤 기술인가? Bean Validation 은 Java EE 7 platform 의 일부이다. JSR 380 이라는 API 구현 명세를 따른다. 자바 EE 가 무엇인지 잘 모른다면, 자바 EE 란 무엇인가 를 한번쯤 읽어보는 것이 좋다. 여기서 말하는 Bean ..

    Java EE GenerationType 정리

    GenerationType Enum 개요 기본키 생성 전략의 타입을 정의한다. Enum 상수 요약 AUTO (기본 값): persistence provider 가 특정한 데이터베이스에 따라 적절한 전략을 선택해야 함을 나타낸다. Dialect 에 따라 자동 지정된다고 할 수 있다. AUTO 생성 전략은 데이터베이스에 리소스가 있다고 기대할 수도 있고 혹은 새로운 리소스를 만들어내려 시도할 수도 있다. 스키마 생성을 지원하지 않거나 스키마 리소스를 런타임에 생성할 수 없는 때에 어떻게 리소스를 생성하는지 벤더가 문서를 제공할 수도 있다. IDENTITY: persistence provider 가 데이터베이스 identity 컬럼을 사용하여 엔티티에 반드시 기본 키를 할당해야 함을 나타낸다. 보통 데이터베이..

    Java EE @GeneratedValue 공식문서 번역 정리

    @GeneratedValue 애노테이션 개요 Java EE 표준에 속하는 Java Persistence 에 있는 애노테이션이다. 기본키 값에 대한 생성 전략 명세를 위해 제공된다. 엔티티 혹은 mapped superclass의 기본 키 프로퍼티 혹은 필드에 @Id 애노테이션과 함께 적용된다. @GeneratedValue 애노테이션의 사용은 오직 간단한 기본 키에만 필요로 된다. 'derived primary key' 를 지원하지 않는다. ex) 주민번호와 같은 인위적인 키 // Example 1: @Id @GeneratedValue(strategy=SEQUENCE, generator="CUST_SEQ") @Column(name="CUST_ID") public Long getId() { re..

    Lombok 을 사용할 때 주의해야 하는 점들 정리

    Lombok을 사용하며 주의할 것들 정리 Lombok 은 편리한 기능을 많이 제공하지만, 때때로는 그 편리함이 독이 될 수 있다. @AllArgsConstructor, @RequiredArgsConstructor 주의 얼핏 보기엔 단순히 생성자만 만들어주는 것 같은데, 어떻게 버그를 만들 수 있을까? 버그 시나리오 @AllArgsConstructor @RequiredArgsConstructor @ToString public class TestUser { public String id; public String password; } 위와 같은 롬복 떡칠한 TestUser 가 있을 때, 일단 사용하기는 편리하다. 간단한 테스트 코드를 만들어서 테스트도 해본다. @Test void test() { TestUs..

    스프링 @Bean 애노테이션 정리

    @Bean 애노테이션 설명 스프링 컨테이너에 의해 관리되는 빈을 생성하는 메서드임을 나타낸다. 스프링 XML 에서 태그를 통해 등록하는 방식을 자바 코드 방식으로 변형한 것으로 둘의 역할은 같다. @Bean public MyBean myBean() { // instantiate and configure MyBean obj return obj; } 적용 범위 @Target(value={METHOD,ANNOTATION_TYPE}) @Retention(value=RUNTIME) @Documented public @interface Bean { } 메서드나 다른 애너테이션 타입에 붙일 수 있다. 빈 이름 기본 전략으로는 메서드의 이름을 그대로 따르게 된다. 그러나 name() 애트리뷰트를 통해 변경할 수도 있다..

    스프링 @Configuration 애노테이션 정리

    @Configuration 애노테이션 적용 범위 @Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Component public @interface Configuration 클래스에 해당하는 타입에 붙일 수 있다. 설명 클래스에 적용되어 빈을 생성하는 클래스임을 표기한다. 이 클래스는 한개 혹은 그 이상의 @Bean 메서드를 선언함을 표기한다. 런타임 중에 Bean Definition 을 생성하고 해당 빈들에 대한 서비스 요청을 생성한다. 이는 보통 스프링 컨테이너에 의해 처리된다. @Configuration public class AppConfig { @Bean public MyBean myBean() { // instantiate, configu..

    자바 @Retention 애노테이션 정리

    @Retention 애노테이션이란? 애노테이션의 메타 정보가 언제 버려질지에 대한 타이밍을 설정한다. SOURCE, CLASS, RUNTIME 중 하나를 선택할 수 있다. RetentionPolicy.SOURCE 소스코드인 구간에만 유지되고 클래스 파일이 되는 컴파일 과정에서 애노테이션 정보는 사라진다. RetentionPolicy.CLASS .class 파일에 기록되고, 런타임에 버려진다. 클래스 파일까지만 유지된다. 자바에서의 기본 retention 이다. 질문: RetentionPolicy.CLASS 는 왜 필요한가? 사실 왜 필요한가 싶을 수 있다. '소스코드까지 유지될거면 SOURCE 를 사용하고, 런타임까지 유지될거면 RUNTIME 을 사용하면 되지. 애매하게 CLASS 는 어디다가 쓰..

    자바 EE 란?

    자바 EE 란 무엇인가 자바 EE 는 엔터프라이즈 애플리케이션을 배포하고 개발하기 위한 스펙의 모음이다. 일반적으로, 엔터프라이즈 앱이란 회사에서 사용하며, 서버에서 호스팅되고 있는 애플리케이션 소프트웨어를 말한다. 이 스펙은 서비스, 애플리케이션 프로그래밍 인터페이스 (API), 프로토콜을 기술한다. 자바 EE 의 핵심기술 자바 EE를 이루는 핵심 기술 13가지는 다음과 같다. JDBC JNDI EJBs RMI JSP Java servlets XML JMS Java IDL JTS JTA JavaMail JAF 자바 EE 프로덕트 제공자는 일반적으로 스펙에 있는 인터페이스를 구현하는 애플리케이션 서버, 웹서버, 데이터베이스 시스템 벤더들이다. 이 벤더들은 자바 EE 스펙의 구현을 경쟁한다. 회사가 자바 ..

    클린 아키텍처 (by Robert C. Martin) 번역

    클린 아키텍처 몇년간 다양한 아키텍처가 등장했다. Hexagonal Architecture Onion Architecture Screaming architecture DCI BCE 위 아키텍처의 핵심은 관심사의 분리이다. 소프트웨어의 계층을 나누며 관심사의 분리라는 목적을 달성하려 했다. 각각은 최소한 비즈니스 룰을 위한 계층 하나와 인터페이스를 위한 계층 하나를 가진다. 아키텍처가 갖는 보통의 규칙 프레임워크나 라이브러리에 독립적이어야 한다. 테스트가 가능해야 한다. ex) 비즈니스 로직은 UI, 데이터베이스, 웹서버와 같은 외부 요소 없이도 테스트 가능해야 한다. UI에 독립적이어야 한다. 웹 UI 로 작동하던 프로그램은 콘솔 UI로 바뀌어도 정상적으로 작동해야 한다. 데이터베이스에 독립적이어야 한다..

    Test Double 이란?

    Test Double Test Double 이란, 테스트를 위해 대역을 하는 스턴트맨 정도로 생각하면 된다. 대충 5가지의 Test Double 이 존재한다. Dummy Objects 테스트를 위해 파라미터로 넘겨지지만, 절대 사용되지는 않는 오브젝트를 말한다. Fake Objects 실제 구현도 존재하지만, 프로덕션에서 사용되지는 않는다. 인 메모리 데이터베이스가 좋은 예가 된다. Stubs (쓰다 남은 물건의) 토막, 꽁초, 몽당연필을 뜻한다. 진행중인 테스트가 의존하는 소프트웨어 컴포넌트의 동작을 흉내내는 프로그램이다. 정해진 답(canned answers) 을 반환한다. top-down approach 에서 사용된다. Spies 어떻게 호출되었는지를 기반으로 정보를 기록하는 Stubs 이다. 이메..

    Gradle 에서 Plugins 의 역할은 무엇일까?

    Gradle plugins 소개 그레이들의 코어에서 의도적으로 약간의 실용적인 자동화를 제공한다. plugins 를 추가함으로써 자바 코드 컴파일과 같은 유용한 기능들을 제공한다. plugins 는 새로운 태스크(ex. 자바 컴파일), 도메인 오브젝트(ex. SourceSet), 컨벤션(ex. 자바 소스는 src/main/java에 위치하게 함) 그리고 확장된 코어 오브젝트와 다른 플러그인들도 제공한다. 플러그인이 하는 일은? 프로젝트의 기능을 확장해준다. Gradle model 을 확장한다. ex. 설정 가능한 새로운 DSL 엘리먼트를 추가한다. 컨벤션에 따라 프로젝트를 설정한다. ex. 새로운 태스크를 추가하거나 실용적인 기본 값들을 설정해준다. 구체적인 설정정보를 적용한다. ex. 조직에서 사용하는..

    AutoConfigureMockMvc 에서 한글이 제대로 인식되지 않을 때

    원인 (추정) 스프링 프레임워크 최신 버전에서 APPLICATION_JSON_UTF8 상수가 Deprecated 된 것 때문이라고 추정한다. 해결 방법 아래와 같은 커스텀 애노테이션을 작성하면 된다. /** * @AutoConfigureMockMvc 에 UTF-8 인코딩 필터를 적용한다. * * Spring 에 존재하던 APPLICATION_JSON_UTF8 상수가 Deprecated 되어 * @AutoConfigureMockMvc 를 이용할 경우, 한글 인코딩 문제가 발생한다. */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @AutoConfigureMockMvc @Import(AutoConfigureUtf8Moc..

반응형