본문 바로가기

Java

Simple Java HttpServer and HttpURLConnection HttpServer import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; public class HttpServerApplication { final static HttpHandler indexHandler = httpExchange -> { final String response = "This is index page..."; httpExchange.sendResponseHeaders(200, response.length()); final Ou..
Spring AOP: AOP Concepts 2 이 글은 Spring Framework 5.2.8 버전 Core Technologies의 AOP 문서에 기반하여 작성되었습니다. Spring AOP 다음과 같은 Advice 타입들이 있습니다. Before advice Join point 앞에서 작동하지만 Join point로 흘러가는 흐름은 제어할 수는 없는 Advice입니다. (exception이 발생하는 경우는 제외) After returning advice Join point가 문제없이 정상적으로 종료되었을 때 작동하는 Advice입니다. (exception을 던지지 않고 정상적으로 return 된 경우 등) After throwing advice exception에 의해 method가 종료되는 경우 작동하는 Advice입니다. After (fin..
Spring AOP: AOP Concepts 1 이 글은 Spring Framework 5.2.8 버전 Core Technologies의 AOP 문서에 기반하여 작성되었습니다. AOP에서 중점적으로 사용되는 용어들에 대한 정의입니다. 이 용어들은 Spring에만 국한된 것은 아니며, 용어들의 어감이 직관적으로 느껴지지 않을 수 있습니다. 하지만 Spring을 위한 새로운 용어를 사용하는 것은 더 큰 혼란을 가져올 수 있을 것입니다. Aspect 앞서 언급된 Aspect는 여러 Class들을 관통하는 관심사를 모듈화한 것입니다. Java 어플리케이션에서의 Transaction 관리가 횡단 관심사의 좋은 예시입니다. Spring AOP에서 Aspect는 스키마 기반 접근, 혹은 애너테이션 기반한 접근법으로 사용이 가능하며, 특히 @AspectJ 스타일에 ..
Spring AOP: Aspect Oriented Programming with Spring 이 글은 Spring Framework 5.2.8 버전 Core Technologies의 AOP 문서에 기반하여 작성되었습니다. AOP는 프로그램 구조에 대한 다른 사고방식을 제공함으로써 OOP를 보완하는 역할을 보완합니다. 즉 AOP라고 하는 것은 OOP를 대체하는 개념이라기 보다는 OOP와 결합하여 보완적인 관계를 가질 수 있는 것입니다. OOP의 모듈 단위는 Class라는 형태로 표현할 수 있을 것이며, AOP의 모듈 단위는 Aspect로 말할 수 있습니다. Aspect는 여러 타입들과 객체를 가로지르는 관심을 모듈화한 것입니다. 예를 들면 Transaction의 관리 등이 있을 것입니다. 그리고 이러한 가로지르는 관심이라는 것을 문자 그대로 횡단 관심사라고 표현하기도 합니다. AOP는 Spring..
Custom Constraint javax 등에 내장된 validation 애너테이션만으로 유효성 검사를 수행할 수 없는 경우 사용자가 직접 정의한 유효성 검사 애너테이션을 생성할 수 있다. 이는 Spring MVC의 @Valid를 통해 유효성 체크가 되는 다른 Validation 애너테이션과 동일한 방식으로 사용될 수 있어 편리하다. 애너테이션 인터페이스와 ConstraintValidator 인터페이스를 구현한 Validator를 구현하여 사용한다. 예시로 문자열로 된 날짜 정보가 유효한지 검증하는 사용자 정의 유효성 검사 애너테이션을 구현하였다. StringDateFormat.java import java.lang.annotation.Documented; import java.lang.annotation.ElementType; im..
@Transactional Attribute 스프링에서 트랜잭션을 관리하는 방법은 크게 세 가지로 나누어진다. 애너테이션 @Transactional을 사용하는 방법, AOP를 이용하여 트랜잭션을 관리하는 방법, 프로그래밍으로 직접 제어하는 방법 등이다. 애너테이션 @Transactional의 경우 기본 동작을 재정의하는 데 사용할 수 있는 여러 애트리뷰트를 제공하고 있다. propagation 트랜잭션의 전파를 의미하는 propagation은 값으로 Propagation enum에 정의된 REQUIRED, SUPPORTS, MANDATORY, REQUIRES_NEW, NOT_SUPPORTED, NEVER, NESTED 등을 입력받을 수 있다. 이 값들이 의미하는 바는 다음과 같다. 전파유형 설명 REQUIRED 이미 존재하는 트랜잭션을 지원. 트랜..
영속성 컨텍스트와 엔티티의 생명주기 영속성 컨텍스트는 JPA에서 엔티티를 보관하고 관리하는 공간, 환경에 해당한다고 할 수 있다. 영속성 컨텍스트는 엔티티 매니저를 생성할 때 생성되며, 엔티티 매니저를 통해 접근할 수 있고, 관리할 수 있다. 엔티티는 4가지의 상태로 존재한다. 첫번째는 비영속 상태로 엔티티 객체를 생성한 직후의 순수한 객체 상태이며, 영속성 컨텍스트나 데이터베이스와 관련이 없다. 두번째는 영속 상태로 엔티티 매니저를 통해 영속성 컨텍스트에 저장된 상태 혹은 조회 쿼리 등을 통해 조회된 엔티티를 의미한다. 영속 상태의 엔티티는 영속성 컨텍스트에 의해 관리된다. 세번째는 준영속 상태로 영속 상태의 엔티티가 영속성 컨텍스트에서 더이상 관리하지 않은 상태가 되는 것이다. 이는 엔티티 매니저에서 detach로 분리시키거나, clo..
Java Custom Annotation Java Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 자바1.5 버전 이상에서 사용이 가능하며, @ 기호를 앞에 붙여서 사용한다. Annotation은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 JVM에 포함되어 작동한다. Annotation을 사용하면 관련 코드에 직접 메타데이터를 설정할 수 있어 가독성이 증대되며, 개발 효율성을 증대시킨다. Java에서는 사전에 정의된 Annotation들이 존재하는데 @Deprecated, @Override, @suppressWarning이 그것이다. 이러한 Annotation 외에 Annotation 정의를 위해 사용되는 Annotation이 존재하는데 이를 Meta Annotation이라고 한다. 대표적으로 ..