프록시란? 프록시(Proxy)란 대리의 의미를 갖고 있으며 서버와 클라이언트 사이에서 통신을 대신 처리해주는 역할을 한다. 프록시는 객체안에서의 개념(디자인 패턴), 웹 서버에서의 개념 (포워드 프록시, 리버스 프록시) 등으로 사용되며 근본적인 역할은 같다. 객체안에서의 프록시에 대해서 알아보자. 프록시 객체 프록시 객체는 서버와 클라이언트 사이에서 크게 2가지의 역할을 수행하고 있다. GoF 디자인 패턴에는 이 둘을 의도(intent)에 따라 프록시 패턴, 데코레이터 패턴으로 구분한다. 접근 제어 (권한, 캐싱, 지연 로딩 등) -> 프록시 패턴 부가기능 (추가 기능 수행, 값을 변형, 로그 등) -> 데코레이터 패턴 클라이언트와 서버 (직접 호출) 네트워크에서 클라이언트와 서버는 관점에 따라 다양하게..
QR 코드 생성하기 구글 Chart API를 통해 URL 요청만하면 즉석에서 QR 코드를 만들 수 있다. 관련 문서는 하단 링크를 참고하자. https://developers.google.com/chart/infographics/docs/qr_codes?hl=ko QR 코드 | Infographics | Google Developers 경고: 이 API는 지원 중단되었습니다. 대신 활발하게 유지관리되는 Google 차트 API를 사용하세요. 자세한 내용은 지원 중단 정책을 참고하세요. 이 페이지는 Cloud Translation API를 통해 번역되었습니 developers.google.com QR 코드 생성 https://chart.apis.google.com/chart?cht=qr&chs=250x25..
MAC 특정 포트 프로세스 종료하기 웹 개발하다보면 Web server failed to start. Port 8080 was already in use. 에러를 자주 본다. 특정 포트가 이미 사용 중이므로, 서버를 띄우지 못하는 현상이다. 프로세스 번호 (PID) 찾기 lsof -i :8080 lsof -i :포트 를 해당 포트에 대한 정보를 알 수 있다. lsof는 list open files의 약자로 시스템에서 열린 파일 목록을 알려주고 프로세스, 디바이스 정보 등의 정보를 출력해준다. 현재 8080포트로 실행 중인 프로세스가 10519 임을 확인할 수 있다. lsof -i 프로토콜:포트번호를 명시할 수도 있는데, 명시한 경우 해당 프로토콜 관련 포트만 표시해준다. 프로세스 종료하기 kill -15..
템플릿 콜백 패턴 콜백(callback)이란 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 의미한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행하거나 나중에 실행할 수 있다. (call - 호출은 되었고, back - 실행은 뒤에서) @Test void strategyV2() { ContextV2 context = new ContextV2(); context.execute(new Strategy() { @Override public void call() { log.info("비즈니스 로직1 실행"); } }); context.execute(new Strategy() { @Override public void call() { log.info("비즈니스 로직2 실행"); } }); } 전략..
전략 패턴 이전 장에서 살펴본 템플릿 메서드 패턴은 상속을 받는다는 단점이 있다. 자식 클래스 입장에서는 부모 클래스의 기능을 전혀 사용하지 않는데, 부모 클래스를 알아야하는 단점이 있다. 템플릿 메서드 패턴과 비슷한 역할을 하면서, 상속의 단점을 제거한 디자인 패턴이 바로 전략패턴이다. 전략 패턴 - 시작 package hello.advanced.trace.strategy; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @Slf4j public class ContextV1Test { @Test void strategyV0() { logic1(); logic2(); } private void logic1() { long star..
템플릿 메서드 패턴 템플릿 메서드 패턴은 핵심 기능과, 부가 기능을 분리하여 모듈화하는 디자인 패턴이다. 예제를 통해 템플리 메서드 패턴을 살펴보자. 이전 장에서 로그 추적기를 만들었다. 도입 전과 후의 코드를 비교해보자. 도입 전에는 핵심 기능만 남아 있는 반면, 도입 후에는 부가 기능이 훨씬 많고 복잡하다. 핵심 기능 vs 부가 기능 핵심 기능은 객체가 제공하는 고유의 기능이다. orderService는 주문이 핵심 기능이다. 부가 기능은 핵심 기능을 보조하기 위해 제공하는 기능이다. 예를 들면 로그, 트랜잭션 등을 들 수 있다. TemplateMethodTest @Slf4j public class TemplateMethodTest { @Test void templateMethodV0() { logi..
3장 템플릿 객체지향 설계의 핵심 원칙인 OCP원칙은 확장에는 열려 있고 변경에는 닫혀있도록 설계하는 원칙이다. 이 원칙은 코드에서 고정되어 변하지않으려는 성질을 가진 코드와, 변경을 통해 다양해지고 확장하려는 성질을 나누어서 효율적인 구조로 만들어 주는 방식이다. 템플릿이란 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 독립적으로 추려내서 활용하는 방법을 의미한다. 3.1 다시보는 초난감 DAO public class UserDao { private DataSource dataSource; public UserDao() {} public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public vo..
세션 클러스터링이란? 세션 클러스터링은 2대 이상의 WAS 또는 서버를 사용할 때 로드 밸런싱, 장애 대비 등 세션을 공유하는 것을 의미한다. 일반적으로, 사용자가 접속하면 L4 스위치가 접속을 유도해주지만, 서버 과부하 등 문제 발생 시 다른 연결가능한 서버로 유도해준다. 이 때 서버 간 세션 정보 불일치를 해결하기 위해 사용된다. (tomcat, jeus 등 WAS 설정으로 적용) 세션은 사용자 정보 또는 방문기록을 WAS 메모리에 저장하여, 클라이언트와 서버 간 고유한 세션 ID를 통해 Stateless한 연관성을 설정하는 것을 의미한다. 예를 들면, 이중화 되어있는 서버 구성에서 한 서버가 장애가 발생했을 때, 다른 서버에 세션 정보를 동일하게 유지 시키기 위한 기능이다. 따라서, 장애를 방지하는..