[Development] 마이크로서비스 : 아키텍처, 장점과 단점

Microservice Architecture 와 Monolithic Architecture 를 비교하고 Microservice Architecture 의 장점과 단점을 알아봅니다.

소개

오늘날 빠르게 변화하는 디지털 환경에서 소프트웨어 아키텍처는 애플리케이션의 성공과 확장성을 결정하는 데 중요한 역할을 하죠. 다양한 아키텍처 패턴 중에서 Microservice 가 오래전부터 사용하고 있죠. 그래서 이번에는 Microservice의 개념과 Archtecture, 장단점을 살펴보고, 기존의 Monolithic 시스템 대신 언제 이 방법을 적용해야하는 지에 대해 알아보겠습니다.

Microservice 란 ?

Microservice는 애플리케이션 도메인 내에서 단일한 목적을 가진 독립적인 서비스입니다. 모든 기능을 하나의 codebase 에서 처리하는 거대한 monolithic application 과는 달리, Microservice는 특정 작업을 수행하도록 설계되었습니다.  예를 들어, e-commerce application 에서 하나의 microservice 는 사용자 인증을 처리하고, 다른 microservice 는 쇼핑 카트를 관리하며, 또 다른 microservice 는 결제를 처리하는 식입니다.  

Microservice 의 주요 특징은 다음과 같습니다:

  • 단일 책임 (Single Responsibility) : 각 microservice 는 하나의 특정 기능에 대한 책임만 가집니다.    
  • 작고 집중됨 (Small and Focused) : microservice 는 일반적으로 작으며, 특정 작업에 필요한 코드만 포함합니다.    
  • 독립성 (Independent) : microservice 는 종종 독립적으로 개발, 배포 및 확장됩니다.   

Microservice Archtecture

하나의 Microservice 도 가치가 있지만, 진정한 힘은 여러 Microservice 를 결합하여 완전한 application을 구축하는 데서 나옵니다. 이 구성을 Microservice Architecture 라고 합니다.    

이 Architecture 에서 microservice 는 Application의 전체 기능을 수행하기 위해 API(Application Programming Interface) 또는 Event를 통해 서로 통신합니다. 예를 들어, E-Commerce 시나리오에서 FrontEnd Application은 다양한 microservice 와 상호 작용하여 제품을 표시하고, 사용자 Session을 관리하며, 주문을 처리하는 등의 작업을 수행합니다.   

Microservice 를 “결합”하는 것이 codebase 를 병합하는 것을 의미하지 않는다는 점을 이해하는 것이 중요합니다. microservice 로 결합되지 않으면 monolithic system 을 구축하는 것과 같습니다.    

Microservice의 장점

Microservice 의 장점은 다음과 같습니다:    

  • 향상된 유지보수성 (Enhanced Maintainability) :
    • Microservice 는 작고 집중되어 있기 때문에 유지 관리가 더 쉽습니다.    
    • 하나의 Microservice 에 대한 변경이 다른 서비스에 영향을 미칠 가능성이 적습니다.
    • 각 서비스는 자체 codebase를 가지므로 개발 팀이 더 쉽게 이해하고, 업데이트하고, 유지 관리할 수 있습니다.
    • 단일 책임 원칙을 준수하므로 code refactoring을 요구하는 외부 요인의 영향을 덜 받습니다.
    • Microservice 는 자체 데이터 저장소를 소유하므로 다른 서비스가 데이터에 직접 액세스하는 것을 방지합니다.
  • 지속적인 배포 (Continuous Delivery) :
    • Microservice 는 더 빠르고 빈번한 배포를 가능하게 합니다.    
    • 독립적이므로 하나의 서비스 업데이트를 전체 application을 다시 배포하지 않고 배포할 수 있습니다.
    • 이는 agile 개발 및 빠른 반복에 매우 중요합니다.
    • Microservice 의 작은 크기와 집중된 특성 덕분에 자동화된 테스트를 구현하기가 더 쉽습니다.
  • 확장성 (Scalability) :
    • Microservice 는 독립적으로 확장할 수 있습니다.    
    • 하나의 서비스에 과부하가 걸리면 전체 application을 확장하지 않고 해당 서비스만 확장할 수 있습니다.
    • 이를 통해 resource를 보다 효율적으로 사용하고 비용을 절감할 수 있습니다.

Microservice 의 단점

 Microservice 는 다음과 같은 단점도 있습니다 :    

  • 복잡성 (Complexity) :
    • Microservice Architecture는 본질적으로 Monolithic Architecture보다 더 복잡합니다.    
    • 개발자는 여러 서비스, 데이터베이스 및 통신 채널이 있는 분산 시스템을 관리해야 합니다.
    • 디버깅 및 모니터링이 더 어려울 수 있습니다.
  • 지연 시간 (Latency) :
    • 네트워크를 통한 Microservice 간의 통신은 지연 시간을 발생시킵니다.    
    • 이는 application 성능에 영향을 줄 수 있습니다.
    • 비동기 통신 패턴은 이를 완화하는 데 자주 사용되지만 복잡성을 더합니다.
  • 리팩토링 (Refactoring) :
    • Microservice 전반의 refactoring은 어려울 수 있습니다.    
    • 여러 서비스에 걸친 변경 사항은 신중한 조정과 테스트가 필요합니다.
    • 기술 스택의 차이는 refactoring을 더욱 복잡하게 만들 수 있습니다.

Monolithic vs. Microservice : 올바른 선택

Monolithic Architecture 와 Microservice Architecture 간의 선택은 프로젝트의 특정 요구 사항에 따라 다릅니다.    

  • Monolithic :
    • Monolithic Architecture 는 초기 개발이 더 간단하며 복잡성이 적고 개발팀 규모가 작은 소규모 application 에 적합합니다.    
    • 빠른 초기 개발이 가능합니다.
  • Microservice :
    • Microservice 는 확장성, 유연성 및 독립적인 배포가 필요한 대규모의 복잡한 application 에 더 적합합니다.    
    • 여러 개발팀이 있는 조직에도 적합합니다.

결론

Microservice 는 확장 가능하고 유지 관리하기 쉬운 application을 구축하는 강력한 접근 방식을 제공합니다. 그러나 복잡성을 수반하며 Trade-off 를 신중하게 고려해야 합니다. 핵심은 프로젝트의 목표, 팀 규모 및 장기적인 요구 사항에 가장 적합한 architecture를 선택하는 것입니다.

[Mac OS] React Native Build Error in MAC M1

Mac Os M1 Process 에서 React Native build 시 오류가 발생했을 때 제일 처음 Rosetta option 이 설정되어 있는지 확인한다.

Mac Os M1 Process 에서 React Native build 시 오류가 난다면.

    1. Terminal App 의 Rosetta option 을 Check 한다.
set Rosetta option in app info
set Rosetta option in app info
set Rosetta option in app info
set Rosetta option in app info
    1. iTerm App 의 Rosetta option 을 Check 한다.
set Rosetta option in app info
set Rosetta option in app info
set Rosetta option in app info
set Rosetta option in app info
    1. XCode App 의 Rosetta option 을 Check 한다.

하지만 XCode 에는 Rosetta option 이 없다.

set Rosetta option in app info
set Rosetta option in app info
 

모두 행복한 고수되십시오.

WooGong ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

[Python] Python Virtual Environment Setting on Mac

MAC OS 에 파이썬 가상환경을 구성하는 방법

Python Virtual Environment Setting on Mac

MAC OS 에 파이썬 가상환경을 구성하는 방법

1. Homebrew 설치

먼저 Homebrew가 설치되어 있어야 합니다. Homebrew는 macOS에서 소프트웨어 패키지를 관리하기 위한 훌륭한 도구입니다. Homebrew가 설치되어 있지 않다면, 터미널을 열고 아래 명령어를 입력하여 Homebrew를 설치합니다:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2. pyenv와 pyenv-virtualenv 설치

Homebrew를 사용하여 pyenv와 pyenv-virtualenv를 설치합니다. 터미널에서 다음 명령어를 실행합니다:

brew install pyenv
brew install pyenv-virtualenv

3. 쉘 환경 설정

pyenv와 pyenv-virtualenv를 사용할 수 있도록 쉘 환경을 설정합니다. 사용하는 쉘에 따라 설정 방법이 다릅니다. 대부분의 경우, ~/.bashrc, ~/.bash_profile, 또는 ~/.zshrc 파일을 수정합니다.

Bash를 사용하는 경우, ~/.bash_profile에 다음 내용을 추가합니다:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Zsh를 사용하는 경우, ~/.zshrc에 다음 내용을 추가합니다:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

파일을 수정한 후, 쉘 설정을 다시 로드합니다:

source ~/.bash_profile  # Bash 사용자
source ~/.zshrc         # Zsh 사용자

4. Python 설치 가능 버전 확인

pyenv install --list
pyenv install –list

pyenv를 사용하여 설치할 수 있는 Python 버전들을 확인합니다. :

pyenv install --list

5. Python 버전 설치

pyenv install 3.12.3
pyenv install 3.12.3

pyenv를 사용하여 원하는 Python 버전을 설치합니다. 예를 들어 Python 3.12.3을 설치하려면 다음 명령어를 실행합니다:

pyenv install 3.12.3

pyenv versions
pyenv versions

설치된 Python 버전을 확인하려면 다음 명령어를 사용합니다:

pyenv versions

6. 가상환경 생성

pyenv virtualenv 3.12.3 myPython_test_env
pyenv virtualenv 3.12.3 myPython_test_env

pyenv-virtualenv를 사용하여 가상환경을 생성합니다. 예를 들어, myPython_test_env라는 이름의 가상환경을 Python 3.12.3 버전으로 생성하려면 다음 명령어를 실행합니다:

pyenv virtualenv 3.12.3 myPython_test_env

7. 가상환경 생성

Check environment
Check environment

생성 후 가상환경들을 확인해 봅니다.

8. 가상환경 활성화 및 비활성화

생성한 가상환경을 활성화하려면 다음 명령어를 실행합니다:

pyenv activate myPython_test_env

가상환경을 비활성화하려면 다음 명령어를 실행합니다:

pyenv deactivate

9. 가상환경 제거

더 이상 필요하지 않은 가상환경을 제거하려면 다음 명령어를 실행합니다:

pyenv virtualenv-delete myPython_test_env

이제 pyenv와 pyenv-virtualenv를 사용하여 Python 가상환경을 구성하는 방법을 살펴보았습니다.
이를 통해 프로젝트마다 독립적인 Python 환경을 설정하고 관리할 수 있겠죠?!

 

모두 행복한 고수되십시오.

WooGong ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

출처: https://www.jumptovb.net/entry/Python-Python-Virtual-Environment-Setting-on-Mac [Jump To VB.NET:티스토리]