[Spring] 자바 리플렉션으로 알아보는 JDK 동적 프록시와 CGLIB
·
Spring Framework
프록시를 사용해서 부가기능을 추가하려고 하면 대상 클래스 수 만큼 프록시 클래스를 만들어야 하는 단점이 있었다. 하지만 자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어 낼 수 있다.  JDK 동적 프록시를 이해하기 위해서는 먼저 자바의 리플렉션 기술을 이해해야 한다. 리플렉션리플렉션이란?자바 프로그램이 런타임(실행 중)에 클래스, 메서드, 필드 등의 정보에 접근하고 조작할 수 있도록 해주는 메커니즘을 말한다.리플렉션 기술을 사용하면 클래스, 메서드의 메타정보를 동적으로 획득하고 코드도 동적으로 호출할 수 있다.예제를 통해서 알아보자.리플렉션 예제 @Slf4j static class Hello { ..
[Spring] 스프링 액츄에이터(actuator)로 살펴보는 프로덕션 준비 기능
·
Spring Framework
전투에서 실패한 지휘관은 용서할 수 있지만, 경계에서 실패하는 지휘관은 결코 용서할 수 없다.애플리케이션 운영 환경에서도 마찬가지로 장애가 발생하는 것은 어쩔 수 없다 해도 이를 모니터링하고 빠르게 대응하는 ‘경계 태세’만큼은 항상 갖추고 있어야 한다.  프로덕션 준비 기능이란?개발자가 애플리케이션을 만들 때는 단순히 기능 요구사항만 만족시키는 것에 그치지 않는다. 서비스가 실제 운영 단계에 올라가면 문제가 발생하지는 않는지, 지표들을 잘 수집하고 있는지, 로그 정보는 정상적으로 쌓이고 있는지 등을 지속적으로 모니터링하고 감시해야 한다.  이처럼 운영 환경에서 애플리케이션을 운용하기 위해 비기능적 요소들을 준비하고 구성하는 과정을 가리켜, 우리는 흔히 프로덕션 준비 기능(Production-Ready F..
IP 주소와 서브넷 마스크란 무엇일까?
·
Network
IP 주소란?IP 주소 (Internet Protocol Address)는 컴퓨터 네트워크에서 장치들이 서로 인식하고 통신을 하기 위해서 사용하는 특수한 번호이다.  보통 IP 주소를 줄여서 'IP' 라고 부르기도 하지만 IP는 인터넷 규약(프로토콜) 자체를 가르키는 말이기 때문에 IP와 IP 주소는 엄밀하게 구별해야 한다.IP주소에는 IPv4와 IPv6가 있는데 IPv6는 인터넷이 발달함에 따라 필요한 IP주소가 증가했고, IPv4 주소 표기법으로 표현할 수 있는 주소의 한계를 극복하고자 도입한 IP 주소 표기법이다. 해당 글에서는 IPv4 표기법에 대해서만 다루겠다.  IPv4IP 주소는 32비트로 구성되어 있다. 8개의 비트로 나눠서 4개의 '.'으로 구분한다. 이때 4개로 나눈 각각의 수를 "옥텟..
도대체 OSI 7 Layer과 TCP/IP는 무엇일까?
·
Network
OSI 7 Layer이란?OSI 7 Layer는 네트워크 프로토콜을 설계하기 위한 지침이다. 표준 프로토콜을 사용하여 다양한 통신 시스템이 통신할 수 있도록 국제 표준화기구에서 만든 개념 모델이다. 예를들어, A라는 회사의 네트워크 장비와 B라는 회사의 네트워크 장비가 서로 다르더라도 이러한 지침 덕분에 상호 호환이 이 가능하게 됐다. 7Layer라는 단어에서 알 수 있듯이 일곱가지 계층으로 나뉘어져 있으며, 응용, 표현, 세션, 전송, 네트워크, 데이터 링크, 물리 계층으로 이루어져 있다.각 계층은 특정 작업을 처리하고 그 위와 아래의 계층과 통신한다.  7계층 - 응용 계층 (Application Layer)응용 계층은 사용자가 직접 사용하는 프로그램이 네트워크 기능을 사용할 수 있도록 인터페이스를 ..
[Spring] 예제를 통해 프록시(Proxy), 데코레이터(Decorator) 패턴에 대해 알아보기
·
Web
프록시를 알아보기 전 먼저 클라이언트와 서버에 대한 개념을 알아보자. 클라이언트와 서버클라이언트와 서버라고하면 보통 서버 컴퓨터를 생각한다. 사실 클라이언트와 서버의 개념은 상당히 넓게 사용된다. 클라이언트는 의뢰인이라는 뜻이고, 서버는 '서비스나 상품을 제공하는 사람이나 물건' 을 뜻한다.클라이언트: 서버에 필요한 것을 요청서버: 클라이언트의 요청을 처리클라이언트는 일반적으로 서버를 호출하고 직접 결과를 받는다. 이것을 직접 호출이라고 한다.클라이언트가 요청을 서버에 직접하는 것이 아니라 어떤 대리자를 통해서 대신 간접적으로 서버를 요청할 수 있다. 이것을 프록시(Proxy)라고 한다.   프록시(Proxy)여기서 중요한점은 객체에서 프록시가 되려면, 클라이언트는 서버에게 요청한 것인지, 프록시에게 요..
[Spring] 예제를 통해 전략 패턴(Strategy Pattern)에 대해 알아보기
·
Web
개요템플릿 메서드는 상속을 이용한 패턴이다보니 상속에 관한 단점들을 그대로 안고갔다. 이러한 문제를 전략 패턴을 통해 풀어보겠다.템플릿 메서드 패턴을 알고싶다면 여기 를 클릭하면 된다.  전략 패턴(Strategy Pattern)이란?실행 중에 알고리즘을 선택할 수 있게 하는 디자인 패턴이다. 캡슐화한 특정 계열의 알고리즘들을 정의하고 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. 쉽게 설명하자면 변하지 않는 부분(Context)라는 곳에 두고, 변하는 부분을 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 상속이 아니라 위임으로 문제를 해결하는  것이다.  예제를 통한 전략패턴 알아보기말로 이해하기 어려우므로 예제를 통해 알아보자. Strat..
[Spring] 예제를 통해 템블릿 메서드 패턴에 대해 알아보기
·
Web
개요만약 잘 만들어진 애플리케이션에서 각각의 클래스안에 있는 메서드에 실행시간 등 정형화된 로그를 추가하라는 미션이 주어졌을 때 제일 쉬운 방법은 각 메서드마다 로그를 출력하는 코드를 추가하는 것 일것이다.예) private final OrderServiceV3 orderService; private final LogTrace trace; @GetMapping("/v3/request") public String request(String itemId) { TraceStatus status = null; try { status = trace.begin("OrderController.request()"); // 로그 출력 시작 ..
[JPA] 페치조인과 일반 조인의 차이점
·
JPA
페치조인과 일반 조인의 차이점을 알아보기 앞서 먼저 페치조인에 대해 알아보자. 페치조인페치조인은 SQL의 조인 종류는 아니다. JPQL의 전용기능이고,  JPQL에서 성능 최적화를 위해 제공하는 기능이다. 한마디로 설명하자면 연관된 엔티티나 컬렉션을 하나의 SQL에 함께 조회하는 기능이다. 예제// Member.java@Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; private Str..
[JPA] JPQL의 경로표현식이란?
·
JPA
경로 표현식이란?.(점)을 찍허 객체 그래프를 탐색하는 것이다.다음과 같은 코드가 있다고 가정해보자.@Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; @OneToMany(mappedBy = "member") private List orders = new ArrayList(); private String username;}단순히 Team은 @ManyToOne으로 다대일 연관관계를..