이전에 Soyu 프로젝트를 구축할 당시에는 급하게 배포하느라 전반적인 지식이 부족했다.
AWS의 EC2의 이해와 리눅스의 전반적인 명령어와 학습을 먼저 진행했다.
아래는 기본적인 리눅스와 네트워크, 프로토컬, 클라우드, Dev/ops 에 대한 정리입니다.
'셸(Shell)'은 사용자의 명령어를 해석하고 운영체제가 알아들을 수 있게 지시해주는 것으로, 사용자와 커널을 이어주는 것이다.
즉 shell 에 명령어를 입력하는 것이다.
AWS 는 Linux 운영체제를 기반으로 한다.
PaaS 물리적 컴퓨터에 플랫폼까지 얹어서 제공해주는 서비스
→ 내가 작성한 코드만 올리고 나머지 설정만 살짝 해주면 된다 !
내가 보통 사용하는 EC2 는 IaaS 로 (직접 모든 환경을 구축한다)
물리적인 컴퓨터를 덩그러니 한 대 제공해주는것이다 !
서킷 스위칭은 하나의 회선을 할당받아 데이터를 주고받는 방식
패킷 스위칭은 송신 측에서 모든 메시지를 일정한 크기의 패킷으로 분해해서 전송하고 수신 측에서 이를 원래의 메시지로 조립하는 방식이다
즉 수신측과 송신측 모두 모아주는 공유기의 개념이 존재한다 ! (라우터)
→ 이 경우 하나의 회선으로 이동하기 때문에
헤더에 목적지를 적어두고 혼선없이 이동이 가능하다
또한 헤더에 순서를 적어두어 재조립을 가능하게 한다 !
패킷으로 잘게 자르는 이유는 A가 1GB 데이터를 보내는 경우에 B C 는 wait 이 걸리게 된다 !
이러한 경우에 동시에 데이터를 전송할수 있도록 패킷으로 잘라서 이동한다 !
이는 비용적 이득도 있다 !
이 과정에서 목적지의 번호가 같다면 혼선이 존재하기 때문에 이때 나온것이 IPv4, IPv6 이다
포트번호는 내가 현재 피파, 롤, 네이버 검색을 사용하고 있다고 했을때 어떤 곳에서 request 를 받고 response 보내는지에 대한 주소이다.
최종 목적지 이동을 위해 가장 가까운 라우터로 데이터를 전달한다 !
로컬 컴퓨터에서 클라우드 컴퓨터에 원격으로 접속한다
클라우드 컴퓨터는 모든 포트가 차단된 방화벽을 가지고 있다.
미리 정의된 보안 규칙에 기반을 둔 인바운드 아웃바운드 네트워크 모니터링 하고 제어하는 네트워크 보안 시스템입니다.
외부 SSH 통해서 들어오는 경우는 22 포트를 통해서 들어온다
따라서 22 포트 인바운드는 초기에 열어둬야한다.
여기서 접속시 환경은 CLI이다 !
SSH에 접속하기 위해 등록했던 private 키는 다음과 같다
대칭키 암호화 방식을 사용하고 있다
이는 암호화와 복호화에 같은 암호키를 사용하고 있다.
따라서 송신측에서 미리 수신측에게 키를 공유를 해놓는다 !
RSA → 공개키 암호화 방식
수신측의 공개키를 통해서 암호화를 진행 해놓으면 !
이를 복호화 하는것은 오직 수신측에서만 가능하다.
이렇게 서로 어떤 데이터를 변조해서 보내고 복호화해서 풀지에 대한 약속을 정하는것이 프로토컬이다 !
프로토콜은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고받는 양식과 규칙 체계이다 !
EC2 디렉터리 (ls -al) 을 사용하면 .ssh 폴더에 들어가서 다시 목록을 보면 authorized_keys 파일이 있다 !
이는 클라이언트의 공개키가 들어있다 !
따라서 비밀키를 가지고 접근을 시도하면 ! 공개키로 복호화 해보며 접근 권한이 있는지 확인한다 .\
확인이 되면 양쪽에 세션을 생성해서 자유로운 통신을 진행한다
절대 경로 / 있이 작성한다
맨 처음 root 에서 시작
상대 경로 / 없이 작성한다
현재 나의 위치에서 시작
온프레미스
→ 클라우드가 아닌 내부의 자체적 DB 센터를 두는것 !
초기 구축 비용이 많이 드나 보안성이 높은게 특징이다 !
퍼블릭 클라우드
→ 기업에서 제공하는 클라우드를 사용한다
이 경우 Iaas, Saas, Paas → 선택적으로 사용이 가능하고
고객, 회사, 외부 기업 모두 접근이 가능한 경우이다 !
또한 오토 스케일링이 능동적으로 가능하다는 장점이 있다.
프라이빗 클라우드
→ 특정 기업에게만 제공한다 !
클라우드 장점
트래픽의 편차가 큰 서비스,
외부에 백업을 해놓고 싶은 경우,
빠른 서비스와 요구사항의 변동이 잦은 시스템
-> 그렇다면 내가 이번 프로젝트에서 사용할 클라우드는?
제공받은 EC2는 퍼블릭 클라우드중 Iaas로 리눅스 컴퓨터 그 자체를 제공받았다.
해당 EC2의 기본 설정부터 서비스 탑재까지 모두 직접 진행해야한다.
웹 서버란 클라이언트의 브라우저가 보내온 HTTP 요청을 받아 웹 콘텐트(HTML, CSS 등)을 응답으로 반화하거나 다른 서버 사이드 프로그램을 호출해주는 기능을 한다 !
데이터베이스 서버 (Mysql, redis, Nosql)
인프라
하드웨어 네트워크 OS 미들웨어 애플리케이션의 구성 정보를 관리하고 적절한 상태로 유지하는 작업
계속적 버전업을 의미한다 !
폭포수, 나선형, 애자일 같은 개발 방법을 도입해 개발후 업로드 서버에 코드를 지속적으로 변경시켜준다 !
보통 webHook을 연결해 commit 이 있을때 진행한다 !
대표적인 Tool 로는 Jenkins 가 존재한다 .
트래픽이 계속해서 시간마다 날마다 변경된다면 !
낭비와 부족함이 생길수 있다 !
따라서 기준 트래픽이 넘으면 scale out 을 통해 서버 증설 or 서버 감소를 진행할수 있으며
대표적인 Tool 로는 Kubernatis 가 존재한다 .
-> 이번에는 어떤 Dev/Ops tool 을 사용해서 구축할것인가 ?
클라우드와 인프라, 네트워크의 전반지식 없이 그냥 Kubernatis를 사용하는것은 학습적으로도 효율성 측면에서도 별로인것으로 생각한다.
CD 까지 학습하기 보다는 CI 툴과 Docker compose 를 활용한 무중단 배포까지 구축해보고자 한다.