동적 프록시(Dynamic Proxy) with Spring Framework

디자인 패턴 글 중 프록시 패턴과 데코레이터 패턴에서 프록시를 코드로 구현하는 방법을 알아보았다. (이전 글 참고) 그런데 프록시를 적용해야 할 클래스가 수십 개에서 수백 개가 되면 어떻게 될까? 이러한 프록시 클래스를 그 개수만큼 반복해서 만들어주어야 한다. 이러한 불편함을 해소하기 위해 나온 기술이 동적 프록시(Dynamic Proxy)이다. 동적 프록시는 말그대로 동적인 시점(런타임 시점)에 프록시를 자동으로 만들어서 적용해주는 기술이다. 자바에서 대표적인 동적 프록시 기술은 JDK 동적 프록시와 CGLIB(Code Generator LIBrary)이 있다. 두 기술 모두 동적 프록시를 만들어주지만, 차이점은 다음과 같다....

September 4, 2022 · parker1609

[디자인 패턴] 프록시 패턴/데코레이터 패턴

이 글은 디자인 패턴에서 유사한 패턴인 프록시 패턴과 데코레이터 패턴에 대해 알아본다. 두 패턴은 사실 ‘프록시(proxy)’를 사용하는 패턴이다. 프록시의 뜻은 ‘대리자’라는 뜻인데, 뜻처럼 어떤 일을 대신 해주는 역할을 한다. 프록시는 소프트웨어 환경에서 다양한 곳에서 활용되는 용어인데, 근본적인 기능은 크게 2 가지로 나뉜다. 접근 제어 권한에 따른 접근 차단 캐싱 (캐싱되어 있는 값은 접근할 필요가 없으므로, 캐시는 접근 제어의 역할) 지연 로딩 부가 기능 추가 값 변경 로깅 필터링 … 프록시 패턴과 데코레이터 패턴은 둘 다 프록시 개념을 사용하지만, 의도에 따라 나뉜다....

August 25, 2022 · parker1609

[디자인 패턴] 템플릿 메서드 패턴/전략 패턴/템플릿 콜백 패턴

이 글은 GOF 중에서 의도가 거의 유사하지만, 구현 방식이 조금씩 다른 3 가지 패턴을 알아본다. 템플릿 메서드 패턴, 전략 패턴, 템플릿 콜백 패턴이다. 이 3가지 패턴은 변경이 자주 발생하는 코드와 그렇지 않은 코드를 분리하는 것이 핵심이다. 여기에 객체지향의 다형성(또는 상속)을 이용하여 변경이 자주 발생하는 코드를 유연하게 대처하도록 한다. 패턴을 설명하기 위해 한 가지 예제를 바탕으로 각각의 패턴이 어떻게 구현되는지 살펴보자. 전체 예제 코드는 이 링크에서 볼 수 있습니다. 예제 - 문자 알림 전송 기능 개발자 파커는 애플리케이션에 문자 알림을 전송하는 기능을 추가하는 작업을 맡게 되었다....

August 19, 2022 · parker1609

[개발자가 알아야 할 네트워크 기초] IP 주소, Port 번호

IP 주소 IP(Internet Protocol) 주소: Host에 대한 식별자 IPv4 VS IPv6 주소 길이 IPv4: 32bit IPv6: 128bit 2022년 기준, IPv4를 대부분 사용함. IPv4의 전체 경우의 수는 2^32 (대략 42억)이며, 전체 Host를 모두 나타낼 수는 없으므로 IPv6 체계가 나왔다. IP 주소 = Network ID + Host ID Network ID를 계산하기 위해 서브넷 마스크(넷 마스크)가 존재한다. Host ID 길이는 전체 길이 32bit에서 NetworkID를 제외한 길이이다. 예제) IPv4: 172.20.10.2, 서브넷 마스크: 255.255.255.0 Network ID = 172....

July 27, 2022 · parker1609

[개발자가 알아야 할 네트워크 기초] TCP/IP 개요

OSI 7 계층을 처음부터 공부하는 것은 추천하지 않는다. 웹 개발자라면, TCP/IP, HTTP 부터 정확히 파악하는게 중요하다. TCP/IP 모델은 OSI 7 계층 또는 DoD 모델의 구현체이다. 구체적인 순서: TCP/IP Model(가장 구체적) > Dod Model > OSI 7 Layers 프로세스는 TCP의 데이터를 소켓 형태로 접근할 수 있다. 여기서, 소켓은 User Application와 TCP가 서로 접근할 수 있도록 파일 형태로 추상화한 것이다. 식별자 Access Layer: MAC 주소(L2) → NIC(LAN 카드)에 대한 식별자 NIC이 2개가 있는 경우(일반적으로 유선, 무선 랜 카드), MAC 주소도 2개가 된다....

July 27, 2022 · parker1609

[Spring Boot + JPA + PostgreSQL] 다양한 기본키(PK) 생성 방식과 주의사항

해당 글의 예제 코드는 이 링크를 참조해주세요. JPA에서 엔티티의 PK 생성 방법은 여러가지가 존재합니다. JPA에서 제공해주는 방식과 이를 PostgreSQL에서 사용했을 때, 어떻게 동작하는지 그리고 어떤 주의할 사항이 있는지 살펴보겠습니다. 1. @GeneratedValue 사용하지 않는 경우 @GeneratedValue 어노테이션을 사용하지 않는 경우, 반드시 엔티티를 생성할 때, 직접 id 값을 지정해주어야 한다. 그렇지 않은 경우, 아래와 같은 에러가 발생한다. ids for this class must be manually assigned before calling save() 엔티티를 저장하는 save() 메서드 호출 전에 id값이 명시되어 있어야 한다는 오류이다....

June 1, 2022 · parker1609

자주 사용하는 git 명령어 모음

Git 쓰면서 겪었던 상황과 이를 해결한 명령어 모음입니다. Git Command Help 터미널 환경에서 GIT을 사용할 경우 명령어로 쉽게 git command 정보를 알 수 있다. 바로 --help 옵션을 사용하는 것이다. Git add 명령어 정보 보기 git add --help Git checkout 명령어 정보 보기 git checkout --help Git Branch Local Branch 이름 변경하기 git branch -m <변경 전 branch name> <변경 후 branch name> Local Branch 삭제하기 git branch -D <local branch name> Remote Branch 참고하기 Remote branch를 수정하지 않고 단지 읽고만 싶은 경우...

June 27, 2021 · parker1609

[IntelliJ IDEA] 유용한 플러그인 모음

참고로, 최신 인텔리제이를 다운로드 받아보면 예전에는 직접 다운로드 받아야했던 플러그인들이 기본적으로 포함되어 있는 경우도 있었다. IdeaVim 플러그인 홈페이지 Vim 환경을 인텔리제이에서 사용하고 싶을 때 사용하기 Rainbow Brackets 플러그인 홈페이지 코드 특성상 괄호의 종류와 중첩을 매우 자주 볼 수 있다. 이를 색깔로 편하게 구분할 수 있도록 도와준다. One Dark Theme 플러그인 홈페이지 Material Theme UI와 One Dark Theme 두 테마가 가장 인기가 좋은 듯 하다. CodeGlance 플러그인 홈페이지 코드의 전체 모습을 미리볼 수 있는 플러그인 Nyan Progress Bar 플러그인 홈페이지 밋밋한 진행바(progress bar)를 귀여운 고양이로 만들어주는 힐링 플러그인 오로지 귀여운 고양이를 보기 위한 플러그인…

June 26, 2021 · parker1609

Call by Value vs Call by Reference

C++과 Java를 공부하면서 헷갈렸던 것 중 하나가 call by value와 call by reference입니다. 흔히 Java가 call by reference가 가능한지에 대해 의견이 분분한 것을 보았습니다. 저도 이부분이 헷갈리기 시작하여 두 언어의 차이점에 대해 생각하며 결론을 내보았습니다. 이는 주관적인 생각이 포함되어 있으므로 의견이 다르거나 틀린 점이 있다면 지적 부탁드립니다! 먼저 결론부터 말씀드리면, Java는 call by reference를 할 수 없다고 생각합니다. 이에 대한 근거는 call by value부터 차근차근 살펴보면서 말씀드리겠습니다. Call By Value Call by value는 원본 값을 그대로 복사하여 매개변수로 전달하는 것입니다....

March 4, 2020 · parker1609