소개

오늘날 빠르게 변화하는 디지털 환경에서 소프트웨어 아키텍처는 애플리케이션의 성공과 확장성을 결정하는 데 중요한 역할을 하죠. 다양한 아키텍처 패턴 중에서 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를 선택하는 것입니다.

반응형

'ETC' 카테고리의 다른 글

[MAC BOOK] Mac Book CPU 확인  (0) 2024.01.22
[AWS] EC2 Connect with SSH on Mac  (0) 2024.01.06
[AWS] Install AWS SDK on Mac M2 Pro  (0) 2023.12.28
[AWS] Create Access Key  (0) 2023.12.28
[ETC] Virtual Location  (0) 2021.10.06

Anaconda 를 사용할 때 파이썬 가상환경을 구성하는 방법에 대한 기록을 남깁니다.

Anaconda 가상환경 구성하기

Python을 배우거나 데이터를 다루는 일을 하다 보면 다양한 프로젝트마다 다른 패키지와 라이브러리를 사용할 필요가 생깁니다. 이때 가상환경을 사용하면 프로젝트별로 독립적인 환경을 구성할 수 있어 매우 유용합니다. Anaconda는 이러한 가상환경을 쉽게 관리할 수 있는 도구를 제공합니다. 이번 포스트에서는 Anaconda를 이용해 가상환경을 구성하는 방법을 단계별로 자세히 설명하겠습니다.

1. Anaconda 설치하기

먼저, Anaconda를 설치해야 합니다. Anaconda는 공식 웹사이트에서 다운로드할 수 있습니다.

  1. Anaconda 공식사이트의 DownLoad Page로 이동합니다.
  2. 본인 운영체제에 맞는 설치 프로그램을 다운로드합니다.
  3. 설치 프로그램을 실행하고 안내에 따라 설치를 완료합니다.




    Add Anaconda to my PATH environment variable Checkbox 를 선택하지 않습니다.




    완료하고 checkbox 를 모두 check 하였다면 아래와 같은 페이지와 광고가 뜹니다.


    그리고 Anaconda Navigator 창이 나타납니다.

2. Anaconda 가상환경 만들기

Anaconda 설치가 완료되면, 이제 가상환경을 만들어보겠습니다.

  1. Anaconda Navigator 창에서 Powershell Prompt를 클릭하여 엽니다. (Windows에서는 시작 메뉴에서 "Anaconda Powershell Prompt"를 검색하면 됩니다.)

  2. 먼저 Anaconda 에서 설치한 Python 의 Version 과 기존에 설치되어 있는 python 의 Version 을 확인해 봅니다. (Anaconda Prompt 에서는 현재 활성화된 환경의 이름이 괄호로 표시됩니다. 현재 base 환경임을 알수 있습니다.

    기존에 설치된 python version 과 다름을 알 수 있습니다.

    python --version
  3. Anaconda 의 가상환경은 Windows 환경의 경우 User Folder 내의 Anaconda3 > envs Folder 에 위치합니다. (Anaconda3 Version 을 설치한 경우일 것입니다. 4 version 이 나온다면... Anaconda4 가 되겠죠? 아마도... ㅎㅎ)

  4. 다음 명령으롤 사용하여 설치할 수 있는 Python 의 version 을 확인 할 수 있습니다.

  5. 다음 명령어를 입력하여 새로운 가상환경을 만듭니다:

  6. 여기서 virtualEnv_3913는 가상환경의 이름입니다. 원하는 이름으로 변경할 수 있습니다.

    conda create --n virtualEnv_3913 conda create --name virtualEnv_3913
  7. 가상환경을 만들면서 특정 Python version을 지정하고 싶다면 다음과 같이 입력합니다:이 예제에서는 Python 3.9.13 version을 사용합니다.

    conda create --n virtualEnv_3913 python=3.9.13 conda create --name virtualEnv_3913 python=3.9.13
  8. 설치하고 나면 envs Folder 내에 입력한 이름으로 가상환경 폴더가 생성됩니다.

3. 가상환경 활성화하기

가상환경을 만든 후에는 활성화해야 합니다.

  1. 다음 명령어를 입력하여 가상환경을 활성화합니다:

    conda activate virtualEnv_3913
  2. 활성화되면 프롬프트가 (virtualEnv_3913)로 바뀝니다. 이제 이 가상환경 내에서 패키지를 설치하고 관리할 수 있습니다.

  3. 다음 명령어를 입력하여 Anaconda 에 설치된 가상환경들을 조회해 봅니다:

  4. 활성화 되어 있는 가상환경에 * 가 표시되어 있습니다.

    conda env list

4. 패키지 설치하기

가상환경이 활성화된 상태에서 필요한 패키지를 설치할 수 있습니다.

  1. 예를 들어, requests 패키지를 설치하려면 다음과 같이 입력합니다:

    conda install requests
  2. 패키지를 최신 버전으로 업데이트하려면:

    conda update requests
  3. 다음 명령을 사용하여 설치할 수 있는 requeats package 의 version 을 확인할 수 있습니다.

    conda search requests
  4. 특정 버전의 패키지를 설치하려면:

    conda install requests=2.28.1
  5. Package 가 설치되는 Folder 는 Users\JH.Woo\anaconda3\envs\virtualEnv_3913 Folder 내의 Lib > site-packages Folder 입니다.

    기존 Folder 에 request package 와 설치에 필요한 package 들이 추가된 것을 확인할 수 있습니다.

5. 추가된 가상환경을 Anaconda Navigator 에서 사용하기

추가된 가상환경을 Anaconda Navigator 에서 추가하여 사용할 수 있습니다.

  1. Anaconda Navigator 에서 추가된 가상환경 확인하기Anaconda Navigator 를 열어 상단에 추가된 가상환경을 확인할 수 있습니다.

  2. 추가된 가상환경에 tool 설치하기추가된 가상환경을 선택하면 사용할 수 있는 tool 들이 표시됩니다.
    base 환경과는 별도로 virtualEnv_3913 환경에 설치해주어야 합니다.

    Jupyter notebookPowershell Prompt 도구의 아래 Install button 을 click 하여 설치해 줍니다.
    그럼 기존의 시작메뉴의 Anaconda3 메뉴에

    새로 설치한 Jupyter Notebook(virtualEnv_3913) 와 Anaconda PowerShell Prompt(virtualEnv_3913) 메뉴가 추가된 것을 볼 수 있습니다.

    Anaconda Navigator 에서 Jupyter Notebook 의 Launch button 을 클릭하여 실행하거나 시작메뉴에서 Jupyter Notebook(virtualEnv_3913) 메뉴를 실행해 줍니다.

  3. Jupyter Notebook 실행하기
    Jupyter Notebook 을 실행하면 Jupyter server 가 실행되고

    Local directory를 표시하는 페이지가 나타납니다.

    Local directory는 사용자 폴더(Users) 계정 Folder 를 표시합니다. (예: C:/Users/JH.Woo)

  4. Default Path 변경하여 Jupyter Notebook 실행하기
    탐색기와는 다르게 Default Path 의 상위 Folder 로 이동할 수 없기때문에 Programming 의 효율적인 작업을 위해서 Jupyter Notebook 을 실행할 때 Default Path 를 변경해줄 필요가 있습니다.
    특정 Folder 를 Local Directory 로 설정하여 Jupyter Notebook 을 실행하는 방법을 알아보겠습니다.
    이 예제에서는 D:\Python_Labs 라는 폴더를 사용하겠습니다.

    자신에게 맞는 폴더를 사용합니다.
    먼저 Powershell Prompt 를 실행합니다.

    다음 명령어를 사용하여 Jupyter Notebook 을 실행합니다.

    jupyter notebook d:/Python_Labs    ## \ 가 아닌 / 라는 것에 주의할 것


    Jupyter Notebook server 가 실행되며 실행내용을 보면 Local directory 가 d:/Python_Labs 인 것을 볼 수 있습니다.
    그리고 Local Directory 를 표시하는 Page 가 나타납니다.

    해당 Page 에서 새 Notebook 을 생성합니다.

  5. Jupyter Notebook Home Page 를 실수로 꺼버린 경우
    Jupyter Notebook server 창의 내용을 보면 Jupyter Notebook 의 Home page 를 표시한 부분이 있습니다.
    해당 링크를 Ctrl + Click 하거나 Link 를 복사하여 Browser 에서 실행하면 됩니다.

  6. New Notebook 에 가상환경 추가해주기
    새 Jupyter Notebook 을 추가할 때 가상환경이 표시되지 않고 Python 3(ipykernel)만 표시될 때 다음 명령어를 실행합다.

    ## conda activate [virtualEnv] 
    ## pip install ipykernel 
    ## python -m ipykernel install --user --name=[virtualEnv] --display-name "[virtualEnv]" 
    conda activate virtualEnv_3913 
    pip install ipykernel 
    python -m ipykernel install --user --name=virtualEnv_3913 --display-name "Python (virtualEnv_3913)"
  7. New Notebook 에 가상환경 Kernel 제거하기
    다음 명령어를 실행하여 Kernel 목록을 조회하고 원하는 Kernel 을 삭제합니다.
    명령 실행 후 커널은 다음과 같이 표시됩니다.

    jupyter kernelspec list 
    ## jupyter kernelspec remove [virtualEnv] 
    jupyter kernelspec remove virtualenv_3124

6. 가상환경 비활성화하기

작업을 마친 후 가상환경을 비활성화하려면 다음 명령어를 사용합니다:

conda deactivate
conda deactivate virtualEnv_3913

비활성화한 후 다음 명령을 실행해보면 활성화된 가상환경이 base로 변경된 것을 확인할 수 있습니다.

conda env list

7. 가상환경 삭제하기

더 이상 필요 없는 가상환경은 삭제할 수 있습니다.

  1. 가상환경을 비활성화한 상태에서 다음 명령어를 입력합니다:

    conda remove --n virtualEnv_3913 conda remove --name virtualEnv_3913
  2. 다음 명령어는 virtualEnv_3913 가상환경과 그 안의 모든 패키지를 삭제합니다.
    가상환경이 envs Folder 에서 삭제된 것을 확인할 수 있습니다.

    conda remove --name virtualEnv_3913 --all

8. 가상환경 목록 확인하기

현재 만들어진 가상환경 목록을 확인하려면 다음 명령어를 사용합니다:

conda env list

결론

이렇게 해서 Anaconda를 이용해 가상환경을 구성하는 방법을 알아보았습니다.
가상환경을 사용하면 프로젝트마다 독립적인 환경을 유지할 수 있어 여러 버전의 패키지를 관리하기에 매우 편리합니다.
Local Directory 를 설정하며 시작하는 과정이 조금은 귀찮은 작업일 수 있습니다. 처음에는 조금 복잡하게 느껴질 수 있지만, 익숙해지면 훨씬 더 효율적으로 작업을 할 수 있을 것입니다. Anaconda 가상환경을 활용해 보세요!




행복한 고수되세요.

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

반응형

Windows 환경에서 pyenv-win 을 사용한 파이썬 가상환경을 구성하는 방법에 대한 기록을 남깁니다.

Windows 환경에서 pyenv-win을 사용하여 Python 가상환경을 관리하는 방법에 대한 블로그를 작성하기 위해, 다음 단계를 따라 진행할 수 있습니다. 이 블로그는 설치부터 가상환경 관리까지 모든 과정을 포함합니다.


Windows 환경에서 pyenv-win 을 사용하여 Python 가상환경 관리하기

Python은 다양한 프로젝트에서 사용되며, 각 프로젝트마다 다른 버전의 Python을 요구할 수 있습니다. 이를 효과적으로 관리하기 위해 pyenv-win을 사용하면 여러 버전의 Python을 설치하고 간편하게 전환할 수 있습니다. 이 블로그에서는 Windows 환경에서 pyenv-win을 설치하고 사용하는 방법을 단계별로 안내하겠습니다.

1. pyenv-win 설치

1.1. pyenv-win 다운로드

먼저, pyenv-win을 GitHub에서 다운로드합니다. Git을 설치한 상태여야 합니다.

git clone https://github.com/pyenv-win/pyenv-win.git %USERPROFILE%\.pyenv
git clone https://github.com/pyenv/pyenv-virtualenv.git %USERPROFILE%\.pyenv\plugins\pyenv-virtualenv

특정위치에 가상환경을 몰아 놓으려면 %USERPROFILE%.pyenv 를 수정하면 되겠죠?

실행시키면 아래와 같은 폴더가 생성됩니다. (저의 Profile 은 JH.Woo 입니다.)

1.2. 환경 변수 설정

pyenv-win의 실행 파일이 시스템의 경로에 포함되도록 환경 변수를 설정합니다.

setx PATH "%USERPROFILE%\.pyenv\pyenv-win\bin;%USERPROFILE%\.pyenv\pyenv-win\shims;%USERPROFILE%\.pyenv\plugins\pyenv-virtualenv\bin;%USERPROFILE%\.pyenv\plugins\pyenv-virtualenv\shims;%PATH%"

## setx PATH "%USERPROFILE%\.pyenv\pyenv-win\bin;%USERPROFILE%\.pyenv\pyenv-win\shims;%PATH%"
## setx PATH "%USERPROFILE%\.pyenv\plugins\pyenv-virtualenv;%PATH%"

위 명령어를 실행하면 시스템>고급시스템 설정> 환경변수> 사용자변수 에 다음과 같이 등록됩니다.

환경 변수가 적용되도록 Command Prompt를 다시 시작합니다.

2. pyenv-win 기본 사용법

2.1. Python 버전 설치

pyenv-win을 사용하여 원하는 버전의 Python을 설치합니다. 예를 들어, Python 3.8.10 을 설치합니다.

pyenv install 3.8.10

설치된 폴더는 아래 그림과 같네요.

2.2. 설치된 Python 버전 확인

설치된 Python 버전 목록을 확인합니다.

pyenv versions

pyenv versions 를 통해서 pyenv 로 설치해서 등록된 python version 들을 확인할 수 있습니다.
다른 where python 이나 py -0 명령어로 조회해 보면 pyenv 를 사용해서 등록한 python 의 모습은 볼 수가 없습니다.

Get-Command python* | Select-Object Name, Version, Source

powershell 의 명령어로도 찾을 수가 없군요.

2.3. 글로벌 Python 버전 설정

시스템 전체에서 사용할 기본 Python 버전을 설정합니다.

pyenv global 3.8.10

궁금해서 pyenv 로 설치하지 않은 기존의 python 과의 설정을 보려고 py -0 을 실행해 봤습니다.
골때리는 상황이 전개될 듯하군요.. ㅎㅎ

3. 프로젝트별 로컬 Python 버전 설정

3.1. 프로젝트별 로컬 Python 버전설치

일단 설치가능한 버전을 확인해 봅니다. MAC OS 와 동일한 명령어라서 마음에 듭니다.

pyenv install --list

그리고 3.10.11 version 을 설치합니다.

pyenv install 3.10.11

3.2. 프로젝트 디렉토리로 이동

프로젝트가 있는 디렉토리로 이동합니다.

cd d:\Python_Labs\Projects\Prj_31011

3.3. 로컬 Python 버전 설정

해당 프로젝트에서 사용할 Python 버전을 설정합니다.

pyenv local 3.10.11

3.4. 설정 확인

pyenv local 3.10.11 명령어를 실행시키고 pyenv version 을 실행시켜서 현재 Prj_31011 폴더에서 사용중인 python 버전이 아래와 같이 3.10.11 이 설정된 모습을 볼 수 있습니다.

다른 폴더로 이동했을 때 pyenv version 을 실행시키면 Global version 이 표시되는 걸 볼 수 있죠.

pyenv version

3.5. 설정 해결

하지만 python --version 을 확인해보면 아직도 3.12 버전이 표시되는 걸 볼 수 있습니다.
느낌적인 느낌적으루다가.. 환경변수를 수정해 주면 될 듯합니다.


이 곳에 등록되어 있는 환경변수를 삭제해 줍니다.
그리고 열려있는 command 창을 닫아주고 다시 열어줍니다.

이제야 해결됐네요..


3.12.0 이 설치되어 있는 상황인데도요..

속이 시원합니다. ^^

4. 가상환경 생성 및 관리

4.1. 가상환경 생성

pyenv-win과 virtualenv를 함께 사용하여 가상환경을 생성할 수 있습니다. virtualenv가 설치되어 있는지 확인합니다.
하지만 MAC OS 에 비해 좀 귀찮네요.

pip install virtualenv

특정 Python 버전을 사용하여 가상환경을 생성합니다.

pyenv shell 3.10.11
virtualenv virtualEnv_31011
## pyenv virtualenv 3.10.11 virtualEnv_31011 # MAC OS 와 다른점이에요.

windows 에서는 Pyenv-Virtualenv plugin 을 사용할 수 없습니다.
그래서 위와 같은 방법을 사용할 수 밖에 없어요.

4.2. 가상환경 목록 확인

생성된 가상환경 목록을 확인합니다.

## pyenv virtualenvs #Pyenv-Virtualenv plugin 을 사용할 수 없어서 MAC OS 에서 사용가능합니다.

4.3. 가상환경 활성화

생성한 가상환경을 활성화합니다.

virtualEnv_31011\Scripts\activate # 폴더위치 확인하세요... ^^
## pyenv activate myenv #Pyenv-Virtualenv plugin 을 사용할 수 없어서 MAC OS 에서 사용가능합니다.

4.4. Package 설치

가상환경이 활성화된 상태에서 pip 명령어를 사용하여 필요한 패키지를 설치할 수 있습니다. 예를 들어, requests 패키지를 설치하려면 다음과 같이 입력합니다.

pip install requests  

설치하고 나면 \virtualEnv_31011\Lib\site-packages 폴더내에 request 관련 libray 들이 설치되어 있는 것을 확인할 수 있습니다.

4.5. 가상환경 비활성화

작업이 끝난 후 가상환경을 비활성화합니다.

deactivate

4.6. 가상환경 삭제

필요 없는 가상환경을 삭제합니다.

rmdir /s /q virtualEnv_31011
## pyenv uninstall myenv #Pyenv-Virtualenv plugin 을 사용할 수 없어서 MAC OS 에서 사용가능합니다.

결론

이제 pyenv-win을 사용하여 Windows 환경에서 Python 버전과 가상환경을 쉽게 관리할 수 있게 되었습니다.
다양한 프로젝트마다 필요한 Python 버전을 독립적으로 설정하고, 가상환경을 활용하여 패키지 충돌 없이 개발을 진행할 수 있습니다. pyenv-win은 Python 개발자의 생산성을 높이는 데 큰 도움이 됩니다.
하지만 Windows 에서는 pyenv 의 기능이 조금은 복잡하고 귀찮은 과정이 있네요..

여튼 재미나게 python 을 사용할 수 있게 되었습니다.

다음번에는 anaconda 의 환경 설정을 살펴보겠습니다.




행복한 고수되십시오.

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

반응형

+ Recent posts