1. 로컬 컴퓨터와 리모트 컴퓨터
- 로컬 컴퓨터는 본인의 물리적 컴퓨터를 의미한다. 리모트 컴퓨터는 가상 컴퓨터나 클라우드 컴퓨터 등 원격으로 접속하여 지금 접속한 물리 컴퓨터의 리소스가 아닌 리소스를 사용할 수 있다. 로컬 컴퓨터에서 작업하여 리모트 컴퓨터에서 배포하는 일은 매우 흔한 일이다. 이 개념은 깃을 관리하며 많이 겪었던 원격저장소와 로컬저장소의 개념과 유사하다. 그리고 이 원격 컴퓨터(자원)에 접속할 때 가장 많이 쓰이는 프로토콜이 바로 SSH이다.
- SSH
- 보안: SSH는 데이터 전송 과정에서 암호화를 사용하여 데이터의 기밀성을 보호합니다. 이는 네트워크를 통해 전송되는 정보가 노출되지 않도록 합니다.
- 원격 접속: SSH를 사용하여 원격 서버나 컴퓨터에 접속할 수 있습니다. 사용자는 SSH 클라이언트를 통해 명령어를 입력하거나 파일을 전송할 수 있습니다.
- 파일 전송: SSH는 SCP(Secure Copy Protocol)를 통해 파일을 안전하게 전송할 수 있는 기능을 제공합니다. SCP는 SSH를 기반으로 하여 작동하며, 원격 호스트 간에 파일을 복사하거나 전송할 때 사용됩니다.
- 원격 관리 및 자동화: 서버나 네트워크 장치의 원격 관리와 자동화에 SSH가 널리 사용됩니다. 예를 들어, 원격으로 서버의 설정을 변경하거나 프로그램을 실행시키는 등의 작업을 할 수 있습니다.
- 포트번호 : 22
- SSH 작동 원리
- SSH는 클라이언트-서버 모델을 따릅니다. 일반적으로 다음과 같은 과정으로 작동합니다:
- SSH 클라이언트는 SSH 서버에 접속을 요청합니다.
- SSH 서버는 클라이언트의 접속 요청을 수락하고, 클라이언트의 인증을 요구합니다.
- 클라이언트는 사용자 이름과 비밀번호 또는 공개 키를 이용하여 인증합니다.
- 인증이 성공하면, 클라이언트와 서버 간의 통신은 암호화된 채널을 통해 이루어집니다.
- 클라이언트는 SSH 세션을 통해 원격으로 명령어를 실행하거나 파일을 전송할 수 있습니다.
2. 쉘 스크립트
- 쉘은 운영체제에서 제공하는 명령을 실행하는 프로그램, 운영체제의 관리하에 있는 파일, 프린팅, 하드웨어 장치 등을 제공한다. 즉, 운영체제와 다이렉트로 대화하는 프로그램이다. 쉘 스크립트는 리눅스 시스템에서 지원하는 명령어들의 집합을 묶어 프로그램화 한 것이다.
- 쉘 스크립트의 가장 중요한 요소는 자동화하여 자원을 절약할 수 있다는 점이다.
- crontab을 사용하여 자동화할 수도 있고 다른 방법을 사용할 수도 있다.
$ crontab -e
$ crontab -l
$ crontab -r
* * * * * ls -al
크론은 원하는 시간에 원하는 작업을 할 수 있다. 이것은 스크립트 뿐 아니라 리눅스 명령어 까지 포함되며 javascript나 java 같은 실행파일도 쓸 수 있다. spring 에는 스케줄러가 비슷한 작업을 할 수 있다. 로그를 남기고 싶으면 다음과 같이 사용할 수도 있다.
* * * * *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
* * * * * /home/script/test.sh > /home/script/test.sh.log 2>&1
curl 명령어
- 다양한 네트워크 프로토콜을 이용하여 데이터를 전송하고 받는 도구입니다. 주로 HTTP, HTTPS를 포함한 FTP, FTPS, SCP, SFTP 등의 프로토콜을 지원하며, 특히 커맨드 라인 환경에서 웹 서버와 통신하거나 파일을 다운로드하는 데 사용
- curl [옵션] [URL]
- POST 요청 curl -X POST -d "param1=value1¶m2=value2" URL
- GET 요청 curl [URL]
- 파일 다운로드 curl -O [URL]
- curl -H "Authorization: Bearer token123" URL
주요 리눅스 스트레스 테스트 도구
- Stress
- 설명: Stress는 리눅스 시스템의 CPU, 메모리, I/O, 디스크 등의 자원을 테스트하는 강력한 도구입니다.
- 특징: 다양한 스트레스 테스트 시나리오를 지원하며, 여러 CPU 코어를 동시에 사용하여 부하를 가합니다. 유닉스 계열의 다양한 플랫폼에서 사용할 수 있습니다.
3. 입출력 리다이렉션과 파이프
표준 출력
- 표준 출력: 결과를 모니터에 출력.
- > 문자를 사용해 표준 출력을 파일로 리다이렉션해 저장할 수 있음
- ls > ls.txt - >> : 파일에 추가(append)할 경우 사용
- cat test1.txt >> ls.txt
표준 입력 - 키보드 : 파일 디스크립터 숫자로 0
표준 출력 - 모니터 : 파일 디스크립터 숫자로 1
표준 에러 - 모니터 : 파일 디스크립터 숫자로 2
2>&1 : 표준 출력이 전달되는 곳으로 표준 에러를 전달하는데, 마지막에 &를 사용해 현재 명령을 백그라운드로 실행
표준 입력
- 표준 입력 : 키보드로부터 데이터를 입력받는 것. 파일 디스크립터 숫자값으로 0
- 키보드를 대신해 파일로부터 입력을 받는 경우 < 문자를 사용
파이프
- | 문자를 사용해 두 명령어를 이어줌. 앞에서 실행한 명령의 결과값을 뒤에 적은 명령어의 입력으로 사용
- 즉, 파이프로 연결된 하나의 표준 출력을 다른 명령의 표준 입력으로 사용
4. Network TX / RX
1. TX
- 데이터 전송을 의미, 네트워크에서 한 장치가 데이터를 전송할 때 사용하는 용어
- 파일을 다운로드 하거나 이메일을 보내는 경우 데이터가 TX됨.
- TX는 데이터를 전송하는 동작 자체를 나타냄
2. RX
- 데이터 수신을 의미하며 데이터를 받을 때 사용하는 용어
- 웹 페이지를 열거나 파일을 수신받는 경우 데이터가 RX
- RX는 데이터를 수신하는 동작 자체를 나타냄
5. 쉘 스크립트의 다양한 사례
셸 스크립트(Shell script)는 주로 Unix 및 Unix 계열 운영 체제에서 사용되며, 각종 자동화 작업, 시스템 관리, 데이터 처리 등 다양한 목적으로 활용됩니다. 여기에는 몇 가지 흔한 예시들이 있습니다:
- 백업 스크립트: 주기적으로 시스템 파일을 백업하거나 데이터베이스를 백업하는 스크립트를 작성할 수 있습니다. 이는 주로 tar나 rsync 같은 유틸리티를 이용하여 파일을 압축하거나 복사합니다.
- 로그 파일 처리: 로그 파일을 주기적으로 분석하거나 특정 이벤트를 모니터링하는 스크립트를 작성할 수 있습니다. grep, awk, sed와 같은 명령어를 활용하여 원하는 정보를 추출하거나 처리합니다.
- 시스템 모니터링: 시스템 리소스 사용량을 모니터링하고 경고를 보내는 스크립트를 작성할 수 있습니다. top, ps, free 등의 명령어를 사용하여 CPU 사용률, 메모리 사용량 등을 체크하고 이를 이메일이나 메시지로 전송할 수 있습니다.
- 자동화된 배치 작업: 특정 조건이 충족되었을 때 파일을 이동하거나 데이터베이스 업데이트를 실행하는 스크립트를 작성할 수 있습니다.
- 웹 서버 설정 관리: 웹 서버 설정 파일을 자동으로 수정하고 재시작하는 스크립트를 작성할 수 있습니다. 이는 Apache나 Nginx와 같은 웹 서버의 설정 관리에 유용합니다.
6. 리눅스와 비슷한 터미널 환경 설정 방법
macOS
- 이 의미는 리눅스 명령어를 사용할 수 있으며 쉘 스크립트를 사용할 수 있는 환경이라 해석된다. maxOS의 경우 리눅스 계열로 리눅스의 명령어들이 대부분 허용된다. 그러나 완전한 리눅스라곤 할 수 없으며 Homebrew를 이용하여 필요한 패키지(예: bash-completion, coreutils 등)를 설치하여 더 최적의 환경을 만들 수 있다.
Window
- WSL을 활용하여 리눅스 배포판을 설치할 수 있습니다. Ubuntu, Debian, Fedora 등을 선택할 수 있다.
그러나 가장 좋은 것은 도커 아닐까
도커를 사용하면 localhost를 통해 내부의 모든 컨테이너들이 소통하며 작업할 수 있다. 가상환경을 사용하면 결국 내 Spring WAS 가 배포되어있지 않다면 내 가상환경과 편리하게 소통할 수 없다.
'CS 학습 정리' 카테고리의 다른 글
SoftWare TEST 4레벨 / Javascript 유닛 테스트 (0) | 2024.07.23 |
---|---|
객체지향 5원칙 SOLID 분석 (0) | 2024.07.22 |
프로세스 메모리 구조 (Stack, Heap, Text 세션) , Node.js에서 가상 메모리 관리, 가비지 콜랙션(GC) 동작 방식 (0) | 2024.07.18 |
Parser와 웹 브라우저의 HTML분석 방식 및 정규표현식에 대하여 (0) | 2024.07.17 |
Git의 작동원리와 기본 사용법, rebase 와 merge, fork의 사용이유 (0) | 2024.07.15 |