
curl 이란? curl은 Client Url 이란 의미로 클라이언트에서 url을 사용해서 서버와 데이터를 송수신하는 명령어 툴이다. Linux, MacOS, Window 등 다양한 환경에서 HTTP, HTTPS, SMTP, TELNET, FTP, LDAP 등 다양한 프로토콜을 지원하여 통신 환경에서 자주 쓰인다. curl 사용법 curl [OPTIONS] [URL] curl의 OPTION은 short 형인 "-" 와 long 형인 "--" 를 제공한다. 가장 기본적인 사용법은 옵션 입력 후에 URL을 입력이다. short long 설명 -k --insecure https URL 접속 시 SSL 인증서 검사 없이 연결 -i --head HTTP 응답 헤더를 표시 -d --data POST 요청이나 JSO..

프록시란? 프록시(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..