반응형

소프트웨어 아키텍처 Hard Parts 의 내용을 정리한 내용입니다.

  • BASE 분산 트랜잭션 특유의 속성
    • BA (Basic availavility)
      • 분산 트랜잭션의 모든 서비스 또는 시스템이 분산 트랜잭션에 참여할 수 있으리라고 기대하는것.
    • S (Soft state)
      • 분산 트랜잭션이 진행중이고 원자적 비지니스 요청이 미 완료된 상태.
      • 고객 프로필 정보에서 Profile 테이블에는 데이터카 커밋 됐지만 다른 연관 테이블에는 커밋되지 않은 상태.
    • E (Eventual Consistency)
      • 충분한 시간이 지나면 언젠가는 결국 분산 트랜잭션이 완료되고 모든 데이터가 서로 동기화 된다는 의미.
      • 백그라운드 동기화 패턴 (Background synchronization pattern) - 326p
        • 별도의 외부 서비스나 데이터 소스를 주기적으로 체크해서 데이터 소스를 서로 동기화 한다.
        • 장점
          • 서비스가 디커플링 된다.
          • 응답성이 좋다.
        • 단점
          • 데이터 소스가 결합돤다.
          • 구현부가 복잡해진다.
          • 경계 콘텍스트가 무너진다.
          • 비지니스 로직이 중복될 수 있다.
          • 최종 일관성을 맞추려면 시간이 걸린다.
      • 오케스트레이티드 요청 기반 패턴 (Orchestrated request-based pattern) - 329p
        • 오케스트레이터가 전체 분산 트랜잭션을 관리한다.
        • 장점
          • 서비스가 디커플링 된다.
          • 데이터를 적시에 동기화 할수 있다.
          • 원자적 비지니스 요청이 가능하다.
        • 단점
          • 응답이 느리다.
          • 에러처리가 복잡하다
          • 보상 트랜잭션이 필요하다.
      • 이벤트 기반 패턴 (Event-based pattern) 333p
        • 이벤트나 커맨드 메세지를 이벤트 형태로 비동기 발행 해서 게시하면 구독하는 다른 서비스들이 이벤트를 받아 적절히 응답하는 페턴
        • 장점
          • 서비스가 디커플링 된다.
          • 데이터를 적시에 동기화 할수 있다.
          • 응답이 빠르다
        • 단점
          • 복잡한 에러처리
728x90
반응형
반응형

아키텍처 관련 책들을 요즘 많이 읽어보고 있다. 책을 읽는다고 완벽하게 습될수 있는 범위는 아니지만 여러번 읽으면 좋아지겠지라는 생각으로 읽고 있다. 

이 책은 아래와 같이 등장인물이 나온다. 그리고 그들의 시스템을 변경시켜가는 과정을 아키텍처 이론과정과 함께 설명을 하고 있다. 아마도 우리가 관리 또는 개발하는 시스템을 변경하려 할때 이 등장인물들이 겪는 경험을 하게 되지 않을까 생각이 든다. 

등장인물들의 대화를 통해서 요구사항과 현재 시스템의 상황들을 파악할 수 있다. 아마도 이부분이 다른 책들과 큰 차이점인것 같다. 딱딱한 이론만 있는것보다는 시나리오가 있는 이야기가 있다보니 이해를 잘 할수 있다. 각 챕터마다 처음 시작과 끝에 위와 같은 대화들을 주고 받는 내용들이 나온다. 이 이야기 속에서 나오는 내용들만 이해를 한다면 각 챕터를 잘 공부를 했다고 생각해도 될것 같다. 

그리고 어떤 책이든 글과 그림이 적절히 섞여 있어야 이해하기가 쉽다. 특이 아키텍처 책들에서는 내용이 어렵다 보니 그림이나 도표를 활용한 설명들이 독자들에게는 중요한 참고 자료들이다. 

내용을 이해하면서 읽어야 했기 때문에 전체를 다 읽은 상황은 아니다. 하지만 그만큼 시간을 투자해서 꼼꼼히 읽어야 하는 내용이기 때문에 급하게 읽을 필요는 없다고 생각된다. 아키텍트를 공부하는 분들은 한번쯤 읽어보면 실력향상에 도움이 될 책이다.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

728x90
반응형
반응형

Python Virtualenv

  • 프로젝트별 종속성 문제를 해결하기 위해서 가상환경을 제공한다.

  • 동시에 여러개의 프로젝트 진행시 각각의 파이썬 버전이 다를경우 사용한다.

  • virtualenv 환경 구성

    pip install virtualenv
    
    D:\STUDY\study_python>virtualenv py3.8-env
    created virtual environment CPython3.8.5.final.0-64 in 6461ms
      creator CPython3Windows(dest=D:\STUDY\study_python\py3.8-env, clear=False, global=False)
      seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\SDS\AppData\Local\pypa\virtualenv)        \Local\pypa\virtualenv)
        added seed packages: pip==22.2.2, setuptools==49.6.0, wheel==0.37.1
      activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
    • 1라인 : virtualenv 를 pip 를 이용해서 설치한다.

    • 3라인 : 가상환경을 생성한다.

    • 가상환경을 실행하기 위해서는 activate 명령어를 실행하면 된다. (window 의 경우 Script 폴더에 있고 리눅스인경우 bin 폴더 안에 생긴다.)

      (py3.8-env) D:\STUDY\study_python\py3.8-env\Scripts>

      가상환경을 실행하면 위와 같이 환경 이름이 앞에 붙는다.

    • 가상환경을 종료하기 위해서는 deactivate 명령어를 실행한다.

  • virtual 환경에 구성된 패키지 export

    pip freeze > req.txt
    
    req.txt
    certifi==2022.9.24
    charset-normalizer==2.1.1
    idna==3.4
    requests==2.28.1
    urllib3==1.26.12
  • req.txt 를 인스톨 하려면 다음과 같이 하면 된다.

    pip install -r req.txt
728x90
반응형

'Development > Python' 카테고리의 다른 글

[파이썬 문법] 키워드 가변 매개변수  (0) 2023.02.27
[파이썬 문법] 튜플  (0) 2023.02.27
Ubuntu 에서 파이썬 버전 확인 및 변경  (0) 2022.10.25
파이썬 입력값 받기  (0) 2021.08.25
파이썬 배열 초기화  (0) 2021.08.25
반응형

Ubuntu 에서 파이썬 설치 위치 확인

DESKTOP-MBRI3VL:~$ python --version
Python 2.7.17
DESKTOP-MBRI3VL:~$ python3 --version
Python 3.6.9

파이썬을 설치하다 보면 2.X 도 있고 3.X 도 있다. 위와 같이 각각의 버전을 확인해보면 설치된 버전을 확인할 수 있다. Ubuntu를 설치하면 기본적으로 2.7을 path 로 설정한다.

아래와 같이 명령어를 실행 하면 설치된 파이썬 목록들이 나완다. (정말 이것 저것 많다.)

DESKTOP-MBRI3VL:~$ ls /usr/bin | grep python

python-config
python2
python2-config
python2.7
python2.7-config
python3
python3-config
python3-jsondiff
python3-jsonpatch
python3-jsonpointer
python3-jsonschema
python3.6
python3.6-config
python3.6m
python3.6m-config
python3.7
python3.7m
python3m
python3m-config
x86_64-linux-gnu-python-config
x86_64-linux-gnu-python2.7-config
x86_64-linux-gnu-python3-config
x86_64-linux-gnu-python3.6-config
x86_64-linux-gnu-python3.6m-config

그래서 update-alternatives를 사용해서 파이썬에 대한 버전을 변경해보려고 한다. update-alternatives는 심볼릭 링크를 관리해 주는 리눅스 프로그램이다.

DESKTOP-MBRI3VL:~$ ls -al  /usr/bin | grep python
lrwxrwxrwx  1 root   root           26 Mar 27  2018 dh_pypy -> ../share/dh-python/dh_pypy
-rwxr-xr-x  1 root   root         1056 Apr 16  2018 dh_python2
lrwxrwxrwx  1 root   root           29 Mar 27  2018 dh_python3 -> ../share/dh-python/dh_python3
lrwxrwxrwx  1 root   root           23 Jul  2 00:56 pdb2.7 -> ../lib/python2.7/pdb.py
lrwxrwxrwx  1 root   root           23 Jun 29 20:45 pdb3.6 -> ../lib/python3.6/pdb.py
lrwxrwxrwx  1 root   root           23 Dec 10  2021 pdb3.7 -> ../lib/python3.7/pdb.py
lrwxrwxrwx  1 root   root           31 Oct 25  2018 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx  1 root   root           26 Mar 27  2018 pybuild -> ../share/dh-python/pybuild
lrwxrwxrwx  1 root   root            9 Apr 16  2018 python -> python2.7
lrwxrwxrwx  1 root   root           16 Apr 16  2018 python-config -> python2.7-config
lrwxrwxrwx  1 root   root            9 Apr 16  2018 python2 -> python2.7
lrwxrwxrwx  1 root   root           16 Apr 16  2018 python2-config -> python2.7-config
-rwxr-xr-x  1 root   root      3624880 Jul  2 00:56 python2.7
lrwxrwxrwx  1 root   root           33 Jul  2 00:56 python2.7-config -> x86_64-linux-gnu-python2.7-config
lrwxrwxrwx  1 root   root            9 Oct 25  2018 python3 -> python3.6

위에서 보면 python의 심볼릭 링크는 python2.7 로 되어있고 python3 에 대한 링크는 python3.6 으로 되어있다. 이것을 변경하려고 한다.

DESKTOP-MBRI3VL:~$ sudo update-alternatives --config python
update-alternatives: error: no alternatives for python
DESKTOP-MBRI3VL:~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode
DESKTOP-MBRI3VL:~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
update-alternatives: using /usr/bin/python3.6 to provide /usr/bin/python (python) in auto mode
DESKTOP-MBRI3VL:~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 3
update-alternatives: using /usr/bin/python3.7 to provide /usr/bin/python (python) in auto mode

1번 라인 : python 버전을 변경하는 명령어 인데 현재는 등록되어 있는게 없기 때문에 에러가 난다.

3번 라인 : python 명령어를 2.7로 연결하고 1번으로 할당했다.

5번 라인 : python 명령어를 3.6로 연결하고 2번으로 할당했다.

7번 라인 : python 명령어를 3.7로 연결하고 3번으로 할당했다. (2.7, 3.6, 3.7 이 설치되어있었다.)

DESKTOP-MBRI3VL:~$ update-alternatives --config python
There are 3 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.7   3         auto mode
  1            /usr/bin/python2.7   1         manual mode
  2            /usr/bin/python3.6   2         manual mode
  3            /usr/bin/python3.7   3         manual mode

Press <enter> to keep the current choice[*], or type selection number: 3

다 등록을 하고 1번 라인에 썼던 명령어를 다시 실행하면 위와 같이 나와서 사용할 버전을 선택할 수 있다.

DESKTOP-MBRI3VL:~$ python --version
Python 3.7.5

버전을 확인해 보면 위와 같이 나온다.

728x90
반응형

'Development > Python' 카테고리의 다른 글

[파이썬 문법] 튜플  (0) 2023.02.27
Python 가상환경  (0) 2022.10.27
파이썬 입력값 받기  (0) 2021.08.25
파이썬 배열 초기화  (0) 2021.08.25
Python 으로 파일 내용 변경 하기  (0) 2020.10.20
반응형
PS C:\Users> wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2
  Ubuntu-18.04           Running         2

위와 같이 배포버전이 여러개 일 경우 default 로 설정되는 배포버전으로 변경하기 위해서는 다음과 같이 설정하면 된다.

 C:\Users> wsl --setdefault Ubuntu-18.04

그럼 다음과 같이 변경이 된다.

 C:\Users> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-18.04           Running         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2

이것을 찾아봤던 이유는 VS Code 에서 remote로 WSL 로 접속하려고 하니 계속해서 docker-desktop-data 로 연결을 시도하면서 실패를 했다. 연결하려는 타겟이 ubuntu 가 되어야 할것 같은데 docker-desktop-data 로 계속 시도를 했다. 그래서 위와같이 디폴트 배포버전을 변경하니 정상적으로 연결됐다.

 

728x90
반응형
반응형

코드로 인프라를 관리하기 위해서는 어떤 것들이 필요할까. 어쩌면 우리는 이미 어느 순간 자기도 모르게 코드를 인프라로 관리하고 있을지도 모른다. 가장 간단한 예로 설정파일을 Git에 push 하고 운영, 검증, 개발로 나누어서 관리하는 것도 코드로 인프라를 관리하는 것이다. 단지 그 범위가 좁을 뿐이다. 

코드리 인프라를 관리하기 위해서는 다음과 같은 것들이 필요하다.

1. 모든 것을 코드로 정의한다.

우리가 생각하는 것 보다 코드로 관리를 할수 있는 것들이 정말 많다. 간단한 설정파일 부터 시작해서 인프라를 구성하는 요소들 까지 말하기 시작하면 한도 끝도 없다. 그리고 최근에는 클라우드를 많이 사용하기 때문에 정의해야 할 요소들이 더 많아졌다. 퍼블릭 클라우드에서 화면에서 직접 마우스를 클릭하면서 리소스를 생성할 수도 있지만 그러한 모든 작업을 코드로 정의해서 한번에 실행해 버리면 우리가 마우스를 여러번 클릭하는 수고를 덜어줄수 있다. 그리고 정의한 내용이 파일로 남아있기 때문에 언제든지 반복작업이 가능하다. 

2. 코드를 지속적으로 테스트 하고 딜리버리 한다.

코드를 작성하기 전에 테스트 코드를 만들고 수십개의 테스트 코드들을 자동으로 실행시켜서 변경에 대한 영향이 없는지 확인하는 작업은 우리가 코드를 작성할 때 자주 하는 일들이다.  인프라를 정의한 파일들도 하나의 코드들과 유사하다. 실제 정상적으로 작업이 되는지 오류는 없는지 검증이 필요하고 테스트가 필요하다. 결국 그걸 확인하기 위해서는 테스트를 해봐야 하고 실제 생성해보기도 해야 한다. 우리가 모르는 순간 리소스의 명칭이 바뀔수도 있고 정의하는 문법들이 변경되어있을 수도 있다. 자주 확인하고 테스트 해보는 노력이 필요하고 자동화가 필요하다.

3. 시스템을 작고 간단하게 빌드한다. 

인프라의 리소스를 코드로 작성해 놓은것을 찾아보면 상당히 길다. 몇줄만 가지고 끝나지는 않는다. 최소 수십줄에서 수백줄에 이를수 있다. 어느 순간 무엇이 어디 정의되어있는지 한참 찾아야 될 수도 있다. 그런 것들을 피하려면 어떻게 해야 할까. 최대한 모듈로 나눠서 작성하는 것이다. 덩치가 커지만 연관관계가 늘어나고 시간도 오래 걸린다. 그리고 실패할 경우 다시 생성해야 되는 리소스들이 많아진다. 

클라우드 사용이 늘어나면서 수많은 리소스들을 컨트롤 해야 하는 일들이 많아졌다. 그런 리소스들을 관리하기 위한 방법이 필요하고 그게 바로 코드로 인프라를 관리하는 것이다. 특정 툴을 이용한 방법을 알아본건 아니지만 이 책을 통해서  어떤 방법이 있는지, 어떤 패턴들이 있는지 공부할 수 있다. 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

728x90
반응형
반응형

책 표지에 보면 "비유와 이야기로 풀어낸 비전공자를 위한 필수 IT 교양서" 라고 써있다. 책 내용의 대부분이 IT 관련 용어들, 상황들에 대한 이해를 돕기위한 이야기들로 구성되어있다. 

IT 교양서인만큼 읽는데 어려움은 없었다. 물론 전공자의 입장에서 책을 읽었기 때문에 더 쉽게 느껴졌을 수는 있다. 책에 나오는 내용들에 대해서 이미 알고 있거나 최소한 한번정도는 들어봤던 용어들이었기 때문이다. 하지만 비전공자라고 해서 이해하지 못할 내용은 없어보였다. IT 용어들 중에서도 일상생활에서 충분히 들어봤을 정도의 용어들이 나오기 때문이다. 수학적 지식이나 프로그래밍 관련 전문 지식들이 많이 섞여서 내용이 구성되었다면 읽다가 어려움을 느꼈을 분들이 많을지 모르겠지만 이책은 그런 부분은 거의 없어서 일반 교양서처럼 쉽게 읽을 수 있다.

책 구성을 보면 여러개의 주제들이 있는데 그중에서도 내가 맘에 들었던 부분은 지식 전달 전에 짧막하게 이야기를 써준 부분이었다. 용어 설명에 앞서서 이런 이야기들이 그림과 함께 담겨있어서 재미있었다. 그리고 그 이야기들이 앞으로 나오는 설명에 대한 이해를 돕기 위한 내용이기 때문에 실제 본문을 읽을때 도움이 됐다. 

이 책의 가장 큰 장점은  IT 서적임에도 불구하고 알기쉽게 설명해서 다양한 독자들이 읽을수 있게 한 부분인것 같다. 성인 뿐만 아니라 중고등학생이 읽어도 교양지식을 쌓을수 있는 재미있는 책이다.

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

728x90
반응형
반응형

최근에는 마이크로 서비스라는 단어가 굉장히 빈번하게 사용되고 있다. 클라우드환경이 당연히 여겨지고 거기에 배포하여 운영하는 소프트웨어들이 많아지면서 어플리케이션의 구조를 마이크로서비스로 해야 한다는 이야기는 쉽지않게 찾아볼 수 있다. 

하지만 생각했던것보다 기존 모놀리스 오플리케이션을 마이크로서비스로 전환을 한다는 것은 쉽지않은 일이다. 그리고 온프라미스에서 운영되었던 환경들을 클라우드로 이전하는 것도 많은 것들의 대한 검토가 필수적이다. 그만큼 마이크로서비스는 알아야 되는것도 많고 많은 영역의 지식을 필요로 한다. 어디서부터 공부해야 할지도 막막해진다. 

그림으로 공부하는 마이크로서비스 구조, 이 책은 마이크로서비스에 대한 지식을 습득하기에 좋은 책이다. 마이크로서비스에 대한 배경부터 시작해서 구조, 패턴, 사용되는 기술들이 무엇무엇이 있는지 알수 있다.

특히 이 책의 제목에 있는 "그림으로 공부하는" 에 걸맞게 책에는 각각의 개념을 설명하기 위한 그림들이 많이 있다. 각각의 주제를 설명할 때 마다 기본적으로 구조도는 반드시 포함되어있다고 생각해도 무방할 정도로 그림이 많이 있다. 그래서 내요을 파악하는데 머릿속으로 생각하는 것보다 쉽게 이해할 수 있다. 

물론 이 책을 읽는다고 해서 마이크로서비스에 대해서 다 알수는 없다. 이책에서 설명하는 각 장 하나하나가 자세히 살펴보면 훨씬 더 많은 내용들을 공부해야 하는 경우들이 많다. 그만큼 마이크로 서비스는 복잡하고 광범위한 지식을 필요로 하는 구조이다. 

하지만 이 책으로 기본적인 지식을 습득한후 각각의 내용들에 대해서 좀더 깊게 공부해 본다면 그냥 처음부터 시작하는 것 보다는 나을것이다. 

 

 

728x90
반응형
반응형

React 에서 Key 가 필요한 이유

  • Map 사용시 고유한 Key 가 필요하다.
  • React 는 상태를 메모리에 저장하고 있다가 변경된 부분만 렌더링 한다.
  • Key 값이 없으면 모든 데이터를 비교해야 하지만 Key 가 있으면 Key만 비교하면 된다.
  • <ul>
      {props.users.map((user) => (
        <li key={user.id}>
          {user.username} ({user.age} years old)
        </li>
      ))}
    </ul>

Map 에서 index 를 Key로 하면 안되는 이유

  • 0번의 index 가 삭제되면 React 가 변경을 감지하여 리렌더링 되고 0번 부터 다시 매핑한다.
  • 1번 인덱스가 0번으로 매핑이 된다.
  • 결론적으로 인덱스가 추가되거나 삭제되면 값이 바뀌기 때문에 index 를 key 로 사용하는것은 안좋다.
728x90
반응형

+ Recent posts