□ 시스템운영에 필요한 운영체제 지식
○ 윈도우와 리눅스
윈도우와 리눅스
윈도우는 그래픽 기반의 운영체제이다. 명령을 실행할 때는 직업 명령어를 입력하지 않고 마우스로 아이콘을 클릭한다. 반면에 유닉스 운영체제는 텍스트 기반의 운영체제이다. 물론 엑스 윈도우와 같이 그래픽 기반의 화면을 제공하지만 대부분의 작업은 텍스트 모드에서 진행된다. 작업을 수행하기 위해서는 명령어를 직업 손으로 입력해야 한다. 많은 프로그래머들이 윈도우 환경에 익숙해져 있으므로 개발 환경을 윈도우 기반의 데스크탑이나 노트북에 설치해서 프로그래밍을 한다. 개발이 완료된 후에 운영 환경의 웹서버가 설치되어 있는 유닉스로 프로그램을 전송한다.
사용자 편의성과 지원되는 다양한 개발 도구 측면에서 윈도우가 유닉스 보다 우수한 측면이 많다. 하지만 시스템 안정성과 보안적 측면에서는 윈도우가 유닉스를 따라가지 못한다. 따라서 대부분의 운영 환경이 유닉스 기반으로 되어있고 운영환경에서 발생하는 다양한 장애를 모니터링하고 대처하기 위해서는 기본적인 유닉스 사용법을 익혀 둬야 한다.
○ 리눅스 권한 관리
사용자 생성
권한관리 기능을 알아보기 전에 먼저 테스트 계정을 생성해 보자. useradd test1 명령어를 통해 test1 계정을 생성할 수 있고 passwd test1 명령어를 통해 test1 계정에 대해 비밀번호를 설정할 수 있다. 비밀번호 변경할 때도 똑같은 명령어를 사용하면 된다. test2 계정도 동일한 방법을 생성해 보자.
디렉토리 생성
계정이 생성됐으면 홈 디렉토리를 생성해보자. 아이디가 추가되면 기본적인 그룹과 홈 디렉토리가 설정되는데 그룹 정보는 “/etc/group” 파일에서 확인할 수 있다. 아이디와 동일한 이름으로 그룹이 만들어 졌다. 그룹 아이디는 test1의 경우 1001인 것을 확인할 수 있다. 사용자 아이디와 구분하기 쉽게 그룹이름을 변경해 보자. group 파일에 있는 이름을 변경하고 “:wq”를 입력하면 변경된 내역을 장하고 파일을 닫을 수 있다. 디폴트 홈 디렉토리는 “/home/test1”로 설정되어 있다. 이제 mkdir 명령어를 사용해서 home 디릭토리 아래에 test1, test2 폴더를 각각 생성해 보자.
권한 확인
먼저 디렉토리와 파일을 비교하기 위해 간단한 파일을 만들어 보자. “echo 555”는 화면에 555를 그대로 출력하라는 뜻인데 뒤에 “> ttt.txt” 사용해서 ttt.txt 파일로 출력하도록 변경했다. (1) “ls –al .” 명령어를 사용해 현재 디렉토리에 들어있는 모든 내용을 조회해 보자. “ls” 명령어의 세부적인 내용은 “man ls”를 사용하면 알 수 있는데 여기서 man은 manual의 약자이다. 자세하게 ls의 사용법을 알려주지만 초보자가 읽고 이해하기에는 다소 어려움이 있다.
(2) ttt.txt 파일의 세부 정보를 하나씩 살펴보자. “root root”는 소유자 아이디와 소유자 그룹 정보를 순서대로 나타낸다. “4”는 파일의 크기를 나타내는데 4 바이트를 의미한다. 최종 수정시간과 파일 이름이 순서대로 표시된다.
(3) 맨 앞에 파일 권한 정보가 나오는데 처음“-” 표시는 디렉토리인지 파일인지를 구분하는 역할을 한다. “-”는 파일을 의미하고 “d” 디렉토리를 의미한다. 다음에 오는 “rw-”는 소유자의 권한을 나타내는데 차례로 읽기, 쓰기, 실행 권한이 오는데 여기서 소유자는 읽고 쓰는 권한만 있다는 의미이다. 그 다음 “r - -”는 동일 그룹의 권한인데 읽는 권한만 있다는 것을 알 수 있다. 마지막으로 오는 “r - -”는 동일 그룹이 아닌 다음 사용자의 권한인데 이 것 또한 읽은 권한만 있다.
권한 구조
파일 권한은 RWX로 표현되는데 각각 이진수와 십진수로 표현할 수 있다. 만일 모든 권한이 있다면 이진수로 111이고 RW 권한만 있다면 110이다. 이를 각각 10진수로 표현한다면 7과 6이 된다. 소유자, 동일 그룹, 다른 사용자 권한을 각각 설정할 수 있기 때문에 3자리의 십진수를 가지고 모든 소유 권한을 표현할 수 있다. 소유자에게는 RW, 동일 그룹에게는 R 그리고 다른 사용자에게는 아무 권한도 안주는 방식으로 파일 권한을 설정한다면 10진수 640으로 표현할 수 있다.
권한 변경
권한 변경은 chmod(change file mode bits) 명령어를 통해 실행할 수 있다. 두 가지 방식이 있는데 하나는 십진수를 사용하는 것이다. “chmod 610 ttt.txt” 명령을 실행하면 파일 권한이 “-rw-r-----”로 변경되는 것을 확인할 수 있다. 파일 소유자는 파일을 읽거나 수정할 수 있고 동일 그룹 사용자는 파일을 읽을 수만 있다. 다른 사용자는 파일을 전혀 읽을 수 없다.
두 번째로 문자를 사용하는 방식을 알아보자. “chmod +x ttt.txt” 명령은 파일 권한에 실행 권한을 추가한다는 의미이다. 모든 사용자에게 실행 권한이 동일하게 부여된다. 명령 실행 후 파일 권한을 확인해 보면 “-rwxr-x--x”로 변경된 것을 확인할 수 있다.
운영자가 웹서버를 test1 계정으로 실행했다면 웹서버는 test1 계정과 동일한 권한을 갖는다. 만일 웹서버에서 제공하는 특정 기능이 test2 계정으로 생성한 파일을 수정한다면 권한 문제 때문에 장애가 발생할 수 있다. 대상 파일이 만일 755(rwxr-xr-x) 권한을 가진다면 test1로 실행한 웹서버는 파일을 수정할 수 있기 때문에 접근 권한관련 오류가 발생한다. 이 때문에 운영자는 사전에 파일 권한에 대해 사전에 알고 있어야 유사한 장애가 발생했을 때 발빠르게 대처할 수 있다.
○ 리눅스 파일 관리
간단한 파일 다루기
파일 다루는 명령어를 간단히 알아보자. 파일복사는 cp(copy) 명령어로 할 수 있다. 그리고 파일이동은 mv(move), 파일삭제는 rm(remove), 파일 생성은 여러 가지 방법이 있는데 앞에서 잠깐 언급했듯이 echo 명령어를 사용한다. 파일 확인은 cat(concatenate) 명령어를 확인한다. 파일 생성과 확인은 유닉스 계열에서 제공하는 강력한 에디터인 vi를 사용할 수 도 있으나 사용 방법이 직관적이지 않기 때문에 뒷부분에서 다시 살펴보기로 하자.
파일 묶기
시스템을 개발하거나 운영하다 보면 많은 수의 파일을 이동할 일이 자주 있다. 파일을 각각 이동하는 것은 장애 가능성도 있고 시간도 많이 걸린다. 유닉스 계열 시스템에서는 tar 명령을 지원하고 있다. 파일을 쉽게 묶을 수 있고 바로 압축도 가능하다. tar 명령어는 옵션을 통해서 파일을 묶고, 내용을 확인하고, 풀 수 있다. “-cvf” 옵션은 파일을 묶어주는 옵션이고 “-tvf”는 묶인 파일 내용을 살펴볼 수 있는 옵션이다. “-xvf”는 묶인 파일을 푸는 옵션이다.
실시간 파일 내용 확인하기
웹 환경에서 장애 원인을 파악하기 위해서는 로그 파일을 살펴봐야 한다. 로그 파일은 사용자가 웹서버에 요청을 보내면 내용이 계속 추가되기 때문에 에디터로 열어서 최신 내용을 확인하기 어렵다. 이런 경우에 사용하는 명령어가 tail이다. tail 명령어는 파일의 마지막 부분을 출력하는 명령어이고 “-f” 옵션과 함께 사용되면 파일에 추가되는 내용을 계속해서 출력하게 된다. 여기에서 f는 follow를 의미한다.
예제에서는 앞서 생성한 ttt.txt 파일을 tail 명령어로 열었으며 터미널을 하나 더 열어서 echo 명령어로 내용을 추가했다. “>>”는 파일에 내용을 덧붙이는 역할을 한다. tail 명령어를 입력한 터미널에서는 특별한 동작을 하지 않아도 화면에 111이 추가되는 것을 확인할 수 있다.
tail 명령어는 웹서버 로그 분석에 많이 사용되는 명령어로써 다른 명령어와의 조합을 통해 성능을 향상시킬 수 있다. 예를 들어 추가되는 내용 중에 111을 포함하고 있는 내용만 보고 싶으면 grep 명령어를 함께 사용할 수 있다. “tail –f ttt.txt | grep 111”과 같이 사용하면 출력에 111을 포함만 행만 표시된다. 여기에서 “|”은 파이프 명령어로 앞의 명령어의 결과를 받아서 뒤의 명령어가 결과를 처리할 수 있도록 한다. “tail –f ttt.txt” 명령어 결과를 입력으로 받아서 “grep 111” 명령어를 수행하면 입력 중에서 111을 포함하는 행만 거를 수 있다.
○ vi 에디터 사용하기
vi 데이터 기본 사용법
기초적인 사용법부터 익혀보자. vi 에디터를 사용해서 파일을 편집하고 싶으면 “vi 파일명“과 같은 방식으로 사용하면 된다. 파일에 내용을 입력하고 싶다면 입력모드로 들어가는 i 키를 누르며 된다. 입력 모드에서는 키보드로 원하는 내용을 편집할 수 있다. 내용 입력이 모두 종료 됐다면 ESC 키를 눌러 수정 모드를 종료한다. 이제 수정된 파일을 저장하고 리눅스 명령어 창으로 이동하고 싶다면 : 키를 눌러서 명령모드로 들어간 후 wq를 입력하고 Enter 키를 누르면 된다.
vi는 처음에 사용할 때 생소하고 어렵게 느껴지지만 조금 익숙해 진다면 놀라운 기능을 제공하고 있다는 것을 알 수 있을 것이다. 개발할 때는 윈도우 환경에서 제공하는 편리한 툴을 사용하지만 일단 운영에 프로그램이 이관된 후에 장애원인을 파악하고 신속한 조치를 위해서는 vi에 익숙해져야만 한다.
vi 편집모드 명령어
(출처: https://kb.iu.edu/d/afdc)
vi는 크게 편집모드와 명령모드가 있는데 편집모드는 파일 내용을 수정할 때 사용되고 명령모드는 파일 자체를 수정할 때 사용한다. vi는 마우스를 사용할 수 없기 때문에 커서를 이동할 때도 명령어를 사용해야 한다. hikl문자가 순서대로 좌/하/상/우 방향으로 커서를 움직일 수 있는 명령어다. 한 문자를 삭제할 때는 d를 사용하고 한 줄을 삭제할 때는 dd를 사용한다. vi에서 제공하는 편집 기능은 다양하고 강력하기 때문에 조금만 연습하면 리눅스 환경에서 쉽게 파일을 다를 수 있다.
vi 명령모드 명령어
(출처: https://kb.iu.edu/d/afdc)
윈도우에서는 아이콘을 통해 파일을 저장하거나 삭제하는 기능을 수행하지만 유닉스에서는 모든 동작을 명령어를 입력해서 제어한다. 파일 수정이 끝나면 : 키를 통해 명령모드를 들어갈 수 있다. 파일을 저장할 때는 w, 파일을 종료할 때는 q, 파일을 읽어 들일 때는 r과 파일명을 입력해서 동작을 수행한다.
시스템 운영은 시스템 구축과는 달리 다소 지루한 업무가 될 수 있다. 다양한 시스템을 구축하다 보면 새로운 업무도 배우고 기술도 배우지만 하나의 시스템을 계속 운영만 하면 자신이 정체되어 있다는 생각이 들기도 한다. 하지만, 이는 굉장히 잘못된 생각이다. 하나의 정보시스템이 운영되기 위해서는 정말 많은 다양한 기술과 조화를 이루어야 한다. 정보시스템 운영자는 다양하지 못하지만 깊게 볼 수 있다. 나중에 새로운 일을 하게 된다면 깊이 있는 지식을 바탕으로 쉽게 가지를 칠 수 있다.
예를 들어 자바 기반의 홈페이지를 운영한다고 하자. 일반적으로 자바, HTML, 자바스크립트, SQL 기술만 공부하려고 한다. 자기에게 주어지는 대부분의 일이 프로그래밍과 관련된 일이기 때문이다. 하지만 시스템을 안전하기 운영하기 위한 정보보안 기술, 장애를 해결하기 위한 네트워크 기술, 시스템을 튜닝하기 위한 유닉스관련 기술로 관심을 넓혀야 한다. 부가가치는 장애를 빨리 복구하고 시스템을 보다 효율적으로 튜닝하는 곳에서 나오기 때문이다.
'더 괜찮은 개발자가 되기위한' 카테고리의 다른 글
프로젝트로 알아보는 보다 나은 시스템 만들기 (0) | 2018.11.13 |
---|