개발에 대해 공부하면서, 우리가 사용하게 되는 여러가지 용어들에 대해 접하게 된다. 운영체제, 프로그래밍 언어, 프레임워크, 라이브러리, 터미널, 데이터베이스 등등.. Linux나 Django, MySQL 등을 공부하게 되지만 단순히 우리가 사용하기 때문에 배우는 것보다 이 Tool의 개념이 무엇이고, 왜 배우는 것이고, 어떻게 다른 개념과 접목되는지, 개발에 대한 전체적인 틀을 명확히 이해하는 것이 중요한 것 같다.
운영체제는 Operation System의 약자로, 사용자가 컴퓨터를 좀 더 쉽게 다룰 수 있게 해주는 "인터페이스" 개념이다. 하드웨어와 소프트웨어를 모두 관리하는 소프트웨어 개념이라고 볼 수 있고, 일반적으로 컴퓨터에서 사용하면서 실행한 모든 프로그램은 운영체제에서 관리하고 제어한다.
대표적인 운영체제는 Windows, Linux, Mac OSX, iOS 등이 있다.
운영체제를 사용하는 가장 주된 목적은 컴퓨터의 하드웨어를 관리하는 것이다. 컴퓨터에는 수 많은 하드웨어가 존재한다. CPU, 메모리, 디스크, 키보드, 마우스, 모니터, 네트워크 등이 있으며 이를 잘 관리해주어야 컴퓨터를 효율적으로 사용할 수 있다. 운영체제의 성능이 좋을수록 컴퓨터의 성능 역시 좋아진다고 할 수 있다.
운영체제는 사용자에게 편의를 제공하는 목적도 가지고 있다. 운영체제가 없다면 위에서 말한 하드웨어에 관한 모든 관리를 사용자가 해야한다는 점과 같이 컴퓨터를 사용하는데 매우 불편함을 겪을 것이다. 하지만 현재 많은 발전을 거쳐온 운영체제가 설치된 컴퓨터는 사용하기에 매우 편리하다는 것을 느낄 수 있다. 대표적으로 스마트폰이 있다. 스마트폰 역시 컴퓨터의 일종이고 운영체제가 설치되어 있다. 그리고 스마트폰은 남녀노소 누구나 할 것 없이 사용법을 빠르게 익힐 수 있다.
정리하면 운영체제는 컴퓨터의 성능을 높이고(performance), 사용자에게 편의성 제공(Convenience)을 목적으로 하는 컴퓨터 하드웨어 관리하는 프로그램이다.
Linux는 리누스 토발즈(Linus Benedict Torvalds, 69년생)가 개발한 Unix 기반 운영체제로, 오픈소스 기반 운영체제이며 누구나 코드를 볼 수 있다.
Linux는 IT 산업 전반에서 사용하는 운영체제로, 휴대폰, 클라우드 서버, 네트워크 장비, 전기자동차 및 IoT 디바이스까지 리눅스를 채택하고 있다. 게다가 안정적이고, 오픈소스 기반으로 소스코드를 비교적 쉽게 바꿀 수 있기에 유연하고, 무료이기에 활성화가 원활하다. 그렇기에 직접적으로 서버를 개발, 구축하는 백엔드 개발자에게는 특히 리눅스를 공부하는 것이 중요하다.
Linux의 파일 구조는 다음과 같은 Tree 형태로 되어있다.
root directory(/) //cd /
FHS
의 가장 위에는 root directory(/)가 존재해 FHS의 뿌리 역할을 한다. 각 Directory는 Windows의 Folder와 동일한 개념으로, 디렉토리마다 하위 디렉토리를 가질 수 있고 /
로 구분한다.
/home(~) // cd ~
User의 공간으로 가장 빈번하게 사용되는 경로이다. Linux의 운영과 관리에 필요한 파일들이 존재하는 곳으로, ~
로 접근할 수 있다.
이외에 /bin, /usr, /boot, /dev 등 다양한 디렉토리가 존재한다.
Linux는 설정을 주로 파일, 즉 Config file을 통해 한다. 다양한 설정 파일이 존재하고, 그 중 중요한 것은 Shell 설정 파일이다. 각 Shell은 고유의 설정 파일을 가지고 있는데, Bash는 .bashrc
를 사용하고 zsh는 .zshrc
를 사용한다.
Shell 설정 파일을 비롯한 많은 설정 파일이 대부분 Home 디렉토리에 존재한다. .bashrc
, .zshrc
와 같이 .
으로 시작하는 디렉토리나 파일은 숨겨진 hidden file로서 자동으로 숨겨져 ls
만으로 보이지 않고 ls -al
을 통해 볼 수 있다. 이런 파일들을 dot file 이라고 한다.
cd
(change directory)cd /
, cd ~
, cd .
, ...ls
(list segment)ls
, ls -al
, ..pwd
(print working directory)mkdir/rmdir
(make/remove directory)chmod
(change mode)일반적 명령어가 아닌 두 개의 명령어를 이어주는 역할을 한다.
history
는 지금까지 입력한 명령어를 출력하는데, grep
과 함께 사용하면 원하는 출력값을 필터링 할 수 있다.
history | grep ls
터미널이란 컴퓨터와 사용자간의 서로 소통시켜주는 인터페이스(번역기와 같은)라고 할 수 있다. 인터페이스란 텍스트 기반과 그래픽 기반(GUI) 두가지를 기반을 포함하는 용어이지만 리눅스 터미널은 텍스트 기반을 말한다.
대부분의 백엔드 시스템은 Linux 기반 서버에서 운영되기 때문에, 백엔드 입문자들은 반드시 명령어 인터페이스(CLI, Command Line Interface)에 익숙해져야 한다. 물론 개발할 때 GUI(Graphic User Interface)나 여러가지 유용한 Tool을 지원받고 작업할 수 있다. 그러나 백엔드 시스템에서 터미널 상에서 작업을 하며 오류를 해결하는 경우가 많기에 CLI와 터미널 환경에 익숙해지는 것이 좋다.
Unix 계열의 운영체제는 보통 텍스트 모드의 터미널 화면을 통해 명령행에 명령어를 타이핑하여 사용한다. 이 명령어를 해석하는 프로그램이 쉘(Shell)이다. 쉘은 사용자의 명령어를 운영체제에 전달하여 실행물을 유저에게 전달하는 프로그램이라고 생각할 수 있다.
Terminal과 Shell은 다른 개념이다. Terminal은 Shell을 실행시키는 프로그램이고, Terminal을 통해 Bash, Zshell 등 다양한 쉘을 실행할 수 있다.
터미널을 개발자들이 자주 사용하면서 터미널에서만 사용가능한 Tool들이 많이 나오게 되었다. 이러한 Tool을 어떻게 터미널에 설치하고 관리할 수 있을까? 이런 환경설정 문제는 과거부터 굉장히 불편한 과정을 거치고 시간이 오래걸렸기 때문에 Package Manager 라는 프로그램이 등장하게 되었다.
Mac 에서는 homebrew
라는 package manager를 사용한다. homebrew
를 다운 받은 후 원하는 package를 설치하는 것은 다음과 같다.
brew install name
name
은 설치하고자 하는 package의 이름으로, git
, vim
, zsh
등 원하는 package를 설치할 수 있다.
원하는 Shell을 설치하기 위해서는 homebrew
package manager를 설치 후 brew install zsh
라는 명령어를 실행시켜 설치할 수 있다. zshell의 기본 기능도 많지만 plug-in을 통해 글 자동완성, syntax-highlighting 등 다양한 기능을 사용할 수 있다.
예를 들어 Syntax Highlight 기능을 추가하고 싶다면
brew install zsh syntax-highlighting
을 실행해 package를 설치하고
vi ~/.zshrc
를 입력해 zshell 설정 파일에 들어간다.
설정파일에서 i
를 눌러 Insert 모드로 변경 후 source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
를 입력해 plugin을 적용하고 esc
:wq
로 설정파일을 저장 후 나온다.
그 후 source ~/.zshrc
를 통해 리로드 하거나 터미널을 재시동하면 plugin이 적용되는 모습을 볼 수 있다.
위와 같이 원하는 pluging을 설치한 후, .zshrc
설정파일에 저장하여 plugin을 적용하는 것으로 원하는 plugin을 사용할 수 있다.
.