본문 바로가기
Study/우아한 테크 캠프 Pro

우아한 테크 캠프 PRO, 4주차 그럴듯한 서비스 만들기

반응형

우아한 테크 캠프 PRO, 4주차 과제 - 그럴듯한 서비스 만들기


왜 Public Cloud인가?!

  • 관심사를 분리하여 우리가 집중해야할 대상에 더욱 더 집중하기 위해서
  • 즉 비즈니스(사업) 로직을 구현하는데 온 힘을 쏟아야한다!! 그러기 위한 환경을 구축해야한다.



기본 개념 정리

  • 온프로미스 환경
    • 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식
  • Public Cloud 환경
    • 서드파티 공급업체(클라우드 제공 업체)가 사용자에게 일련의 서비스를 제공하는 클라우드 환경
  • Object Storage
    • 논리적인 스토리지
    • 어플리케이션단에서 동작
    • 오직 키값과 데이터만을 저장하여 폴더와 블록에 종속되지 않고 단지 사용자에게 그렇게 보이게 해주기만 한다.
    • 확장성과 속도, 저렴한 가격이 이점
    • RESTFul Protocol을 이용하여 Get, Post로 요청을 하면 파일을 내려주기 떄문에 그이상 알필요가 없다. ( 효율적으로 관리 가능 )
    • But 파일의 수정이 불가능, 트랜잭션을 통해 일관성을 유지하기가 힘들기 때문에 덮어쓰는 방법을 이용, 이미지나 동영상 같이 수정이 잘 일어나지 않는 정적인 데이터를 호스팅할때 좋다.
  • 파일 스토리지
    • 폴더와 파일로 이루어지는 계층구조를 갖는 스토리지(저장소)
    • 각 파일은 폴더에 종속, 폴더는 다른 폴더에 종속될 수 있다.
    • OS단에서 동작
  • 블록 스토리지
    • 정해진 블록안에 데이터를 저장한다.
    • 파티션을 나누고 그 공간안에서 사용한다.
    • OS단에서 동작



AWS 네트워크 망 개념 정리

  • 통신망
    • 노드들과 이들 노드들을 연결하는 링크들로 구성된 하나의 시스템
    • 하나의 서브넷을 하나의 망이라고 할 수 있다.
  • 노드
    • IP로 식별할 수 있는 대상
  • 링크
    • 물리적인 회선
  • 서브넷
    • 하나의 네트워크가 분할되어 나눠진 작은 네트워크 단
  • AWS의 망구성
    • Region: 네트워크 망이 구성될 국가 / 지역
    • AZ(Availability Zone) : 데이터센터
    • VPC: 하나의 서비스를 위한 네트워크를 다루는 단위
    • 서브넷: VPC에 설정한 네트워크 대역을 더 세부적으로 나눈 네트워크
    • 라우팅 테이블: 연결된 서브넷이 다른 서브넷 혹은 외부망과 통신하기 위한 정보를 보유
    • 인터넷 게이트 웨이: 외부망과의 연결을 담당



OSI 7계층 간략 정리

  • 1계층 Physical Layer(Bit)
    • 결국 모든 컴퓨터는 0과1로 통신한다.
    • 0과1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려보내고(encoding)

      아날로그 신호가 들어오면 0과1의 나열로 해석(decoding)하여 물리적으로 연결된 두 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈
    • 물리적인 하드웨어인 회로에 구현
    • 단순히 전기적인 신호로 변환하여 주고받는 기능만 할뿐
    • 케이블, 허브, 리피터
  • 2계층 Data-Link Layer(Frame)
    • 물리적 주소를 이용해 노드간 연결
    • 브릿지, L2 스위치
    • 브릿지나 스위치를 통해 맥주소를 가지고 물리계층에서 받은 정보를 전달
    • MAC address

      네트워크 카드가 만들어 질때 물리적으로 할당 받는 주소 값
  • 3계층 Network Layer(Packet)
    • 논리적 주소로 최초 출발지부터 최종 목적지까지의 최적경로 결정
    • 라우터, L3 스위치
    • 로컬 또는 원격 장비간의 메시지
    • IPv4, IPv6, ICMP
  • 4계층 Transport Layer(Segment)
    • 포트번호를 이용해 서비스를 구분하고 데이터의 전송을 담당
    • L4 스위치, 소프트웨어 프로세스 간의 통신
    • 양 끝단(End to end)의 사용자들이 신뢰성있는 데이터를 주고 받을 수 있도록 해주어,

      상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다.
    • TCP, UDP
  • 5계층 Session Layer
    • 데이터가 통신하기 위한 논리적인 연결
    • 4계층에서도 연결을 맺고 종료할 수 있기 때문에 어느 계층에서 통신이 끊어 졋나 판단하기는 한계가 있다.
    • 응용 프로그램간 세션 수립.유지.종료
    • SAP, SDP
  • 6계층 Presentation Layer
    • 데이터의 표현(확장자, 연결, 압축, 암호화, 변환)
    • 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어준다.
    • 해당 데이터가 TEXT인지, 그림인지, GIF인지, JPG인지의 구분 등이 표현 계층의 몫이다.
    • SSL, MIME, redirector
  • 7계층 Application Layer (응용계층)
    • 사용자에게 인터페이스 제공, 원본데이터 생성
    • HTTP(80), HTTPS(443), SMTP(25), FTP(20,21), Telnet(23), SSH(22)



L4 vs L7 로드 밸런싱

  • 갑자기 궁금..
  • L4(Transport Layer)
    • Round Robin 방식을 사용하며, 네트워크 계층(IP)이나 트랜스포트 계층(TCP, UDP)의 정보를 바탕으로 로드를 분산시킨다.
    • IP, PORT, Session 기반으로 로드밸런싱
    • 데이터 안을 들여다보지 않고 패킷레벨에서만 로드를 분산하기 때문에, 속도가 빠르고 효율이 높음
    • Round Robin: 순차방식, 각 서버에 균등하게 분배하는 방식, 서버 커넥션 수나, 응답시간에 상관없이 모든 서버를 동일하게 처리
  • L7(Application Layer)
    • 어플리케이션 계층(HTTP, FTP…)에서 로드를 분산하기 때문에
    • HTTP 헤더, 쿠키 등과 같은 사용자의 요구를 청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능
    • 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배하는 것이 가능 => 섬세한 라우팅이 가능



서브네팅

  • IPv4 서브넷 마스크
    • 서브넷: 부분 네트워크
    • 마스크: AND 연산 ( 특정부분만 그대로 두고싶으면 1로 0으로 변환하고 싶은 비트를 0으로 )
    • 하나의 IP 패킷이 들어올때 255개(0~254)의 구역이 들어올 수 있구나를 안다.
    • 구역을 나누고 싶다. <<<< 이때 쓰는 것이 서브넷 마스크
      • A 클래스는 XXXX. 0000. 0000. 0000
      • B 클래스는 XXXX. XXXX. 0000. 0000
      • C 클래스는 XXXX. XXXX. XXXX. 0000
      • 서브넷 255.255.255.0 >> 아 대표망이 255개 구나 ( 기본 서브넷 마스크 )
      • 255.255.255.128 >> 대표망이 2개 브로드캐스팅 주소가 된다.
      • 마지막 4번째 블록을 어떻게 쓰느냐에 따라서 브로드캐스팅이 분할이된다.
    • 계산해보기
      • (11000000)192로 쓰면 4구역
      • (11100000)224 -> 2^3 = 8구역
      • (11110000)240 -> 2^4 = 16구역
      • 대표주소가 뭐냐 나눠지는 첫 주소
      • 브로드캐스팅 주소가 뭐냐 마지막 주소
      • 10개로 분할하고 싶다 -> 16개로 분할후 6개를 안쓰는거다



왜 컨테이너를 써야할까?

  • 기존에 OS 가상화 방식을 사용하더라도 부팅 + 각종 OS 설정 + 어플리케이션 코드 옮겨서 빌드한 후 실행등 반복적인 작업..
  • 또한 서비스가 점차 확장되면서 기존에 사용하던 서버와 새로 구축한 서버간에 설정의 차이가 발생하고, 관리자의 인적요소에도 영향을 받게된다.
  • 컨테이너 단위로 사고하여, 적재하니 다른 컨테이너에 영향을 주지않는다 이를 통해 프로세스를 관리한다.
    • 애플리케이션의 개발과 배포가 편해지며, 여러 애플리케이션의 독립성과 확장성이 높아진다



Docker 네트워크 구조

  • Docker에 대해서는 따로 기술하겠습니다.
  • 컨테이너를 생성하면 네트워크 인터페이스도 하나 생성된다. ( 독자적인 파일시스템이 생성되기 때문에, mac 주소와 prviate IP도 부여 받게 된다. )
  • 이렇게 생성된 가상 네트워크 인터페이스는 실제로 외부와 통신할 수 있으며, veth로 시작하는 이름을 가진다.
  • 컨테이너별로 생성된 veth 인터페이스는 컨테이너 내부 eth0 인터페이스와 연결 ( 가상 이더넷 )
  • 외부와의 통신을 위해 도커에서는 docker0 브릿지를 생성하여 관리하게 된다.
    • Docker host 내에 배포된 container 들 사이에는 각자 할당받은 Private IP를 이용해 자유롭게 통신이 가능하다.
  • veth -> eth0(가상 이더넷) -> docker0 bridge -> host 내부 eth0



포트포워딩

  • Docker container는 Private IP를 부여 받고, Docker host 내 bridge 형태로 연결되어 있기 때문에 직접적으로 외부와의 통신은 불가능한 상태
  • 각 컨테이너의 IP를 확인하기가 어렵다.
  • 이를 해결하고자 포트포워딩을 사용한다.
  • 외부와 통신을 위해 각 컨테이너에 외부로 노출할 Port를 지정
    docker run -p 8080:80
    • docker host의 8080 port로 요청이 들어오면 container의 80포트로 포워딩 ( -p 옵션 )



미션 진행 회고

  • 네트워크는 하나 공부하면 10개의 의문으로 증식하는 느낌..
  • Docker, Network 공부 필요
728x90
반응형