M1 MacBook 초기 세팅 (개발용 세팅)

|

M1 MacBook 초기 세팅 (개발용 세팅)

M1 맥북의 초기 설정입니다. 아무래도 기존 Intel Mac OS 때와 차이가 있을 수 있어서 하나씩 다시 점검하면서 설정을 했습니다. M1 Pro 14인치 기준입니다.


업데이트

설치된 S/W들을 최신으로 업데이트합니다.

softwareupdate --all --install --force


시스템 설정

언어 설정

개발용으로 사용하기 때문에 영어가 더 편리할 수 있습니다. Language & Region에서 선호 언어를 영어로 설정합니다. 아래부터는 영문 버전 메뉴 이름을 사용하겠습니다.

Dock & Menu Bar 설정

  • Dock 아이콘 크기는 조금 작게 설정
  • Magnification을 체크하고 크기는 중상 정도로 설정
  • Show recent applications in Dock 체크 해제
  • Menu BarAutomatically hide and show the menubar ...는 둘 다 On

Keyboard 설정

Keyboard 탭

  • Key Repeat는 Fast로 설정
  • Delay Until Repeat는 Short에서 1칸 왼쪽으로 설정
  • Press fn(지구본) to Do Nothing으로 설정

Text 탭

  • Correct spelling automatically 항목 Off
  • Capitalize words automatically 항목 Off
  • Add period with double-space 항목 Off
  • Use smart quotes and dashes 항목 Off

Shortcuts 탭

  • SpotlightShow Finder search windowOption + E로 변경(윈도우와 비슷하게 하기 위해)
  • Show Spotlight searchF12로 변경

Display 설정

14인치 맥북 기준으로 아무 설정도 건드리지 않았습니다. 예전 15인치 맥북에서는 Resolution을 최고로 조정했었는데, 이번 14인치 맥북에서는 최고 해상도가 글씨가 조금 작은 듯 하여 기본으로 설정했습니다.

Touch ID 설정

터치 ID는 3개까지 등록 가능한데, 저는 오른 손 검지로 2번, 중지로 1번 등록했습니다.


Finder 설정

Preference 메뉴로 가서

  • General 탭에서 New Finder windows show: 항목을 Home folder로 설정(저는 Home이 snowdeer로 되어 있네요.)
  • Advance 탭의 Show all filename extensions 항목을 On
  • Sidebar 탭에서 필요한 항목들만 보이도록 설정
  • 실제 Finder를 실행해서 Sidebar의 순서를 변경


D2Coding 폰트 설치

향후 Oh-my-zsh 설정에서 아마 폰트가 깨질겁니다. Powerline 폰트나 D2Coding 폰트를 설치하면 해결됩니다. 그래서 미리 D2Coding 폰트를 설치해놓도록 하겠습니다.

다운로드: https://github.com/naver/d2codingfont


iTerm2 설치

주로 작업을 터미널에서 하기 때문에 iTerm2를 설치하도록 합니다. 다운로드: https://iterm2.com

그리고 Preferences를 실행해서 다음 항목을 설정합니다.

  • Profiles > Text > Font를 기본 Monaco에서 D2 Coding으로 변경
  • Profiles > Colors > Color PresetsPastel (Dark Backgrond) 또는 Tango Dark로 변경
  • Window > Columns80에서 120Rows30으로 변경(14인치 맥북 기준입니다.)


Visual Studio Code 설치

다운로드: https://code.visualstudio.com/#

그리고 실행한다음 Command + Shift + P를 입력해서 Command Palette를 실행한 다음 shell이라고 입력하면, Shell Command: Install 'code' in PATH를 선택합니다. 그러면 이제 터미널에서 code 명령어를 이용해서 vscode를 실행할 수 있습니다.


한글 단축키 변경

기본 한/영 전환은 Caps Lock입니다. 불편하지 않으면 그냥 써도 되지만 저는 우측 Cmd 키가 편해서 바꾸기 위해서 키를 바꿉니다.여기를 참고해서 설치하면 됩니다.


Homebrew 설치

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

설치 후 아래 명령어도 실행합니다.

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/snowdeer/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"


zsh 및 Oh-My-Zsh 설치

zsh 설치

이제 맥 기본 쉘이 zsh이므로 바로 Oh-My-Zsh 설치로 넘어가면 됩니다.

Oh-My-Zsh 설치

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

zsh 플러그인 설치

git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

~/.zshrc 파일 편집

~/.zshrc 파일을 열어서 다음 부분을 찾아서 변경해줍니다.

ZSH_THEME="agnoster"
plugins=(
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
)

그리고 파일 끝 부분에 아래 내용도 추가합니다.

# for (i-search)
stty stop undef

# 프롬프트에서 컴퓨터 이름 삭제
prompt_context() { 
  if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then 
    prompt_segment black default "%(!.%{%F{yellow}%}.)$USER" 
  fi 
}


git 설정

git config --global user.name "snowdeer"
git config --global user.email "snowdeer0314@gmail.com"
git config --global core.precomposeunicode true
git config --global core.quotepath false


JDK 설치

여기에서 dmg 파일을 다운받아 설치합니다.


필요한 프로그램 설치

아래는 사파리 툴체인이나 크롬을 이용해서 패스워드를 관리하지만, 기존에 사놓은 제품이 아까워서 설치해줍니다. ㅜㅜ;

아래는 슬프게도 M1 칩을 지원하지 않아서 설치 못하는 어플이네요. ㅜㅜ; TotalFinder는 가장 유용하게 사용한 어플인데 아쉽습니다. 할 수 없이 위의 Marta 어플로 대체해서 사용하고 있습니다. 그 외 Path Finder로 대체할 수 있을 것 같긴 한데 가격이 좀 비싼 거 같아서 일단은 보류 중입니다.

그 외 brew를 이용해서 다음 프로그램들도 설치합니다.

brew install iproute2mac
brew install tree

App Store에서도 필요한 프로그램들을 설치합니다.

  • Xcode
  • Unicorn Blocker:Adblock
  • Lumafusion
  • Dropover Pro

venv 사용방법

|

venv 사용방법

venv 설치

Python 3.x 버전부터는 virtualenv 대신 venv를 사용하는 것이 더 간편합니다. 보통은 venv가 설치되어 있겠지만, 만약 설치되어 있지 않다면 다음 명령어로 설치할 수 있습니다. (Ubuntu 20.04 기준)

apt install python3.8-venv

venv 생성

python3 -m venv [env_name]

ex) python3 -m venv snowdeer_env

env_name은 그냥 venv로 하면 편합니다. Pycharm 등의 IDE에서도 기본적으로는 이름을 venv로 설정합니다.

venv 실행

위에서 명령어를 실행한 위치에 venv 디렉토리가 생성됩니다. 실행 방법은 해당 디렉토리내 bin/activate 파일을 실행하면 됩니다.

source snowdeer_env/bin/activate

Git을 이용한 pip3 install 방법

|

Git을 이용한 pip3 install 방법

여러 프로젝트에서 같은 코드를 공유하기 위한 방법 중 하나입니다. 공용 라이브러리 코드를 GitHub에 업로드하고 setup.py 파일을 설정해서 pip3 install에 활용할 수 있습니다.

공용 코드 디렉토리 구조

예를 들면, 공용 라이브러리 코드의 프로젝트 구조를 다음과 같이 만듭니다.

.
├── README.md
├── main.py
├── setup.py
└── snowdeer_common
    ├── __init__.py
    ├── hello.py
    └── utils
        ├── __init__.py
        └── log.py

setup.py

아래에서 중요한 부분은 packages 부분입니다.

from setuptools import setup

setup(name='snowdeer_common',
      version='0.1.0',
      description='snowdeer sample',
      url='https://snowdeer.github.io',
      author='snowdeer',
      author_email='snowdeer0314@gmail.com',
      license='Apache',
      packages=['snowdeer_common',
                'snowdeer_common.utils'
                ],
      zip_safe=False)

그리고 git에 업로드하면 됩니다.

pip3 설치 방법

위 공용 코드를 설치하기 위해서는 해당 환경(ex. venv 환경 등)에서 다음 명령어를 입력합니다.

pip3 install -U git+https://github.com/snowdeer/snowdeer_common

SubSystem

|

서브 시스템

시스템의 모듈 뷰를 문서화할 때 일정하게 조합된 모듈을 서브 시스템이라고 식별할 수 있다.

서브 시스템은 보통 다음과 같은 경우 사용할 수 있다.

  • 전체 시스템에서 기능적인 밀집성이 있는 서브 집합
  • 독립적으로 실행 가능
  • 점증적으로 개발되고 배포될 수 있음


서브 시스템의 예시

예를 들어, 화성 탐사 로봇의 소프트웨어는 다음과 같은 서브 시스템으로 분할 할 수 있다.

  • 커뮤니케이션
  • 모션
  • 전력 관리
  • 주행
  • 상태 모니터링


라이브러리 != 서브 시스템

로봇 시스템내에서 수학 유틸리티 라이브러리가 있다고 가정하자. 이 경우 라이브러리는 시스템의 부분이며, 모듈의 조합이고 밀집성있는 기능을 갖고 있다. 하지만 시스템의 목적의 일부가 되는 작업을 독립적으로 수행할 수 없기 때문에 라이브러리를 서브 시스템이라고 하지는 않는다.


서브 시스템의 활용

서브 시스템은 독립적인 특성을 갖고 있다. 이 특성 덕분에 서브 시스템을 다음과 같은 경우에 활용할 수 있다.

  • 서브 시스템의 성능 검토를 분석가에게 요청 가능
  • 서브 시스템을 패키지로 만들어 다른 팀에게 구현하도록 넘겨 줄 수 있음
  • 테스트도 독립적으로 할 수 있음


UML

서브 시스템은 UML에서 <<subsytem>>과 같은 스테레오 타입으로 표현할 수 있다. 서브 시스템은 모듈(구현 단위)의 그룹 또는 런타임 존재를 갖는 컴포넌트의 그룹을 표현할 수 있다.

Module Style

|

모듈 스타일

모듈 스타일은 크게 다음 6가지가 존재한다.

  • 분할 스타일: 모듈과 서브 모듈의 구조(포함 관계)를 보여준다.
  • 사용 스타일: 모듈 사이의 기능적 의존성 관계를 나타낸다.
  • 일반화 스타일: 모듈 사이의 특별한 관계를 나타낸다.
  • 레이어 스타일: 레이어 형태로 보여준다.
  • 관점 스타일: 관점이라는 특별한 모듈을 서술한다.
  • 데이터 모델 스타일: 데이터 엔티티 관계를 보여준다.


분할 스타일

모듈과 서브 모듈로서 코드의 구조 및 시스템의 책임의 분할을 보여준다. 거의 모든 아키텍트들이 분할 스타일로 시작한다. 분할 정복(Divide and conquer) 기법을 많이 사용한다.

분할 스타일은 시스템을 구현 단위로 분할하는데 사용된다. 분할 뷰는 모듈과 서브 모듈로 코드의 구성을 기술하며, 시스템의 책임이 어떻게 분할되는지를 보여준다.

분할 스타일에서는 일부분(is part of) 관계를 이용한다. 분할 그래프에서는 반복(loop)은 허용되지 않는다. 모듈은 하나의 부모만 가질 수 있다.

분할 스타일은 모듈 사이의 모든 의존성을 보여주지는 않는다.

분할 스타일의 예시는 다음과 같다.

image


사용 스타일

사용 스타일(Uses style)은 의존(depends on) 관계가 사용하다(use) 관계로 특수화된 결과다. 분할 스타일이 모듈과 서브 모듈로서 구현 단위의 구성을 보여주는 것이라면, 사용 스타일은 모듈이 어떤 다른 모듈을 사용하는지를 보여준다.

사용 스타일의 예시는 다음과 같다.

image

사용 스타일은 인터페이스를 명확하게 보여줄 수도 있다.

사용하다 관계는 호출(call) 또는 불러내기(invoke) 관계와 비슷해보이지만 다르다.


일반화 스타일

일반화 스타일(Generalization style)은 일종(is a) 관계를 사용한다. 부모 모듈과 자식 모듈로 표현하며 공통성(Commonality)과 가변성(Variation)을 보여준다.

일반화는 구현(Implementation) 또는 상속(Inheritance)을 표현할 수 있다.

image

위의 그림처럼 인터페이스의 경우는 두 가지 표기법이 모두 동일하다. 하지만, 좌측의 표기법이 하나의 인터페이스를 여러 모듈들이 구현하는 경우 더 편리하게 표현할 수 있다.


레이어 스타일

레이어 스타일(Layered style)은 레이어 단위로 소프트웨어를 분할 하는 스타일이다. 각 레이어는 밀집성을 갖는 서비스 집합을 표현하며, 레이어간에는 허용(allowed to use) 관계의 제약이 있다. 레이어들의 관계는 엄격하며 단방향으로 이루어진다.

아키텍처에서 가장 일반적으로 사용되는 스타일이다.

하위 레이어에서 상위 레이어를 사용하는 경우는 레이어 스타일이 아니다.

상위 레이어에서 하위 레이어를 건너뛰고 최하위 레이어를 사용하는 경우가 있다. 이때 상위 레이어를 레이어 브릿징(Layer bridging)이라고 한다. 하지만, 이런 사용이 많은 경우 이식성과 변경용이성 관점에서 시스템은 잘못 구조화되었다고 볼 수 있다.

레이어는 소스 코드 검토로 도출되지 않는다. 소스 코드에서는 명확한 경계가 드러나지 않는다. 소스 코드는 사용(use) 관계까지는 드러날 수 있지만, 레이어 스타일에서의 관계는 허용(allowed to use) 관계이기 때문이다.