IoCInverse of Control는 제어권을 개발자가 아닌 제 3자가 가지게 하는 것이다.그렇다면 우리는 왜 제어권을 3자에게 위임해야 하는가? 이에 대한 답을 찾기전에 과거로 돌아가보자. 과거 많은 형태의 오픈소스들이 나오고 있었고, 이들의 공통적인 이슈는 서로 다른 객체를 어떻게 연결할 것인지에 대한 문제였다. 이를 해결할 한 가지 방법으로 IoC가 제시되었다. 즉, IoC의 주된 목적은 Application의 Dependency를 제거해서 느슨한 결합을 제공하는 것이다. 그럼 Dependency란 무엇일까? Dependency (computer science) or coupling, a state in which one object uses a function of another object ..
Programming
분산서비스는 여러개의 서비스가 존재한다. 그래서 서비스 수마다 로그가 분산되어서 각 서버에 저장이 된다.이는 운영시 특정 로그를 볼 때 불편하기 마련이다.그래서 우리는 분산된 로그를 ELK의 도움이 받아 로그를 모아보려한다.Service먼저 3개의 서버가 존재하고, 각 서버에 Spring Applcation, logstash(shipper)가 설치되어 있다.각 Spring Application은 log파일을 생성하고, logstash는 생성된 log파일을 읽은 뒤 특정한 곳으로 보내는 역할을 한다. 여기서는 Redis로 보내게 된다.Queue지금처럼 서비스의 개수가 적거나 Log수가 적으면 굳이 중간에 Redis같은 Queue 역할을 둘 필요 없이 ElasticSearch로 전송하면 되지만, 항상 만약을..
[MSA] #1 Monolithic Architecture 란?[MSA] #2 Microservice Architecture 란?[MSA] #3 Circuit Breaker[MSA] #4 API Gateway[MSA] #5 Service Discovery[MSA] #6 Spring Cloud Netflix MSA는 Cloud 환경과 밀접하게 관련이 있습니다. 각 서비스마다 다른 서버에 올려야 되는데, 물리 서버를 사용하게 되면 관리하기 힘들어집니다. 100개의 서버가 필요하다면 100개의 물리 서버의 비용과 장소 비용 하드웨어 관리 비용 등이 듭니다. 그러나 Cloud를 사용하게 되면 이런 이슈를 AWS와 같은 솔루션에서 해결해줍니다. 그리고 가용성을 고려해야 되기 때문에도 많은 서버에 관리해야 합니다...
[MSA] #1 Monolithic Architecture 란?[MSA] #2 Microservice Architecture 란?[MSA] #3 Circuit Breaker[MSA] #4 API Gateway[MSA] #5 Service Discovery[MSA] #6 Spring Cloud Netflix MSA는 각각의 서비스를 API 형태로 제공한다는 것을 알게 되었습니다. 그러면서 몇 가지 이슈가 생겨나게 됩니다. 예를 들면 서비스마다 주소가 다르다는 점과 로깅, 모니터링, CORS처럼 서비스 간의 공통된 로직의 관리가 있습니다. 차근차근 API Gateway가 어떤 식으로 이를 해결하는지 알아보겠습니다. API Gateway란? API 서버 앞단에서 모든 API 서버들의 End-Point를 단일화..
[MSA] #1 Monolithic Architecture 란?[MSA] #2 Microservice Architecture 란?[MSA] #3 Circuit Breaker[MSA] #4 API Gateway[MSA] #5 Service Discovery[MSA] #6 Spring Cloud Netflix Circuit Breaker란? 에너지가 있는 도선과 중립 도선 사이의 전류 균형이 깨졌을 때, 전류를 차단하는 장치 학생 때 포기한 물리수업에서 나올 법한 말들이 나오네요. 한국어로는 누전 차단기입니다. (두꺼비집) 누전으로 인해 집이 다 불타버리는 것보다는 이상 징후가 있을 때 전류를 차단하여 잠깐 불편한 것이 훨씬 낫습니다. 이렇게 접근하면 Circuit Breaker를 좀 더 쉽게 이해할 수 있..
[MSA] #1 Monolithic Architecture 란?[MSA] #2 Microservice Architecture 란?[MSA] #3 Circuit Breaker[MSA] #4 API Gateway[MSA] #5 Service Discovery[MSA] #6 Spring Cloud Netflix 이전 글에서는 Monolithic Architecture에 대해서 알아봤습니다. Monolithic은 모든 것이 하나로 묶여있다고 말했었는데요, 이번에 소개할 MSA는 묶여있는 것을 나누는 것입니다. 마틴 파울러는 MSA를 다음과 같이 정의합니다.마이크로 서비스 아키텍처 스타일은 단일 응용 프로그램을 나누어 작은 서비스의 조합으로 구축하는 방법이다. 위의 그림은 이전에 본 Monolithic으로 구현된..
[MSA] #1 Monolithic Architecture 란?[MSA] #2 Microservice Architecture 란?[MSA] #3 Circuit Breaker[MSA] #4 API Gateway[MSA] #5 Service Discovery[MSA] #6 Spring Cloud Netflix 요즘은 Microservice Architecture(이하 MSA)가 항상 화두에 올라있는 것 같습니다. 그래서 MSA가 도입된 배경과 갖가지 이슈를 어떻게 해결했는지에 대해 차근차근 써보려고 합니다. Monolithic이라는 단어를 들어보셨나요? 생소해서 구글에게 한번 물어봤습니다.개인적으로 '단단히 짜여 하나로 되어 있는'라는 어감은 참 부정적인 인상을 주네요. 왜냐하면 더 나은 코드와 설계를 위해..
자바 8을 사용하다 보니 자연스럽게 람다와 스트림을 통하여 함수형 프로그래밍을 접하게 되었습니다. 위 두 가지를 쓰면서도 함수형 프로그래밍에 대한 이해는 없는 채, 단순히 간결한 코드 작성이 가능하다는 이유만으로 사용을 해왔습니다. 그러다 함수형 프로그래밍을 좀 더 깊숙하게 알기 위해 스터디를 진행했습니다. 함수형 프로그래밍이 무엇이냐고 물어본다면 한마디로 '순수 함수(Pure Function)를 작성'하는 것이라고 정의를 내릴 수 있습니다. 이것을 풀어 말하면 '동일한 입력값에 대해서는 항상 동일한 출력값을 반환(참조에 투명)'하는 것입니다. 그러나 독자분들은 다음과 같이 생각하실 수도 있습니다. '어? 내가 짠 코드는 동일한 입력값을 넣으면 동일한 출력값이 나오던데?' 이는 저도 가졌던 오해였고, 코..