스프링 마이크로서비스

마이크로서비스와 같은 분산형 아키텍처에서는 보안, 로깅, 그리고 여러 서비스 호출 간의 사용자 추적과 같은 중요한 작업을 수행해야 할 필요가 생긴다. 모든 개발 팀이 이러한 기능을 독자적으로 구현하는 대신, 각 서비스에서 일관되게 적용할 수 있는 방법을 찾는 것이 중요하다. 공통 라이브러리나 프레임워크를 사용해 이러한 기능을 각 서비스에 통합할 수도 있지만, 이 접근 방식은 유지보수와 확장성 측면에서 문제를 일으킬 가능성이 크다.이러한 기능을 각 서비스에 일관되게 구현하기 어렵다: 개발자는 제품 기능 구현에 집중하느라 바쁜 일상을 보내는 경우가 많아, 서비스 로깅이나 추적 기능처럼 필수적이지만 부가적인 작업을 간과하기 쉽다. 특히, 이러한 기능이 반드시 요구되는 규제 산업이 아니라면 더욱 잊혀지기 쉽다...
모든 시스템, 특히 분산 시스템은 실패를 겪기 마련이다. 이러한 실패를 처리할 수 있는 애플리케이션을 설계하는 것은 소프트웨어 개발자의 중요한 과업이다. 그러나 회복 가능한 시스템을 설계할 때, 대부분의 소프트웨어 엔지니어는 주로 인프라스트럭처나 주요 서비스의 일부가 완전히 작동하지 않을 상황만을 고려한다. 이들은 핵심 서버의 클러스터링, 서비스 로드 밸런싱, 인프라스트럭처를 여러 위치로 분산하는 등의 기술을 활용하여 애플리케이션 각 계층에 중복성을 확보하는 데 초점을 맞춘다. 이 접근법은 시스템 구성 요소가 완전히, 그리고 종종 심각하게 손상되는 상황을 상정하지만, 이는 회복력 있는 시스템 구축에서 일부 문제만 다루는 것에 불과하다. 서비스가 완전히 중단되면 이를 감지하고 애플리케이션이 우회하도록 처리..
분산 아키텍처에서는 호스트 이름과 머신이 위치한 IP 주소를 파악하는 것이 필수적이다. 이 개념은 분산 컴퓨팅의 초기부터 사용되었으며, '서비스 디스커버리'라는 이름으로 공식화되었다. 서비스 디스커버리는 애플리케이션에서 사용하는 원격 서비스 주소를 포함하는 간단한 프로퍼티 파일을 관리하는 방식부터, UDDI 저장소와 같은 정교하고 구조화된 접근 방식까지 다양한 형태로 구현될 수 있다.수펑 확장 (horizontal scaling or scale out): 이 패턴은 일반적으로 애플리케이션 아키텍처에서 클라우드 환경 내 서비스 인스턴스와 컨테이너 수를 늘리는 등 추가적인 조정을 필요로 한다.회복성 (resiliency): 이 패턴은 비즈니스에 영향을 주지 않으면서 아키텍처와 서비스 내부에서 발생한 문제를 ..
애플리케이션 구성 정보를 코드에서 분리하는 것은 매우 중요하다. 대개 이 말은 코드에 하드코딩된 값을 사용하지 않도록 하라는 의미이다. 이 원칙을 무시하면 구성 정보가 변경될 때마다 애플리케이션을 재컴파일하고 재배포해야 하므로 애플리케이션이 복잡해진다. 애플리케이션 코드에서 구성 정보를 완전히 분리하면 개발자와 운영자는 재컴파일 없이 구성 정보를 변경할 수 있다. 그러나 이로 인해 개발자에게는 애플리케이션과 함께 관리하고 배포해야 할 추가적인 산출물이 생기므로 복잡성이 증가한다. 많은 개발자들이 프로퍼티 파일(YAML, JSON, XML)을 사용해 구성 정보를 저장한다. 이러한 파일을 통해 애플리케이션 구성을 설정하는 작업은 간단하고, 대부분의 개발자는 구성 파일을 소스 제어 시스템에 추가하고 애플리케이..
마이크로서비스를 안정적으로 유지하려면 이식성 문제, 즉 마이크로서비스를 다른 기술 환경에서도 실행할 수 있는 방안을 마련해야 한다. 이식성(portability)은 소프트웨어를 다양한 환경으로 이동하거나 그 환경에서 활용할 수 있는 능력을 의미한다. 컨테이너를 활용하면 소프트웨어를 한 플랫폼에서 다른 플랫폼으로 신속하고 효율적으로 이전하고 실행할 수 있다. 전통적인 웹 서버 모델을 보다 작은 규모의 유연한 가상화된 소프트웨어 컨테이너로 대체할 수 있으며, 컨테이너는 마이크로서비스에 속도, 이식성, 확장성 등의 장점을 제공한다. 도커 (Docker)는 주요한 클라우드 공급자 모두와 호환되는 기술이다. 4.1 컨테이너 또는 가상 머신?여전히 많은 기업에서 가상 머신 (VM)은 소프트웨어 배포를 위한 표준으로..
마이크로서비스를 성공적으로 설계하고 구축하려면 범죄 현장의 목격자들을 인터뷰하는 방식처럼 접근해야 한다. 비록 모든 목격자가 같은 사건을 목격했더라도, 그들의 배경, 중요하게 여기는 것(예시 동기 부여), 목격 당시의 환경적 요인에 따라 사건에 대한 해석은 달라질 수 있다. 각 목격자는 자신이 중요하다고 생각하는 요소에 대해 서로 다른 시각이나 편견을 가질 수 있다. 성공적으로 진실을 추적하는 형사처럼, 성공적인 마이크로서비스 아키텍처를 구축하는 과정은 소프트웨어 개발 조직 내 다양한 개인들의 관점을 통합하는 것과 밀접하게 관련된다. 전체 애플리케이션을 제공하려면 기술 인력 외에도 다양한 인력이 필요하므로, 마이크로서비스 개발 기반을 성공적으로 마련하려면 다음의 세 가지 중요한 역할에서부터 시작할 수 있..
마이크로서비스의 설계, 구현, 유지 보수 과정이 잘 관리되지 않으면 문제를 신속하게 발생시킬 수 있다. 따라서 마이크로서비스 솔루션을 도입할 때는 성능 문제나 병목 현상, 운영상의 문제를 방지하기 위해 아키텍처를 효율적이고 확장 가능하게 유지하는 것이 중요하다. 이를 위해 모범 사례를 적용하는 것이 필수적이며, 이러한 모범 사례를 준수하면 시스템에 대한 이해가 필요한 새로운 개발자들이 더 빠르고 쉽게 적응할 수 있다. 시스템이 더 많이 분산될수록 실패할 곳은 더 많아진다. 마이크로서비스 아키텍처는 단일 모놀리스 애플리케이션과 달리 여러 개발 서비스가 상호작용하는 복잡한 생태계를 구성하기 때문에 더 많은 실패 지점이 존재할 수 있다. 이는 개발자가 마이크로서비스 애플리케이션이나 아키텍처를 구축할 때 다양한..
1.1 마이크로 서비스 아키텍처로 진화소프트웨어 아키텍처는 소프트웨어 시스템을 구성하는 여러 구성 요소들의 구조, 동작 및 상호작용 방식에 대한 설계 및 정의를 다루는 중요한 분야다. 이는 시스템의 전체적인 설계뿐만 아니라, 구성 요소들이 어떻게 조직되고, 서로 어떻게 통신하며, 요구사항을 충족하는 방식으로 동작하는지를 결정한다. 소프트웨어 아키텍처는 시스템의 성능, 확장성, 유지보수성, 보안성 등 중요한 품질 속성에 영향을 미친다.1.1.1 다계층 (N-계층) 아키텍처다계층(N-계층) 아키텍처는 일반적인 엔터프라이즈 아키텍처 유형 중 하나로, 애플리케이션을 여러 계층으로 분리하여 각 계층이 특정한 책임을 맡도록 설계하는 방식이다. 이 구조에서는 각 계층이 독립적으로 존재하면서도 서로 상호작용하여 전체 ..
GLaDiDos
'스프링 마이크로서비스' 카테고리의 글 목록