본문 바로가기

분류 전체보기256

[MSA] Spring Cloud Zuul 1.x - 개념편 안녕하세요. 오늘은 Spring Cloud에서의 API Gateway인 Zuul 1.0에 대해서 알아보도록 하겠습니다. 사실 현재 Zuul은 내부가 동기통신으로 이루어지기 때문에 부하 문제를 가지고 있어 Zuul 2.0 또는 Spring Cloud Gateway로 넘어가고 있는 추세입니다만, 요즘 나오는 API Gateway를 이해하기 위해서는 webflux를 이해하고 있어야 합니다. 때문에 이해를 위해서 1.0을 기준으로 설명을 진행하도록 하겠습니다. Zuul Zuul은 모든 장비 또는 웹사이트에서 백엔드 서비스를 호출할 때 거치는 문 같은 역할을 하는 어플리케이션입니다. Edge 서비스 어플리케이션이라고도 하며 MSA에서 동적 라우팅, 모니터링, 보안 등을 담당합니다. 사용처 zuul의 공식문서에는 .. 2020. 1. 20.
[MSA] Spring Cloud Ribbon - 개념과 실습편 저번 시간까지는 Spring Cloud의 Hystrix에 대해서 알아보았습니다. 오늘은 Ribbon에 대해서 알아보도록 하겠습니다. Ribbon은 Client에 탑재하는 Load Balancer입니다. Load Balancer 우리가 일반적으로 사용하는 LoadBalancer는 서버사이드 로드밸런싱을 처리하는 L4 Switch와 같은 하드웨어 장비였습니다. 하지만 MSA에서는 이런 장비보다는 소프트웨어적으로 구현된 클라이언트사이드 로드밸런싱을 주로 이용합니다. 이들의 차이를 한번 알아보도록 하겠습니다. 위는 일반적인 L4 switch 기반의 로드 밸런서입니다. Client는 L4의 주소만 알고 있으면되며 모든 로드 밸런싱은 L4에서 처리해 주고 있습니다. 이런 하드웨어 기반의 서버 사이드 로드 밸런서의 .. 2020. 1. 12.
[MSA] Spring Cloud Hystrix - 실습편 안녕하세요. 저번 포스팅에 이어서 오늘도 Hystrix를 이어서 알아보도록 하겠습니다. 이번 시간에는 저번 시간의 내용을 코드를 통해 구현해보는 시간을 가지도록 하겠습니다. 의존성 gradle 기준으로 저는 2.1.0.RELEASE를 사용합니다. build.gradle 파일에 아래와 같이 주입합니다. implementation("org.springframework.cloud:spring-cloud-starter-netflix-hystrix:2.1.0.RELEASE") Hello Histrix 가장 먼저 "Hello Histrix"를 찍어보도록 하겠습니다. // HystrixCommand는 annotation을 import 하지않도록 주의하자. import com.netflix.hystrix.Hystrix.. 2020. 1. 8.
[MSA] Spring Cloud Hystrix - 개념편 안녕하세요. 요즘 저는 MSA에 관하여 주로 포스팅을 올리고 있습니다. 오늘은 Spring Cloud에서 Circuit Break의 역할을 하는 Hystrix에 대해서 알아보도록 하겠습니다. 이번 포스팅은 이론을 중심으로 진행할 것이며 다음시간에는 Spring Boot를 통한 실습을 중심으로 진행하도록 하겠습니다. Hystrix 개론 MSA 처럼 분산환경을 구성하다보면 서비스가 다양한 이유로 언젠가는 실패할 수 있습니다. 외부의 서버와 연결이 되지 않는다, 메모리 릭으로 인해 서버가 다운 된다. 등 다양한 이유로 말이지요. Hystrix는 이러한 장애상황에 대해 견딜 수 있도록해줍니다. 어떻게 장애 상황에 대해서 내성을 강화시켜 줄 수 있을까요? Hystrix는 아래와 같은 특징을 가지고 있습니다. 다른.. 2020. 1. 6.
[MSA] MSA의 특징과 장단점 오늘은 저번 시간에 이어서 MSA의 특징과 장단점에 대해서 알아보도록 하겠습니다. MSA의 특징 스프링 5.0 마이크로서비스 2/e에서는 아래와 같은 문구가 나옵니다. 마이크로서비스의 특징에 대해서는 구체적이면서 모두가 동의하는 단 하나의 정의는 없다. 하지만 성공적이었던 모든 마이크로서비스 구현체들 사이에는 공통적으로 발견되느 특징들이 몇 가지 있다. 이 책에 서술되어 있는 성공적인 마이크로서비스의 공통적인 특징에 대해서 알아보도록 하겠습니다. 서비스는 일급 시민 API를 통해서만 마이크로서비스와 서비스와 상호작용할 수 있습니다. 즉, 마이크로서비스는 서비스의 end-point(접근점)을 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화합니다. 내부의 구현 로직, 아키텍처와 프로그래밍 .. 2020. 1. 2.
[MSA] MSA의 개념과 이해_기존 아키텍처와 MSA 마이크로서비스는 최근 많은 조직에서 고도의 애자일성, 전달 신속성, 확장성을 확보할 수 있는 중요한 수단으로 사용 중인 아키텍처 스타일입니다. 기존의 특정한 물리적인 서버에 서비스를 올리던 on-promise 서버기반의 monolithic architecture에서 이제는 클라우드 환경을 이용하여 서버를 구성하는 MicroService Architecture로 많은 서비스들이 전환되고 있고, 새로 출시되는 서비스들은 이렇게 진행되고 있습니다. 오늘은 기존의 Monolithic Architecture와 MSA(MicroService Architecture)의 변화와 차이에 대해서 알아보도록 하겠습니다. Monolithic Architecture 모놀리식 아키텍처란 서비스의 아키텍처를 구성할 때 모든 서비스.. 2019. 12. 26.
database 이름 짓기 안녕하세요. Class명, 변수명, REST API의 명 등 이름을 짓는 일은 개발에서 가장어려운 부분중 하나라는 점은 다들 공감하실 것이라 생각합니다. 프로젝트에 참여하는 모두가 공감대를 가질 수 있어야 하며 명확해야하기 때문입니다. 그래서 큰 프로젝트에서는 명명 사전, 축약 사전등을 만들어놓고 사용하기도 합니다. database의 table, column 등의 이름을 정하실 땐 어떻게 하시나요? 컬럼은 대문자...? 축약어는 많이 사용하시나요? 오늘은 database의 이름짓는법에 대해서 알아보도록 하겠습니다. 영어권에서의 명명법을 찾아서 번역 및 정리한 자료라 우리나라와는 맞지 않는 부분이 있을 수도 있습니다. 참고의 용도로 봐주시면 감사하겠습니다. 명명 규칙의 중요성 이름은 오래간다 데이터 구조는.. 2019. 12. 23.
[MSA] Elastic Stack을 이용한 중앙 집중형 로깅_실제 운영 환경 안녕하세요. 오늘은 Elastic Stack을 이용한 중앙 집중형 로깅_1 포스팅에 이어서 각각의 elastic stack을 한번 이어보도록 하겠습니다. 개론 클라우드 환경에서 중앙 집중형 로깅을 만드는 것은 로컬환경에서 세팅하는 것과 많은 차이를 가지고 있습니다. 우리가 클라우드 상황임에 따라서 고려해야하는 상황이 좀 더 추가되는 것이지요. 고려해야하는 상황과 해결법은 아래와 같습니다. 서비스는 서버에 독립적이어야 한다. docker를 통한 해결 서비스는 상황에 따라 유연하게 Scale-out될 수 있어야한다. 새로운 서버에 새로운 서비스가 인스턴스로 올라왔다면 Log Shipper(로그를 중앙으로 전달하는 프로세스)또한 Scale-out 되어야 한다. Auto-Scaling 등을 이용한 해결 kube.. 2019. 12. 18.
[MSA] 12요소 어플리케이션; 클라우드 네이티브 어플리케이션 많은 조직들이 기존 어플리케이션을 들어내며 클라우드로 옮기고 있습니다. 그리고 처음부터 클라우드로 개발을 하기도합니다. 이런 클라우드의 장점은 비용, 속도, 애자일성, 유연성 ,탄력성 측면에서 많은 장점을 가지고 있습니다. 사실 이런 장점을 모든 개발사들이 누리고 있는 것은 아닙니다. 왜냐하면 기존의 온프레미스 아키텍처가 클라우드 환경과는 맞지 않는 부분이 있기 때문입니다. 어떻게 하면 어플리케이션이나 마이크로서비스를 다른 여러 클라우드 서비스상에서 매끄럽게 운영하고 탄력성 같은 서비스의 장점을 누릴 수 있을까요? 허로쿠(Heroku)가 제시한 12 요소 어플리케이션은 클라우드에서 장점을 살릴 수 있는 특징을 기술하는 방법론입니다. 오늘은 이런 12 요소 어플리케이션에대해서 한번 알아보도록 하겠습니다. .. 2019. 12. 15.
[MSA] Filebeat와 Logstash의 비교 안녕하세요. 원래 오늘은 ElasticSearch를 실제로 적용시켜보는 과정을 포스팅하려고 했습니다. 하지만 아키텍처를 그리기 전에 한번 비교하고 넘어가고 싶어서 이렇게 번외로 비교를 한번 진행하려고 합니다. 원래 ELK Stack에서 L인 Logstash는 ElasticSearch로 data shipper 역할을 하고 있었습니다. 어플리케이션에서 생산되는 log 등에 대해서 분석 및 수집 도구인 ElasticSearch로 전송의 역할도 담당했습니다. 하지만 2015년 더 경량의 data shipper인 filebeat가 나왔습니다. 이 둘의 공통점은 무엇이고 차이점은 무엇인지, 그리고 filebeat는 어디에 쓰면 좋고 logstash는 어디에서 사용하면 좋을지 한번 알아보도록 하겠습니다. 이 글은 l.. 2019. 12. 13.
[MSA] Elastic Stack을 이용한 중앙 집중형 로깅_1 안녕하세요. 저번시간까지는 Tracing에 대해서 알아보았습니다. 그리고 이번시간 부터는 중앙 집중형 로깅에 대해서 알아보도록 하겠습니다. 중앙 집중형 로깅이라는 것은 말 그대로 기존 방식의 로컬의 하드디스크에 로깅을 남기는 것이 아니라 외부에 로깅을 하는 것을 말합니다. 이런 로깅 방법의 지원으로 Elastic Stack을 이용할 수 있습니다. 원래 ELK Stack은 빅데이터 분석용으로 많이 사용되었었지만 클라우드 환경이 보편화 되며 중앙 집중형 로깅에도 많이 사용된다고 합니다. 간단한 설명 후 진행하도록 하겠습니다. Elastic Stack? 사실 Elastic Stack보다는 ELK Stack으로 많이 알려져 있습니다. 그럼 ELK Stack이란 뭘까요? 이에대한 설명은 elastic 회사 홈페이.. 2019. 12. 9.
[MSA] Spring Cloud Sleuth와 Zipkin을 이용한 분산 시스템 Tracing_2 안녕하세요. 오늘은 저번 포스팅에 이어서 Zipkin과 Sleuth를 연동하여 구현해보겠습니다. sleuth로 id를 주입하여 zipkin에서 취합여 보기좋게 트레이싱 하는 것 까지 입니다. 오늘 이 테스트를 진행하기 위해서는 2개의 프로젝트가 필요합니다. 그리고 오늘 프로젝트의 소스는 github에 올려두겠습니다. Zipkin과 Sleuth 연동 zipkin에서 데이터를 모으기 위한 시퀀스 다이어그램은 아래와 같습니다. 보시면 sleuth에서 trace에 대한 ID를 헤더에 기입하며, 타 시스템어 전송 후 돌아온 응답에 대해서 zipkin으로 비동기로 전송합니다. 이렇게 zipkin에 보내진 데이터는 취합되어 유저에게 보여주게 되는것입니다. 그렇다면 이제 본격적으로 구현해보도록 하겠습니다. Zipkin.. 2019. 12. 7.