CPU,메모리, HDD, I/O
윈도우(탐색기 -> 클릭), 리눅스(쉘 -> 키보드로 명령어 입력) 안드로이드, IOS
이름을 입력해서 실행하는 프로그램
서비스를 제공하는 프로그램
서비스를 이용하는 프로그램
웹클라이언트프로그램 - 크롬, 사파리,
모르면 안되는 파트이기도 하다.
서비스는 프론트엔드, 백엔드로 이루어져있다.
프론트엔드 - 웹, 어플 / 웹,어플이 같은 서버를 사용하기도 한다.
백엔드 - 서버
프로그래밍의 언어
자바, 파이썬, C언어, PHP, JS
네이버서비스
클라이언트 프로그램 -> 서버에 자료를 요청
프론트와 백엔드 코드를 나누는 기준?
누구의 컴퓨터에서 실행되는가
프론트엔드
HTML, CSS, JS, Vue -> 클라이언트 컴퓨터에서 실행되는 코드
백엔드
자바, 스프링부트 -> 서버컴퓨터에서 실행되는 코드
클라이언트에서 서버에 자료를 요청하고 자료를 찾아서 클라이언트에 보내주는데 서버와 클라이언트 사이를 네트워크가 연결시켜준다. 보통 서버는 컴퓨터를 여러대둔다. 요즘 채용시장에서 대용량 트래픽의 경험이라는 단어가 많은데 몇억명의 사람들이 사용하는 서비스이기 때문이다.
오늘 수업의 가장 중요한 두 단어는 IP주소와 포트번호이다.
EX)
192.168.0.100 : 100000
IP주소 | 포트번호
멀리있는 컴퓨터를 찾아가는 주소. 컴퓨터 한대에는 여러개의 프로그램이 돌아가고 있는데, 원하는 프로그램에 적합한 자료를 보내줘야하는데 그 프로그램에 찾아가는 주소가 포트번호이다
서브넷마스크
게이트웨이
기본설정 DNS서버 설정
위 4가지를 다 설정해주어야한다.
컴퓨터에서 실행중인 특정프로그램을 찾아가는 번호 / 내컴퓨터 말고 쟤꺼! 나랑 소통하고있는 남의 컴퓨터가 내 컴퓨터에서 찾아가는 번호!
내 컴퓨터가 내가 실행중인 특정프로그램을 구분하는 번호
클라이언트가 서버의 IP주소와 포트번호를 가지고 정보를 주고받는것.
클라이언트가 서버에 접속할수없다면? -> 되게 해야함
네트워크 : 여러개의 시스템들 즉, 컴퓨터들이 연결되어있는 하나의 통신망.
인터넷 : 전세계가 연결되어있는 네트워크를 의미한다. 네트워크의 망 중 세상에서 가장 큼. 즉 여러가지 데이터를 공유할수있도록 연결해주는것이다.
LAN과 WAN은 알아두자
LAN : 가까운지역을 하나로 묶는 네트워크다.
WAN : 네트워크 전문장치가 여러개 연결되어있다. LAN과 LAN을 전문네트워크로 연결시킨것. 멀리있는 지역을 한데 묶기위해서 가까운것들을 묶은것
Internet : LAN+LAN+LAN+ ... + LAN이다. 이 모든게 다 하나로 묶인것이 인터넷이라고 생각하면 된다.
Star형 - 중앙장비에 모든 노드가 연결 / 공유기를 통해 컴퓨터, 핸드폰, TV가 다 연결되어있음. 공유기가 고장난다면? 네트워크연결이 다 안될것!
Mesh형 - 여러 노드들이 서로 그물처럼 연결 / 연결이 안되는 부분만 연결이 안되는것일뿐! WAN을 연결할때 주로 사용하는 방식.
1:1 캐스트를 가장 많이 사용하고, 멀티, 브로드 캐스트가 있다.
유니캐스트 - 1:1로 특정대상만 선택해서 통신
멀티캐스트 - 특정다수만 선택해서 통신
브로드캐스트 - 안에있는 전부 다 와하는 통신
그렇다면 컴퓨터는 어떻게 선택해서 데이터를 주고받지?
택배를 보면 보내는 사람의 주소 이름, 연락처가 다 적혀있다. 이런것 처럼 네트워크상에서도 뭔가를 주고받을때 보내는 사람의 주소와 받는 사람의 주소가 적혀있다. 이런것이 적혀있는 양식을 네트워크 프로토콜이라고 부른다. 내가 하고싶은 네트워크 통신방식에 따라서, 여러가지 상황에 따라서 거기에 맞는 네트워크 프로토콜 을 사용하면 된다.
이런 양식에 잘 적어서 보내면 데이터를 주고받는게 가능해지는것!
프로토콜은 양식일 뿐
- 가까운 곳과 연락 - Ethernet 프로토콜(MAC주소)
보내는 사람 받는 사람의 주소 여기에 있는 프로토콜은 각자 자기의 주소를 가지고 있다.- 멀리있는 곳 - ICMP IPv4 ARP(IP주소)
- 여러가지 프로그램으로 연락 - TCP/UDP(포트번호)
이더넷프로토콜 - 2계층
ICMP - 3계층
IPv4
ARP
TCP*,UDP - 4계층
HTTP*
7계층 : 응용 - HTTP
6계층 : 표현
5계층 : 세션
4계층 : 전송 - TCP/UDP
3계층 : 네트워크 - IP,ICMP,ARP
2계층 : 데이터링크 - 이더넷
1계층 : 물리
TCP/IP모델
전세계가 약속을 정한 모델. 인터넷이 처음 나왔을때 가 1980년대인데, 처음 4단계를 이론에서 7단계로 나눠놨다.
OSI 7계층은 해당 계층의 규격에 맞게 약속을 지정해놓은것이다.
네트워크를 통해서 전달되는 데이터. 패킷은 여러번 포장된 택배상자와같다.
헤더, 페이로드, 풋터 헤더에 양식들이 앞에 하나하나 붙고 페이로드에 원하는 데이터가 담긴다.(그림, 문서 등등,)패킷을 만들어서 보낼때 과정 :
캡슐화 4계층에서 2계층까지 하나씩 싸서 내려간다.
가장 많이 사용하는 패킷의 형태 Ehternet IPv4 TCP HTTP
헤더 프로토콜
헤더 프로토콜(TCP + HTTP)
헤더 프로토콜(TCP + HTTP +IPv4)
나한테 데이터가 왔어도 맞는지 하나씩 열어보면서 확인한다.디캡슐화 : 패킷을 받았을때 열어보는 과정
가까이에 있는 컴퓨터,Local area에서 통신을 어떻게 하는가 를 정의한 계층
하나의 네트워크 대역 LAN에서만 통신할때 사용. 다른네트워크와 통신할때는 3계층의 주소와 프로토콜을 이용해야만 다른네트워크와 통신이 가능하다.
2계층에서 사용하는 주소
mac주소 - 물리적주소(물리적장비가 부여받은 고유한 주소값 ) 16진수로 씀
IP주소는 주로 3계층에서 쓰는 주소체계. 서로 다른 LAN과 LAN을 연결시켜주는 역할이 3계층에서 하는 일이다. 멀리있는 곳으로 가려면 3계층이 필요!
서버를 세팅할때 IPv4주소뿐 아니라 서브넷마스크, 기본게이트웨이 3가지가 다 필요하다.
IPv4 : 현재 PC에 할당된 IP주소 / 서브넷마스크와 함께 쓴다.
서브넷마스크 : IP주소에 대한 네트워크의 대역을 규정하는것 / 네트워크대역을 서브 즉, 보조단위로 잘게 쪼개서 어디서부터 구분할 것인지 지정한 마스크
게이트웨이주소 : 외부와 통신할때 사용하는 네트워크의 출입구
멀리있는 네트워크 WAN에서 통신할 때는 mac주소 뿐 아니라 IP주소도 필요하다
class로 나눠서 만들어졌다.
10. 0.0.1
10. 0.0.2
10 100.1.200
앞에 10이 같으면 같은 주소
네트워크를 서브로 잘게잘게 쪼개자 -> 서브넷마스크
10진수 0123456789
2진수 01
컴퓨터는 0과1로만 표현하는 2진수 서브넷마스크는 2진수로 알아봐야한다.
10.10.10.10 0000 1010 0000 1010 0000 1010 0000 1010(2진수로 변경)
8자리인 이유 -> 컴퓨터가 동작하는 단위로 쓴것
2진수 1자리가 bit
255.255.255.128 1111 1111 1111 1111 1111 1111 1000 0000
10.10.10.0 - 10.10.10.127 까지 같은 네트워크
10.10.10.128 - 10.10.10.255 까지 같은 네트워크
-> 2진수로 바꿔야한다.
이렇게 네트워크를 쪼개서 낭비를 줄이려고 함. 그렇지만 낭비가 어떻게든 생기게된다
IP주소를 공유
공유기 바깥쪽에 ip주소가 한개가 들어가고 그 ip주소를 공유해서 사용한다.
공유기가 하는 역할은 각각의 컴퓨터에서 인터넷으로 나갈때 패킷을 보내면 그 패킷의 ip주소를 보고 뭘했는지 적어둠. 밖에서 데이터를 공유기에게 보내줌. 공유기가 적혀있는 것을 보고 해당 데이터를 해당ip주소에 맞는 컴퓨터에게 데이터를 보내줌.
공유기를 나갈때 적고 다시 들어오면 지워짐. 클라이언트가 무조건 서버한테 먼저 액션을 주어야 서버에서 보내줄 수 있음. 서버가 먼저 무언가를 보내주는것은 할 수 없음.
서브넷마스크와 기본게이트웨이는 공유기에 설정이 그렇게 되어있기 때문에 같아야하고 IP주소는 집주소이기 때문에 같으면 안된다. 내가 연결하는 네트워크 장치에 맞게 주소를 변경해야한다.
공유기(네트워크 장치)에 설정된 주소에 맞는 주소로 설정해야한다. 일반적으로 앞자리(192.168.0)는 같고 뒷자리(107)만 다르게 해야한다. 공유기는 ip주소가 안에서 쓰는것 하나 밖에서 쓰는것 하나로 총 2개가 있고, 안에 쓰는 공유기 ip주소를 사용해서 공유기에 정보를 전달해준다. 그래서 공유기 내부에서 사용하는 ip주소를 사설ip, 밖에서 사용하는 ip를 공인ip라고 한다.
통신이 되는지 안되는지 확인 가능한 프로토콜 ping 테스트라고도 한다. 오류가 나면 오류메세지를 띄워준다.
Destination Unreachable 요청이 가지도 못한것
Net Unreachable 요청이 가긴 갔는데 response가 안옴
아키텍처를 그리는 능력, 서버를 세팅할 수 있는 능력
ping test를 나한테 가까운 순대로 테스트하면 문제를 찾아낼 수 있다.
하나의 실행중인 프로그램만 쓸 수 있다. 하나의 프로그램은 하나의 포트번호만 쓸 수 있는것은 아니다. 컴퓨터에서 실행중인 특정프로그램을 찾아가는 번호 / 내컴퓨터 말고 쟤꺼! 나랑 소통하고있는 남의 컴퓨터가 내 컴퓨터에서 찾아가는 번호!
80 abc.exe
81 abc.exe
99 abc.exe
웹서버는 기본적으로 80번을 사용. 내서버를 이용하는 사용자들이 편해짐. 웹클라이언트 프로그램은 80번이 기본이라는것을 알고있음. 포트번호를 딱히 정하지 않으면 80번으로 알아서 들어감.
HTTP 80번 / HTTP는 web을 말함
HTTP 443번 /secure가 추가되어있는것위 두가지는 외우자
TCP : 안전하지만 느림
UDP : 다 던짐 그래서 빠름 근데 클라이언트가 못받았을 수 도 있음.
TCP를 주로 씀. 패킷이 3개가 왔다갔다함. 클라이언트와 서버가 처음 소통을 시작하는 과정을 3 hand shake라고 한다.
실선:서버
점선:클라이언트listen : 서버의 상태 서버가 정상적으로 실행되고 있는 상태
established : 서버랑 클라이언트가 정상적으로 연결된 상태netstat -ano | findstr 10000 을 치면 확인할 수 있다.
IP주소로 찾아가고 TCP로 데이터를 주고받음. 이제 웹과 데이터를 주고받기 위해서 HTTP가 필요.
클라이언트와 서버가 코드를 주고받을때 필요한 양식HyperTextTransferProtocol
HTML이라는 문서를 주고받자!
프론트엔드
HTML - 틀
Javascript - 기능
CSS - 예쁘게만드는
화면에 뭔가 나오게 하는건 클라이언트 중요한건 무조건 서버에 넣자
TCP로 데이터를 주고받는 아이
요청 응답 프로토콜이 다름
글자,문자,10진수로 되어있음
restAPI설계
요청프로토콜 구조
요청타입 공백 URI 공백 HTTP버전 (1.1이 기준이다.)
GET
POST
PATCH
DELETEGET,POST 방식은 알아두자 이 두가지는 애매하게 나뉘어져있음
GET : 클라이언트가 서버로부터 문서를 읽어오려할때사용
POST : 클라이언트가 서버에게 어떤 정보를 전송할때 사용
GET방식은 주소창에 데이터를 포함시킴 : ?뒤에 부분이 데이터를 의미함
ex) https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EB%82%B4++ip%EC%A3%BC%EC%86%8C
POST방식은 body에 데이터를 포함시킴
로그인은 대부분은 POST방식으로 사용 / 용량이 큰 데이터
Uniform Rescouse Identifier
Uniform Resource Locator - 형식화된 자원의 위치를 가르키는 것 URL
scheme ://host[:port][/path][?query]
ex) ftp ://IP주소 :포트 /파일이름
http ://IP주소 :포트 /폴더이름/파일이름[경로]
도메인주소 ->IP주소를 외우기 어려워서 쉽게 바꾼것이 도메인 주소
IP주소를 외우기 힘드니까 글자형식의
로컬DNS 루트DNS가 아래 최상위 DNS와 책임 DNS가 들어가있음
응답상태코드 알아둘것들!
200 - OK 클라이언트의 요청이 성공했다는 것을 나타냄
302 - 개발관련
403 - Forbidden 클라이언트잘못 / 클라이언트가 권한이 없는 페이지를 요청했을때
404 - Not Found 클라이언트잘못 / 클라이언트가 서버에 없는 페이지를 요청했을때
500 - Internal Server Error 서버잘못 / 서버의 일부가 멈췄거나 설정오류발생
503 - Service Unavailable 서버잘못 / 아예 감당이 안되는 문제가 생겼을때 최대 session수를 초과했을때
추가적정보를 넣을때 헤더에 넣는다
nginx를 깔고 압축을 푼 후 실행시키고
작업관리자에서 프로그램이 실행되고 있는지 확인
yum install [프로그램이름]
yum install net-tools -> internet이 되는 컴퓨터에서만 가능
ifconfig
ip addr
// 주의 !! 가상의 공유기(virtual network editor, vmnet8)에맞는 값으로 설정
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=4060a876-51ec-448c-95cb-4a4697511818netstat
-
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.152.0
NETMASK= 192.168.152.0
GATEWAY=192.168.152.2
DNS1=8.8.8.8
yum install nginx
nginx 실행파일찾기 :
find / -name nginx
netstat -anlp
ifconfig
nginx를 실행시켜서 웹서버환경으로 만든 후
find / -name nginx 입력
cd /usr/share/nginx/html
/usr/share/nginx/html -> 루트파일경로
mkdir sw
cd sw
mkdir test
cd test
touch abc.txt
vi /usr/share/nginx/html/sw/test/abc.txt
수정 후
ip주소에
192.168.152.107/sw/test/abc.txt 를 치면
abc.txt에 입력한 내용이 화면이 뜨면 확인
포트포워드 방식
윈도우컴퓨터의 ip주소를 먼저 찾아서