데이터로그😎

[Linux] 8. Internet, Network, Server ① 본문

Data Engineering

[Linux] 8. Internet, Network, Server ①

지연v'_'v 2024. 1. 17. 14:44

인터넷 (Internet)

인터넷

  • 인터넷은 전 세계적으로 연결된 컴퓨터 네트워크의 집합체로, 수많은 컴퓨터 및 네트워크 장치들이 정보를 교환하고 서로 통신할 수 있는 공간을 말한다.
  • request, response가 반복되는 통신, 컴퓨터 간의 대화
  • 예를들어 우리가 Web browser를 켜서 google.com 을 입력하고 엔터를 쳤다. 이를 통해 우리는 google server에 요청(request)를 한 것이다. 그리고 google server는 google.com 창을 보여줌으로써 응답(response)을 한다.

 

 

서버에 접속하는 법

  1. domain name 사용:   google.com 이 google server의 domain name이다. 이와 같은 도메인 일므을 웹 브라우저에서 검색하여 서버에 접속할 수 있다.
  2. IP address 사용: 웹 브라우저에 서버의 IP 주소를 입력하여 접속할 수 있다. 서버의 IP를 알기 위해서는 shell에서 ping+도메인 주소를 입력하면 된다.

IP address

  • Domain name과 IP address는 전화 거는 것과 유사하다. 우리가 Hailey 라는 친구에게 전화를 걸 수 있는 두 가지 방법이 있다. 첫번째는 010-0000-0000과 같은 전화번호를 키패드에 직접 입력하는 것이다. 이는 IP address를 사용하여 서버에 접속하는 것과 같다. 두번째는 연락처에 등록된 Hailey의 이름을 찾아 전화를 거는 것이다. 이는 domain name을 사용하여 서버에 접속하는 것과 같다.

 

DNS Server (Domain Name System) 

어떻게 Domain name을 사용하여 특정 서버에 접속할 수 있을까? 이는 DNS 덕분이다. DNS란...

  • 사용자가 이해하기 쉬운 도메인 이름을 네트워크에서 사용되는 IP 주소로 변환하는 역할을 하는 서버
  • 네트워크에서 통신을 할 때, 기기들은 주로 IP 주소를 사용하여 서로 통신한다. 하지만 사람들이 기억하기 쉬운 도메인 이름을 사용하면서 편리성을 제공하기 위해 DNS가 도입되었다.
  • 사용자가 브라우저에 도메인 이름 입력 ▶ DNS가 해당 도메인 이름에 대응하는 IP 주소를 찾아 사용자의 요청에 대한 응답을 해준다.

 

참고) hosts 파일
- 어떤 도메인이 어떤 IP인지에 대한 정보를 갖고있는 파일
- domain - IP 맵핑 정보를 hosts 파일에서 변조할 수 있음.
- Client=host, server=host ▶ host가 모여있는 것 = network ▶network가 모여있는 집단 = internet 
- host들의 이름이 각각 어떤 ip를 갖는가를 적어놓는 파일 = hosts 파일
- DNS 가 존재하기 훨씬 이전부터 각자의 컴퓨터에 hosts 파일을 만들고 도메인-IP 맵핑 정보를 저장해 놓음.
- 그러나, hosts 파일이 모든 정보를 관리할 순 없음. 따라서 DNS 가 생성된 것.

 

내 IP 알아보기

1.ip addr 

ip addr

 

2. curl ipinfo.io/ip

(base) ubuntu@JeeYeon:~$ curl ipinfo.io/ip

 

 

IP 조회 결과가 다른 이유

한 대의 컴퓨터에서 두가지 방식으로 ip를 조회했는데 이 두개의 IP가 다르다. 왜일까? 이유를 차차 설명해보겠다.

집에 연결된 인터넷은 보통 공유기 (router)를 사용하여 여러 기기가 사용할 수 있다. 이 때 공유기를 거치기 전에 직접 집에 공급되는 address는 Public address이고 curl 명령어로 IP 주소를 알 수 있다. 반면 공유기를 거친 후 여러 기기가 같은 인터넷을 사용하는 경우, 각 기기마다 다른 주소를 부여 받는다. 이 때, 각 기기가 가지는 IP 주소를 Private address라고 하며 ip addr 명령어로 알 수 있다.

  Public IP address Private IP address
command curl ipinfo.io/ip ip addr
특징 - 외부 서비스를 통해 접근 가능한 공인 IP주소 - 전 세계에서 인터넷을 통해 접근 가능한 주소 - 로컬 네트워크에 할당된 IP 주소
- 로컬 네트워크에서만 유효한 주소일 수 있다.
- 컴퓨터에 부여된 실제 ip

 

 

 

Web server를 Linux에 설치하는 법 (apache)

Apache2 server 설치 및 접속

 

Web Browser : firefox, chrome, IE

Web Server : Apache, nginx, IIS

 

Apache2 설치

우리가 Server를 운영하려면 Web Server를 설치하면 됨.

sudo apt-get update    # 리스트 업뎃
sudo apt-get install apache2    # apache2 웹서버 설치

 

Apache2 web server 시작, 끝내기

sudo service apache2 start     # apache web server 시작
sudo service apache2 stop      # apache web server 종료
sudo service apache2 restart   # apache web server 재시작

 

프로세스 확인하기 (htop)

sudo htop

apache server를 start 한 뒤, htop으로 프로세스를 확인해보면 아래와 같이 apache 서버가 여러 개 켜져있는 것을 볼 수 있다. (f4 누르고 apache 검색하면 아파치 서버만 볼 수 있음)

웹서버는 많은 접속이 들어올 수도 있는 구조이다. 따라서 많은 접속이 들어왔을 때 이를 분산해서 처리하기 위해 여러개의 apache web server가 자동으로 실행된다.

htop 확인 결과

 

 

shell에서 직접 web server에 접속하기 (elinks)

elinks를 통해 web browser가 아닌 shell에서 직접 web server에 접속할 수 있다.

sudo apt-get install elinks    # elinks 설치

enlinks www.google.com     # elinks 통해 google web server 접속

 

 

나 자신(내 컴퓨터)의 web server 에 접속하기

1. localhost (127.0.0.1)로 접속 => 바뀌지 않음. 누구에게나 같음

2. ip addr 로 알아낸 ip로 접속

elinks 내ip주소
elinks http://localhost

 

 

 

apache 서버 설정 파일 (conf)

apache conf 파일 위치

request, response

 

 

web browser에서 요청한 내용, 파일을 web server는 어디에서 읽어오는 것일까?

Unix 계열에서 설정(어떤 프로그램이 어떻게 동작할 것인가?)은 루트 디렉토리의 etc에 저장되어 있다.

apache2에 대한 설정파일은 etc 하위 apache2 디렉토리에 있는 apache2.conf 파일이다.

cd /etc/apache2

cd /etc/apache2/apache2.conf

 

참고
- 아파치 기본 설정    : /etc/apache2/apache2.conf     
- 포트 설정              :  /etc/apache2/ports.conf     
-  public 파일 설정    :  /etc/apache2/mods-enabled/dir.conf     
- 언어셋관련 설정      :  /etc/apache2/mods-enabled/autoindex.conf     
- 파일타입 설정        :  /etc/apache2/mods-enabled/mime.conf     
- 웹서비스 설정        :    /etc/apache2/sites-enabled/000-default

(출처: http://www.embeddedkorea.co.kr/bbs/board.php?bo_table=m22&wr_id=19)

 

 

apache2.conf 파일

apache2.conf 파일을 살펴보면 맨 아래에 다음과 같은 내용이 나와있다.

  • IncludeOptional: 해당 디렉토리에 있는 파일들을 Apache 설정에 포함시키는 역할
  • sites-enabled 디렉토리: 일반적으로 Apache 서버의 가상 호스트 설정 파일들이 저장되는 디렉토리

/etc/apache2/apache2.conf

 

 

/etc/apache2/sites-enabled/000-default.conf 파일 

/etc/apache2/sites-enabled/ 의 파일들을 살펴보니 000-default.conf 라는 파일이 있다. 살펴볼까?

000-default.conf는 apache2의 기본 설정을 담당하는 파일이라 생각하면 되겠다.

  1. ServerAdmin  서버의 관리자 이메일 주소를 설정한다. 이메일 주소는 서버에 대한 문제나 오류에 대한 알림을 받을 때 사용될 수 있다.
  2. DocumentRoot  웹 서버가 요청을 받았을 때 해당 요청에 대한 문서(웹 페이지)가 어디에 위치하는지를 지정한다. 여기서는 /var/www/html 디렉토리를 웹 서버의 문서 루트로 설정하고 있다.

/etc/apache2/sites-enabled/ 000-default.conf

 

/var/www/html

/etc/apache2/sites-enabled/000-default.conf 파일에 따르면 apache2 서버에 request를 보내면 respond 될 때 보여지는 문서가 /var/www/html에 있다. 해당 디렉토리에 어떤 파일이 있나 볼까?

 

아래와 같은 html 형식이 있다. 그렇다면 ... apache2 web server에 접속하면 아래와 같은 html이 보여진다는 것인데, 확인좀 해볼까?

 

apache server에 접속하면 index.html 내용이 그대로 보일까? 아래의 command를 통해 나의 apache2 web server에 들어가서 확인해보자. 어떤가.  index.html에서 확인한 내용과 똑같지? 

elinks http://localhost

 

 

log

000-default.conf를 다시 살펴보자.

ErrorLog와 CustomLog => log를 기록하는 것.  APACHE_LOG_DIR 라는 곳에 존재한다.

 

 

그래서.. APAHCE_LOG_DIR이 어딘데? 

  • apache의 환경변수는 /etc/apache2/에 있는 envvars 파일에서 찾아볼 수 있다.
  • 해당 파일을 살펴보면 export 라는 명령을 통해 apache에 관련한 다양한 디렉토리를 설정해놓은 것을 볼 수 있다. 우리가 찾던 APACHE_LOG_DIR도 설정되어 있으며, 이는 /var/log/apache2$SUFFIX라 한다.

 

이 log 파일들이 어떻게 동작하는지 볼까? access.log 파일을 보겠다. 이 로그파일은 apache web server에 acess 시도가 이뤄질 때마다 기록이 된다.

 

 

한 번 apache server에 acess해보겠다. curl 명령어를 통해!

curl http://127.0.0.1 명령어를 통해 apache web server에 접속했고, access.log 파일에는 18/Jan/2024 11:48분에 curl을 통해 접속했다는 기록이 추가됐다~!