Nomad Kim 2021. 3. 29. 14:41

1. 왜 배포(deploy) 가 중요한가요? 웹개발자가 알아야 하는 이유가 무엇일까요?

4 advantages of software deployment.

1) You’ve got your time saved.

  The process of installation, uninstallation and updates after debugging on each computer can take enormous amounts of time when performed directly. Software deployment allows the fast roll-out and installation across all the devices that are planned to work with it with no additional training needed.

2) You can be sure of your computers’ security.

  The deployment includes permission sets configuration, that ensures different, strictly limited access rights for the sensitive or mission-critical groups of computers. This means securing them, the whole software and the information it’s based on. The same things can be done to critical or sensitive task groups.

3) You can monitor the actions of your software users.

  Software deployment allows us to gain insights into what exactly are users doing around the software. This allows detecting possible pitfalls and eliminating errors and performance issues on time. You can also run an analysis of the historical user’s actions and apply the conclusions in your future software development process.

4) You’ve got your software updated effectively.

  While personally searching for each version of any software, installed on his devices, and manually initiating the download, one can quickly get extremely irritated. Why not avoid this feeling entrusting the process to an automated assistant? Software deployment performs real-time monitoring, accurate updates, maintenance and even uninstall in case of major issue detection.

2. 사용해 본 클라우드 인프라 서비스에 대해 소개해 주세요

  • S3: 데이터를 저장하거나 추출하게 해 주는 온라인 스토리지 웹 서비스이다. 즉 파일 서버의 역할을 하는 서비스이다. 하나의 저장 공간을 구성하고 그 공간에 데이터를 자유롭게 업로드, 다운로드 할 수 있다. HTTP 프로토콜로 파일에 접근할 수 있다. 일반적인 시스템과는 다르게 파일(또는 데이터) 이름인 key 와 파일 자체인 value 로 구분되는 객체 형태로 파일을 저장한다.
  • EC2: 아마존 웹 서비스에서 제공하는 서비스로 안전하고 크기 조정이 가능한 컴퓨팅 파워를 클라우드에서 제공하는 웹 서비스이다. 개발자가 더 쉽게 웹 규모의 클라우드 컴퓨팅 작업을 할 수 있도록 설계되었다. EC2는 가상의 컴퓨터를 빌려주는 서비스라고 생각하면 이해하기가 쉽다. 비록 가상이지만 실제 컴퓨터와 동일하게 사용할 수 있다. 가상 컴퓨터에 운영체제를 설치하고 프로그램들을 설치하여 서버를 구축할 수 있다. EC2에서 말하는 인스턴스라는 것은 생성된 1대의 가상 컴퓨터를 의미한다.
  • RDS: RDB를 간편하게 운영하고 설정하고 확장하게 해 주는 서비스이다.
    • RDB? 데이터 항목 간에 사전 정의된 관계가 있을 때 그러한 데이터 항목들의 모음. 이 모델은 데이터를 행과 열을 이루는 하나 이상의 테이블(또는 관계)로 정리하며, 고유 키(Primary key)가 각 행을 식별한다. 일반적으로 각 테이블/관계는 하나의 엔티티 타입(고객이나 제품과 같은)을 대표한다. 행은 그 엔티티 종류의 인스턴스(예: “Lee” 등)를 대표하며 컬럼은 그 인스턴스의 속성이 되는 값들(예: 주소나 가격)을 대표한다.
  • CloudFront: .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스입니다. CloudFront는 AWS 백본 네트워크를 통해 콘텐츠를 가장 효과적으로 서비스할 수 있는 엣지로 각 사용자 요청을 라우팅하여 콘텐츠 배포 속도를 높입니다. 일반적으로 CloudFront 엣지가 최종 사용자에게 가장 빨리 제공합니다. AWS 네트워크를 사용하면 사용자의 요청이 반드시 통과해야 하는 네트워크의 수가 줄어들어 성능이 향상됩니다. 파일의 첫 바이트를 로드하는 데 걸리는 지연 시간이 줄어들고 데이터 전송 속도가 빨라집니다. 또한 파일(객체라고도 함)의 사본이 전 세계 여러 엣지 로케이션에 유지(또는 캐시)되므로 안정성과 가용성이 향상됩니다.
  • Route53: 가용성과 확장성이 우수한 DNS(도메인 이름 시스템) 웹 서비스입니다. Route 53을 사용하여 세 가지 주요 기능, 즉 도메인 등록, DNS 라우팅, 상태 확인을 조합하여 실행할 수 있습니다. 차례대로,
    • 도메인등록: 웹사이트에는 example.com 같은 이름이 필요합니다. Route 53을 통해 도메인 이름.이라고 하는 웹사이트 또는 웹 애플리케이션의 이름을 등록할 수 있습니다.  
    • DNS 라우팅: 사용자가 웹 브라우저를 열어 주소 표시줄에 도메인 이름(example.com) 또는 하위 도메인 이름(acme.example.com)을 입력한 경우 Route 53은 브라우저를 웹 사이트 또는 웹 애플리케이션에 연결하도록 돕습니다.
    • 상태 확인: 인터넷을 통해 웹 서버 같은 리소스로 자동화된 요청을 보내어 접근 및 사용이 가능하고 정상 작동 중인지 확인합니다. 리소스를 사용할 수 없게 될 때 알림을 수신하고 비정상 리소스가 아닌 다른 곳으로 인터넷 트래픽을 라우팅할 수도 있습니다.
  • ELB : 시스템에 가해지는 부하를 여러대의 시스템으로 분산해서 규모있는 시스템을 만들 수 있도록 해주는 단일 진입점

3. AWS S3, EC2 서비스 블록에 대해 설명해 주세요

2번에 있음.

4. DNS에 대해 설명해 주세요

Domain Name System은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환합니다. 

DNS(Domain Name System)는 인터넷 전화번호부입니다. 사람은 nytimes.com 또는 espn.com과 같은 도메인 이름을 통해 온라인으로 정보에 액세스합니다. 웹 브라우저는 인터넷 프로토콜(IP) 주소를 통해 상호작용합니다. DNS는 브라우저가 인터넷 자원을 로드할 수 있도록 도메인 이름을 IP 주소로 변환합니다.

 

참고: www.cloudflare.com/ko-kr/learning/dns/what-is-dns/

5. 본인이 가장 즐겨 사용하는 클라우드 서비스 블록에 대해 설명해 주세요

2번에 있음.

6. CI/CD에 대해 들어보셨나요? 소개해 주세요

CI(Continuous Integration)/CD(Continuous Deployment/delivery)

애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법입니다. CI/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포입니다. CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제(일명 "인테그레이션 헬(integration hell)")을 해결하기 위한 솔루션입니다.

특히, CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공합니다. 이러한 구축 사례를 일반적으로 "CI/CD 파이프라인"이라 부르며 개발 및 운영팀의 애자일 방식 협력을 통해 지원됩니다.

 

CI/CD 파이프라인

  • 빌드(Build) - 애플리케이션을 컴파일하는 단계
  • 테스트(Test) - 코드를 테스트하는 단계. 이 단계를 자동화하여 시간과 수고를 줄일 수 있습니다.
  • 릴리스(Release) - 애플리케이션을 리포지토리에 제공하는 단계
  • 배포(Deploy) - 코드를 프로덕션에 배포하는 단계
  • 검증 및 컴플라이언스(Validation & compliance) - 빌드 검증 단계는 해당 조직의 필요에 따라 결정됩니다. Clair와 같은 이미지 보안 스캔 툴을 사용하여 알려진 취약점(CVE)과 비교하는 방법으로 이미지의 품질을 보장할 수 있습니다.

 

참고: www.redhat.com/ko/topics/devops/what-is-ci-cd ` nomadkim880901.tistory.com/434

7. monolithic vs micro service architecture

1) monolithic

2) micro service architecture

 

참고: www.geeksforgeeks.org/monolithic-vs-microservices-architecture/