System/Linux 19

[Linux] HTTP

1. 웹 서비스에 사용되는 프로토콜: HTTP(HyperText Transfer Protocol) HTTP(hypertext transfer protocol)은 응용 계층(application, L7)의 프로토콜로 HTML(HyperText Markup Language)를 전송하는 데 사용되는 프로토콜이다. 최근에는 HTML 이외에도 모든 웹 관련 API 통신에 이용되고 있다. HTTP는 기본적으로 비연결성(Connectionless), 무상태성(Stateless) 특성을 가지고, 요청(request)/응답(response) 동작에 기반하여 아주 단순한 방식으로 서비스를 제공한다. 하지만 HTTP 통신은 신뢰성 있는 데이터 통신이 필요하기 때문에 전송 계층(transfer, L4) 프로토콜인 TCP 위에..

System/Linux 2024.10.17

[Linux] Local Repository 만들기

1. Repository가 뭐야? Local Repository는 왜 필요해? Repository란 rpm 기반의 Linux 소프트웨어 패키지들이 저장된 저장소이다. Repository는 일반적으로 외부의 서버에 존재하기 때문에 /etc/yum.repos.d 디렉토리에 저장된 정보를 기반으로 원격으로 rpm 패키지를 가져오게 된다. Linux를 사용하다 보면 rpm 명령어를 이용해 소프트웨어 패키지를 설치하는 경우도 있지만,  rpm 명령어를 사용할 경우, 의존성 문제를 직접 해결해야 하기 때문에, 네트워크가 된다면 dnf(yum)을 사용해 패키지를 설치하는 경우가 훨씬 편리하다는 것을 알 수 있다.   그렇다면 사내 폐쇄망 같은 상황에서는 그냥 rpm으로 할 수 밖에 없는 것일까? 패키지를 다운 받아야..

System/Linux 2024.10.16

[Linux] e-mail(Mail Server)

우리가 사용하는 이메일의 체계는 겉보기엔 단순해보이지만, 세부적으로 보면 여러 메일 서버 구성 주체들과 프로토콜들의 상호 작용으로 운영되는 상당히 복잡한 체계를 가지고 있다. 이번 포스팅에서는 이메일 체계의 구성 및 통신 과정에 대해 설명해보려한다.  1. 이메일 통신 과정 이메일은 다음과 같은 과정을 거쳐 수신자에게 도착하게 된다. 아래의 설명을 참고하여 대략적인 과정을 파악하도록 하자. 메일 서버 구성 요소와 관련 프로토콜들에 대해서는 추후 더 자세히 다룰 예정이다.  1) 다른 도메인끼리의 메일 전송 과정  발신 이메일: pororo@naver.com수신 이메일: crong@daum.net 1. pororo는 MUA를 이용하여 메일을 작성하고, naver.com 도메인의 MTA(보내는 메일 서버)로..

System/Linux 2024.10.09

[Linux] FTP

1. 파일 전송 서비스/프로토콜: FTP(File Transfer Protocol)FTP(File Transfer Protocol)은 인터넷을 통해 파일을 전송하는데 사용되는 표준 네트워크 프로토콜이자 서비스이다. 하지만 FTP를 이용해서 파일을 다운받아 본 사용자는 거의 없을 것이다. 일반적으로 FTP는 개발자, 엔지니어들이 서버 운영을 위한 목적으로 파일을 업로드/다운로드 할 때 많이 사용하며, 큰 파일이나 많은 파일을 안정적으로 빠르게 업로드/다운로드 할 수 있다는 장점이 있다.   일반적으로 FTP는 TCP 20, 21번 포트를 이용한 평문 통신으로 알려져 있지만, 실제로는 통신 방식에 따라서 랜덤 포트를 사용하는 경우도 있다(뒤에 FTP의 동작 방식과 관련한 부분에서 더 자세히 다루도록 하겠다)..

System/Linux 2024.10.07

[Linux] DNS part 2

1. 네임 서버 이중화/다중화와 영역 전송(Zone Transfer)  cmd(명령 프롬프트) 창을 열어 다음과 같이 구글 도메인(google.com)의 권한 있는 네임서버(Authoritative NS)를 검색해 보면 이러한 결과가 나온다. 왜 네임 서버를 여러 개 두는 걸까? 반대로 만약 네임 서버가 한 대만 있다고 가정해 보자. 그런 상황에서 해당 서버에 오류가 발생하여 다운된다면 무슨 일이 일어날까? 도메인 네임을 이용하여 구글 사이트에 접속하는 것이 불가능할 것이다. URL에 구글 웹 서비스 서버의 IP 주소를 입력하여 직접 들어가는 것은 가능하겠지만, 이러한 방법을 모르는 대부분의 사용자들에게는 인터넷 서비스가 마비된 것처럼 보일 것이다. 이러한 상황을 방지하여 고가용성(High Availab..

System/Linux 2024.10.03

[Linux] DNS part 1

1. DNS(Domain Name Service)란?우리가 Google 웹 사이트에 접속한다고 생각해 보자. 거의 모든 사람이 www.google.com으로 접속하지 172.217.160.78이나 142.250.74.14(Google 웹 서버의 IP 주소)를 입력해서 접속하지는 않을 것이다. 이때  www.goole.com과 같이 IP주소를 사람이 읽을 수 있는 방식으로 대신한 방법이 도메인 네임(Domain Name)이다. 또한 도메인 네임을 IP 주소로 변환해 주는 것을 이름 해석(name resolution)이라고 하는데 이러한 과정을 해주는 컴퓨터(또는 서버)가 DNS(Domain Name System) 서버(Linux에서는 Name Server라고 한다)이다.  그렇다면 DNS 서버가 없었을 때..

System/Linux 2024.10.01

[Linux] 원격 관리 서비스(Telnet, SSH)

한 가지 상황을 가정해보자, 만약, 사내에 리눅스 관리자가 나 한 명 뿐인데, 내가 휴가를 가야하는 상황이라면 어떻게 할까? 휴가를 포기하는 과감한 결정을 내려야 할까? 이런 상황에서 우리의 황금같은 휴가를 지켜줄 수 있는 방법이 원격 관리 서비스(Telnet, SSH, RDP..)이다.   1. Telnet Telnet은 CUI(CLI)와 평문 통신 기반의 원격 관리 서비스(프로토콜도 Telnet)이다. 여기서 평문(plain text) 통신이란 통신 과정이 암호화되지 않음을 의미하기 때문에 Telnet은 보안이 중요한 환경에서는 부적절하다(이러한 이유로 요즘은 SSH가 광범위하게 사용되고 있다). Telnet은 기본 통신 포트로 TCP 23번을 사용하며, Telnet을 통해 서버, 네트워크 장비(라우..

System/Linux 2024.09.26

[Linux] 파일 시스템, 마운트

저번 포스트에 이어 리눅스에서 저장 장치를 관리하는데 필요한 개념인 파일 시스템과 마운트에 대해 설명하겠다.  1. OS에서 데이터를 관리하는 방법: 파일 시스템(File System)  파일 시스템(File System)은 운영체제에서 데이터를 저장하고 관리하는 체계로, 저장 장치(HDD, SSD..)에 파일이라는 단위로 데이터를 관리하고 배치하여 사용자가 데이터에 쉽게 접근 및 수정할 수 있게 해준다. 쉽게 말해, 어떤 물건을 어떤 캐비넷에 넣을지, 해당 캐비넷은 어떤 방에 둘지 정리 방법을 정하는 것(계층적)과 유사하다. 파일 시스템의 종류는 다음과 같다.  파일 시스템 종류1) EXT(Extended File System) - EXT4리눅스에서 주로 사용되는 저널링 파일 시스템이다(RHEL 6까지..

System/Linux 2024.09.25

[Linux] 저장소(Storage)관리

1. 저장소의 종류 자기 저장 장치 magnetic, 자기적 성질을 이용해 저장HDD(Hard Disk Drive)Tape Drive플래쉬 메모리(Flash Memory)flash, 전기적 방식으로 저장 SSD(Solid State Memory)USB Thumb Drive(USB memory)광학 저장 장치optical, 레이저 광을 이용해 저장CD/DVD/BlueRay  2. 하드 디스크의 물리적/논리적 구조 1) HDD의 물리적 구조 스핀들(회전축, Spindle moter)플래터를 일정하 속도로 회전시킨다(속도가 변하면 데이터를 읽고 쓰기 어렵다)노트북용: 5400rpm, 일반PC용: 7200rpm, 서버용: 10000rpm/15000rpm..디스크(Disk), 플래터(Platter)자력을 이용하여..

System/Linux 2024.09.24

[Linux] init? runlevel? target?

리눅스 기초 명령어에 관한 포스트를 보다보면 콘솔을 종료할 때 사용하는 init 0, 재부팅할 때 사용하는 init 6과 같은 명령어를 볼 수 있다. 과연 init이란 무엇일까? init을 알기 위해서는 먼저 runlevel에 대해 알아야 한다.   runlevel은 시스템이 부팅된 후 운영 상태(ex. 종료 상태, 재부팅 상태,  CUI..)를 의미한다. runlevel은 7가지로 구성되어 있는데 다음과 같다. runlevel상태 비고0Power off, 종료 모드 1Rescue, 시스템 복구 모드(단일 사용자 모드) 2Multi-User사용하지 않음3 Multi-User  4 Multi-User 사용하지 않음5Graphical, GUI 다중 사용자 모드 6Reboot, 재부팅  initd(init d..

System/Linux 2024.09.23