본문 바로가기

Java and Spring

(13)
[Spring] 프록시 팩토리 이번 글에서는 프록시 팩토리에대해서 알아보려고 합니다. 프록시 팩토리란? 동적으로 프록시를 만들어주는 기술은 크게 2가지로 JDK 동적 프록시와 CGLIB이 있습니다. 인터페이스가 존재하는 경우라면 JDK 동적 프록시가 제공하는 InvocationHandler를 사용하여 부가 기능을 제공하고, 인터페이스가 존재하지 않는다면 CGLIB이 제공하는 MethodInterceptor를 사용하여 부가 기능을 제공하게 됩니다. 그렇다면, 인터페이스가 있는 경우와 없는 경우가 공존하게 된다면, 우리 개발자들은 2가지 형태 즉, InvocationHandler와 MethodInterceptor을 중복으로 만들어서 관리하는 불편함을 경험하게 됩니다. 이러한 불편함을 제공하지 않기 위해 스프링은 일관된 방법으로 사용자가 ..
[Java] CGLIB(Code Generator Library) 이번 글에서는 CGLIB의 개념과 사용방법을 간단하게 알아보려고 합니다. CGLIB(Code Generator Library)과 동적 프록시(Dynamic Proxy) CGLIB은 이전 포스팅에서 정리했던 동적 프록시와 거의 동일한 패턴으로 프록시를 사용한 기술 중 하나입니다. [Java] 동적 프록시(Dynamic Proxy) 이번 글에서는 동적 프록시(Dynamic Proxy)가 왜 필요하고 어떻게 사용되는지 알아보려 합니다. 동적 프록시(Dynamic Proxy)와 프록시(Proxy) 동적 프록시가 왜 필요한지 알기위해서는 그전에 프록시가 사 gong-story.tistory.com 동적 프록시는 인터페이스가 있어야 프록시 클래스의 자동생성이 가능하였지만, 이번 시간에 공부할 CGLIB은 인터페이스..
[Java] 동적 프록시(Dynamic Proxy) 이번 글에서는 동적 프록시(Dynamic Proxy)가 왜 필요하고 어떻게 사용되는지 알아보려 합니다. 동적 프록시(Dynamic Proxy)와 프록시(Proxy) 동적 프록시가 왜 필요한지 알기위해서는 그전에 프록시가 사용되는 이유에대해 먼저 알아야 합니다. 프록시는 타겟 코드의 수정없이 접근제어 혹은 부가기능을 추가하기 위해 주로 사용됩니다. 하지만, 프록시를 사용하기 위해서는 대상 클래스 수만큼의 프록시클래스를 하나하나 만들어줘야하고 그 안에 들어가는 반복되는 코드때문에 코드중복이라는 단점이 있습니다. 이러한 단점들을 보완하여 컴파일 시점이아닌, 런타임 시점에 프록시 클래스를 만들어주는 방식이 동적 프록시입니다. 그럼 동적 프록시는 어떻게 만들까요?? newProxyInstance() Java에서 ..
[Java] ThreadLocal 이해 및 활용 이번 글에서는 ThreadLocal이 왜 필요하고 어떤경우에 사용이 되는지 알아보고 정리를 해보려고 합니다. 그럼 먼저, ThreadLocal이 왜 필요할까요?? 결론부터 이야기하자면 동시성 문제가 발생할 수 있기 때문입니다. 동시성 문제 예제 예제는 간단한 테스트코드를 활용하여 진행해보도록 하겠습니다. public class FieldServiceTest { private FieldService fieldService = new FieldService(); @Test void field() { log.info("main start"); Runnable userA = () -> { fieldService.logic("userA"); }; Runnable userB = () -> { fieldService..
[Spring] Lombok 사용법 이번 글에서는 실무에서 편리하게 사용할 수 있는 Lombok라이브러리에 대해서 알아보려고 합니다. @Getter / @Setter @AllArgsConstructor @NoArgsConstructor @RequiredArgsConstructor @Data 먼저, Lombok은 많은 양의 반복되는 소스코드를 annoation기반으로 개발자가 편리하게 사용할 수 있도록 도움을 주는 라이브러리입니다. 위에 선언한 어노테이션 뿐만 아니라 더 다양한 어노테이션이 존재하지만, 대표적으로 많이 사용하는 어노테이션을 공부해보려고 합니다. @Getter / @Setter @Getter / @Setter는 Lomgok라이브러리를 사용해보지 않아도, 개발자라면 대충 어떤 기능인지 아실거라고 생각합니다. 보통 VO같은 Cla..