본문 바로가기

Happyer16

(314)
ES6 문법 개요 ES6 문법 1. let과 constES6부터 나온 새로운 변수 선언 키워드이다. let과 const는 block scope를 가진다. const는 변경되지 않는 상수를 표현할 때 사용한다.function foo() { if (true) { let a = 'bar'; } console.log(a); } foo(); // Uncaught ReferenceError: a is not defined ES6 문법 2. Arrow function const a = () => { console.log("arrow function"); } a();const print = text => { console.log(text); } // 파라미터가 1개일땐 괄호 생략 가능 const sum = (a, b) => (a + b..
AWS SNS란? AWS SNS(Simple Notification Service)란?구독 중인 엔드포인트 또는 클라이언트에 메시지 전달을 조정 및 관리하는 웹 서비스이다. ( 메시지 브로커라고 보면 될 거 같네 ) 이벤트 생산하는 쪽을 게시자 ( Publisher )라 하고, 이벤트를 구독하는 쪽을 구독자 ( Subscriber )라 한다. Amazon SNS Message Delivery Status AWS SNS는 구독자( ex : Application, HTTP, Lambda, SQS ) 에게 전송된 메시지 전달 상태에 log를 남겨 준다. log는 CloudWatch 로그로 전송이 된다.
CloudFront란? CloudFront란?html, css, js 및 이미지 파일과 같은 정적 및 동적 웹 컨텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹서비스라고 한다. 정의에 나온대로 가장 대표적인 사용사례가 정적 웹 사이트 콘텐츠 전송 속도 향상이다. CloundFront에서 콘텐츠를 어떻게 제공하길래 빨라지는 걸까? CloudFront에서 콘텐츠를 제공하는 방법1. 사용자가 웹사이트에 접속하면 이미지 파일 및 HTML 파일을 요청합니다. 2. DNS가 요청을 최적으로 서비스 할 수 있는 CloudFront 엣지 로케이션으로 요청을 라우팅합니다. ( 지연시간과 관련해 가장 가까운 CloudFront 엣지 로케이션임 ) 3. 엣지 로케이션에서 CloudFront는 해당 캐시에 요청된 파일이 있는지 확인한다. 파일이 ..
Message-Driven 마이크로서비스 Message Driven 마이크로서비스에 관하여 이번 포스팅에서 마이크로서비스 간의 비동기 통신을 어떻게 구현하는지에 대해 살펴보자. 비동기 one-to-one, publish/subscribe 통신 스타일을 RabbitMq와 Spring Cloud Stream을 사용해서 구현해 볼 것이다. 이번 포스팅에서는Spring Cloud Stream과 관련된 용어와 개념들Binder 역할을 하는 RabbitMQ 메시지 브로커 사용하기Spring Cloud Stream 프로그래밍 모델Binding, Producers, Consumers 설정하기Spring Cloud Stream이란?Message Broker와 통신할 수 있도록 도와주는 것이다. Spring Cloud Stream으로 만들어진 applicatio..
Sleuth란? Sleuth란? MSA구조에서 클라이언트의 호출이 내부적으로 여러 마이크로서비스를 거쳐서 일어난다. 이와 같은 구조때문에 전체 트랜잭션에 대한 로그 추적이 어렵다. 이를 추적하기 위해서는 연관된 ID가 필요하다. 이러한 ID(trace, span)를 자동으로 생성해주는 것이 Spring Cloud Sleuth이다. Spring Cloud Sleuth의 ID 체계Span ID하나의 작업 단위, 각 서비스 호출시 새로운 Span ID가 생성Trace중 첫번째 생성된 Span ID를 Root Span이라 부름Trace ID최초 호출시 실행되는 서비스에서 생성 트위터의 집킨(Zipkin), 클라우데라의 HTrace 및 구글의 대퍼(Dapper)등의 UI툴을 이용하면 분산 환경의 로그 트레이싱을 쉽게 할 수 있다..
도커 컨테이너와 마이크로서비스 컨테이너화의 개념과 마이크로서비스 관점에서 컨테이너화의 타당성 마이크로서비스를 도커 이미지 및 도커 컨테이너로 만들고 배포하는 방법AWS를 활용한 클라우드 기반의 도커 배포에 관한 내용을 살펴보자. 하나의 물리적인 장비에 여러 개의 작은 가상머신을 운영하는 것은 자원 효율적이지 못하며, 결국에는 자원고갈로 이어지기 마련이다. 마이크로서비스의 원칙 중 하나는 실행환경의 하나부터 열까지 모두를 완전하게 캡슐화해서 자기 완비적이고 자율적인 특성을 유지해야 한다. 컨테이너의 장점자기 완비적 : 컨테이너 패키지는 필수적인 애플리케이션 실행 바이너리와 의존하는 모든 라이브러리를 함께 포함하고 있어서 개발, 테스팅, 운영 환경 사이에서 환경 문제로 짝이 맞지 않는 일이 없게 보장한다.가벼움 확장성 : 이미지의 크기가..
스프링 5에서 Reactive Programming 하기 (1) Reactive Programing 사용예시Reactive 환경에서 message-driven communication에 대한 이해는 필수다. Reactive Programming에 대한 이해를 위해 하나의 예시를 살펴보자. 마이크로서비스 패턴에서 게이트웨이 필수이기 때문에 예시에 포함시켰다. ( API Gateway, Service Registry에 대해 더 알고 싶다면 제 블로그의 Microservices 카테고리를 참고해주세요 ) 응답성(responsive)를 위해서, 주문이 접수되면 바로 response를 return하고 async로 payment service를 호출한다. 최종 notifcation은 메일을 통해 전송이 된다.
RxJava란? Observable,Observerd 좋은 어플리케이션을 만들기 위해서는 3가지 요소를 고려하여야 한다. Responsiveness, Elasticness, Resilience이다. RxJava 설정하기 io.reactivex.rxjava2 rxjava 2.1.0 RxJava는 어떻게 동작하는가?Dzone에 있는 모든 문서를 가져와주는 어플리케이션을 예시로 살펴보자. public class DzoneDBDao { private static DzoneDBDao service = new DzoneDBDao(); public static DzoneDBDao get() { return service; } DZoneDoc[] getAllDocFromDB() { return produceDocs(); } private DZoneDoc[] produce..
토비의 스프링 7장(1) - SQL과 DAO의 분리 4,5,6장을 살펴보면서 스프링의 3대 핵심 기술인 IoC/DI, 서비스 추상화, AOP에 대해 간단히 살펴봤다. 스프링이 자신의 핵심 기술을 다양한 분야에 적용했듯이, 스프링을 사용하는 개발자도 스프링이 제공하는 3가지 기술을 필요에 따라 스스로 응용할 수 있어야 한다. SQL과 DAO의 분리UerDao에서 반복적인 JDBC 작업 흐름을 템플릿을 이용해 제거했다. 그리고 다른 부분과의 연결을 인터페이스를 통해 DI 되기 때문에 다이나믹하게 관계를 설정할 수 있다. 즉, DAO에는 깔끔하게 다듬어진 순수한 데이터 액세스 코드만 남게 했다. 하지만, DB테이블과 필드정보를 고스란히 담고 있는 SQL 문장이 남아있다. DB의 테이블, 필드 이름과 SQL 문장의 변경으로 UserDAO를 수정하게 될 수도 있다..
토비의 스프링 6장(3) - 다이나믹 프록시와 팩토리 빈 프록시 패턴 / 데코레이터 패턴6-1장에서 트랜잭션 코드와 비즈니스 코드를 분리했었다.( http://happyer16.tistory.com/entry/%ED%86%A0%EB%B9%84%EC%9D%98-%EC%8A%A4%ED%94%84%EB%A7%81-6%EC%9E%A51-AOP-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%B6%84%EB%A6%AC ) 위의 구조를 다시 그린 후에 프록시에 대한 개념을 살펴보면 이해하기 편하다. 프록시와 타킷아래 그림은 위의 구조와 같은 것이다. 프록시(Proxy) : 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 대리자 ( UserServiceTx )타..