클라이언트 (Client) vs 서버 (Server)
클라이언트
- 서버 측에 요청을 보내는 사용자 측 컴퓨터 또는 디바이스
- 일반적으로 웹 브라우저가 클라이언트 역할을 수행
- 외부 API에 데이터 요청 → 서버에서 데이터 가져옴 → 웹 페이지에 HTML을 이용해 표시
서버
- 클라이언트(Client)의 요청에 응답하는 컴퓨터 시스템 또는 프로그램
- 웹에서 서버는 웹 페이지, 애플리케이션, 데이터베이스 등의 정보를 제공하고, 클라이언트로부터 요청을 받아서 처리
- 서버의 역할은 여러 가지가 있음
- 웹 서버 : Client 들에게 HTTP 문서를 전달
- DB 서버 : Client 들의 DB 를 관리
- 게임 서버 : Client 들의 게임 데이터를 관리 & 처리
IP(Internet Protocol)
송신 호스트와 수신 호스트가 정보를 주고받는데 사용하는 규칙(protocol)
패킷(Packet)이라는 작은 데이터 조각을 다른 컴퓨터로 전송하는 역할
*호스트(Host) : 네트워크에 연결된 컴퓨터 또는 주변기기를 의미
ex) PC, 프린터, 서버, 노트북, 스마트폰…
IP Address(컴퓨터의 고유한 주소)의 버전
- IPv4 : 32비트로 구성되며, 0.0.0.0부터 255.255.255.255까지 총 2^32개의 주소를 사용 가능
- IPv6 : 128비트로 구성되며, 16진수로 표현됨. 이론상으로는 2의 128승(약 3.4x10^38)개의 주소를 사용 가능
- IPv6는 IPv4와 호환되지 않기 때문에, IPv4에서 IPv6로의 전환 작업이 진행 중
포트 (Port)
컴퓨터와 인터넷 사이에서 통신할 때, 어떤 프로세스(Process)와 통신할 것인지를 지정하는 번호
IP 주소 - 컴퓨터를 식별하는 역할
포트 - 컴퓨터 안에서 프로세스를 식별하는 역할
과거에는 한 대의 컴퓨터에서 하나의 서비스만 제공 가능했었음
ex) HTTP 서버를 운영 시
1. 서버는 웹 브라우저에서 HTTP 프로토콜을 사용하는 요청만 처리
2. 다른 요청은 모두 무시
현재는 포트 번호를 이용하여 각각의 서비스를 식별
즉, IP + 포트번호를 알아야 프로그램끼리 통신이 가능
자주 사용하는 포트 번호
1. Well-Known Port Number (0 ~ 1023) - *Well-known : Document에서 “예약된” 이라는 뜻으로 쓰임
- 80번 포트(HTTP): 웹 서버에서 사용, 클라이언트의 HTTP 요청을 처리
- 443번 포트(HTTPS): 웹 서버에서 사용, SSL 인증서를 사용하여 암호화된 HTTPS 통신을 처리
- 22번 포트(SSH): 원격 컴퓨터 접속 프로토콜인 SSH(Secure Shell)에서 사용되며, 보안된 터미널 접속을 처리
- 21번 포트(FTP): 파일 전송 프로토콜(FTP)에서 사용
2. Registered Port (1024 ~ 49151) : 여러 tool이 쓰이는 포트들
- 3306번 포트(MySQL): MySQL 데이터베이스에서 사용
- 8080번 포트: HTTP 대체용
3. Dynamic Port (49152 ~ 65535)
- 필요할 때 마다 임의의 번호를 사용하는 곳
TCP(Transmission Control Protocol)
인터넷 상에서 데이터를 신뢰성 있게 전송하기 위한 프로토콜
- 데이터를 패킷으로 분할하고, 일련번호를 부여하여 전송
- 수신자는 일련번호를 기반으로 패킷을 재조립하고, 오류 검사 및 복구를 수행
- 데이터의 완전성과 안정성을 보장하기 위해 재전송 기능을 제공
- 인터넷 상에서 데이터가 과도하게 증가하여 혼잡이 발생하는 상황을 방지하기 위해 혼잡 제어 기능을 제공
TCP/IP 프로토콜 스택(TCP/IP protocol stack)
인터넷에서 데이터를 전송할 때는 IP와 TCP가 함께 사용됨
IP는 데이터를 패킷(Packet)이라는 작은 데이터 조각으로 분할하고, 각 패킷에 출발지 IP 주소와 목적지 IP 주소를 부여하여 전송
TCP는 IP 위에서 동작하여 패킷을 재조립하고, 오류 검사와 복구, 재전송 기능 등을 수행
클라우드 서비스
인터넷을 통해 컴퓨팅 리소스(컴퓨팅 파워, 스토리지, 네트워크 등)를 제공하는 서비스
클라우드 서비스를 사용하는 이유
- 컴퓨터는 모두 서버로 사용할 수 있으나, 서버로 사용할 경우 여러 이슈가 발생 가능
- 서버를 계속 켜놓아야 하므로, 갑자기 꺼질 수도 있고 보안 설정이 필요
- 서버를 운영하는데는 전문적인 지식이 필요하며, 보안과 안정성을 유지하기 위해 시스템 관리자가 필요
- 따라서, 대부분의 기업이나 개인들은 서버를 직접 운영하기보다는 클라우드 서비스를 사용하는 것이 일반적
클라우드 서비스 모델
1. IaaS(Infrastructure as a Service):
- 가장 기본적인 모델로, 하드웨어 리소스(서버, 스토리지, 네트워크 등)를 가상화하여 제공
- 사용자가 인프라 관리를 완전히 담당해야 하며, 자신이 필요한 리소스를 빌려서 사용
2. PaaS(Platform as a Service)
- IaaS와 비슷하지만, 미들웨어나 개발 툴 등의 소프트웨어 서비스도 제공
- 이 모델은 사용자가 인프라 이외의 요소를 관리하지 않아도 되므로 개발자나 기업이 애플리케이션을 개발할 때 유용
3. SaaS(Software as a Service)
- 소프트웨어 서비스를 제공하는 모델
- 사용자는 소프트웨어를 빌려서 사용
- 서버나 데이터베이스 등의 백엔드 리소스는 클라우드 공급자가 관리
- 사용자가 개발자가 아니더라도 소프트웨어를 사용할 수 있으므로, 대중적인 서비스 모델
EC2(Elastic Compute Cloud - Iaas)
AWS(Amazon Web Services)의 클라우드 컴퓨팅 서비스 중 하나
EC2 인스턴스 구축 방법
회원가입 후 로그인, 우측 상단에 나라를 [서울] 로 변경
[콘솔 홈] 에서 내리다보면 [솔루션 구축] 섹션의 [가상 머신 시작]을 누름
[이름 및 태그]에 웹 서버 이름 추가
OS image는 [Ubuntu]로 설정 후, 20.04 LTS (20년 4월에 만들어진 장기 지원 버전)로 선택
← 추후 MySQL과 충돌이 없게끔 버전을 설정하는 것
AWS 프리티어 : t2.micro 인스턴스 750시간/월 무료 서비스 제공
[새 키 페어 생성] 으로 key file을 받음 - 중요 파일이니 private하게 간수
보안 설정을 위해 [편집] 누름
[보안 그룹 이름] 과 [설명] 에 식별 가능하도록 설정
[보안 그룹 규칙 추가]를 통해 인바운드 규칙 편집 - 인스턴스 생성 후 진행해도 됨
[인바운드 규칙 편집 예시]
- 모두 [소스]를 Anywhere-IPv4로 지정
- 포트 범위는 ****위에 언급한 포트 번호 참고
- 모든 ICMP-IPv4 : PING 테스트 위함
[스토리지 구성] - 1개의 인스턴스만 운용할 예정이기 때문에, 프리 티어 최대치인 30GB로 설정
배포 및 운영은 리눅스(대표적인 게 ubuntu)로 많이 함
가장 하단에 [인스턴스 시작] 을 누르고, 인스턴스를 시작
EC2 나만의 추가 설정
$ sudo vi /etc/apt/sources.list
# 다음 명령어 기입
# ap-north ~ 를 mirror.kakao로 전체를(g) 변환시키는 명령어
:%s/ap-northeast-2.ec2.archive.ubuntu/mirror.kakao/g
# 패키지 목록을 업데이트, 설치되어 있는 패키지를 변경하지 않음
$ sudo apt update
# 서버 시간 셋팅
$ sudo apt install rdate
$ sudo rdate time.bora.net
$ sudo timedatectl set-timezone Asia/Seoul
# 서버 시간 셋팅 확인
$ date
----
# vi upgrade
$ sudo apt install vim -y
# .vimrc custom 설정
set nu
set ts=4
set ls=2
set sw=4
set cindent
----
# gcc 설치
$ sudo apt install gcc -y
# make 설치
$ sudo apt install make -y
# cmake 설치
$ sudo apt install g++ cmake
# 남은 용량 확인
$ df -h
인바운드(Inbound) vs 아웃바운드(Outbound)
1. 인바운드(Inbound) : 외부에서 내부로 데이터가 이동하는 것을 의미
- 인바운드 규칙 : 클라이언트가 서버 데이터에 들어올 수 있는 규칙
- 웹 서버를 운영하는 경우 인바운드 규칙을 사용하여 외부에서 서버로의 HTTP/HTTPS 요청을 허용하거나 차단할 수 있음
2. 아웃바운드(Outbound) : 내부에서 외부로 데이터가 이동하는 것을 의미
- 아웃바운드 규칙 : 서버에서 나갈 수 있는 데이터에 대한 규칙
- 내부 네트워크에서 외부로 나가는 SMTP, FTP, HTTP 등의 트래픽을 허용하거나 차단할 수 있음