티스토리 뷰
클라우드 컴퓨팅을 사용하는 이유
- 클라우드 컴퓨팅: 인터넷을 통한 리소스 관리
- 관심사를 분리하여 서비스 제공자가 집중해야할 대상에 집중하게 한다.
- (서버실, 데이터센터를 이용할 경우)리소스를 관리하고 웹 환경을 만들기 위해서 관리할 대상이 많은데 이것을 클라우드 컴퓨팅 서비스를 사용함으로써 데이터를 원하는 형태로 가공하여 전달하는 것에 집중하게 한다.
네트워크
- 통신망: 노드와 노드를 연결하는 링크들로 구성된 시스템
- 노드: IP를 가지고 통신할 수 있는 대상(인스턴스, 네트워크 장비 등등)
OSI 7 Layer
- 네트워크 통신과정을 단계로 나눈 것이다. 문제 발생시 어떤 레이어에서 문제가 발생했는지 찾기 수월해진다.
통신과정 3단계
- PingCheck
- IP정보만으로 서버에 요청 가능한지를 확인
- Ping은 ICMP라는 프로토콜을 사용
- TCP가 아니라 포트번호가 없음
- RTT(Round Trip Time)으로 한 패킷의 왕복시간을 체크할 수 있다. 오래걸릴 경우 어느 구간에서 오래걸리는지 확인해야 한다.
- PortCheck
- 서비스의 정상 구동 여부를 확인
- 소켓은 통신 접속점, 소켓도 파일이다.
- 소켓의 5가지 정보: socket descriptor, local IP, local Port, remote IP, remote Port
- HttpCheck
- HTTP Status code 를 기반으로 상세하게 이상유무 체크
용어정리
TCP(Transmission Control Protocol)
- 전송을 제어하는 프로토콜
- 3 handshaking으로 연결
- 4 handshaking으로 연결해제
SSH(Secure Shell)
- 보안을 중시한 프로토콜
- 암호화되어 통신됨 (telnet은 암호화되어 있지 않음)
- 원격 서버에서 ssh 접속을 하려면,
- 22번 tcp 포트가 방화벽에서 열려있어야 한다.
- ssh 서버 프로그램이 설치 및 구동되어야 한다.
- ssh 클라이언트가 필요하다
- ⇒ AWS를 사용시에는 해당 내용이 기본적으로 셋팅되어 있어 ssh 연결만 하면 된다.
Port 번호
- 서버에 매칭되어 있는 번호일 뿐이다.
- 논리적 구분점
- ssh: 22번 포트, 웹: 80번 포트 를 기본으로 사용
터미널 명령어들
- 서버의 공인 IP 확인:
curl wgetip.com
- RTT 확인:
traceroute google.com
AWS 배포하기
- aws에서 인스턴스 생성후 키를 발급받아 저장한다.
- 로컬에서 키가 있는 폴더로 이동하여,
$ chmod 400 [파일이_저장되어_있는_pem키파일명]
$ ssh -i [pem파일명] ubuntu@[server_IP]
- 로컬에서 ssh를 통해 우분투 서버에 접속하여,
- 적당한 디렉토리를 만든다(urs에 만듦)
- 배포할 코드가 있는 깃을 클론받는다.
./gradlew clean build
를 통해 불필요한 정보를 제외하고 빌드한다.find ./* -name "*jar"
명령어로 jar 파일을 찾는다.sudo java -jar -Dserver.port=80 [jar파일이름] &
으로 해당 jar파일을 실행시켜 서버에 띄운다. (&
옵션은 명령어를 백그라운드에서 실행시키게 한다. 따라서 터미널을 꺼도 서버는 백그라운드에서 실행된다.)
과제
✔️과제에 대한 답변은 틀린내용이 다수 있을 수 있습니다.
1. 브라우저에서 google.com 를 요청할 때 통신과정?
- google.com을 주소창에 입력하면 로컬에 캐시된 DNS를 확인하여 ip 주소를 찾는다. 없다면 정적 설정정보를 찾고 그래도 없다면 DNS 서버에 요청하여 ip주소를 알아낸다.
- 서버에 request를 보내기 위한 정보를 만든다. http 프로토콜을 사용한 데이터 형식으로 request 요청을 한다. http 메소드로 구분되며, header와 body로 구성되어 정보를 담는다.
- ssh 통신이 이루어 진다. 3handshaking으로 서버와의 연결상태를 점검하여 연결을 한 후 정보를 보낸다. 기본 포트번호는 80으로 설정되어 있다.
- 서버에서 request 에 맞는 response를 받아서 화면에 그려준다. 브라우저는 주로 html 파일을 그리게 되는데, 서버측에서 온전한 html을 보내주는 경우를 서버사이드렌더링, 기본 html에 json형태의 자료정보를 보내주어 js가 DOM을 변경하여 그려주는 방식을 클라이언트사이드렌더링 이라고 한다.
레이어별
- Application layer: 서버에 보낼 정보를 구성한다. http 프로토콜 형식을 주로 사용한다.
- Transport layer: 서버에서 만들어진 정보에 포트번호를 덧붙여서 서비스를 구분한다. TCP 통신이 이루어진다.
- Internet layer: IP 주소를 식별자로 서버를 구분한다. IP 주소를 찾기 위해서는 라우터가 필요하고 경로를 찾기 위한 과정을 라우팅이라고 한다.
- Network Interface layer: MAC 주소 테이블로 찾아갈 하드웨어 장치를 구분한다. 각 하드웨어는 전기신호를 아날로그, 아날로그 신호를 전기신호로 변경해주는 작업을 해준다.
2. DDos 공격에는 어떻게 대응?
Dos, DDos 의 차이점
- Dos, DDos 둘다 시스템을 악의적으로 공격하여 자원의 부족상태를 일으켜 정상적인 기능을 못하도록 하는 공격이다.
- Dos 는 공격자 PC에서 악의성 패킷을 보낸다. 서버는 해당 주소를 차단하여 공격을 막는다.
- DDos(분산 서비스 거부 공격:Distributed Denial of Service)는 여러 PC를 이용하여 공격하는 방식이다. 예를들어, 여러 PC에게 바이러스를 침투시켜 원격조종을 통해 여러대의 PC가 공격을 하는 방식이 있다. 하나의 주소가 아닌 여러 주소에서 공격이 들어오기 때문에 주소 차단으로 공격을 막기 어렵다.
DDos 공격에 대응
- in-line 대응과 out-of-path 대응으로 나뉘어진다. 대부분 in-line 대응을 많이 사용한다. inline에서는 하나의 장비가 탐지와 대응을 하고, out-of-path 방식에서는 2개의 장비로 탐지와 대응 역할으 ㄹ나눈다.
- 클라이언트에서 서버에 요청을 바로 보내는 것이 아니라 중간에 탐지할 수 있는 장치를 두어 이상 요청이 들어온 경우 차단한다. 배스천 호스트를 운영하는 것도 하나의 대응책이 될 수 있는 듯 하다.
참고
https://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?seq=29907
3. 현재 서버에서 몇개의 연결까지 가능?
서버는 서비스에 하나의 포트번호를 오픈해두고 사용자와 연결을 맺는다. 소켓은 IP와 포트번호를 활용한다. 하나의 EC2 서버를 띄웠다면 하나의 IP 주소를 갖기 때문에 포트번호의 최대수만큼 연결이 가능하다. 포트의 개수는 65536개로 2의 16승이다. 최대로 가능한 연결은 65536개 이다.
ssh를 연결하는 하나의 포트 22번에는 여러개의 소켓연결이 일어날 수 있다. 서버에서는 똑같이 22번포트이지만 13000번, 52934번 포트등 클라이언트의 포트는 다를 수 있다. 실습 예시로도 하나의 클라이언트만 연결될 수 있는 것이 아니라 bastion 서버 등 여러 클라이언트가 연결가능하다. 따라서 최대로 가능한 연결은 65536개가 넘는다.
- 자바에서 동시 생성 가능한 스레드 수는 max user processes를 따라간다.
- 자바에서 소켓통신(http api, jdbc 커넥션)은 open file 옵션을 따라간다.
- https://woowabros.github.io/experience/2018/04/17/linux-maxuserprocess-openfiles.html
4. 생성한 EC2의 스토리지 용량을 재부팅 없이 늘리려면?
- 다중연결을 활성화시키고, 인스턴스에 연결된 볼륨을 늘리면 된다.
- https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ebs-volumes-multi.html
5. 진행하면서 어려운 점
- js 파일에서 baseurl 설정이 어떻게 되는지 모르겠다.(기존에는 localhost:8080으로 진행했는데, 웹에 띄우니 상대경로도 이상하게 잡혀서 강제로 IP주소를 하드코딩 해주어야 했다.)
- bastion이 어떻게 동작하는지 잘 이해가 안간다ㅠㅠ 더불어 서버 보안 설정으로 어떻게 동작할 수 있는지 잘 모르겠다.
- 키 관련하여 어디에 어떤 키를 설정하는 건지 이해하기가 어려웠다.
참고
- 소켓
- 우아한테크코스 수업
'우아한테크코스 > 레벨2' 카테고리의 다른 글
[수업] E2E 테스트, 인증과 인가 (0) | 2021.05.19 |
---|---|
[수업 & 과제] 배포인프라 - 2. 운영 (0) | 2021.05.19 |
모의 면접 후기(레벨1 학습로그 기반) (0) | 2021.04.24 |
[수업] REST API 설계 (0) | 2021.04.23 |
[수업] Spring JDBC, Spring Core (0) | 2021.04.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 회고
- 학습로그
- 카카오
- Spring
- 알고리즘
- javascript
- JPA
- JS
- TIL
- 월간회고
- python
- CS
- Transaction
- 인증
- TCP/IP
- 글쓰기미션
- 운영체제
- 객체지향
- 우테코수업
- java
- 개발공부일지
- 마스터즈코스
- OS
- 코드스쿼드
- React
- DB
- 내부코드
- 모의면접준비
- 네트워크
- 우아한테크코스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함