문제 풀이 코드

function solution(n, lost, reserve) {
    var answer = 0;
    var duplicatedStudent = []
    for (var i = 0; i < lost.length; i++){
        if (reserve.includes(lost[i])){
            duplicatedStudent.push(lost[i]);  // #1
        }
    }

    for (var student of duplicatedStudent){
        var reserveIdx = reserve.indexOf(student);  // #2
        reserve.splice(reserveIdx,1);
        var lostIdx = lost.indexOf(student);
        lost.splice(lostIdx,1);
    }

    answer = n - lost.length;  // #3

    for (var lostedStudent of lost){
        var canReserve = false;
        for (var i of [-1,1]){
            if (reserve.includes(lostedStudent + i)){  // #4
                const idx = reserve.indexOf(lostedStudent + i);
                reserve.splice(idx,1);
                answer += 1;
                break;
            }
        }
    }
    return answer;
}

#1

체육복이 도난 당했으면서, 여분의 체육복이 있는 사람 리스트를 저장해 둔다.

#2

미리 저장해둔 체육복이 도난 당했으면서, 여분의 체육복이 있는 사람을 lost, reserve 에서 제거한다.

#3

체육 수업을 들을 수 있는 사람 = 총 인원 - 체육복 잃어버린 사람
으로 만들어두고 친구에게 빌린 사람을 하나씩 추가한다.

#4

앞 번호 뒷 번호를 검사하면서 여분의 체육복이 있는 사람에게 체육복을 빌린다.

문제 풀이 코드

function solution(genres, plays) {
    var answer = [];
    var genreDict = {};
    for (var i = 0; i < genres.length; i++){
        if (!(genres[i] in genreDict)){
            genreDict[genres[i]] = [];
        }
        genreDict[genres[i]].push([i, plays[i]]);  // #1
    }

    var genreOrder = Object.keys(genreDict).sort(function(a,b){ // #2
        var aSum = genreDict[a].map( x => x[1]).reduce(function(sum,currValue){
            return sum + currValue;
        }, 0);

        var bSum = genreDict[b].map( x => x[1]).reduce(function(sum,currValue){
            return sum + currValue;
        }, 0);
        return bSum - aSum;
    });

    for (var genre of genreOrder){  // #3
        genreDict[genre].sort(function(a,b){
            return b[1]- a[1];
        });
    }

    for (var genre of genreOrder){  // #4
        try{
            answer.push(genreDict[genre][0][0]);
            answer.push(genreDict[genre][1][0]);
        }catch(error){
            continue;
        }
    }
    return answer;
}

#1

{"장르" : [[인덱스, 재생 횟수]]} 데이터 구조를 가지도록 전처리 했다.

#2

장르 순서를 가진 genreOrder 배열을 만들었다..

#3

같은 장르 간의 정렬을 했다.

#4

각 장르별 가장 재생 수가 많은 두 노래의 인덱스를 answer에 추가했다.
empty array 오류가 났기 때문에 try catch 문으로 처리했다.

문제 풀이 코드

function solution(clothes) {
    var answer = 1;
    var clothesDict = {}
    for (var i = 0; i < clothes.length; i++){ 
        if (clothes[i][1] in clothesDict){  // #1
            clothesDict[clothes[i][1]] += 1;
        }else{
            clothesDict[clothes[i][1]] = 1;
        }
    }
    for (var key in clothesDict){  // #2
        answer *= clothesDict[key] + 1
    }
    return answer - 1;  // #3
}

#1

만약 clothesDict 에 없는 key 값이 들어왔다면 1로 초기화 시키고, 존재한다면 1 을 더해줘 해당 의상 종류가 몇개가 있는지 저장합니다.

#2

의상 갯수 + 입지 않았을 때의 경우를 clothesDict[key] + 1로 표현했다.

#3

아무것도 입지 않았을 경우를 제외하기 위해 1을 빼주었다.

7. 애플리케이션 계층

통신 가능한 프로그램을 만드는 것을 네트워크 프로그래밍이라 하는데, 이를 통해서 자신만의 Application Layer를 만들 수 있다.

데이터에 status code 등의 정보를 헤더에 붙여준다.

 

대표적인 프로토콜로는 HTTP, SMTP, FTP 등이 있다.


6. 표현 계층

표현 계층은 데이터의 구성 방식을 결정한다.

하는 일은 암호화, 복호화, 압축 등이 있다.

 

대표적인 프로토콜로는 JPEG MPEG 등이 있다. JPEG는 이미지를 위해 만들어진 표준 규격이며, MPEG는 멀티미디어를 위해 만들어진 표준 규격이다.


5. 세션 계층 (Session layer)

세션 계층은 양 끝단의 응용 프로세스 연결을 설립 및 해제하기 위해 필요하다.

하는 일은 세션 설정 및 해제, 세션 메세지 전송 등이 있다.

 

대표적인 프로토콜로는 SSH가 있다.


4. 전송 계층 (Transport layer)

전송 계층을 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다.

하는 일은 데이터의 애플리케이션 목적지 식별오류 점검 등이 있다. 

애플리케이션 목적지 식별

해당 데이터가 어떤 애플리케이션에서 사용하는 데이터 인지 판단해서 알맞은 프로그램에 전송한다.

오류 점검

전송 계층은 데이터가 신뢰할 수 있는지 확인 한다고 했다.

데이터가 제대로 도착했는지 확인 하고 오류가 발생하면 데이터를 재전송 하도록 요청한다 (TCP 의 경우)

TCP

연결 지향적이며 만약 데이터에 문제가 있으면 다시 요청을 하기 때문에 신뢰성을 보장한다. (3 Way Handshake를 거쳐 가상 회선을 설립한다.) 참조 링크

UDP

비연결 지향적이며, 데이터에 문제가 있어도 다시 요청을 하지 않는다. 주로 실시간 스트리밍 서비스를 구현할 때 사용된다. 연속성을 보장한다. (여러 절차가 생략되어 있기 때문에 TCP에 비해 속도가 빠르다)


3. 네트워크 계층 (Network layer)

네트워크 계층에서는 최종 목적지 까지 경로를 설정하는 역할을 수행한다. 이때, 경로 설정 작업을 라우팅이라고 한다.

라우팅

Internetwork을 통하여 목적지로 데이터가 전달 될 수 있도록 하는 기능을 말한다.

라우터가 패킷을 목적지까지 전달할 수 있도록 하려면 라우터는 해당 목적지에 대한 경로 정보를 알고 있어야 하며, 이 정보에 따라 패킷을 전달한다.

따라서 라우터들은 목적지에 대한 정보를 가지고 이웃의 라우터들과 정보를 교환하는데, 이때 라우터들끼리 경로 정보를 교환하는 프로토콜을 라우팅 프로토콜이라고 한다. 

 

어느 컴퓨터에게 데이터를 전송할 지 IP주소를 데이터의 헤더에 붙인다.


2. 데이터 링크 계층(Data link layer)

데이터 링크 계층에서는 MAC 주소를 사용하여 신뢰성 있는 정보를 전송한다.

하는 일은 에러 검출, 흐름 제어, Framing등이 있다.

 

🤔MAC(Media Access Control) 주소란?

-> 랜에 사용되는 네트워크 모델인 이더넷의 물리적인 주소로, 컴퓨터 네트워크에서 각각의 기기를 구분하기 위해 사용하는 주소이다. 제조할 때 새겨지기 때문에 물리 주소 라고도 불린다.

에러 검출

에러가 발생 했을 시에 두가지 동작을 할 수 있다.

1. 다시 송신측에게 데이터 재전송을 요청하는 방식

2. 스스로 오류 복구를 하는 방식

-> 해밍코드등의 방식을 이용해 스스로 오류를 복구한다.

 

🤔해밍코드?

-> 자기 정정 부호로써, 오류를 검출해서 1비트의 오류를 수정 할 수있다.

흐름 제어

송신 측이 수신 측의 데이터 처리 속도 보다 훨씬 빠른 속도로 데이터를 보내면 수신측의 버퍼가 매우 길어 지고,

버퍼의 길이는 제한되어 있기 때문에 데이터가 손실 될 것이다.

 

그렇기 때문에 송신측에게 조금 천천히 보내달라고 요청할 수 있다. 이것이 흐름제어다.

 

🤔버퍼(Buffer)?

-> 데이터 흐름의 속도 차이를 조정하기 위해 일시적으로 데이터를 기억하는 장치이다.

Framing

0101 1010 1101 1010 ... 와 같은 데이터의 어디가 시작이고 어디가 끝인지 알아보기 힘들다. 그렇기 때문에 데이터에 헤더(header)와 트레일러(trailer)를 덧붙여서 데이터 프레임을 만든다.

 

데이터 링크 계층의 프로토콜 중에 이더넷이 있는데 이 방식에서는 목적지, 출발지 MAC 주소를 포함한 이더넷 헤더와 트레일러를 붙인다.

 

 


1. 물리 계층(Physical layer)

서버와 클라이언트가 "01100110"이라는 정보를 주고 받으려면 먼저 전기적 신호로 변환을 해야한다.

물리 계층에서는 데이터에 문제가 있는지 확인은 하지 않고, 그저 정보를 전기적 신호로 변환해 송수신을 한다.

 

데이터 전송 장비로는 통신 케이블, 리피터(신호를 증폭시켜줌), 허브(3대 이상의 PC를 연결시킴) 등이 있다.

'Network' 카테고리의 다른 글

[Network] OAuth란?  (0) 2021.04.02
[Network] TCP 3 Way Handshake란?  (0) 2021.04.02

클라우드 컴퓨팅 배포 모델

클라우드 기반 배포

  • 애플리케이션의 모든 부분을 클라우드로 실행
  • 기존 애플리케이션을 클라우드로 마이그레이션함
  • 클라우드에서 새 애플리케이션을 설계 및 빌드함

온프레미스 배포

  • 가상화 및 리소스 관리 도구를 사용하여 리소스를 배포한다.
  • 애플리케이션 관리 및 가상화 기술을 사용하여 리소스 활용도를 높힌다.
  • 프라이빗 클라우드 배포라고도 한다.

하이브리드 배포

  • 클라우드 기반 리소스를 온프레미스 인프라에 연결한다.
  • 클라우드 기반 리소스를 레거시 IT 애플리케이션과 통합한다.

🤔레거시?

(Legacy, 유산)

-> 과거에 남겨진 소스 코드 등 더 이상 쓰이진 않더라도 현재에 영향을 주는 것을 말한다.

 

클라우드 컴퓨팅의 이점

  • 선행 비용가변 비용으로 대체한다.
  • 데이터 센터 운영 및 유지 관리에 비용 투자가 필요없다.
  • 애플리케이션을 배포하기 전에 인프라 용량을 예측할 필요가 없다.
  • 종량 과금제로 인해 요금이 감소된다.

 

Amazon Aurora

  • fully-managed 관계형 데이터 베이스 엔진
  • MySQL과 PostgreSQL과 호환된다.
  • 빠르고 효율적인 복제 작업을 지원한다.
    • Aurora DB 클러스터를 다른 AWS 계정과 공유할 수 있다.

🤔DB Cluster?

(Cluster, 군집)

-> 여러 가용영역에 걸쳐 있는 가상 데이터베이스 스토리지 볼륨이다. 각 가용 영역에는 DB 클러스터 데이터의 복사본이 있다.

    하나 이상의 DB 인스턴스와 해당 DB 인스턴스의 데이터를 관리하는 클러스터 볼륨으로 구성된다.

Amazon DynamoDB

  • fully managed인 완벽한 확장성과 빠른 성능을 제공하는 NoSQL 데이터베이스 서비스 이다.
  • 원하는 양의 데이터를 저장하고 검색할 수 있는 데이터베이스 테이블을 만들 수 있다.

Amazon ElastiCache

  • 인 메모리 데이터 스토어 또는 캐시를 손쉽게 배포, 운영 및 확장할 수 있게 해주는 서비스다.
  • RedisMemcached 메모리 엔진을 지원한다.

Amazon RDS (Relational Database Service)

  • fully managed 관계형 데이터 베이스 엔진이다.
  • 필요할 때 자동 백업을 수행 하거나 자동으로 장애를 감지한다.
  • Aurora, MySQL, MariaDB, PostgreSQL, Oracle, Microsoft SQL Server를 지원한다.
  • 최대 40개의 RDS DB 인스턴스를 가질 수 있다.

Amazon Redshift

  • 페타 바이트(1024 TB)급 클라우드 데이터 웨어하우스(Data Warehouse) 서비스다.
  • 데이터를 추출하고, 변형하여, 적재할 수 있다. (ETL) -> (Extract, Transform, Load)
  • 빠르고 단순하면서도 비용 효율적으로 표준 SQL 및 기존의 비즈니스 인텔리전스(BI) 도구를 사용하여 모든 데이터를 분석할 수 있다.
  • ETL을 통해 뽑아낸 데이터를 DW에 적재하고, BI를 이용하여 분석하는 과정을 거친다.

🤔데이터 웨어하우스

(Data Warehouse, 정보 창고)

-> 하나의 통합된 데이터 저장 공간으로서, 다양한 운영 환경의 시스템들로부터 데이터를 추출, 변환. 통합해서 요약한 데이터베이스

- 데이터베이스가 관련 있는 업무 데이터는 잘 저장하지만, 저장된 데이터를 제대로 활용하지 못하는 것에서 착안했다.

Amazon DocumentDB

  • fully managed 문서 데이터베이스 서비스다.
  • 데이터는 JSON과 같은 형태로 저장된다.
  • MongoDB와 호환된다.
  • 스키마와 인덱싱이 유연하다.
  • 보통 유저 프로필, 실시간 대규모 데이터를 처리하는데 사용한다.

Amazon Neptune

  • fully managed 그래프 데이터 베이스다.
  • 기본 그래프 쿼리 언어인 Apache TinkerPop Gremlin, SPARQL을 지원한다.

Amazon Quantum Ledger Database (QLDB)

  • fully managed 원장(ledger) 데이터 베이스다.
    • 원장 -> 회계 관련 단어, 회계 장부, 급전 출납부 등
  • 회계 관련 데이터베이스이니 만큼, 투명하고, 변경 불가능하며, 암호화 방식으로 검증 가능한 트랙잭션 로그를 제공한다.
  • 일반적으로 조직의 경제 및 금융 활동 내역을 기록하는데 사용된다.

'AWS' 카테고리의 다른 글

[AWS] 클라우드 컴퓨팅이란  (0) 2021.04.06
[AWS] AWS 서비스 정리 - Storage Service  (0) 2021.04.05
[AWS] AWS 서비스 정리 - Computing Service  (0) 2021.04.04
[AWS] 웹서버에 https를 적용해보자!  (0) 2021.03.28
[AWS] S3 정리  (0) 2021.03.26

Amazon EBS (Elastic Block Store)

  • EC2 인스턴스와 사용하는 블록 레벨 스토리지
  • RDS 의 스토리지로 사용된다.

Amazon EFS (Elastic File Store)

  • 파일 스토리지를 프로비저닝하고 관리하기 쉬운 완전 관리 파일 스토리지 서비스
  • EC2 인스턴스, ECS, EKSFargate에 엑세스 할 수 있고 파일 시스템 인터페이스를 통해 Lambda 함수에 엑세스 할 수 있다.

Amazon FSx

  • fully-managed 타사(third-party) 파일 시스템 솔루션
  • SSD 스토리지를 사용하여 짧은 대기 시간과 빠른 성능 제공

Amazon S3

  • bucket으로 데이터를 객체로 저장한다.
  • 파일과 부분적인 메타데이터로 이루어져 있는 객체.
  • 스토리지의 용량은 사실상 무제한이다

Amazon S3 Glacier

  • 자주 사용하지 않는 데이터 또는 "Cold Data"에 최적화 되어 있다.
  • REST 기반의 웹 서비스다.

🤔Cold Data?

(Cold Data)

-> 자주 접속하는 핫 데이터와 비교해 자주 접속하지 않는 데이터를 말한다.

    고성능 1차 스토리지 대신 콜드 데이터 스토리지를 사용하면 훨씬 경제적이고, 설치와 사용이 간편하며, 드라이브 장애로 인한 문제가 덜 발생한다.

AWS Snowball Edge

  • 데이터 마이그레이션, 엣지 컴퓨팅, 기계 학습과 분석을 위해 S3로 페타 바이트(1024TB) 단위로 데이터를 이동하는 전송 서비스다.
  • 높은 네트워크 비용, 긴 전송 시간, 보안 우려 사항 등 대규모 데이터 전송 시 발생하는 문제를 해결 가능

AWS Snowmobile 

  • 엑사 바이트급 극도로 많은 양의 데이터를 AWS로 이동하는데 사용되는 데이터 전송 서비스
  • Snowmobile 한 대당 최대 100PB까지 전송할 수 있다.

AWS Storage Gateway

  • 클라우드 스토리지에 대한 온프레미스 엑세스 권한을 제공하는 하이브리드 클라우드 스토리지 서비스 이다.
  • 파일을 S3 객체로 저장하고, Glacier 에 백업을 해둔다.

 

'AWS' 카테고리의 다른 글

[AWS] 클라우드 컴퓨팅이란  (0) 2021.04.06
[AWS] AWS 서비스 정리 - Database Service  (0) 2021.04.05
[AWS] AWS 서비스 정리 - Computing Service  (0) 2021.04.04
[AWS] 웹서버에 https를 적용해보자!  (0) 2021.03.28
[AWS] S3 정리  (0) 2021.03.26

Amazon EC2 (Elastic Compute Cloud)

  • 프로비저닝 할 수 있는 Linux 기반/ 윈도우 기반/ Mac 기반 가상 서버

🤔프로비저닝?

(provisioning, 공급, 대비, 준비)

-> 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가, 즉시 사용할 수 있는 상태로 미리 준비해두는 것

Amazon ECR (Elastic Container Registry)

  • 관리되는 AWS Docker 레지스트리 서비스
  • ECR은 내가 만든 컨테이너 이미지를 Amazon S3에 저장한다.
  • Regional Service 이다

🤔Regional Service?

(Reginal Servce, 지역 서비스)

-> S3와 같이 리전 내 서브넷에 한정되지 않는 서비스

Amazon ECS (Elastic Container Service)

  • 클러스터에서 Docker 컨테이너를 실행, 중지 및 관리하는 컨테이너 관리 서비스
  • Regional Service 이다

Amazon Lightsail

  • 클라우드 기반 VPS(Virtual Private Server) 솔루션
    • 가상 서버 호스팅 서비스 ex) 카페24, 리노드, 벌쳐, 디지털 오션 등
  • 다른 서비스들과 달리 독립적으로 구성되어 있다.

Amazon Batch

  • AWS Cloud 내에세 일괄 컴퓨팅 워크로드 실행 가능
  • 한 지역 내 여러 가용영역에 걸쳐 일괄 작업 실행을 단순화 하는 서비스
  • Regional Service 이다

🤔Batch?

(Batch, 일괄)

-> 데이터를 일괄적으로 모아서 처리하는 작업

ex) 하루동안 쌓인 데이터를 배치작업을 통해 특정 시간에 한꺼번에 처리하는 경우

🤔워크로드?

(workload, 업무량)
-> 고객 대면 애플리케이션이나 백엔드 프로세스 같이 비즈니스 가치를 창출하는 리소스 및 코드 모음

AWS Elastic Beanstalk

  • 애플리케이션을 실행하는 인프라에 대한 걱정 없이 AWS Cloud에서 애플리케이션을 신속하게 배포 및 관리할 수 있도록 지원
  • 애플리케이션을 위한 용량 프로비저닝, 로드밸런싱, 확장 및 모니터링의 세부 정보를 자동으로 관리한다
  • PaaS (Platform as a Service)

AWS Lambda

  • 서버가 없는 컴퓨팅 서비스
  • 필요할 때만 코드를 실행하고 자동으로 스케일링 함

AWS ParallelCluster

  • AWS 클라우드에서 HPC(High Performance Computing) 클러스터를 배포하고 관리하는 데 도움이 되는 AWS 지원 오픈 소스 클러스터 관리 도구

🤔ParallelCluster?

(parallel cluster, 병렬 클러스터)
-> 클러스터란 여러 대의 컴퓨터를 네트워크를 통해 하나의 단일 컴퓨터처럼 동작하도록 제작 한 시스템이다.

AWS Serverless Application Model (SAM)

  • Serverless 응용프로그램 구축을 위한 오픈 소스 프레임 워크

AWS Elastic Fabric Adapter (EFA)

  • 네트워크 디바이스로 EC2 인스턴스에 연결하여 HPC기계 학습 애플리케이션 속도를 높일 수 있다.
  • 클라우드 기반 HPC 시스템에서 사용하는 TCP 전송보다 지연율이 낮고 일정하며 더 높은 처리량을 제공한다.

AWS Fargate

  • ECS와 EKS 와 모두 작동하는 컨테이너를 위한 serverless 컴퓨팅 엔진
  • EC2 인스턴스를 프로비저닝하거나 관리할 필요 없이 컨테이너 시작
  • 컨테이너 클러스터 관리를 위한 관리 서비스를 원하는 경우에 사용한다.

 

 

'AWS' 카테고리의 다른 글

[AWS] 클라우드 컴퓨팅이란  (0) 2021.04.06
[AWS] AWS 서비스 정리 - Database Service  (0) 2021.04.05
[AWS] AWS 서비스 정리 - Storage Service  (0) 2021.04.05
[AWS] 웹서버에 https를 적용해보자!  (0) 2021.03.28
[AWS] S3 정리  (0) 2021.03.26

+ Recent posts