All
184 posts
Spring
September 11, 2024
Reactor에서 `publishOn`과 `subscribeOn`의 역할

Reactor에서 과 의 역할 Spring WebFlux를 공부하기 위해서는 먼저 Reactor에 대해 이해하는 것이 중요하다. 특히, Reactor에서 제공하는 ****과 ****은 리액티브 스트림에서 중요한 개념이다. 이 두 가지 연산자는 비동기적으로 데이터 스트림을 처리하는 과정에서 스레드를 제어하는 역할을 한다. 이번 포스팅에서는 과 이 무엇인지, 그리고 어떻게 다르게 동작하는지에 대해 알아보자. 이란? ****은 말 그대로 구독 시점과 데이터 생성을 어느 스레드에서 실행할지를 결정하는 연산자다. 즉, 이 연산자가 적용되면 구독이 시작되는 순간부터 데이터가 생성되는 시점까지 특정 스레드에서 작업이 실행된다. 적용 시점: 체인의 어디에 위치하든 상관없이, 구독 시점부터 영향을 미친다. 영향 범위: 구독과 데이터 생성 전체에 영향을 미친다. 예시 위 예시에서는 이 설정되었기 때문에, 로 생성된 데이터는 스레드에서 처리된다. 즉, 데이터가 만들어지는 시점과 구독 시점이 elas…

Java
JVM
September 09, 2024
JVM 메모리 구조 이해

JVM 메모리 구조 이해 JVM의 메모리 구조 JVM 메모리는 크게 메서드 영역, 힙(Heap) 영역, 가상 머신 스택(VM Stack), **네이티브 메서드 스택(Native Method Stack)**으로 나뉜다. 1. 메서드(Method) 영역 저장되는 데이터: 클래스 메타데이터(클래스, 인터페이스 정보) 정적 변수 메서드의 바이트코드 런타임 상수 풀(리터럴, 상수) 2. 힙(Heap) 영역 저장되는 데이터: 동적으로 생성된 객체와 배열 참조 타입의 객체 데이터 3. 가상 머신 스택(VM Stack) 저장되는 데이터: 로컬 변수 메서드 호출 정보 연산 스택에서 계산된 중간 값 4. 네이티브 메서드 스택(Native Method Stack) 저장되는 데이터: 네이티브 메서드 호출 정보 네이티브 라이브러리 코드 코드 예시 설명 메서드 영역 : 정적 변수로 메서드 영역에 저장된다. 클래스가 로드될 때 한 번만 생성되며 모든 인스턴스에서 공유된다. 힙 영역 객체: 를 통해 힙에 저…

Backend
Spring
September 07, 2024
컴파일러, JIT, AOT, Graal, 그리고 Spring Native 이해하기

컴파일러, JIT, AOT, Graal, 그리고 Spring Native 이해하기 💡 이 포스트에서는 컴파일러, Just-In-Time(JIT), Ahead-Of-Time(AOT) 컴파일, GraalVM, 그리고 이들이 Spring Native와 어떻게 연관되는지에 대해 살펴본다. 이러한 개념들은 자바 및 다른 언어들이 다양한 런타임 환경에서 어떻게 작동하는지 이해하는 데 중요한 역할을 하며, Spring 애플리케이션이 이 기술들을 통해 성능을 최적화할 수 있는 방법을 제공한다. 1. 컴파일러란 무엇인가? 컴파일러는 프로그래밍 언어로 작성된 소스 코드를 기계어로 변환하는 도구이다. 두 가지 주요 컴파일 방식이 있다: 정적 컴파일 (예: javac): 프로그램이 실행되기 전에 소스 코드를 기계어 또는 중간 형태로 변환한다. 자바에서는 파일을 파일(바이트코드)로 변환하는 과정이다. 동적 컴파일 (예: JIT): 프로그램이 실행되는 동안 코드의 일부를 기계어로 변환한다. 2. Jus…

JPA
August 30, 2024
CreatedDate, CreatedBy 어노테이션

CreatedDate, CreatedBy 어노테이션 JPA에는 엔티티의 생성 정보를 자동으로 기록해주는 와 와 같은 어노테이션이 있다. 어노테이션은 엔티티가 생성된 날짜와 시간을 자동으로 저장하는 데 사용되며, 어노테이션은 엔티티를 생성한 사용자의 정보를 기록하는 데 사용된다. 이 두 어노테이션의 사용 방법과 그 역할에 대해 알아보자. 예시 코드 위 코드는 JPA에서 자식 클래스들에 모두 적용할 컬럼을 지정하는 슈퍼 클래스의 예시이다. 모든 자식 클래스들에 생성일, 생성자, 최종수정일, 최종수정자를 컬럼으로 갖게 하여 DB와 매핑시킬 의도를 가지고 있다. 사전작업 1. AuditorAware 구현체 정의 를 구현한 클래스인 을 작성한다. 에는 로써 이름을 붙여두고(추후 메인 클래스에서 지정하기 위함), 메서드에서는 감사자(auditor)로 들어갈 값을 지정해주면 된다. 예시 코드의 경우, 가 지정된 컬럼에는 “AUDITOR”가 들어갈 것이다. 2. 엔티티 리스너 지정 예시코드에…

AWS
July 19, 2024
AWS Account Management, Billing & Support

AWS Account Management, Billing & Support AWS Organizations 글로벌 서비스 조직을 생성하여 여러 AWS계정을 관리 주 계정: 마스터 계정 그 외 계정: 하위 계정 OU안 OU 가능 모든 계정의 비용을 마스터 계정으로 한 번에 지불 많이 사용하는 서비스 할인 받는데 유용 -> 사용량도 통합됨 API를 통한 계정 생성 자동화 가능 Service Controll Policies(SCP)를 이용해서 계정 권한 제한 가능 다중 계정 전략 부서별, 가격 중점 별, 환경별 혹은 규제 제한에 근거해 dev/ test/ prod 별로 계정을 생성할 수 있고 계정을 생성하지 않도록 서비스를 설정할 떄에는 SCP를 사용한다. 리소스 격리를 위해 다른 계정마다 다른 VPC를 갖도록 하여 분리하고, 로깅으로부터 계정을 격리시킬 수도 있다. 이렇듯 원하는 계정의 유형에 따라 유동적으로 다중 계정 전략 설정이 가능하다. Service Control Polici…

AWS
ML
July 19, 2024
Amazon Machine Learning

Amazon Machine Learning Amazon Rekognition 머신러닝을 통해 사람, 텍스트, 이미지 혹은 동영상 장면을 인식 사용자 인증 및 인원 수 검출 사용 예시 라벨링 콘텐츠 조정 텍스트 감지 안면 감지 및 분석 (성별, 나이, 감정, …) 유명인 인식 경로 추적 Amazon Transcribe 음성을 텍스트로 변환(Speech to Text) 다국어 오디오에 대한 자동 언어 식별 기능 지원 이름, 전화번호와 같은 민감한 데이터 블라인드 처리 가능 사용 예시 고객 서비스 통화 받아쓰기 자동으로 자막 생성 오디오 자산에 대한 메타데이터 생성 Amazon Polly <-> Transcribe 텍스트를 음성으로 변환(Text to Speech) 사용 예시 대화 어플리케이션 도슨트 서비스 Amazon Translate 자연스럽고 정확한 번역기능 제공 Amazon Lex & Connect Alexa에 들어간 그것 자동 음성 인식 자연어 이해 사용 예시 고객이 약속을…

AWS
Security
July 19, 2024
AWS Security

AWS Security AWS Security는 클라우드 환경에서 보안을 강화하고 규정 준수를 지원하는 다양한 서비스와 도구를 제공한다. 이 포스팅에서는 주요 AWS Security 서비스와 그 기능에 대해 알아보자. DDoS 방어: WAF 및 Shield AWS WAF: 웹 애플리케이션 방화벽으로, 악의적인 웹 트래픽을 차단하여 애플리케이션을 보호한다. AWS Shield: DDoS 공격으로부터 애플리케이션을 보호하는 서비스다. 기본적으로 AWS Shield Standard는 모든 AWS 고객에게 제공되며, AWS Shield Advanced는 추가적인 보호와 DDoS 대응을 제공한다. AWS Network Firewall AWS 네트워크 방화벽은 VPC 내에서 네트워크 트래픽을 모니터링하고 제어할 수 있는 완전 관리형 방화벽이다. 사용자 지정 규칙을 통해 인바운드 및 아웃바운드 트래픽을 제어할 수 있다. AWS Firewall Manager KMS 및 CloudHSM을 사용한…

AWS
July 18, 2024
AWS VPC Endpoints

Amazon VPC Endpoints VPC Endpoints 개요 VPC Endpoints는 AWS 서비스에 연결할 때 공용 인터넷을 사용하지 않고 사설 AWS 네트워크를 통해 연결할 수 있도록 해준다. 이는 더 나은 보안을 제공하고, 네트워크 홉(Hop)을 줄여 지연 시간을 단축시킨다. VPC Endpoints의 유형 게이트웨이 엔드 포인트 (Gateway Endpoint): Amazon S3와 DynamoDB 전용. 인터페이스 엔드 포인트 (Interface Endpoint): AWS의 다른 모든 서비스와 연결할 수 있다. 예시 사설 서브넷 내의 EC2 인스턴스가 Amazon S3와 DynamoDB에 연결: 게이트웨이 엔드 포인트를 사용하여 비공개로 연결 가능. EC2 인스턴스가 CloudWatch에 사용자 지정 지표를 푸시: 인터페이스 엔드 포인트를 사용하여 비공개로 연결 가능. VPC Endpoints 생성 과정 VPC에서 Endpoints를 선택하고, “Create E…

AWS
July 18, 2024
AWS Cloud Monitoring

클라우드 모니터링 1. Amazon CloudWatch CloudWatch란? (Metrics, Alarms) Amazon CloudWatch는 AWS 내 모든 서비스에 대한 지표를 제공하는 모니터링 서비스다. 이 서비스는 CPUUtilization, NetworkIn 등의 지표를 통해 AWS 자원을 모니터링하고, 시간에 따른 변화를 시각화할 수 있는 대시보드를 제공한다. 주요 기능 지표 수집: EC2, EBS, S3 등 다양한 서비스의 지표를 수집. 대시보드 생성: 여러 지표를 한 번에 시각화할 수 있는 대시보드를 제공. 경보 설정: 특정 지표가 임계값을 초과할 때 알림을 트리거. 예시 지표 EC2 인스턴스: CPUUtilization, StatusCheck, NetworkIn/Out. EBS 볼륨: Disk Read/Writes. S3 버킷: BucketSizeBytes, NumberOfObjects, AllRequests. 2. Amazon CloudWatch Logs C…

AWS
July 18, 2024
Amazon MQ

Amazon MQ Amazon MQ란? Amazon MQ는 RabbitMQ와 ActiveMQ 두 가지 기술을 지원하는 관리형 메시지 브로커 서비스다. 이 서비스는 MQTT, AMQP, STOMP, Openwire, WSS와 같은 개방형 프로토콜을 사용하는 기존 애플리케이션을 클라우드로 마이그레이션할 때 유용하다. Amazon MQ의 주요 특징 기존 프로토콜 지원 Amazon MQ는 기존의 온프레미스 애플리케이션에서 사용하는 개방형 프로토콜을 그대로 사용할 수 있도록 지원한다. 이를 통해 애플리케이션을 재작성하지 않고도 클라우드로 마이그레이션할 수 있다. 관리형 서비스 Amazon MQ는 RabbitMQ와 ActiveMQ를 관리형 버전으로 제공하여, 클라우드에서 메시지 브로커를 쉽게 사용할 수 있게 한다. 이는 클라우드 네이티브 서비스인 SQS와 SNS와는 다른 방식으로 운영된다. 제한적인 확장성 Amazon MQ는 SQS나 SNS처럼 무한한 확장성을 제공하지는 않는다. 이는 서버…

AWS
July 18, 2024
Amazon Simple Notification Service(SNS)

Amazon Simple Notification Service(SNS) Amazon SNS AWS의 Simple Notification Service(SNS)는 애플리케이션의 메시지를 다수의 수신자에게 효율적으로 전달할 수 있는 방법을 제공한다. 이를 통해 애플리케이션을 효과적으로 분리하고, 각각의 서비스가 독립적으로 동작할 수 있도록 한다. SNS를 이용한 게시-구독 모델 직접 통합 vs 게시-구독 통합 애플리케이션이 다수의 수신자에게 메시지를 보내야 할 때, 두 가지 접근 방법이 있다. 첫 번째는 직접 통합으로 라우팅하는 방법이다. 예를 들어, 구매 서비스가 이메일 알림을 보내고, 사기 탐지 서비스, 배송 서비스와 SQS 대기열에 통신한다. 하지만 이 방식은 서비스 간의 직접 통합이 많아질수록 복잡해진다. 대신, 게시-구독(Pub/Sub) 통합을 사용하면 이러한 복잡성을 줄일 수 있다. SNS 주제를 사용하여, 구매 서비스는 SNS 주제에 메시지를 보내고, 주제는 자동으로 …

AWS
July 18, 2024
Amazon Kinesis

Amazon Kinesis Amazon Kinesis란? Kinesis의 주요 구성 요소 Kinesis Data Streams Kinesis Data Streams는 지연 시간이 적은 스트리밍 서비스로, 수백, 수천 개의 소스로부터 데이터를 대규모로 수집할 수 있다. 소스는 트럭, 보트, IoT 기기 등 데이터를 생산하는 모든 것이 될 수 있다. Kinesis Data Analytics Kinesis Data Analytics는 SQL 언어를 사용하여 스트리밍 데이터에 대한 실시간 분석을 수행할 수 있게 해준다. 이를 통해 실시간으로 데이터를 분석하고 출력값을 얻을 수 있다. Kinesis Data Firehose Kinesis Data Firehose는 스트리밍 데이터를 Amazon S3, Redshift, Elasticsearch 등 우리가 알고 있는 다양한 장소에 로드하는 서비스다. Kinesis Video Streams Kinesis Video Streams는 실시간 영…

AWS
July 18, 2024
Amazon Simple Queue Service(SQS)

Amazon Simple Queue Service(SQS) Amazon SQS란? 대기열이란? 대기열은 메시지를 일시적으로 저장하는 버퍼 역할을 한다. 여기서 프로듀서(Producer)는 대기열로 메시지를 전송하고, 컨슈머(Consumer)는 대기열에서 메시지를 읽어 처리한다. 프로듀서: 하나 또는 여러 개의 프로듀서가 대기열로 메시지를 보낼 수 있다. 컨슈머: 하나 또는 여러 개의 컨슈머가 대기열에서 메시지를 폴링하여 읽을 수 있다. 각 컨슈머는 다른 메시지를 받게 되며, 메시지 처리가 끝나면 대기열에서 메시지를 삭제한다. SQS의 특징 완전 관리형 서비스 Amazon SQS는 서버를 관리할 필요가 없는 완전 관리형 서비스다. 이는 애플리케이션 구성 요소 간의 통신을 관리하고 확장할 때 유용하다. 무한한 규모 조정 SQS는 초당 1개의 메시지부터 수만 개의 메시지까지 한도 없이 규모를 조정할 수 있다. 메시지의 기본 보유 기간은 4일이며, 최대 14일까지 설정할 수 있다. 짧…

AWS
July 18, 2024
AWS S3 Transfer Acceleration and Global Accelerator

AWS S3 Transfer Acceleration and Global Accelerator S3 Transfer Acceleration S3 Transfer Acceleration이란? Amazon S3 Transfer Acceleration은 전 세계적으로 분산된 사용자들이 S3 버킷으로 파일을 업로드하거나 다운로드할 때 전송 속도를 향상시키는 서비스이다. 주로 지리적으로 멀리 떨어진 S3 버킷과 통신할 때 유용하다. 동작 원리 엣지 로케이션 사용: 사용자는 파일을 AWS의 엣지 로케이션에 업로드한다. 엣지 로케이션은 사용자와 가까운 위치에 있어 빠른 응답 시간을 제공한다. AWS 내부 네트워크 전송: 엣지 로케이션은 AWS의 고속 내부 네트워크를 사용하여 파일을 최종 목적지인 S3 버킷으로 전송한다. 이 과정에서 공용 인터넷보다 더 빠르고 안정적인 전송이 이루어진다. 사용 사례 멀리 떨어진 S3 버킷에 파일 업로드: 예를 들어, 미국에서 호주 S3 버킷으로 파일을 업로드할…

AWS
July 17, 2024
AWS Route53 and CloudFront

AWS Route 53 and CloudFront Amazon Route 53 DNS란 무엇인가? DNS(도메인 이름 시스템)는 인터넷의 전화번호부와 같다. 규칙과 레코드의 모음집으로, 클라이언트가 URL을 통해 올바른 서버를 찾아갈 수 있게 도와준다. Route 53의 주요 레코드 유형 A 레코드: 도메인 이름을 IPv4 주소로 매핑한다. AAAA 레코드: 도메인 이름을 IPv6 주소로 매핑한다. CNAME 레코드: 호스트 이름을 다른 호스트 이름과 매핑한다. 별칭 레코드: 호스트 이름을 AWS 리소스(예: ELB, CloudFront, S3, RDS 등)에 매핑한다. DNS 동작 방식 웹 브라우저: 사용자가 웹 브라우저를 통해 URL을 입력한다. DNS 요청: 브라우저는 DNS 서버에 URL에 대한 IP 주소를 요청한다. DNS 응답: DNS 서버는 해당 URL에 대한 IP 주소를 응답한다. 서버 연결: 브라우저는 IP 주소를 이용해 서버에 연결하고, 서버는 HTTP 응답을 …

AWS
July 17, 2024
AWS SSM

AWS SSM AWS SSM SSM의 역할 운영 인사이트 제공: 인프라 상태에 관한 운영 인사이트를 제공하여, 시스템의 건강 상태를 모니터링하고 문제를 신속히 해결할 수 있다. 규정 준수 강화: 서버와 인스턴스에 패치를 자동으로 적용하여 보안 및 규정 준수를 강화할 수 있다. 명령 실행: SSM을 사용하여 전체 서버에 명령을 실행할 수 있다. 구성 관리: SSM 파라미터 스토어를 통해 구성 데이터를 안전하게 저장하고 관리할 수 있다. SSM의 동작 원리 SSM 서비스는 제어하는 시스템에 SSM 에이전트를 설치하여 작동한다. 이 에이전트는 백그라운드에서 실행되며 AWS의 SSM 서비스에 데이터를 보고한다. EC2 인스턴스 및 온프레미스 시스템 지원: SSM 에이전트는 EC2 인스턴스와 온프레미스 가상 머신에 설치되며, 이를 통해 하이브리드 환경을 지원한다. 자동 설치: Amazon Linux AMI나 Ubuntu AMI를 사용하면 SSM 에이전트가 기본적으로 설치된다. 명령 및 …

AWS
July 17, 2024
AWS Cloud9

AWS Cloud9 AWS Cloud9 AWS Cloud9은 클라우드 기반의 통합 개발 환경(IDE)으로, 클라우드에서 바로 코드를 작성, 실행 및 디버깅할 수 있다. 웹 브라우저에서 실행되며, 어디서든 접근이 가능하다. 주요 특징 클라우드 기반 IDE: 클라우드에서 실행되는 통합 개발 환경으로, 코드 작성, 실행, 디버깅이 가능하다. 웹 브라우저 지원: Chrome, Firefox, Internet Explorer 등 다양한 웹 브라우저에서 사용할 수 있다. 실시간 협업: 실시간으로 코드 협업을 할 수 있으며, 페어 프로그래밍을 지원한다. 어디서나 접근 가능: 인터넷에 접속할 수 있는 곳이면 어디서든 프로젝트 작업이 가능하다. 사용 예시 코드 작성 및 디버깅: Cloud9을 사용하여 클라우드에서 바로 코드를 작성하고 디버깅할 수 있다. 실시간 코드 협업: 여러 개발자가 실시간으로 같은 코드에 대해 협업하고 페어 프로그래밍을 할 수 있다. 유연한 작업 환경: 사무실, 집, 카페…

AWS
July 17, 2024
AWS CodeStar

AWS CodeStar AWS CodeStar 주요 특징 통합 UI: CodeStar는 모든 개발 작업을 한곳에서 관리할 수 있는 통합된 사용자 인터페이스를 제공한다. 자동 설정: CodeCommit 리포지토리, CodeBuild 설계 프로세스, CodeDeploy, CodePipeline 등을 자동으로 설정한다. 대시보드 제공: 프로젝트의 상태를 실시간으로 모니터링할 수 있는 대시보드를 제공한다. 빠른 시작: Beanstalk 환경이나 EC2 인스턴스 등에서도 프로젝트를 빠르게 시작할 수 있다. 사용 예시 통합 CICD 파이프라인 설정: CodeStar를 사용하여 CodeCommit, CodeBuild, CodeDeploy, CodePipeline을 자동으로 설정하고 관리할 수 있다. 개발 프로젝트 관리: 통합된 대시보드를 통해 개발 프로젝트의 진행 상황을 모니터링하고 관리할 수 있다. 빠른 애플리케이션 배포: CodeStar를 통해 Beanstalk 환경이나 EC2 인스턴스…

AWS
July 17, 2024
AWS CodePipeline with CodeCommit, CodeBuild, CodeDeploy

AWS CodePipeline with CodeCommit, CodeBuild, CodeDeploy CodeCommit 주요 특징 완전 관리형: 서버를 설정하거나 관리할 필요 없이 코드 리포지토리를 사용할 수 있다. 확장성 및 고가용성: AWS의 인프라를 활용하여 확장성과 고가용성을 제공한다. 프라이빗 및 안전함: AWS 계정 내에서 운영되므로 보안이 강화된다. 다양한 AWS 서비스와 통합: 다른 AWS 서비스와 쉽게 통합할 수 있다. 사용 예시 버전 관리: 개발팀이 협업하여 코드 변경 사항을 관리하고, 버전별로 롤백할 수 있다. CI/CD 파이프라인: CodeCommit을 소스 코드 저장소로 사용하여 CI/CD 파이프라인을 구성할 수 있다. CodeBuild 주요 특징 완전 관리형: 빌드 서버를 설정하거나 관리할 필요 없이 빌드를 실행할 수 있다. 서버리스: 빌드 작업을 위해 서버를 프로비저닝하거나 관리할 필요가 없다. 자동 확장: 빌드 수요에 따라 자동으로 확장된다. 다양한…

AWS
July 17, 2024
AWS Elastic Beanstalk

AWS Elastic Beanstalk AWS Elastic Beanstalk AWS Elastic Beanstalk은 AWS에서 웹 애플리케이션을 쉽게 배포하고 관리할 수 있는 PaaS(Platform as a Service) 서비스다. 개발자는 인프라를 직접 관리할 필요 없이 코드만 배포하면 된다. Beanstalk은 애플리케이션의 배포, 관리, 자동 확장 및 모니터링을 도와준다. Web App 3-tier 3-티어 아키텍처 AWS에서 웹 애플리케이션을 배포할 때는 일반적으로 3-티어 아키텍처를 따른다. 이는 사용자가 여러 가용 영역(AZ)에 있는 로드 밸런서와 통신하고, 로드 밸런서는 트래픽을 오토 스케일링 그룹에서 관리하는 여러 EC2 인스턴스에 분산시키는 구조다. 로드 밸런서 (ELB): 사용자의 요청을 받아 여러 EC2 인스턴스에 분산시킨다. 오토 스케일링 그룹: 트래픽에 따라 EC2 인스턴스의 수를 자동으로 조정한다. 데이터베이스 (RDS): 관계형 데이터베이스로,…

AWS
July 17, 2024
AWS CloudFormation, Cloud Development Kit(CDK), IaC

AWS CloudFormation, Cloud Development Kit(CDK) Infrastructure as Code (IaC) IaC(Infrastructure as Code)는 인프라를 코드로 정의하고 관리하는 방법론이다. 이를 통해 인프라를 일관되게 배포하고 관리할 수 있으며, 버전 관리와 협업이 용이하다. 주요 특징 일관성: 코드로 정의된 인프라는 일관되게 배포된다. 재사용성: 코드로 작성된 인프라는 여러 환경에서 재사용할 수 있다. 버전 관리: 인프라 코드도 애플리케이션 코드와 같이 버전 관리가 가능하다. 자동화: 인프라 배포와 관리를 자동화하여 효율성을 높일 수 있다. AWS CloudFormation CloudFormation은 AWS 인프라의 모든 리소스를 선언적으로 정의할 수 있는 서비스다. 코드로 인프라를 정의하여 자동으로 리소스를 생성하고 관리할 수 있다. 주요 특징 선언적 프로그래밍: 필요한 리소스를 선언적으로 정의하면 CloudFormation이 자…

AWS
July 17, 2024
AWS Lambda, API Gateway

AWS Lambda, API Gateway AWS Lambda AWS Lambda는 서버리스 컴퓨팅 서비스로, 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있게 해준다. Lambda는 특정 이벤트에 의해 트리거되며, 필요할 때만 실행된다. 이는 비용 효율적이며 확장성이 뛰어나다. 주요 특징 서버리스: 서버를 관리할 필요 없이 코드를 실행할 수 있다. 이벤트 기반: 특정 이벤트가 발생했을 때만 함수가 실행된다. 자동 확장: 수요에 따라 자동으로 확장된다. 비용 효율성: 사용한 만큼만 비용을 지불한다. 프리 티어로 매달 백만 개의 Lambda 호출과 40만 GB-초의 컴퓨팅 시간이 제공된다. 작동 원리 함수 정의: Lambda 함수를 정의하고, 필요한 코드와 리소스를 지정한다. 이벤트 트리거: 특정 이벤트가 발생하면 Lambda 함수가 트리거된다. 코드 실행: Lambda 함수가 실행되어 지정된 작업을 수행한다. 사용 사례 서버리스 섬네일 생성 서비스: 사용자가 S3 …

AWS
July 16, 2024
AWS ECS, Fargate, ECR

AWS ECS, Fargate, ECR AWS ECS ECS는 Elastic Container Service의 약자로, AWS에서 Docker 컨테이너를 실행할 때 사용하는 서비스다. ECS를 사용하면 컨테이너를 실행하고 관리할 수 있으며, EC2 인스턴스에서 직접 컨테이너를 실행할 수 있다. 주요 특징 EC2 인스턴스 필요: ECS에서 도커 컨테이너를 실행하려면 사전에 EC2 인스턴스를 프로비저닝하고 관리해야 한다. 자동 스케일링: 컨테이너의 수요에 따라 EC2 인스턴스를 자동으로 스케일링할 수 있다. 로드 밸런싱: 애플리케이션 로드 밸런서와 통합하여 웹 애플리케이션 트래픽을 효과적으로 분산시킬 수 있다. 자동화된 관리: AWS가 컨테이너의 시작과 중지를 책임진다. 작동 원리 EC2 인스턴스 프로비저닝: 사용자 또는 자동화 도구를 통해 EC2 인스턴스를 설정한다. 컨테이너 실행: ECS 서비스가 도커 컨테이너를 EC2 인스턴스에서 실행한다. 관리: AWS가 컨테이너의 배치, …

AWS
July 16, 2024
AWS Glue

AWS Glue AWS Glue AWS Glue는 관리형 추출, 변환 및 로드(ETL) 서비스로, 데이터를 준비하고 변환하는 작업을 자동화할 수 있다. Glue는 완전 서버리스 서비스로, 사용자는 데이터 변환에만 집중하고 인프라 관리는 Glue에 맡길 수 있다. 주요 특징 완전 관리형 서버리스 서비스: 서버를 설정하거나 관리할 필요 없이 ETL 작업을 수행할 수 있다. 자동화된 데이터 변환: Glue는 데이터를 추출하고 변환하여 원하는 형식으로 로드하는 작업을 자동으로 처리한다. 다양한 데이터 소스 지원: S3, RDS, Redshift 등 다양한 AWS 데이터 소스와 통합할 수 있다. 스크립트 생성: Glue는 데이터를 변환하기 위한 스크립트를 자동으로 생성하여 사용자 작업을 간소화한다. 작동 원리 데이터 추출: Glue는 S3 버킷, RDS 데이터베이스 등에서 데이터를 추출한다. 데이터 변환: 추출된 데이터는 Glue에서 변환 스크립트를 작성하여 원하는 형식으로 변환된다. …

AWS
July 16, 2024
AWS DMS

AWS DMS AWS Database Migration Service (DMS) AWS Database Migration Service(DMS)는 데이터베이스 간의 데이터 마이그레이션을 쉽게 수행할 수 있도록 도와주는 서비스이다. DMS를 사용하면 소스 데이터베이스에서 데이터를 추출하여 대상 데이터베이스로 신속하고 안전하게 마이그레이션할 수 있다. 주요 특징 완전 관리형 서비스: DMS는 AWS에서 완전 관리되므로, 사용자는 인프라 관리에 신경 쓰지 않고 데이터 마이그레이션에 집중할 수 있다. 중단 없는 마이그레이션: 마이그레이션 작업 동안에도 소스 데이터베이스를 계속 사용할 수 있어, 서비스 중단 없이 데이터를 이전할 수 있다. 동종 및 이기종 마이그레이션 지원: 동일한 데이터베이스 간의 마이그레이션(동종)뿐만 아니라, 서로 다른 데이터베이스 간의 마이그레이션(이기종)도 지원한다. 자가 복구: DMS는 오류가 발생하더라도 자동으로 복구하여 마이그레이션 작업을 계속 진행한다. 작…

AWS
July 16, 2024
Amazon QLDB and Managed Blockchain

Amazon QLDB and Managed Blockchain Amazon QLDB Amazon QLDB(Quantum Ledger Database)는 금융 거래를 기록하는 원장 데이터베이스로, 데이터의 모든 변경 내역을 완전하고 변경 불가능하게 저장하는 시스템이다. 서버리스 구조로 고가용성을 자랑하며, 세 개의 가용 영역에 걸쳐 데이터 복제본을 갖는다. 주요 특징 변경 불가능한 원장: 데이터가 한 번 기록되면 삭제하거나 수정할 수 없으며, 모든 변경 내역이 저널에 기록된다. 암호화 서명: 각 변경 사항에 대해 암호화 해시가 생성되어 데이터의 무결성을 보장한다. 고성능: 일반적인 원장 블록체인 프레임워크보다 2~3배 높은 성능을 제공한다. SQL 지원: SQL을 사용하여 데이터를 다룰 수 있어 기존 관계형 데이터베이스 사용자도 쉽게 접근할 수 있다. 작동 원리 저널(Journal): 데이터의 모든 변경 내역이 일련의 수정 사항으로 저널에 기록된다. 암호화 해시: 각 수정 사항에 …

AWS
July 16, 2024
Amazon Neptune

Amazon Neptune Amazon Neptune Amazon Neptune은 완전 관리형 그래프 데이터베이스 서비스로, 고도로 연결된 데이터셋을 효과적으로 관리하고 쿼리할 수 있도록 설계되었다. 그래프 데이터베이스는 노드(정점)와 엣지(간선)로 구성되며, 복잡한 관계와 연결을 표현하는 데 유리하다. 주요 특징 1. 고성능 그래프 쿼리 Neptune은 수십억 개의 관계를 밀리초 단위의 지연 시간으로 쿼리할 수 있도록 최적화되어 있다. 이는 복잡한 그래프 데이터셋을 신속하게 탐색하고 분석할 수 있게 해준다. 2. 다중 AZ 지원 Neptune은 세 개의 가용 영역(AZ)에 걸쳐 데이터베이스를 복제하여 높은 가용성을 제공한다. 최대 15개의 읽기 전용 복제본을 생성할 수 있어 읽기 성능을 향상시킬 수 있다. 3. 완전 관리형 서비스 Neptune은 AWS에서 완전히 관리되므로 데이터베이스 관리 작업(백업, 패치, 복제 등)을 자동화하여 사용자가 애플리케이션 개발에 집중할 수 있…

AWS
July 16, 2024
AWS DocumentDB

AWS DocumentDB AWS DocumentDB Amazon DocumentDB는 MongoDB와 호환되는 NoSQL 데이터베이스 서비스로, AWS에서 완전히 관리되며 고가용성과 확장성을 제공한다. DocumentDB는 MongoDB의 기능을 클라우드 네이티브 환경에서 사용할 수 있도록 설계되었다. 주요 특징 MongoDB 호환성: DocumentDB는 MongoDB의 API와 호환되어 기존 MongoDB 애플리케이션을 쉽게 마이그레이션할 수 있다. MongoDB 드라이버를 그대로 사용할 수 있다. 완전 관리형 서비스: DocumentDB는 AWS에서 완전히 관리되며, 데이터베이스 관리 작업(백업, 패치, 복제 등)을 자동화하여 사용자가 애플리케이션 개발에 집중할 수 있도록 돕는다. 고가용성 및 내구성: 데이터는 세 개의 가용 영역(AZ)에 걸쳐 복제되어 높은 가용성과 내구성을 제공한다. 이는 데이터 손실 위험을 줄이고 장애 발생 시에도 데이터 접근이 가능하도록 한다. 자동…

AWS
July 16, 2024
Amazon Athena & QuickSight

Amazon Athena & QuickSight Amazon Athena Amazon Athena는 서버리스 쿼리 서비스로, Amazon S3에 저장된 데이터를 SQL 쿼리를 통해 분석할 수 있다. Athena는 Presto 엔진을 기반으로 구축되었으며, 다양한 파일 형식을 지원한다. 주요 특징 서버리스: 별도의 서버 설정이나 관리 없이 SQL 쿼리만으로 데이터를 분석할 수 있다. 다양한 파일 형식 지원: CSV, JSON, ORC, Avro, Parquet 등 다양한 형식의 파일을 지원한다. 즉시 분석: 데이터를 S3에 저장한 후, 별도의 로드 과정 없이 즉시 분석할 수 있다. 비용 효율성: 스캔된 데이터 테라바이트당 5달러로 과금되며, 데이터 압축 및 열 형식 저장을 통해 비용을 절감할 수 있다. 작동 원리 데이터 로드: 사용자가 Amazon S3에 데이터를 로드한다. 쿼리 작업: Amazon Athena가 S3에 저장된 데이터에 대해 SQL 쿼리를 실행한다. 분석 결과: 쿼…

AWS
July 16, 2024
Amazon EMR

Amazon EMR(Elastic MapReduce) Amazon EMR은 대규모 데이터 처리와 분석을 위해 Hadoop, Spark, HBase, Presto 등 다양한 오픈 소스 빅데이터 프레임워크를 지원하는 관리형 클러스터 플랫폼이다. 대량의 데이터를 쉽고 빠르게 처리할 수 있도록 돕는다. 주요 특징 1. 관리형 클러스터 Amazon EMR은 클러스터의 프로비저닝, 구성, 관리 및 확장을 자동화하여 사용자가 데이터 처리 작업에만 집중할 수 있게 한다. 필요에 따라 클러스터를 자동으로 확장하거나 축소할 수 있다. 2. 다양한 빅데이터 프레임워크 지원 Hadoop, Spark, HBase, Presto 등 다양한 빅데이터 프레임워크를 지원하여 다양한 데이터 처리 및 분석 작업을 수행할 수 있다. 각 프레임워크는 EMR에서 최적화되어 높은 성능을 발휘한다. 3. 비용 효율성 사용한 만큼만 비용을 지불하는 요금 구조로, EC2 스팟 인스턴스를 활용하면 비용을 더욱 절감할 수 있다.…

AWS
July 16, 2024
AWS Redshift

AWS Redshift Redshift는 PostgreSQL 기반의 데이터베이스이다. OLAP에 특화되었다. 지속적 로드가 아닌 1시간 단위 로드 데이터 분석 및 컴퓨팅 열 기반 스토리지 QuickSight 및 Tableau와의 통합 대시보드를 통한 분석 및 시각화 서버리스 Redshift의 주요 특징 1. 높은 확장성 Redshift는 클러스터의 크기를 쉽게 조정할 수 있어 데이터가 증가해도 성능 저하 없이 확장이 가능하다. 필요에 따라 노드를 추가하거나 제거할 수 있다. 2. 빠른 쿼리 성능 Redshift는 데이터 웨어하우스 전용으로 설계되어 빠른 쿼리 성능을 제공한다. 데이터 압축, 컬럼형 저장소, 쿼리 최적화 등의 기술을 활용해 대량의 데이터를 빠르게 처리할 수 있다. 3. 복제 및 백업 Redshift는 자동으로 데이터 복제 및 백업을 제공하여 데이터의 안전성을 높인다. 스냅샷 기능을 사용하면 데이터의 특정 시점 상태를 저장하고, 필요 시 복원할 수 있다. Redshi…

AWS
July 15, 2024
AWS DynamoDB

AWS DynamoDB DynamoDB는 완전 관리형 고가용성 데이터베이스로 세 개의 가용 영역에 걸쳐 복제본을 두고 운영된다. NoSQL 데이터베이스 검색 지연 시간 10ms 미만 막대한 작업량 소화 가능 분산된 서버리스 데이터베이스 -> 프로비저닝이 필요 없음 DynamoDB 키/값 데이터 베이스 기본 키는 파티션 키와 정렬 키로 구분된다. 우측의 속성에는 각 데이터에 대한 열을 임의로 정의할 수 있다. DynamoDB Accelerator - DAX 완전 관리형 인 메모리 캐시 ElastiCache와 달리 DynamoDB 전용 캐시이다. 애플리케이션이 DynamoDB 테이블에 액세스 하려 할 때 DAX를 캐시로 이용해야 한다. ElastiCache를 대신 사용할 수 있지만 그럴 필요가 없음 DynamoDB Global Tables 각 리전의 테이블에 양방향 복제 작업이 이루어지며 동일한 데이터를 갖게 됨. 원한다면 10개의 리전에 대해서도 이와 같은 설정이 가능. Dyn…

AWS
July 15, 2024
AWS ElastiCache

AWS ElastiCache Relational Database 사용을 위해 RDS를 사용했던 것과 같이, 혹은 를 사용하기 위해 ElastiCache를 사용한다. 높은 성능과 짧은 지연 시간 읽기 집중적인 작업에 특화 RDS에서 동일한 쿼리를 다룰 시 큰 부하가 발생하는 반면, 캐시를 사용하면 캐시가 직접 전송되므로 부하를 줄일 수 있다. Usecase1: RDS + ElastiCache 캐싱 패턴: RDS에서 자주 읽히는 데이터나 반복적인 쿼리 결과를 ElastiCache에 캐싱하여, 데이터베이스의 부하를 줄이고 응답 시간을 단축시킬 수 있다. 구현 방법: 애플리케이션은 먼저 ElastiCache를 조회하고, 데이터가 없으면 RDS에서 데이터를 가져와 ElastiCache에 저장한 후 응답한다. 이를 통해 RDS의 부하를 줄이고 성능을 향상시킬 수 있다. Usecase2: ElastiCache Only 특정 사용 사례: ElastiCache는 인메모리 데이터베이스로 사용되…

AWS
July 15, 2024
AWS Databases

AWS Databases AWS RDS SQL 지원 Postgres MySQL MariaDB Oracle Microsoft SQL Server Aurora (AWS 소유) 💡 EC2 대신 RDS에 데이터베이스를 배포하는 이유 자동화된 관리 작업(자동 백업, 자동 패치, 모니터링 및 알림) 고가용성 및 내구성(다중 AZ 배포, 자동 장애 조치) 확장성 및 성능 최적화(수직 확장, 읽기 복제본, 자동 스토리지 확장) RDS Usecase Example ELB가 EC2들에 부하를 분산하고, 각 EC2 들은 통일된 RDS에서 데이터 읽기/쓰기 작업을 수행한다. Amazon Aurora Aurora는 2가지 데이터베이스 기술을 지원한다. PostgreSQL MySQL RDS에 비하여 MySQL에서 5배, PostgreSQL에서 3배 더 나은 성능 저장 공간 자동 확장 기능 10GB 단위로 최대 128TB까지 자동 확장 RDS보다 20%정도 더 비싸지만 더 효율적임. 서버리스 가능 관리가…

AWS
July 15, 2024
AWS Snow Family

AWS Snow Family AWS Snow Family는 Amazon Web Services(AWS)에서 제공하는 데이터 전송 및 엣지 컴퓨팅 솔루션을 말한다. 이 서비스는 주로 대량의 데이터를 AWS 클라우드로 옮기거나, 네트워크 연결이 어려운 환경에서 데이터 처리를 수행하는 데 사용된다. Snow Family Information Data migration: , , Edge computing: , 엣지 컴퓨팅(edge computing)은 데이터 처리를 데이터 소스나 사용자와 가까운 장치에서 수행하는 방식이다. 이는 전통적인 클라우드 컴퓨팅 모델에서 데이터가 중앙 데이터 센터에서 처리되는 것과 대조된다. 엣지 컴퓨팅의 주요 목적은 데이터 처리의 지연(latency)을 줄이고, 대역폭 사용을 최적화하며, 실시간 처리가 필요한 애플리케이션의 성능을 향상시키는 것이다. 💡AWS Snow Family를 이용해서 데이터를 이관하는 이유 대량 데이터 전송의 효율성 인터넷을 통한 …

AWS
July 13, 2024
AWS S3 Storage Class

AWS S3 Storage Class Amazon S3 공통 사항 내구성: 99.999999999% (11 9’s) 내구성. Amazon S3 스토리지 클래스 Amazon S3 Standard - General Purpose 설명: 자주 접근하는 데이터를 위해 설계되었다. 가용성: 99.99% 가용성. 사용 사례: 클라우드 애플리케이션, 동적 웹사이트, 콘텐츠 배포, 모바일 및 게임 애플리케이션, 빅 데이터 분석 등 다양한 사용 사례에 적합하다. 비용: ★★★★★ (최고 비용) Amazon S3 Standard-Infrequent Access (IA) 설명: 가끔 접근하지만 필요할 때는 빠르게 접근해야 하는 데이터를 위해 설계되었다. 가용성: 99.9% 가용성. 사용 사례: 장기 저장, 백업 및 재해 복구 데이터에 이상적이다. 비용: ★★★★☆ Amazon S3 One Zone-Infrequent Access 설명: 여러 가용성 영역의 복원력이 필요하지 않은 가끔 접근하는 데이터…

AWS
July 13, 2024
AWS S3 Replication

AWS S3 Replication CRR & SRR AWS S3는 비동기 자동 복제를 지원한다. CRR(Cross-Region Replication) SRR(Same-Region Replication) 각 버킷은 서로 다른 AWS 계정에 속할 수 있다. 비동기 복제 지원 버킷 복제를 하기 위해선 특정 버킷에 IAM 읽기 및 쓰기 권한이 필요하다. CRR (Cross-Region Replication)이 필요한 경우 CRR은 데이터를 하나의 AWS 리전에서 다른 AWS 리전으로 복제하는 기능이다. CRR이 필요한 경우는 다음과 같다: 재해 복구 (Disaster Recovery): 손실에 대비하기 위해 데이터를 지리적으로 분리된 다른 리전에 복제한다. 이는 특정 리전에서 발생할 수 있는 자연 재해나 장애로부터 데이터를 보호할 수 있다. 데이터 지역성 규정 준수 (Compliance with Data Residency Requirements): 법률이나 규정에 따라 데이터를 특정 국…

AWS
July 13, 2024
AWS S3

AWS S3 S3는 한 리전에 귀속된다 Amazon S3 버킷은 특정 리전에 생성되며, 해당 리전에 귀속된다. 이를 통해 데이터가 저장되는 물리적 위치를 제어할 수 있으며, 리전 간의 데이터 전송에 따른 지연 시간을 줄일 수 있다. 기본적으로 공개된 URL로 파일에 접근할 수 없다 기본적으로 S3 버킷에 저장된 객체는 비공개이며, 공개된 URL을 통해 접근할 수 없다. 하지만, 특정 설정을 통해 객체에 대한 접근을 허용할 수 있다. 이를 통해 데이터 보안을 유지하면서도 필요한 경우 접근을 제어할 수 있다. 보안 기능 사용자 기반 보안 IAM 정책: 특정 사용자에 대해 어떤 API 호출을 허용할지를 정의한다. IAM 정책을 통해 세밀하게 접근 권한을 설정할 수 있다. 리소스 기반 보안 버킷 정책: S3 콘솔을 통해 설정할 수 있는 버킷 전체에 적용되는 규칙이다. 크로스 계정 액세스를 허용할 수 있다. 객체 접근 제어 목록 (ACL): 객체 수준에서 더 세밀한 권한 제어를 제공한다.…

AWS
July 13, 2024
ELB와 ASG

ELB와 ASG Elastic Load Balancers (ELB) 역할: 백엔드 EC2 인스턴스 간에 트래픽을 분산시킴. 다중 가용 영역 (Multi-AZ): 여러 가용 영역에 걸쳐 트래픽을 분산시켜 고가용성을 보장. 상태 검사 (Health Checks): 백엔드 인스턴스의 상태를 모니터링하여 비정상 인스턴스에 트래픽을 보내지 않음. 4가지 유형: 클래식 로드 밸런서 (Classic Load Balancer, 이전 버전): HTTP/HTTPS와 TCP 트래픽을 지원. -> Deprecated 애플리케이션 로드 밸런서 (Application Load Balancer): HTTP/HTTPS (L7) 트래픽을 분산시키고, 고급 라우팅 기능 제공. 네트워크 로드 밸런서 (Network Load Balancer): TCP (L4) 트래픽을 고성능으로 분산. 게이트웨이 로드 밸런서 (Gateway Load Balancer): L3 트래픽을 분산시켜 게이트웨이 역할 수행. Auto Sca…

AWS
July 12, 2024
EC2 스토리지 종류

EC2 스토리지 종류 Amazon EBS 1번에 1개의 EC2 인스턴스에만 연결 가능한 네트워크 드라이브 스냅샷을 통한 복제 가능. 복제본 간 동기화 지원은 되지 않음. AZ(Availability Zone)에 귀속됨. EC2 Instance Store EC2 인스턴스와 연결 가능한 고성능 하드웨어 디스크 서버와 ‘물리적으로’ 연결됨 -> 고성능 휘발성 인스턴스가 종료되거나 중지되면 사라짐 EFS(Elastic File System) EC2간 공유 네트워크 파일 시스템 한 리전의 100개의 EC2에 연결 가능 EFS-IA 저비용의 EFS 저티어 스토리지 EFS에서 장기간 이용하지 않은 파일은 여기로 옮겨짐 FSx for Windows Windows 운영체제 서버를 위한 네트워크 파일 시스템 FSx for Lustre 머신 러닝, 고성능 컴퓨팅(HPC), 미디어 처리와 같은 고속 처리 워크로드에 최적화된 고성능 파일 시스템 높은 처리량과 낮은 대기시간이 필요한 경우 적합 HPC(H…

Spring
SpringSecurity
June 26, 2024
AuthenticationProvider and Housekeeping

AuthenticationProvider and Housekeeping AuthenticationProvider 고객의 요구사항은 다양할 수 있다. 예를 들어, 어떤 고객은 애플리케이션에서 인증을 수행하는데 유저이름과 비밀번호를 사용하고 싶을 수 있고, 어떤 고객은 OAuth2를 사용하고 싶을 수도 있다. 또 어떤 고객은 몇몇 서비스에 OTP를 적용하는 것을 고려할지도 모른다. 이렇게 수 많은 경우의 요구사항을 프레임워크에서 모두 준비해 줄 수 없기 때문에, 우리는 우리만의 를 커스텀하여 사용해야 한다. AuthenticationProvider 내에는 두 가지 추상 메서드가 있다. 첫 번째는 메서드이다. 반환하는 객체는 인증이 성공적이었는지에 대한 정보를 가지고 있어야 가 다른 를 시도해 볼 수 있다. 두 번째는 메서드이다. 해당 메서드는 우리가 커스텀하는 가 어떤 종류의 인증을 지원하고 싶은지를 서술한다. 어떤 종류의 인증에 관해 이 가 부름을 받아야 하는지 프레임워크에 알려주…

Spring
SpringSecurity
June 26, 2024
Spring Security PasswordEncoder

Spring Security PasswordEncoder Encoding, Encryption and Hashing 고객의 데이터를 저장할 때, 비밀번호와 같은 민감한 값은 Plaintext 형태로 직접 저장해서는 안된다. 데이터 보안의 핵심은 이러한 민감한 정보를 안전하게 보호하는 것이다. 이를 위해 흔히 사용하는 세 가지 방법은 Encoding, Encryption, 그리고 Hashing이다. 각 방법의 특징과 차이점을 이해하는 것은 매우 중요하다. Encoding 목적: 데이터를 다른 형식으로 변환하여 전송하거나 저장하는 과정. 특징: 데이터의 변환은 가독성을 높이기 위한 것이며, 정보 자체의 보안을 고려하지 않는다. 가역성: 가역적이다. 즉, 원래 데이터로 복원할 수 있다. 예: Base64, URL Encoding 등. Encryption 목적: 데이터를 암호화하여 권한이 없는 사람이 읽을 수 없도록 보호. 특징: 암호화 키를 사용하여 데이터를 변환하며, 해당 키를 사용…

Spring
SpringSecurity
June 25, 2024
Spring Security 유저 관리 인터페이스

Spring Security 유저 관리 인터페이스 기본 설정에서의 스프링 시큐리티 시퀀스 기본 설정에서 의 구현체인 를 사용하고, 의 구현체인 를 사용했다. 는 의 확장인 의 구현체인 를 사용했다. 위 내용은 아주 중요하니 숙지하고 들어가야 한다. UserDetails 이전 섹션에서 설명한 /는 유저 정보를 표현하기 위해 인터페이스를 사용한다. 한 번 인터페이스를 살펴보자 : 이 메서드는 엔드 유저의 권한 또는 역할 목록을 보유하고 있고 그래서 이를 이용하여 인가 또는 역할 기반 엑세스 메커니즘을 구현할 수 있다. : 엔드 유저의 비밀번호를 반환한다. : 엔드 유저의 유저 이름을 반환한다. 기본 세부 정보 이후에 유저 계정이 만료되었는지, 잠겨 있는지, 자격 증명이 만료되었는지 등을 확인하는데 도움이 되는 몇가지 다른 메서드들도 제공한다. User 스프링 시큐리티 팀은 를 구현한 를 샘플로 제공한다. 우리는 이 구현체가 마음에 들지 않으면 커스텀한 새로운 구현체를 만들어…

Spring
SpringSecurity
June 24, 2024
Spring Security 기본 설정, 커스텀

Spring Security 기본 설정, 커스텀 기본 필터체인 을 확인하면 다음과 같이 기본 필터체인이 등록되었음을 확인할 수 있다. : 이 구문은 해당 필터체인의 인가 규칙을 정의한다. : 모든 요청에 대해 인증이 필요하다고 설정한다. ⚠️ 최신 스프링 시큐리티에서는 TypeCasting 없이 사용할 수 있도록 개선됐다. -> : 폼 기반 로그인을 설정한다. 프론트엔드와 백엔드가 나뉘어 http로 유저네임과 비밀번호를 전송하는 경우에는 사용하지 않는다. : http 기본 인증을 설정한다. 이 설정은 http 헤더를 통해 인증을 수행할 수 있도록 한다. -> 이는 JWT의 그것과 다르다. 자세한 내용은 아래 참조. HTTP Basic 인증 과정 클라이언트 요청: 클라이언트는 보호된 리소스에 접근하기 위해 서버에 HTTP 요청을 보냅니다. 이때 클라이언트는 아직 인증되지 않은 상태입니다. 서버의 인증 요구: 서버는 클라이언트가 인증되지 않았음을 인지하고, 401 Unauth…

Spring
SpringSecurity
June 24, 2024
Spring Security 디버깅

Spring Security 디버깅 Spring Security Filters 스프링 프레임워크는 Tomcat 서블릿 컨테이너 위에서 돌아가므로 Tomcat의 서블릿 필터 기능에 의존한다. 스프링 시큐리티를 사용하게 되면 이 Tomcat의 FilterChain에 스프링 시큐리티 전용 필터를 하나 끼워넣어 모든 요청을 가로채는데, 이것이 바로 이다. 는 기타 로직이 하나도 없이 단지 스프링 프레임워크 내부의 빈으로 요청을 넘겨주는 프록시 역할만을 할 뿐이다. 는 엔드 유저의 요청에 따라 스프링 시큐리티가 관리하는 을 호출하여 요청을 거기로 프록시한다. 는 인증 및 인가와 관련된 여러 사항을 검증하고 적절한 응답을 반환하는 것을 목표로 한다. 는 위 그림과 같이 여러개로 구성될 수 있으며, 엔드 유저의 요청 URL에 따라 가 적절한 에게 프록시 해준다. Default Spring Security Filter Chain 를 열어보면 다음과 같은 메서드를 확인할 수 있다. 이 메…

Spring
SpringSecurity
June 23, 2024
Spring Security 내부 흐름

Spring Security 내부 흐름 플로우 다이어그램 사용자가 웹 어플리케이션에 자격증명 정보를 입력한다. 이 정보는 으로 넘겨진다. 는 사용자가 입력한 자격증명을 가로채고, 접근 권한이 있는지 확인한다. FIlter Chain에는 : 사용자 이름과 비밀번호를 통한 인증을 처리 : HTTP Basic 인증을 처리 : CSRF 공격을 방지 : 로그아웃 요청을 처리 와 같은 필터들이 있을 수 있다. 는 엔드유저가 보낸 자격증명 정보에서 유저네임과 비밀번호를 추출하여 객체로 변환한다. 에 이미 정보가 존재하는 경우는 이후 해당 객체를 사용하고, 과정을 스킵한다. 객체는 스프링 시큐리티 프레임워크 안에서 엔드유저의 정보를 저장하기 위한 핵심 표준이다. 2단계에서는 유저네임와 자격증명만을 보유한다. 바로 다음과 같은 것들이다. : 사용자 이름 또는 사용자 식별자 : 사용자가 입력한 비밀번호 이후의 인증 과정에서 이 객체에는 더 많은 책임과 역할이 부여될 수 있다. 는 생성된…

Devops
K8S
Proxmox
June 20, 2024
쿠버네티스 온프레미스에 설치하기(with Proxmox)

쿠버네티스 온프레미스에 설치하기(with Proxmox) 쿠버네티스 클러스터를 직접 구성하는 도구 kubeadm 쿠버네티스에서 공식 제공하는 클러스터 생성/관리 도구 kubespray 쿠버네티스 클러스터를 배포하는 오픈소스 프로젝트 다양한 형식으로 쿠버네티스 클러스터 구성가능 온프레미스에서 상용 서비스 클러스터 운영시 유용 다양한 CNI 제공 CNI(Container Network Interface) Container간 통신을 지원하는 VxLAN, Pod Network라고도 부름 다양한 종류의 플러그인이 존재 flannel, calico, weavenet 등이 있다. 본 포스팅에서는 weavenet 샤용 💡CNI란? CNCF(Cloud Native Computing Foundation)의 프로젝트 중 하나인 는 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준이다. 다양한 형태의 컨테이너 런타임과 오케스트레이터 사이의 네트워크 계층을 구현하는 방식이 다양하게 …

Security
June 04, 2024
DoS와 DDoS

DoS와 DDoS DoS 공격 서비스 거부 공격(DoS) DoS 공격은 시스템이나 네트워크의 구조적인 취약점을 공겨갷 정상적인 서비스를 지연 또는 마비시킴 네트워크가 점점 커지고 빨라지는 만큼 DDoS 공격 사례가 일상생활에도 영향을 미쳐 더욱 심각해지고 있음 DoS 공격의 원리와 특징 취약점 공격형 특정 형태의 오류가 있는 네트워크 패킷을 공격 대상에게 전달 처리 로직에 문제가 발생 공격 대상이 그 문제점 때문에 오작동을 일으킴 Boink/Bonk/Teardrop 공격, Land 공격 자원 고갈 공격형 네트워크 대역폭이나 시스템의 CPU, 세션 등의 자원을 소모시키는 형태 Land 공격, Ping of Death 공격, SYN Flooding 공격, Smurf 공격, 동적 HTTP Request Flooding 공격, Slow Http Header DoS(Slowloris) 공격, Slow HTTP POST 공격, Mail Bomb 공격 Ping of Death 공격 죽음의 필…

Security
June 02, 2024
인증 및 인가

인증과 인가 사용자가 정보 자원에 접근하기 위해서는 다음과 같은 3단계 활동이 요구된다. 식별: 주체가 본인임을 주장하는 것 인증: 주체가 자신이 주장한 신원임을 증명하는 것 인가: 인증된 주체가 자원에 접근하여 원하는 작업을 할 수 있는 권한이 있는지 확인하는 것 인증 인증에는 개체 인증과 메시지 인증 두 종류가 있다. 메시지 인증(MDC vs MAC) 개체 인증 개체의 신원을 증명하기 위한 일련의 과정, 여기서 개체는 일반적으로 사람이나 기기를 뜻함 주장자(Claimant): 자신의 신원을 증명하고자 하는 개체(주체) 검증자(Verifier): 요구자의 신원을 증명하기 위해 노력하는 개체(주체) 개체 인증에 사용되는 속성 인식 기반 (패스워드, PIN, 비밀키, 개인키) 소유 기반 (여권, 운전면허증, 신분증, 신용카드) 신체 특징 기반 (사인, 손금, 목소리, 얼굴, 홍채) 인가 주체가 하고자 하는 작업이 해당 주체에게 허가된 작업인지 확인, 권한 부여, 접근 제어 일반적으…

Security
June 01, 2024
터널링과 VPN

Tunneling & VPN 터널링 두 네크워크를 한 네트워크처럼 안전하게 사용할 수 있게 만드는 기술 터널링에서는 [그림-1]과 같이 터널링 장비를 지날 때 일반 라우터나 스위치처럼 원래 패킷에 있던 2계층이나 3계층 정보를 벗겨내지 않고 캡슐화를 수행 VPN 방화벽, 침입 탐지 시스템(IDS)과 함께 사용되는 가장 일반적인 보안 솔루션 중 하나 인터넷 회선을 임대 회선처럼 사용할 수 있게 해주는 솔루션 VPN은 임대 회선과 비슷한 수준의 기밀성을 제공해야 함. -> 암호화 요구 VPN에서 사용하는 암호화 프로토콜에는 , , , 등이 있음 임대 회선 두 지점을 하나의 회선으로 연결하여 24시간 특정 개인 혹은 집단이 단독으로 사용할 수 있도록 하는 서비스 다수의 이용자가 공동으로 사용하는 공중망 서비스와는 달리 고객이 설비 일부를 독점 VPN 암호화 VPN이 임대 회선과 비슷한 수준의 기밀성을 제공해야 하는데 여기에는 암호화가 필요 PPTP:Point-to-Point Tunn…

Security
June 01, 2024
HTTP와 웹 구조

HTTP and Web structure 웹은 HTTP를 이용해서 통신하는 클라이언트와 서버로 구성됨 서버: 대ㅔ이터를 관리하고 클라이언트의 요청을 받아 처리하고 그 결과를 배포하는 시스템 웹 서버: 정적인 페이지를 서비스함 웹 어플리케이션 서버: 클라이언트 요청에 데이터를 동적으로 처리하여 서비스를 지원함 클라이언트: 네트워크를 통해 필요한 서비스를 요청하는 시스템 웹 프레임워크 구조 정적 요청: 로컬 저장소에서 파일을 찾아서 응답 동적 요청: 동적 요청 처리를 위한 웹 애플리케이션 호출 서블릿(servlet): 웹 서비스를 위한 인터페이스, HTTP 요청을 처리할 수 있는 규격 쿠키와 세션 HTTP 프로토콜의 두 가지 특징 비연결지향(Connectionless) HTTP는 한 번의 TCP 연결에서 하나의 요청과 응답을 처리하고 연결을 종료함 클라이언트의 정보가 지속적으로 서버에서 관리되지 않음 무상태 프로토콜(Stateless) 연결을 종료하는 순간 클라이언트와 서버의 통신…

Security
May 21, 2024
XSS, CSRF, and SSRF

XSS, CSRF, 그리고 SSRF 💡Spring security를 설정하면서, 또 웹 보안에 대해 학습하면서 계속 까먹고 구글링하게 되어 확실하게 정리해 놓고자 포스팅을 작성한다. XSS(Cross-Site Scripting) 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법, 의 태그가 사용된다. XSS 공격은 와 로 나뉜다. 토큰 등을 저장할 때 로컬 스토리지 사용시 javascript에서 직접 엑세스 가능하기 때문에 XSS에 취약하다. XSS 취약점은 클라이언트 측에 의해 발생한다. Reflected XSS 일반 유저의 요청(request)에 악성코드 심음 공격 시나리오 공격자가 취약한 사이트 발견. 취약한 사이트에서 사용자 정보를 획득할 수 있는 스크립트가 담긴 URL을 만들어 일반 사용자에게 특정 방법으로 전달. 일반 사용자는 전달받은 URL 링크를 클릭. 일반 사용자 브라우저에서 취약한 사이트로 요청을 전달. 일반 사용자의 브라우저에서 서버로부터의 응답 메시지…

Security
May 21, 2024
Spoofing

Spoofing 사전적 의미는 ‘속이는 것’, 자신을 숨기는 행위(위장)를 의미 MAC 주소, IP 주소, 포트 등 네트워크 통신과 관련된 모든 것이 스푸핑의 대상이 될 수 있음 ARP 스푸핑 MAC 주소를 속이는 것 공격자의 MAC 주소를 로컬에서 통신하고 있는 서버와 클라이언트의 MAC 주소로 속여, 클라이언트에서 서버로 가는 패킷이나 서버에서 클라이언트로 가는 패킷을 공격자에게 향하게 함 공격자가 이 패킷을 읽으면 정상 목적지로 돌려보내 연결이 끊어지지 않도록 유지하는 공격 공격자가 서버와 클라이언트의 통신을 스니핑하려고 ARP 스푸핑 공격을 시도한 예 명호가 철수와 영희의 대화를 도청하는 중 명호는 영희에게 10.0.0.2에 해당하는 가짜 MAC 주소 CC를 알리고 철수에게는 10.0.0.3에 해당하는 가짜 MAC 주소 CC를 알린다. 2. 명호가 철수와 영희 컴퓨터에 서로 통신하는 상대방을 자기 자신으로 알렸기 때문에 철수와 영희는 공격자에게 각각 패킷을 보낸다. 3. …

Security
May 21, 2024
Sniffing

Sniffing 코를 킁킁거리면서 음식을 찾는 동물처럼 데이터 속에서 정보를 찾는 것을 의미 수동적 공격이라고도 함 예) 도청, 전기적 신호를 템페스트 장비로 분석하는 것 등 스니핑 공격의 원리 네트워크 카드에 인식된 데이터 링크 계층과 네트워크 계층의 정보가 자신의 것과 일치하지 않는 패킷은 무시 프러미스 큐어스 모드: 데이터 링크 계층과 네트워크 계층의 필터링을 해제해 스니핑이 가능한 상태(프러미스큐어스 모드 상태에서는 MAC 주소와 IP 주소에 관계없이 모든 패킷을 스니퍼에게 넘겨준다.) 스니핑 공격 툴 TCP Dump 네트워크 관찰 및 관제에도 사용하는 가장 일반적이며 강력한 스니핑 툴 불법적인 해킹 느낌보다는 관리자 느낌이 강함 Snort라는 IDS의 기반 TCP Dump로 획득한 증거 자료는 법적 효력이 있음 fragrouter 스니핑을 보조해주는 툴로, 스니핑한 패킷을 원래 주소지로 다시 보내줌 dsniff 계정 및 패스워드 스니핑을 위한 자동화 툴 해커들이 범죄…

Glossary
May 21, 2024
시뮬레이션 vs 애뮬레이션

시뮬레이션 vs 애뮬레이션 💡가상화 기술에 관해 공부하면서 시뮬레이션과 애뮬레이션의 정확한 차이를 잘 모르겠어서 포스팅을 작성한다. 시뮬레이션 먼저 생각난 부분은, 왜 게임들에선 라는 용어를 쓰지 않고 라는 용어를 사용할까란 점이었다. 시뮬레이션이란, 어떤 시스템이 구조적으로 완전히 동일하다고 볼 수 없는 다른 시스템의 작동을 흉내내어 같은 일을 하도록 하는 것을 의미한다. 간단하게 예시를 들자면, 만약 유로 트럭 시뮬레이터에서 겉으로 보여지는 부분만 흉내내는게 아니라, 타이어 마찰, 엔진 구동 방식, 유리를 통과하는 빛의 굴절, 흙의 튐을 비롯하여 원자단위의 모든 물리 연산을 진행하는 것과 같이, 실제 지구의 모든 것을 그대로 구현한다면 라고 부를 수 있을 것 같다. 그러나 시뮬레이터는 그 모든 것을, 프로그램으로 따지면 CPU를 소프트웨어적으로 구현하거나(각종 instruction 및 레지스터 등) 하진 않는다. 겉으로 보여지는 부분만 흉내내기 때문에 그렇게 세부적으로 구현할…

Glossary
OperatingSystem
May 21, 2024
인터럽트(Interrupt) vs 트랩(Trap)

인터럽트 vs 트랩 💡학습 자료에서 인터럽트와 트랩이 혼용되어 사용되는데, 정확한 차이를 알 수 없어 정리하기 위해 포스팅을 작성한다. 인터럽트와 트랩 정의: 인터럽트는 즉각적인 주의를 요하는 이벤트를 알리는 신호로, 하드웨어 또는 소프트웨어에 의해 발생한다. 정의를 봐도 역시나 헷갈리는데, 그 이유는 트랩이 인터럽트의 일종이기 때문인 듯 하다. 인터럽트는 다시 와 로 분류되는데, 소위 그냥 말하는 는 로, 외부 장치에 의한 인터럽트에 한정되는 듯 하다. javatpoint.com에서는 트랩에 대해 다음과 같이 설명한다. A trap is a software-produced interrupt that can be caused by various factors, including an error in instruction, such as division by zero or illegal memory access. A trap may also be generated when a use…

Backend
Spring
SpringSecurity
April 04, 2024
SecurityBuilder와 SecurityConfigurer

SecurityBuilder와 SecurityConfigurer 본 포스팅 시리즈에서 Spring Security는 Spring Boot 2.7.x 버전을 기준으로한 강의를 최신 스프링 공식 문서를 참고하여 수정하였습니다. Deprecated된 여러 메서드들을 최대한 최신에 맞게 바꾸었지만 완벽하지 않을 수 있습니다. 포인터를 잘 알아야 하는 이유 개념 및 구조 이해 는 빌더 클래스로서 웹 보안을 구성하는 빈 객체와 설정 클래스들을 생성하는 역할을 하며 , 가 있다. 는 Http요청과 관련된 보안처리를 담당하는 필터들을 생성하고 여러 초기화 설정에 관여한다. 는 를 포함하고 있으며 인증 및 인가 초기화 작업은 에 의해 진행된다. 시퀀스 다이어그램 에서 를 호출하면, 의 과 가 호출되어 초기화 작업이 진행된다. 의 가 반환하는 최종 클래스는 내부의 가 반환한 이다. 의 가 반환하는 최종 클래스는 내부의 가 반환한 이다. 는 내부에 을 가지고 있다. 내부의 여러가지 필터들을…

Backend
Spring
SpringSecurity
JWT
April 03, 2024
Spring Security 6.2.1 JWT 설정하기

Spring Security 6.2.1 JWT 설정하기 Security Config 클래스 기본 요소 작성 스프링 시큐리티의 인가 및 설정을 담당하는 클래스이다. Security Config 구현은 스프링 시큐리티의 세부 버전별로 많이 상이하다 (이번 시리즈는 스프링 시큐리티 6.2.1 버전) BCryptPasswordEncoder 등록 커스텀 로직 구현 Form 로그인 방식에서는 클라이언트단이 username과 password를 전송한 뒤 Security 필터를 통과하는데 필터에서 회원 검증을 진행을 시작한다. (회원 검증의 경우 가 호출한 를 통해 진행하며 DB에서 조회한 데이터를 를 통해 받음) 우리의 JWT 프로젝트는 에서 formLogin 방식을 disable 했기 때문에 기본적으로 활성화 되어 있는 해당 필터는 동작하지 않는다. 따라서 로그인을 진행하기 위해서 필터를 커스텀하여 등록해야 한다. 🚀 구현 목표 아이디, 비밀번호 검증을 위한 커스텀 필터() 작성 DB에 …

Backend
Spring
March 23, 2024
Servlet Filter 와 Spring Interceptor

Servlet Filter 와 Spring Interceptor 웹과 관련된 공통 관심사는 AOP를 사용할 수도 있지만 서블릿 필터 또는 스프링 인터셉터를 사용하는 것이 좋다. 웹도 관련된 공통 관심사를 처리할 땐, HTTP의 헤더나 URL의 정보들이 필요한데, 서블릿 필터나 스프링 인터셉터는 를 제공한다. 서블릿 필터 서블릿 필터 흐름 여기서 말하는 서블릿은 스프링 디스패처 서블릿이다. 필터 제한 필터 체인 필터는 순서를 지정하여 자유롭게 구성할 수 있다. 사용예시 LogFilter WebConfig 스프링 인터셉터 스프링 인터셉터 흐름 여기서 말하는 서블릿은 스프링 디스패처 서블릿이다. 스프링 인터셉터 제한 스프링 인터셉터 체인 스프링 인터셉터도 체이닝 기능을 사용할 수 있다. 스프링 인터셉터 인터페이스 서블릿 필터의 경우 단순하게 하나만 제공되나, 인터셉터는 컨트롤러 호출 전(), 호출 후(), 요청 완료 이후()와 같이 단계적으로 잘 세분화 되어 있다. 서블릿 필터의 경우 …

AWS
Linux
Troubleshooting
March 19, 2024
Ubuntu에서 Swap Memory 설정하기

Ubuntu에서 Swap Memory 설정하기 개요 AWS 프리티어에서 EC2를 사용하는데, Jenkins 에서 gradle 빌드 시 EC2 인스턴스가 완전 먹통이 되어버리는 문제가 발생했다. 로그를 살펴보고 구글링을 하다보니 원인이 램 용량 부족때문인 것 같아 Swap Memory 설정을 하였다. Swap Memory 설정하기 위 명령어로 하드디스크 용량을 확인한다. 여기서는 /dev/root가 하드디스크를 나타낸다. 위 명령어로 현재 사용하고 있는 메모리와 Swap 메모리를 확인할 수 있다. 0이므로 Swap 메모리가 설정되지 않은 상태이다. Ubuntu에서는 Swapfile을 이용하여 Swap 메모리를 설정할 수 있다. 프리티어 EC2 인스턴스의 램은 1GB이기 때문에 Swap 메모리 최대치(2배)인 2GB로 설정한다. 그리고 swapfile의 권한을 수정해준다. : 해당 파일을 스왑 공간으로 사용할 수 있도록 준비한다. 출력에는 스왑 파일을 크기와 UUID가 표시된다…

Backend
Spring
March 16, 2024
Bean Validation

Bean Validation Spring Framework에서 제공하는 Validator를 사용하여 로직을 분리하는 방법도 있지만, 본 포스팅에서는 더 편리하고 자주 사용되는 방법인 Bean Validation에 대해 다룬다. Bean Validation 관련 라이브러리 추가가 필요하다. 예제 코드 환경 설정 errors.properties 생성 에 errors 추가하여 errors.properties 등록 User 클래스 , , 의 차이는 다음과 같다. : null값을 허용하지 않는다. : null값과 ""(초기화된 String)을 허용하지 않는다. : null값과 "", ” “를 모두 허용하지 않는다. 와 같이 디폴드 메세지를 지정 가능하다. 추가로 어노테이션도 있는데, 이는 Hibernate에서 제공한다. UserController 클래스 Spring에서 자동으로 빈을 등록해주는 를 Autowired해주기 위해 사용 인자로 받는 에 어노테이션을 추가하여 검증 수행 인…

Backend
Spring
March 13, 2024
Spring 로그(log) 사용 및 레벨 설정

로그 로그를 사용하면 다음 이점이 있다. 쓰레드 정보, 클래스 이름 같은 부가 정보를 함꼐 볼 수 있고, 출력 모양을 조정할 수 있다. 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다. 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다. 특히 파일로 남길 떄는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다. 성능도 일반 System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 그래서 실무에서는 꼭 로그를 사용해야 한다. spring boot 로깅 라이브러리는 slf4j를 사용한다. slf4j는 인터페이스이며, 그 구현체로 spring boot는 logback을 사용한다. 로그 기본 사용법 로그를 출력한다. @Slf4j 롬복(lombok) 어노테이션을 사용하면 Logger 정의 필요없이 바로 다음과 같이 사용 가능하다. 로그 레벨 설정 …

ProjARJS
AWS
Jenkins
Docker
March 11, 2024
EC2 Nginx 및 Jenkins 구성

EC2 Nginx 및 Jenkins 구성 Nginx 및 Jenkins 사용으로 얻는 이점 Nginx 장점 Nginx를 통한 리버스 프록시 설정: Nginx는 정적 파일을 서빙하고 동시에 Jenkins 서버에 대한 리버스 프록시로 동작할 수 있다. 이를 통해 클라이언트 요청을 효과적으로 분산하고, 보안을 강화할 수 있다. 보안 강화: Nginx를 사용하여 SSL 인증서를 설정하고 HTTPS를 통해 통신을 암호화할 수 있다. 또한 Nginx는 악의적인 공격으로부터 서버를 보호하기 위한 추가 보안 계층을 제공할 수 있다. 로드 밸런싱 및 부하 분산: Nginx를 사용하여 여러 WAS를 로드 밸런싱하여 트래픽을 분산할 수 있다. 이는 서버의 성능과 가용성을 향상시키고, 고가용성을 유지할 수 있게 해준다. 정적 파일 서빙: Nginx는 정적 파일을 빠르게 서빙하는 데 효율적이므로, 프론트단의 빌드 결과물이나 사용자 정의 정적 파일을 효과적으로 제공할 수 있다. 백엔드 서버와의 통합: Ngi…

ProjARJS
React
March 09, 2024
AWS EC2에서 Nginx를 이용하여 react 배포하기

AWS EC2에서 Nginx를 이용하여 react 배포하기 편의를 위해 react로 배포했지만 html, css, js파일 등 정적파일만 있다면 배포 가능하다. EC2 인스턴스 생성 AWS 로그인 후 EC2 서비스에 들어간다. 우측 상단에서 리전(region)을 변경할 수 있는데, 나는 서울로 했다. 오하이오, 버지니아 등으로 설정 시 물리적 거리 때문에 통신 속도 차이가 크다. 좌측 메뉴바의 인스턴스 클릭, 우측 주황색 버튼인 인스턴스 시작을 누른다. 인스턴스 이름을 설정하고 인스턴스에서 사용할 운영체제를 선택한다. 나의 경우는 Ubuntu로 했다. 과거 Amazon Linux를 사용한 전적이 있는데, 오류 발생시 정보 찾기도 힘들고 각종 툴들과 호환성이 떨어져 해당 운영체제는 비추천한다. 키 페어는 나의 경우는 RSA .pem을 통해 설정하였다. 굳이 필요하지 않다면 키페어 없이 인스턴스를 시작해도 되나 보안상 좋지 않다. 그 이외 설정 사항들은 전부 기본으로 두고 인스턴스…

ProjARJS
Spring
March 08, 2024
간단한 좌표 에코 서버

간단한 좌표 에코 서버 프로토타입 테스트 클라이언트 index.html 위도와 경도를 입력받아 을 통해 파일의 함수를 호출한다. 는 서버로부터 받은 데이터를 표시하는데 사용하는 컨테이너이다. ProjectARJS.js : Send 버튼 클릭 시 실행되는 메서드이다. POST 방식으로 서버에 데이터를 보낸다. request body에는 Latitude와 Longitude에 기입한 내용이 json객체로 변환되어 삽입된다. 서버에서는 해당 json 데이터를 받아 그대로 클라이언트에 다시 보낸다. : 서버로부터 성공적으로 데이터를 가져오면 ‘좌표 전송 성공’ 메시지와 함께 실행되는 메서드이다. 응답받은 json데이터를 기반으로 id:echoResponse인 컨테이너에 에코 받은 위도와 경도를 출력한다. 서버 CordinateDTO.java 좌표값을 멤버변수로 가지는 CoordinateDTO 클래스를 정의하였다. 라이브러리를 통해 Getter, Setter 및 생성자(AllArgsCo…

Server
TCP/IP
C
C++
February 12, 2024
Overlapped IO와 IOCP

Overlapped IO와 IOCP Non-Blocking 모드의 소켓 구성하기 앞서 epoll관련 포스팅에서 논블로킹 모드로 동작하는 소켓의 생성한 적이 있다. 이와 유사하게 윈도우에서는 다음의 함수호출을 통해서 논블로킹 모드로 소켓의 속성을 변경한다. 위의 코드에서 호출하는 ioctlsocket 함수는 소켓의 IO방식을 컨트롤하는 함수이다. 그리고 위와 같은 형태로의 함수호출이 의미하는 바는 다음과 같다. “핸들 hLisnSock이 참조하는 소켓의 입출력 모드(FIONBIO)를 변수 mode에 저장된 값의 형태로 변경한다.” 즉, FIONBIO는 소켓의 입출력 모드를 변경하는 옵션이며, 이 함수의 세 번쨰 인자로 전달된 주소 값의 변수에 0이 저장되어 있으면 블로킹 모드로, 0이 아닌 값이 저장되어 있으면 논블로킹 모드로 소켓의 입출력 속성을 변경한다. 그리고 이렇게 속성이 논블로킹 모드로 변경되면, 논블로킹 모드로 입출력 되는 것 이외에 다음의 특징도 지니게 된다. 클라이언트…

Server
TCP/IP
C
C++
February 04, 2024
Overlapped IO 모델

Overlapped IO 모델 이전 Asychronous Notification I/O 모델에서 비동기로 처리되었던 것은 ‘IO’가 아닌 ‘Notification(알림)‘이었다. 그러나 여기서는 IO를 비동기로 처리하는 방법에 대해 설명한다. 이 둘의 차이점을 명확히 알고 장단점 구분할 수 있어야 이후의 IOCP를 쉽게 공부할 수 있다. IO 중첩 💡 헷갈려서 정리하는 비동기와 논블로킹 차이 동기 / 비동기 : IO 작업 A,B,C를 요청했을때, 응답 순서가 A,B,C가 보장되면 동기, 보장되지 않으면 비동기 블로킹 / 논블로킹 : 함수가 작업 완료 전까지 반환되지 않으면 블로킹, 작업 완료 전에 호출과 거의 동시에 반환하면 논블로킹 Overlapped IO socket의 생성 : 프로토콜 체계 정보 전달 : 소켓의 데이터 전송방식에 대한 전달 : 두 소켓 사이에 사용되는 프로토콜 정보 전달 : 생성되는 소켓의 특정 정보를 담고 있는 WSAPROTOCOL_INFO 구조체 변수의 주…

Server
TCP/IP
C
C++
February 03, 2024
Asynchronous Notification IO 모델

Asynchronous Notification IO 모델 WSAEventSelect 함수와 Notification : 관찰대상인 소켓의 핸들 전달 : 이벤트 발생유무의 확인을 위한 Event 오브젝트의 핸들 전달. : 감시하고자 하는 이벤트의 유형 정보전달. 즉, WSAEventSelect 함수는 매개변수 s에 전달된 핸들의 소켓에서 lNetworkEvents에 전달된 이벤트 중 하나가 발생하면, hEventObject에 전달된 핸들의 커널 오브젝트를 상태로 바꾸는 함수이다. 때문에 이 함수를 가리켜 “Event 오브젝트와 소켓을 연결하는 함수”라고 하기도 한다. 세번째 인자인 에 전달할 수 있는 이벤트의 종류는 다음과 같다. : 수신할 데이터가 존재하는가? : 블로킹 없이 데이터 전송이 가능한가? : Out-of-Band 데이터가 수신되었는가? : 연결 요청이 있었는가? : 연결의 종료가 요청되었는가? select 함수는 여러 소켓을 대상으로 호출이 가능한데, WSAEventS…

Server
TCP/IP
C
C++
February 03, 2024
동기화 기법의 분류와 CRITICAL_SECTION 동기화

동기화 기법의 분류와 CRITICAL_SECTION 동기화 유저모드와 커널모드 유저모드: 응용 프로그램이 실행되는 기본 모드로, 물리적인 영역으로의 접근이 허용되지 않으며, 접근할 수 있는 메모리의 영역에도 제한이 따른다. 커널모드: 운영체제가 실행될 때의 모드로, 메모리 뿐만 아니라, 하드웨어의 접근에도 제한이 따르지 않는다. 유저모드 동기화 운영체제의 도움 없이 응용 프로그램 상에서 진행되는 동기화가 바로 유저모드 동기화이다. 유저모드 동기화의 가장 큰 장점은 다음과 같다. “속도가 빠르다.” CRITICAL_SECTION 기반의 동기화 또한 유저모드 동기화의 일종이다. 커널모드 동기화 유저모드 동기화에 비해 제공되는 기능이 더 많다. Dead-Lock에 걸리지 않도록 타임아웃의 지정이 가능하다. Mutex, Semaphore, Event 기반의 동기화가 커널모드 동기화의 일종이다. CRITICAL_SECTION 기반의 동기화 CRITICAL_SECTION 기반의 동기화에서는 …

Server
TCP/IP
C
C++
February 03, 2024
Windows 쓰레드

Windows 쓰레드 윈도우에서의 쓰레드 생성방법 운영체제는 쓰레드의 관리를 위해서 커널 오브젝트도 함께 생성한다. 이 커널 오브젝트의 구분자 역할을 하는, 정수로 표현되는 ‘핸들(Handle)‘을 반환한다. 참고로 핸들은 리눅스의 파일 디스크립터에 비유된다. : 쓰레드의 보안관련 정보전달, 디폴트 보안설정을 위해서 NULL 전달. : 쓰레드에게 할당할 스택의 크기를 전달, 0 전달시 디폴트 크기의 스택 생성. : 쓰레드의 main 함수정보 전달. : 쓰레드의 main 함수호출 시 전달할 인자정보 전달. : 쓰레드 생성 이후의 행동을 결정, 0을 전달하면 생성과 동시에 실행 가능한 상태가 된다. : 쓰레드 ID의 저장을 위한 변수의 주소 값 전달. 복잡해 보이지만, 실제로 신경 쓸 것은 와 두 가지 정도이며, 나머지는 0 또는 NULL을 전달하면 된다. 윈도우 쓰레드의 소멸시점 윈도우 쓰레드의 소멸시점은 쓰레드에 의해서 처음 호출된 쓰레드의 main 함수가 반환하는 시점이다(이렇…

Server
TCP/IP
C
C++
January 31, 2024
Epoll의 이해와 활용

Epoll의 이해와 활용 select 기반의 IO 멀티플렉싱이 느린 이유 함수호출 이후에 항상 등장하는 모든 파일 디스크립터를 대상으로 하는 반복문 함수를 호출할 때마다 인자로 매번 전달해야 하는 관찰대상에 대한 정보들 epoll의 경우는 다음의 장점이 있다. 상태변화의 확인을 위한,전체 파일 디스크립터를 대상으로 하는 반복문이 필요 없다. 함수에 대응하는 함수호출 시, 관찰대상의 정보를 매번 전달할 필요가 없다. Epoll의 함수 : epoll 파일 디스크립터 저장소 생성 : 저장소에 파일 디스크립터 등록 및 삭제 : select 함수와 마찬가지로 파일 디스크립터의 변화를 대기한다. select 방식에서는 관찰대상인 파일 디스크립터의 저장을 위해서 fd_set형 변수를 직접 선언했었다. 하지만 epoll 방식에서는 관찰대상인 파일 디스크립터의 저장을 운영체제가 담당한다. 이때 사용되는 함수가 로, 파일 디스크립터의 저장을 위한 저장소의 생성을 운영체제에게 요청한다. 관찰대상…

Server
TCP/IP
C
C++
January 19, 2024
다양한 입출력 함수

다양한 입출력 함수 send & recv 입출력 함수 윈도우 기반이 아닌 리눅스의 send & recv 함수는 다음과 같다. : 데이터 전송 대상과의 연결을 의미하는 소켓의 파일 디스크립터 전달 : 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달 : 전송할 바이트 수 전달 : 데이터 전송 시 적용할 다양한 옵션 정보 전달 : 데이터 수신 대상과의 연결을 의미하는 소켓의 파일 디스크립터 전달 : 수신된 데이터를 저장할 버퍼의 주소값 전달 : 수신할 수 있는 최대 바이트 수 전달 : 데이터 수신 시 적용할 다양한 옵션 정보 전달 flags 매개변수에 전달 가능한 옵션 목록 옵션(Option) 의 미 send recv MSG_OOB 긴급 데이터(Out-of-band data)이 전송을 위한 옵션 ⭕️ ⭕ MSG_PEEK 입력버퍼에 수신된 데이터의 존재유무 확인을 위한 옵션 ⭕ MSG_DONTROUTE 데이터 전송과정에서 라우팅(Routing) 테이블을 참조하지 않을 것을 요구하는 옵…

Server
TCP/IP
C
C++
January 19, 2024
IO 멀티플렉싱 기반의 서버(select)

IO 멀티플렉싱 기반의 서버 멀티플렉싱 : 하나의 통신채널을 통해서 둘 이상의 데이터를 전송하는데 사용되는 기술 여기서는 하나의 프로세스로 서비스를 제공하는 것을 말함. select 함수의 이해와 서버의 구현 함수를 이용하는 것이 멀티플렉싱 서버의 구현에 있어서 가장 대표적인 방법이다. 윈도우에도 이와 동일한 이름으로 동일한 기능을 제공하는 함수가 있어 이식성도 좋다. select 함수의 기능과 호출 순서 함수를 사용하면 한곳에 여러 개의 파일 디스크립터를 모아놓고 동시에 이들을 관찰할 수 있다. 이때 관찰할 수 있는 항목은 다음과 같다. 수신한 데이터를 지니고 있는 소켓이 존재하는가? 블로킹되지 않고 데이터의 전송이 가능한 소켓은 무엇인가? 예외상황이 발생한 소켓은 무엇인가? 💡관찰항목 각각을 가리켜 ‘이벤트(event)‘라 한다. 위에서 정리한 관찰항목 각각을 가리켜 이벤트라 하고, 관찰항목에 속하는 상황이 발생했을 때, ‘이벤트(event)가 발생했다’ 라고 표현한다. 이…

Server
TCP/IP
C
C++
January 18, 2024
다중 접속 서버

다중 접속 서버 위 그림에서 보이듯이 클라이언트의 서비스 요청(연결 요청)이 있을 때마다 에코 서버는 자식 프로세스를 생성해서 서비스를 제공한다. 즉, 서비스를 요청하는 클라이언트의 수가 다섯이라면 에코 서버는 추가로 다섯 개의 자식 프로세스를 생성해서 서비스를 제공한다. 이를 위해서 에코 서버는 다음의 과정을 거쳐야 한다. 이것이 기존 에코 서버와의 차이점이다. 1단계 : 에코 서버(부모 프로세스)는 accept 함수호출을 통해서 연결요청을 수락한다. 2단계 : 이때 얻게 되는 소켓의 파일 디스크립터를 자식 프로세스를 생성해서 넘겨준다. 3단계 : 자식 프로세스는 전달받은 파일 디스크립터를 바탕으로 서비스를 제공한다. 다중접속 에코 서버의 구현 함수로 인해 부모 프로세스의 모든 것이 복사된다. 그러나, 소켓은 복사되지 않는다! 소켓을 가리키는 파일 디스크립터만이 복사되었을 뿐이다. 소켓은 프로세스가 아닌 운영체제가 관리하기 때문이다. 하나의 소켓에 두 개의 파일 디스크립터가 …

Server
TCP/IP
C
C++
January 17, 2024
좀비 프로세스

좀비 프로세스 본 포스팅의 내용은 windows os에서 적용되지 않는 linux os의 내용임. 로 생성된 자식 프로세스의 소멸을 위해서는 부모 프로세스가 자식 프로세스의 전달 값을 요청해야 한다. 요청을 위한 구체적인 방법을 이 포스팅에서 설명한다. 좀비 프로세스의 소멸1: wait 함수의 사용 위 함수 호출 시 이미 종료된 자식 프로세스가 있는 경우 : 자식 프로세스가 종료되면서 전달한 값이 매개변수로 전달된 주소의 변수에 저장됨 종료된 자식 프로세스가 없는 경우 : 자식 프로세스가 종료될때까지 블로킹(blocking)됨 블로킹(대기) 상태에서는 CPU 코어를 점유하지 않는다. 자식 프로세스가 종료되면 부모 프로세스는 운영체제로부터 해당 상태를 전달받아 블로킹이 해제된다. 에 저장되는 값은 다음과 같다. : 자식 프로세스가 정상 종료한 경우 TRUE 반환 : 자식 프로세스의 전달 값(return value)을 반환 ⛔️는 statloc 하위 8비트 값만 추출하기 때문에 0~…

Server
TCP/IP
C
C++
January 16, 2024
소켓의 옵션과 입출력 버퍼의 크기

소켓의 옵션과 입출력 버퍼의 크기 소켓의 다양한 옵션 지금까지의 예제들은 매우 간단했기 때문에 특별히 소켓의 특성을 조작할 필요가 없었다. 그러나 소켓의 특성을 변경시켜야만 하는 경우도 흔히 발생한다. 그럼 먼저 다양한 소켓의 옵션 중 일부를 표를 통해 정리해 보이겠다. Protocol Level Option Name Get Set SOL_SOCKET SO_SNDBUF SO_RCVBUF SO_REUSEADDR SO_KEEPALIVE SO_BROADCAST SO_DONTROUTE SO_OOBINLINE SO_ERROR SO_TYPE O O O O O O O O O O O O O O O O X X IPPROTO_IP IP_TOS IP_TTL IP_MULTICAST_TTL IP_MULTICAST_LOOP IP_MULTICST_IF O O O O O O O O O O IPPROTO_TCP TCP_KEEPALIVE TCP_N…

Server
TCP/IP
C
C++
January 16, 2024
IP 주소와 도메인 이름 사이의 변환

IP 주소와 도메인 이름 사이의 변환 도메인 이름을 이용해서 IP 주소 얻어오기 해당 함수는 구조체 변수에 담겨서 반환되는데, 이 구조체는 다음과 같이 정의되어 있다. 위의 구조체 정의를 보니, IP정보만 반환되는 것이 아니라, 여러가지 다른 정보들도 덤으로 반환되는 것을 알 수 있다. 복잡하게 생각하지 않아도 된다. 도메인 이름을 IP로 변환하는 경우에는 만 신경써도 된다. : 공식 도메인 이름(Ofiicial domain name)이 저장된다. : 하나의 IP에 매핑된 다른 여러 도메인 이름의 별칭리스트를 반환한다. : IPv4만 아니라 IPv6도 지원한다. IPv4의 경우는 이 저장된다. : 함수호출의 결과로 반환된 IP주소의 크기가 담긴다. IPv4는 4바이트, IPv6는 16바이트이다. : 이 멤버를 통해서 도메인 이름에 대한 IP주소가 정수의 형태로 반환된다. 접속자가 많은 서버는 여러 IP주소를 둬서 부하를 분산시킨다. gethostbyname 다음은 간단한 예제를 …

Server
TCP/IP
C
C++
January 16, 2024
TCP 기반의 Half-close

TCP 기반의 Half-close TCP에서는 연결과정보다 중요한 것이 중료과정이다. 연결과정에서는 큰 변수가 발생하지 않지만 종료과정에서는 예상치 못한 일이 발생할 수 있기 때문이다. 따라서 종료과정은 명확해야 한다. 일방적인 연결종료의 문제점 리눅스의 함수호출과 윈도우의 함수호출은 완전종료를 의미한다. 완전종료라는 것은 데이터를 전송하는 것은 물론이거니와 수신하는 것 조차 더 이상 불가능한 상황을 의미한다. 때문에 한쪽에서의 일방적인 또는 함수호출은 경우에 따라서 우아해 보이지 못할 수 있다. 위 그림은 양방향을 통신하고 있는 두 호스트의 상황을 묘사한 것이다. 호스트 A가 마지막 데이터를 전송하고 나서 close 함수의 호출을 통해서 연결을 종료하였다. 때문에 그 이후부터 호스트 A는 호스트 B가 전송하는 데이터를 수신하지 못한다. 아니! 데이터 수신과 관련돤 함수의 호출 자체가 불가능하다. 때문에 결국엔 호스트 B가 전송한, 호스트 A가 반드시 수신해야 할 데이터라…

Server
TCP/IP
C
C++
January 15, 2024
UDP기반 서버, 클라이언트 구현

UDP기반 서버, 클라이언트 구현 UDP 서버, 클라이언트는 TCP와 같이 연결된 상태로 데이터를 송수진하지 않는다. 때문에 TCP와 달리 연결 설정의 과정이 필요 없다. 따라서 TCP 서버 구현과정에서 거쳤던 listen 함수와 accept 함수의 호출은 불필요하다. UDP 소켓의 생성과 데이터의 송수신 과정만 존재할 뿐이다. UDP에서는 서버건 클라이언트건 하나의 소켓만 있으면 된다. UDP 기반의 데이터 입출력 함수 : 데이터 전송에 사용될 UDP 소켓의 파일 디스크립터를 인자로 전달 : 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달 : 전송할 데이터 크기를 바이트 단위로 전달 : 옵션 지정에 사용되는 매개변수, 지정할 옵션이 없다면 0 전달 : 목적지 주소정보를 담고 있는 sockaddr 구조체 변수의 주소 값 전달 : 매개변수 to로 전달된 주소 값의 구조체 변수 크기 전달 TCP 기반의 출력함수와 가장 비교되는 것은 목적지 주소정보를 요구한다는 점이다. : 데이터 …

Server
TCP/IP
C
C++
January 14, 2024
TCP기반 서버, 클라이언트 구현

TCP기반 서버, 클라이언트 구현 TCP 서버에서의 기본적인 함수호출 순서 제일 먼저 socket 함수의 호출을 통해서 소켓을 생성한다. 그리고 주소정보를 담기 위한 구조체 변수를 선언 및 초기화해서 bind함수를 호출하여 소켓에 주소를 할당한다. 이 두 단계는 이미 여러분에게 설명한 내용이니, 이제 그 이후의 과정에 대해서 설명하겠다. 연결요청 대기상태로의 진입(listen) bind 함수호출을 통해서 소켓에 주소까지 할당했다면, 이번에는 listen 함수호출을 통해서 ‘연결요청 대기상태’로 들어갈 차례이다. 그리고 listen 함수가 호출되어야 클라이언트가 연결요청을 할 수 있는 상태가 된다. 즉, listen 함수가 호출되어야 클라이언트는 연결요청을 위해서 connect 함수를 호출할 수 있다. : 연결요청 대기상태에 두고자 하는 소켓의 파일 디스크립터 전달, 이 함수의 인자로 전달된 디스크립터의 소켓이 서버 소켓(리스닝 소켓)이 된다. : 연결요청 대기 큐(Queue)의 …

Server
TCP/IP
C
C++
January 13, 2024
주소 체계와 데이터 정렬

주소 체계와 데이터 정렬 주소정보의 표현 이 구조체는 함수에 구조체를 전달하는 용도로 사용된다. POSIX 이나 내부의 구조체에는 생소한 자료형이 있다. 이들은 POSIX 표준에 정의되어 있다. (확장성을 고려)      자료형 이름                          자료형에 담길 정보                     선언된 헤더파일 int8_t uint8_t int16_t uint16_t int32_t uint32_t signed 8-bit int unsigned 8-bit int (unsigned char) signed 16-bit int unsigned 16-bit int (unsigned short) signed 32-bit int unsigned 32-bit int (unsigned long) sys/types.h sa_family_t socklen_t 주소체계(address family) 길이정보(length of struct) sy…

Server
TCP/IP
C
C++
January 13, 2024
소켓의 타입과 프로토콜의 결정

소켓의 타입과 프로토콜의 결정 소켓의 생성 : 소켓이 사용할 프로토콜 체계(Protocol Family) 정보 전달 : 소켓의 데이터 전송방식에 대한 정보 전달 : 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달 프로토콜 체계(Protocol Family) 이름                               프로토콜 체계(Protocol Family)                               PF_INET IPv4 인터넷 프로토콜 체계 PF_INET6 IPv6 인터넷 프로토콜 체계 PF_LOCAL 로컬 통신을 위한 UNIX 프로토콜 체계 PF_PACKET Low Level 소켓을 위한 프로토콜 체계 PF_IPX IPX 노벨 프로토콜 체계 소켓의 타입 연결지향형 소켓(SOCK_STREAM) 중간에 데이터가 소멸되지 않고 목적지로 전송된다. 전송 순서대로 데이터가 수신된다. 전송된 데이터의 경계가 존재하지 않는다. 데이터를 전송하는 컴퓨터가 세 번의 write…

Server
TCP/IP
C
C++
January 12, 2024
네트워크 프로그래밍과 소켓의 이해

네트워크 프로그래밍과 소켓의 이해 소켓의 전화기에의 비유 OS의 소켓은 전화기에 비유할 수 있다. 서버 비유 함수 반환 전화기의 장만 성공 시 파일 디스크립터, 실패 시 -1 전화번호의 부여 성공 시 0, 실패 시 -1 전화 케이블에 연결 성공 시 0, 실패 시 -1 수화기를 들기 성공 시 파일 디스크립터, 실패 시 -1 클라이언트          비유          함수                  반환                  전화 걸기 성공 시 0, 실패 시 -1 서버 프로그램의 구현 클라이언트 프로그램의 구현 Linux기반 파일(소켓) 조작하기 💡 리눅스는 “모든 것은 파일이다”라는 철학을 가지고 있어서, 파일과 소켓을 포함하여 다양한 자원을 파일로 취급함. 리눅스에서는 소켓을 파일처럼 다루기 때문에, 파일 입출력과 동일하게 조작할 수 있다. 명칭 리눅스 : 파일 디스크립터 윈도우 : 파일 핸들 표준 입출력 및 표준 에러 파일 디스크립터 파일 디스크립터 대…

C
C++
Understanding_and_Using_C_Pointers
January 11, 2024
동적 메모리 관리

동적 메모리 관리 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 동적 메모리 관리 C 프로그램은 런타임 시스템 안에서 실행된다. 런타임 시스템은 일반적으로 운영체제에서 제공되는 환경이며, 많은 프로그램 기능들과 함께 스택(stack)과 힙(heap)을 지원한다. C99 표준에서 가변 길이 배열(Variable Length Array)이 도입되었다. 이 배열의 크기는 컴파일 될 때가 아니라 실행될 때 결정된다. 하지만 일단 가변 길이 배열이 생성되고 나면, 여전히 크기를 변경할 수 없다. 동적 메모리 할당은 할당, 해제 함수를 사용하여 수동으로 처리된다. 이 과정을 동적 메모리 관…

C
C++
Understanding_and_Using_C_Pointers
January 11, 2024
일반적인 포인터 사용

일반적인 포인터 사용 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 일반적인 포인터 사용 포인터는 매우 다양한 방법으로 사용된다. 이번 포스팅에서는 다음을 포함한 포인터의 다양한 사용법에 대해서 다룬다. 다중 수준 간접지정 상수 포인터(중요) 다중 수준 간접지정 포인터는 다중 수준 간접지정(indirection)을 이용할 수 있다. 어떤 변수가 포인터에 대한 포인터로 선언된 경우를 흔하게 볼 수 있는데, 이를 이중 포인터(double pointer) 라고 부르기도 한다. 이중 포인터에 대한 좋은 예는 main 함수에 전통적인 argc와 argv 매개변수를 통해 프로그램 실행 인자…

C
C++
Understanding_and_Using_C_Pointers
January 11, 2024
포인터의 크기와 데이터 타입

포인터의 크기와 데이터 타입 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 포인터 크기 포인터의 크기는 애플리케이션의 호환성과 다른 환경으로의 이식 가능성을 고민할 때 문제가 된다. 최근의 대부분의 OS에서 포인터의 크기는 일반적으로 포인터 타입에 상관없이 같다. 예를 들면, char에 대한 포인터(char*)는 구조체에 대한 포인터와 크기가 같다! C 표준에서 모든 데이터 타입에 대한 포인터의 크기가 같아야 한다고 명시하고 있지만 않지만, 일반적으로 포인터의 크기는 동일하다. 하지만 함수에 대한 포인터와 데이터에 대한 포인터의 크기는 다를 수도 있다. C는 코드와 데이터 포인터…

C
C++
Understanding_and_Using_C_Pointers
January 10, 2024
void포인터와 전역, 정적포인터

void포인터와 전역, 정적포인터 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 void 포인터 void 포인터는 어떤 타입의 데이터도 참조할 수 있는 범용 포인터다. 아래에 void 포인터 선언의 예제가 있다. void 선언에는 두 가지 흥미로운 것이 있다. void 포인터는 char 포인터와 같은 표현과 메모리 정렬 방법을 사용한다. void 포인터는 다른 포인터와 절대 같지 않다. 하지만 NULL 값이 할당된 두 개의 void 포인터는 서로 같다. void 포인터의 실제 동작은 시스템에 따라 다르다. ⚠️ void 포인터는 데이터 타입의 포인터에 사용되며, 함수 포인터에는 사…

C
C++
Understanding_and_Using_C_Pointers
January 09, 2024
Null의 개념

Null의 개념 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 Null의 개념 널(Null)은 매우 흥미로운 주제다. 하지만 종종 널이 가진 다양한 개념들이 잘못 이해되거나 혼란을 일으킨다. 널은 다음과 같은 개념들을 포함한다. 널 개념 널 포인터 상수 NULL 매크로 NUL 아스키 문자(\0) 널 문자열 널 문장(;) 포인터에 NULL이 할당되면 해당 포인터는 아무것도 가리키지 않음을 의미한다. 널 개념은 포인터가 다른 포인터와 다른 특별한 값을 가질 수 있음을 의미한다. 널이 할당된 포인터는 메모리의 어떤 영역도 가리키지 않으며 두 개의 널 포인터는 항상 서로 같다. 실제 널…

C
C++
Understanding_and_Using_C_Pointers
January 09, 2024
포인터 선언하기

포인터 선언하기 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 포인터 선언하기 포인터 변수는 가리킬 대상의 데이터 타입과 별표 그리고 변수 이름을 순서대로 나열하여 선언한다. 별표 주위에 공백 문자를 사용하는지 여부는 선언에 전혀 영향을 주지 않는다. 다음 선언들은 모두 동등하다 공백 사용은 단지 사용자 취향의 문제다. 별표는 변수를 포인터로 선언하는 데도 사용되지만, 두 수를 곱하거나 포인터를 역참조하는 데도 사용된다. 포인터 선언을 읽는 방법 포인터 선언을 이해하기 쉽게 읽는 방법은 바로 뒤에서부터 읽는 것이다. 변수 pci : 포인터 변수 pci : 정수를 가리키는 포인…

C
C++
Understanding_and_Using_C_Pointers
January 09, 2024
포인터를 잘 알아야 하는 이유

포인터를 잘 알아야 하는 이유 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 포인터를 잘 알아야 하는 이유 포인터는 다음과 같은 용도로 사용된다. 빠르고 효율적인 코드 작성 다양한 문제에 대한 효과적인 해결 방법 제공 동적 메모리 할당 지원 작고 간결한 표현의 사용 큰 오버헤드 없이 데이터 구조를 포인터로 전달 함수의 매개변수로 전달된 데이터 보호 포인터는 하드웨어의 구조에 좀 더 가까우므로 빠르고 효율적인 코드의 작성이 가능하다. ⇨ 컴파일러는 좀 더 쉽게 포인터의 동작을 머신 코드로 변환할 수 있다. 포인터는 다른 연산자에 비해 발생하는 오버헤드가 적다. (ex: 배열과 포인…

Server
C++
Backend
January 08, 2024
TLS(Thread Local Storage)

TLS(Thread Local Storage) 쓰레드마다 갖고 있는 로컬 저장소 != 스택 동물원의 호랑이를 생각해보자 공통 영역에서 큼지막한 덩어리를 가져온 다음 필요한걸 꺼내쓰면 처음 가져올 때만 경합이 발생하고 큰 덩어리에서 고를 때는 경합이 필요 없다. TLS 예제 로 받는 난수 id가 아닌 쓰레드마다 직접 id를 할당하고 싶다면? 실행 결과 각 쓰레드 마다 자신의 id를 TLS에 저장했음을 확인할 수 있다. 이를 응용해서 쓰레드별 Stack이나 Queue를 구현할 수도 있다. 이어지는 궁금증… TLS는 스택영역과는 별개의 개념이라고 했다. 그럼 각 쓰레드의 TLS 공간은 전역변수 데이터 영역에 저장되며 다른 쓰레드에 의해 침범될 수 있을까? 이에 관련한 문답을 링크 : Stack overflow 에서 찾았다. TLS 예제 이어지는 궁금증…

Server
C++
Backend
January 08, 2024
CPUPipeline 과 Memory Model

CPU Pipeline 여기서는 Pipeline의 효율 최대화를 위한 코드 재배치에 대해 알아볼 것이며, Pipeline Hazard, RISC, CISC에 관한 내용은 생략합니다. 개요 CPU가 연산 속도를 향상시키고 노는 시간을 최대한 줄이기 위해 CPU 파이프라인을 도입한다는 사실은 익숙하다. CPU는 각 연산 모듈(ALU 등)간 연산 속도, Task당 분배해야하는 시간 등을 고려하여 속도를 최적화 시키기 위해 로직이 엉키지 않는 선에서 코드 재배치를 수행한다. 일반적인 상황(싱글 쓰레드 = 중량 프로세스)에서는 이러한 코드 재배치가 논리 구조를 건드리지 않는 선에서 동작하기 때문에 문제를 일으키지 않지만, 멀티 쓰레드 환경에서는 이야기가 조금 다르다. 쓰레드간 논리 구조가, CPU의 코드 재배치에 의해 엉키게 되면, 나와선 안되는 결과가 나올 수 있다. 따라서 우리는 이러한 코드 재배치를 신경쓰며 멀티 쓰레드 프로그래밍을 해야 한다. 예제 코드 인 상황이 로직상 발생하면 …

Server
C++
Backend
January 07, 2024
Future

Future 동기 vs 비동기 위 코드는 동기적이다. 만약 Calculate가 굉장히 오랜 시간동안 연산하고, 그것을 기다리는 동안 다른 작업을 하고 싶다면? 우리가 배운 내용을 토대로 아래와 같이 작성 가능하다. Thread 이용 thread를 생성 후 task를 위임하여 비동기적으로 작동한다.= 간단한 작업을 하는데도 불구하고, 굳이 쓰레드까지 만들어서 관리하기 귀찮다. -> & 를 통해 해결 가능하다. + async에는 두가지 policy가 있다. Options deferred lazy evaluation : 지연해서 실행하세요 -> 테스트 결과 을 호출할 때가 돼서야 쓰레드로 분기되는듯? async 별도의 쓰레드를 만들어서 실행하세요 deferred | async 둘 중 알아서 골라주세요 + 🏳️이 부분은 아직 모던 C++에 대해 배우지 않아 대충 이해만 하고 넘어갔다. 모던 C++ 학습 후 오른값 참조에 대해 복습해야할 것 + 의 타입은 함수타입과 맞춰줘야 …

Server
C++
Backend
January 07, 2024
Condition Variable

Condition Variable Condition Variable은 Event의 변종 앞선 Event 코드에서… 생산자가 데이터를 넣고 파란불을 켜고, 소비자는 파란불을 확인하고 데이터를 꺼내고 빨간불로 바꾸고… 를 반복하면 q.size()는 0만 출력되지 않을까? 실제로 실행해보면 데이터가 무한정 계속 늘어나는 것을 확인할 수 있다. 왜 데이터가 계속 늘어나는가? 생산자가 데이터를 삽입하고 초록불로 바꿈 소비자는 초록불을 확인하고 빨간불로 바꿈, 진입 !!여기서 생산자가 또 다시 데이터를 삽입하려고 함 소비자는 락을 걸고 큐 사이즈를 읽어야 하는데, 이미 생산자가 락을 건 상태 ㅠㅠ 결과적으로 다음에 운 좋게 락이 풀렸을떄 큐에서 pop하고 사이즈를 읽는데, 이때는 이미 큐에 여러개의 데이터가 삽입된 상태임. Consumer 따라서 이런경우 if 대신 while을 사용하여 큐를 전부 비워주는 등의 조치를 취해야 함. Condition Variable 💡 참고 : CV는 Use…

Server
C++
Backend
January 07, 2024
Event

Event 난 소중하니 직원한테 부탁 (갑질메타) 예제 생산자() 쓰레드는 10초 마다 한번씩 생산하고, 소비자() 쓰레드는 바쁜 대기를 통해 계속해서 CPU 코어를 점유함. 한 번 데이터를 소비하기 위해 10초동안 코어를 점유하는 것은 너무나 비효율적임. 큐에 데이터가 들어올때 알려주는 무언가가 있으면 좋을 것 같다. => Create Event HANDLE CreateEventW(LPSECURITY lpEventAttributes, BOOL bManualReset, Bool bInitialState, LPCWSTR lpName) 는 커널에서 만들어주기 때문에 라고도 불린다. 커널에서 관리하는 오브젝트다. Usage Count : 해당 오브젝트를 사용중인 프로세스나 쓰레드의 수. 커널 오브젝트가 공통으로 가진다. Signal / Non-Signal : 파란불, 빨간불 << bool Auto / Manual : 예제에선 Auto HANDLE은 int와 같은 숫자를 의미한다. ex…

Server
C++
Backend
January 06, 2024
Sleep

Sleep sleep_for, yield Spin Lock 코드에서 이어서 을 통해 일정 시간 CPU 제어권을 넘겨줄 수 있음 는 과 같으며 딱 한번 제어권을 넘겨줌. 프로세스가 block 상태로 전이 sleep_for, yield

Server
C++
Backend
January 06, 2024
SpinLock

Spin Lock lock이 해제될때까지 바쁜 대기(busy waiting) 스핀락은 유저 레벨에서 무한 while 루프를 돌고 있기 때문에 쓰레드 교체를 하지 않고 계속 CPU 자원(코어를 계속 점유)을 소모하면서 버티는 것 -> 컨텍스트 스위칭이 발생하지 않음. Spin Lock 구현 ver 1. 실행 결과 ⭐️ TIP C++ 에서의 키워드 : 최적화를 하지 말아달라. 왜 0이 안나오는가 ?? 락이 걸려있는가를 확인한다. 걸려있지 않으면 락을 걸고 통제권을 획득한다. 위 경우에서 만약 두 쓰레드가 i. 번을 동시에 확인하여 락이 걸려있지 않음을 확인한다면? 통제권을 함께 얻는 경우가 발생함. -> i, ii 가 한 묶음으로 동작하지 않음! 즉, 원자성이 보장되지 않음. 해결방안 -> 가 한 묶음으로 동작해야 함. ver 2. ⭐️ TIP 에는 volatile이 포함되어 있다! 실행 결과 참조 링크 CAS 란? Spin Lock 구현 ver 1. ver 2.

Server
C++
Backend
January 05, 2024
MutexLock

Mutex atomic은 일반적인 상황에서 쓰이기 힘들다. 객체에 대한 원자성을 보장해야 하는 일이 훨씬 많기 때문 Mutex 문제 발생 코드 실행 결과 오류 발생 이유 : vector는 크기가 2^n에 도달했을때 기존 capacity의 두배가 되는 공간을 새로 할당받고 기존 공간을 없애는데, 원자성 보장이 되지 않기 때문에, 이미 없어진 공간을 다시 없애려 하기 때문. 으로 미리 20000크기의 공간을 할당받으면 오류는 사라지지만, 여전히 원자성은 보장이 되지 않아 결과가 20000이 나오지 않음. Mutex Lock 실행 결과 mutex lock을 통해 상호배제 달성 속도는 기존보다 많이 느려짐. mutex lock은 재귀적으로 걸 수 없음. m.lock(); m.lock();을 연속으로 하면 crash발생. 재귀적 lock을 허용하는 recursive mutex에 관해서는 추후 학습. RAII(Resource acquisition is initialization) 패턴 래퍼 …

Server
C++
Backend
January 05, 2024
Atomic

원자성 각 쓰레드가 임계영역에서 경쟁(경합)할때, 공유자원에 대한 일관성이 보장되지 않는다. a++의 경우 load a a + 1 store a 위 과정이 CPU instruction level에서 일어나는데, 이 중간과정에 다른 쓰레드의 instruction이 개입하면 결과의 일관성이 보장되지 않음. atomic 을 통해 통합 원자성 라이브러리를 추가할 수 있다. int 사용 실행 결과 atomic 사용 실행 결과 atomic의 경우, 일반 int와의 구분을 위해 , 등과 같이 사용하는 것이 좋다. 그냥 을 사용해도 똑같이 동작한다. 내부적으로 오버로딩이 되어있기 때문. atomic int 사용 atomic 사용

Server
C++
Backend
January 05, 2024
C++ 쓰레드

C++ 쓰레드 Windows IOCP기반 Stateful Server 구현에 관한 학습 내용을 정리한 것입니다. Linux OS 및 epoll 기반의 서버 구현과는 다소 차이점이 있을 수 있습니다. 쓰레드 기본 하나의 프로세스는 여러개의 쓰레드로 분리할 수 있다. 쓰레드는 같은 프로세스 내의 힙과 데이터 영역을 공유하고, 개별적인 스택영역을 갖는다. TCB를 통해 관리된다. CPU 코어 개수 = 쓰레드의 개수 일 때 가장 이상적(ideal)임. api Type.h를 통해 타입의 이름이 변경된 부분이 있습니다. 예) int32, int64, … : 쓰레드의 id 확인, 유효하지 않은 쓰레드는 0 : 사용 가능한 CPU 코어 개수 확인 : 쓰레드를 stb::thread 객체에서 분리. 더 이상 join할 필요 없음 linux의 데몬 프로세스와 유사함. : 해당 쓰레드가 join 가능한 상태인지 확인. : 쓰레드 종료를 기다림 인자가 있는 쓰레드 실행결과 쓰레드…

C++
January 03, 2024
배열의 인덱스 연산자 오버로딩

배열의 인덱스 연산자 오버로딩 인덱스 연산자 C++에는 인덱스 연산자 오버로딩도 존재한다 int 배열의 경우 : 이를 통해 새로운 클래스를 정의하고 배열의 버퍼를 벗어나는 상황의 예외처리가 가능해짐 예 : arr[-1], arr[-100], 크기 3인 arr에서 arr[3] 등 const 함수를 이용한 오버로딩의 활용 위 코드는 컴파일 에러가 발생한다. 이유는? 위 코드에서 인자로 가 const로 전달되어 수정을 막고 있다. 그러나 연산자 오버로딩 함수는 const 함수가 아니기 때문에 컴파일 오류를 발생시킴. ⚠️ 인자가 const로 들어오면, const함수가 아닌 모든 함수를 사용할 수 없음에 유의 해결방안 연산자 오버로딩 함수를 const인것 하나, 아닌것 하나로 오버로딩한다. 거의 완전히 같은 함수이지만, const가 붙냐 안붙냐의 차이만 있음. 이러면 const로 들어온 인자에 대해서도 배열 인덱스 연산자 오버로딩 함수 호출이 가능해진다. 인덱스 연산자 const 함수…

C++
January 02, 2024
연산자 오버로딩과 대입연산자

연산자 오버로딩과 대입연산자 연산자 오버로딩 C++에는 및 와 같은 연산자를 오버로딩하는 기능이 존재한다. 이를 통해 객체간의 연산을 직관적으로 표현할 수 있다. 멤버 함수를 통한 오버로딩 는 와 같다. 객체인 Point간의 + 연산을 가능하도록 한다. 전역 함수를 통한 오버로딩 private 멤버인 xpos, ypos에 접근해야 하므로 friend함수로 정의한다. 마찬가지로 객체인 Point간의 + 연산을 가능하도록 한다. 전역함수에서는 피연산자 두 개를 모두 인자로 받아야 한다. cout, cin, endl의 비밀 cout, cin, endl과 , 에도 연산자 오버로딩이 사용된다. cout는 ostream클래스이며, cin은 istream클래스이다. ostream의 경우 Point 객체에 , 오버로딩하기 대입연산자 대입 연산자는 복사 생성자와 매우 유사하다. 정의하지 않으면 디폴트 대입 연산자가 삽입된다. 디폴트 대입 연산자는 멤버 대 멤버의 얕은 복사를 진행한다.…

C++
January 01, 2024
가상함수(Virtual)

가상함수 가상함수 가상 함수는 C++에서 다형성(polymorphism)을 구현하기 위한 중요한 개념 중 하나다. 다형성은 동일한 인터페이스를 가진 객체들이 서로 다른 구현을 제공할 수 있도록 하는 프로그래밍 개념이다. 가상 함수는 기본 클래스(Base class)와 파생 클래스(Derived class) 간의 다형성을 지원하는데 사용된다. 기본 클래스에서 선언된 함수를 파생 클래스에서 재정의(override)할 때 사용한다. Keyword : 💡 MyFunc가 가상함수가 아닌경우 위와 같이 포인터 기준으로 함수를 호출함. 💡 MyFunc가 가상함수인 경우, 포인터가 아닌 실제 인스턴스를 기준으로 함수를 호출함. 가상함수 Keyword :

Devops
December 16, 2023
클라우드 컴퓨팅

클라우드 컴퓨팅 : IaaS, PaaS, SaaS 클라우드 컴퓨팅은 인터넷을 통해 컴퓨팅 리소스와 서비스를 제공하고 액세스하는 모델로, 필요에 따라 확장 가능하며 관리 및 유지보수의 부담을 줄여주는 기술이다. 이러한 클라우드 컴퓨팅 모델에는 주로 IaaS(Infrastructure as a Service), PaaS(Platform as a Service), 그리고 SaaS(Software as a Service)가 있으며, 각각이 사용자에게 제공하는 서비스 수준과 책임 범위가 다르게 구성되어 있다. IaaS 🛠 물리적 자원 제공 : 자유도가 가장 높다 IaaS는 고객에게 서버, 네트워크, OS, 스토리지를 가상화하여 제공하고 관리한다. IaaS는 가상화된 물리적인 자산을 UI 형태의 대시보드 또는 API로 제공한다. IaaS의 고객들은 서버와 스토리지를 접근할 수 있지만 사실상 클라우드에 있는 가상 데이터 센터를 통해 리소스를 전달받는 형태이다. IaaS는 기존의 데이터센터에서…

Devops
K8S
December 16, 2023
쿠버네티스

쿠버네티스 쿠버네티스란? 컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법이다. 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야 한다. 예를 들어 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야 한다. 이 문제를 시스템에 의해 처리한다면 더 쉽지 않을까? 그것이 쿠버네티스가 필요한 이유이다! 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공한다. 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공한다. 예를 들어, 쿠버네티스는 시스템의 카나리아 배포를 쉽게 관리할 수 있다. 쿠버네티스는 다음을 제공한다. 서비스 디스커버리와 로드 밸런싱: 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있다. 스토리지 오케스트레이션: 쿠버네티스를 사…

Devops
Docker
December 15, 2023
도커 기본 사용법

Docker 도커는 “컨테이너”이다. 컨테이너는 애플리케이션을 실행하기 위한 독립적이고 가벼운 환경을 제공하는 기술이다. 여기에는 여러 가지 구성 요소와 자원이 포함되어 있어, 애플리케이션이 이동성 있게 실행되고 개발 및 배포가 편리하게 이루어진다. 컨테이너는 가상화 기술의 한 형태로, 여러 애플리케이션을 동일한 호스트 시스템에서 격리된 환경에서 실행할 수 있도록 해준다. 컨테이너의 주요 개념과 특징 이식성(Portability): 컨테이너는 애플리케이션 및 모든 종속성을 포함하므로 어디서든 동일한 환경에서 실행될 수 있습니다. 이식성은 개발에서 운영 환경으로, 또는 클라우드 간에 애플리케이션을 쉽게 이동시킬 수 있음을 의미한다. 격리(Isolation): 컨테이너는 호스트 시스템에서 격리된 고립된 환경을 제공한다. 각 컨테이너는 자체 파일 시스템, 네트워크, 프로세스 공간을 가지며 다른 컨테이너와 독립적으로 실행된다. 가볍고 빠른 시작: 가상 머신과 비교해 컨테이너는 더 가볍고 …

Devops
December 15, 2023
CI/CD 단계별 도구

CI/CD 단계별 도구 지속적 통합 (Continuous Integration, CI) 및 지속적인 배포 (Continuous Deployment, CD)는 소프트웨어 개발과 배포를 효율적으로 관리하기 위한 핵심적인 DevOps 원칙이다. 이를 위해 다양한 도구들이 사용되며, 각 단계에서 어떤 도구들이 효과적으로 활용될 수 있는지 알아보자. 1. 지속적 통합 (CI) 주요 목표 코드 변경을 지속적으로 통합하여 품질 확보 자동화된 빌드 및 테스트 수행 주요 도구 1.1 Jenkins 개방형 소스 CI/CD 도구 다양한 플러그인 지원 확장성과 유연성이 뛰어남 1.2 Travis CI 클라우드 기반 CI 도구 깃허브와의 통합 용이 빠른 설정 및 실행 가능 1.3 GitLab CI/CD GitLab 내에서 제공하는 통합 CI/CD 기능 코드 저장소와 강력한 통합 Docker 이미지 레지스트리 지원 2. 지속적 배포 (CD) 주요 목표 자동화된 프로세스로 안정적인 배포 수행 환경에 따…

Devops
December 15, 2023
DevOps란?

DevOps 개요 DevOps는 Development Operations의 약어로, 소프트웨어 개발과 운영을 통합하여 효율성, 협력, 속도, 안정성을 개선하는 개발 및 운영 방법론이다. 주요 특징 소프트웨어 개발과 운영팀 간의 협력과 커뮤니케이션 강화 전체 생명주기 관리: 개발, 배포, 운영, 모니터링 고객 만족과 가치 제공을 핵심 가치로 함 핵심 가치 고객 만족과 가치 제공 협업과 효율성 강화 릴리즈 주기 단축 및 문제 신속 대응 DevOps 방법론 방법론 스크럼, 칸반, 애자일 등의 방법론 적용 협업과 효율성 향상 DevOps 툴체인 계획, 코딩, 구축, 테스트, 배포, 운영, 모니터링 단계에서 다양한 툴 활용 Jira, GitHub, Docker, Jenkins 등 DevOps 이점 비즈니스 및 기술적 이점 빠른 제품 제공 빠른 문제 해결 및 복잡성 감소 확장성 및 가용성 향상 안정적인 운영 환경 리소스 활용률 향상 자동화 향상 시스템 결과 가시성 개선 혁신 촉진 DevOp…

Backend
Spring
November 21, 2023
Meta Annotation이란?

Meta Annotation 김영한님 스프링 강의 복습 중, 위 어노테이션을 사용법이 궁금해서 찾아봤다. 위 어노테이션은 에서 끌어다 썼는데, 무슨의미일까? meta-annotaiton 은 다른 에서도 사용되는 의 경우를 말하며 custom-annotation 을 생성할 때 사용된다. @Target 은 Java compiler 가 annotation 이 어디에 적용될지 결정하기 위해 사용한다. 예를 들어 위에서 사용한 의 ElementType.TYPE 은 “해당 Annotation 은 타입 선언 시 사용한다는 의미”이다. 종류는 다음과 같다. ElementType.PACKAGE : 패키지 선언 ElementType.TYPE : 타입 선언 ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언 ElementType.CONSTRUCTOR : 생성자 선언 ElementType.FIELD : 멤버 변수 선언 ElementType.LOCAL_VARIABLE : 지역…

Security
November 08, 2023
Ret2libc 공격

Ret2libc 공격 stack.c Vulnerable한 함수 vul_func()가 존재한다. 스택실행이 불가능한 상황을 가정하고(noexecstack) 32비트로 컴파일한다, stack canary 제거 GDB로 디버깅 시작 , 을 통해 각 라이브러리 함수의 주소를 추출 system() : 0xf7c47cd0 exit() : 0xf7c3a1f0 의 주소를 얻기 위해 테스트 파일을 만든다. checkbinsh.c MYSHELL 환경변수가 필요하므로 MYSHELL 환경변수를 등록해준다. checkbinsh.c를 컴파일한다. 최종파일인 과 길이를 맞춰주기 위해 같은 5글자인 라는 이름으로 컴파일 했다. ⚠️의 주소는 파일 이름의 길이에 따라 달라진다! 만약 env7777이라는 이름으로 컴파일한다면 주소는 env55일때와 다르다. 이제, stack 바이너리파일에서 vul_func의 return address를 확인해야 한다. stack은 badfile자체가 페이로드로 봐도 되므로, b…

Backend
Spring
October 02, 2023
Spring Bean 조회하기

Spring Bean 조회하기 Spring을 쓰다보면, Bean이 잘 들어갔는지, 싱글톤이 유지되는지 등 다양한 이유로 Bean을 조회할 일이 많다. 매번 검색으로 찾아봤는데, 일반 빈 조회와 어플리케이션 빈 조회 로직이 헷갈려서 자꾸 까먹는다. 그래서 여기에 Bean 조회 방법을 정리해둔다. JUnit Test로 작성되었다. Spring Bean 조회하기

TIPS
September 24, 2023
정규표현식 Regex 정리노트

Regex101 정규표현식을 연습해 볼 수 있는 사이트 : 링크 집합 [abc] a 혹은 b 혹은 c [a-z] a~z까지의 모든 소문자 (아스키 코드 기준) [^A-Z] A-Z까지의 모든 대문자를 제외한 다른 모든 문자 ^는 반드시 집합 처음에 써야 한다. 문자 클래스 의미 집합 표현 문자 클래스 숫자 [0-9] \d 영어 대소문자 + 숫자 + _(언더바) [a-zA-Z0-9_] \w 공백 문자 [ \t\n\r\f\v] \s 는 모든 숫자를 나타내는 집합()의 예약어이다. 는 영어 대소문자, 숫자, 언더바()를 선택한다. 특수 문자는 포함하지 않지만 언더바는 많은 경우 문자열의 구분자로 사용되기 때문에 함께 선택된다. (한글 선택 안됨) 는 공백을 나타낸다. 스페이스 바, 탭 등 문자와 문자 사이를 구분 짓는 공백은 모두 선택된다. 문자 클래스(부정) 의미 집합 표현 문자 클래스 숫자가 아닌 것 [^0-9] \D 영어 대소문자 + 숫자 + _(밑줄) 아닌 것 [^a-zA-Z0-9…

DB
SQL
TABA
July 12, 2023
07.12(수)-1 DB구조를 위한 SQL 외

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. DB구조를 위한 SQL Example : View Ridge Gallary CREATE TABLE(SQL Server) Cloumn name(이름) : ArtistID, … Data type(데이터 형식) : Int, … Optional constraints(제약조건) : NOT NULL, … Creating Relationships SQL for Constraints ALTER Statement example Adding and Dropping Columns Adding and Dropping Donstraints Removing Tables SQL DML - INSERT SQL DML - UPDATE SQL DML - DELETE JOIN ON Syntax * Outer Join CREATE VIEW Command Types of view Horizontal subset view Vertica…

Backend
Spring
React
July 11, 2023
Spring React간 CORS 이슈 트러블슈팅(WebMvcConfigurer)

Spring React간 CORS 이슈 트러블슈팅 백엔드 Spring, 프론트엔드 React로 풀스택 개발 중, CORS에러를 마주하여 이에 대한 트러블슈팅 기록을 남겨둔다. 기존에는 React를 빌드한 결과물을 Spring의 경로에 넣고 Spring서버를 실행하면 별 다른 이슈가 발생하지 않았는데, 이번에 React와 Spring을 서로 다른 포트에서 개방할 경우, CORS에러가 발생한다. CORS란? Cross-Origin-Resource-Sharing의 약자로 서로 다른 출처에서 리소스를 공유하는 것을 뜻한다. React클라이언트의 경우, GET방식으로 API를 요청할때 다음과 같은 URL을 사용한다.(포트 3000) 이 URL에서 Origin을 나타내는 부분은 Protocol, Host, Port 부분이다. 즉, 과 은 서로 다른 Origin으로 구분된다. 만약 localhost로 테스트한다고 하면, , 은 서로 다른 origin이다. 스프링부트 서버에 http://lo…

DB
SQL
TABA
July 11, 2023
07.11(화)-1 데이터베이스 개요

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. 데이터베이스와 SQL실습 데이터베이스 개요 Major Terms Data, Database Data model, Data modeling E-R model, semantic object model, relational model Database management systems (DBMS) SW(system SW) DB2, Oracle, SQl Server, MySQL etc Data language: SQL Database design tool : E-R Win, Visio, DA# Database administrator (DBA) Database tuning & monitoring Orange DBMS Characteristics SW (system SW) Global vendors IBM DB2 Oracle Microsoft : SQL Server MySQL → sold to Toracle …

DB
July 11, 2023
정규화

정규화(Normalization) [ 정규화(Normalization)이란? ] 정규화(Normalization)의 기본 목표는 테이블 간에 중복된 데이타를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다. 이러한 테이블을 분해하는 정규화 단계가 정의되어 있는데, 여기서 테이블을 어떻게 분해되는지에 따라 정규화 단계가 달라지는데, 각각의 정규화 단계에 대해 자세히 알아보도록 하자. [ 제1 정규화 ] 제1 정규화란 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다. 예를 들어 아래와 같은 고객 취미 테이블이 존재한다고 하자. a1.png 위의 테이블에서 추신수와 박세리는 여러 개의 취미를 가지고 있기 때문에 제1 정규형을 만족하지 못하고 있다. 그렇기 때문에 이를 제1 정규화하여 분해할 수 있다. 제1 정규화를 진행한 테이블은 아래와 같다…

DB
SQL
TABA
July 10, 2023
07.10(월)-1 MySQL 기초

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. MySQL 시작하기 MySQL 8.0 버전은 서버 설치과정에서 임시 번호 생성 MySQL 접속 비밀번호 변경 데이터 조회, 선택 및 테이블 조회 테이블 생성 데이터 저장 테이블 구조 확인 테이블에 칼럼 추가 칼럼 속성 변경(데이터 타입, 기본값, 제약조건) 테이블 제약조건 조회 제약조건 추가 및 삭제 뷰 뷰 생성 현재 사용자에 속한 뷰의 정보 조회하기 뷰 삭제하기 데이터 조작 테이블 구조 확인 테이블 모든 칼럼 출력 특정 칼럼만 출력 중복 제거하여 출력 별칭 지정하여 출력(Alias) 💡 공백, 특수문자 필요한 경우에 큰따옴표(”)붙임 조건 지정하여 조회 권한 제어 유저 생성 유저 제거 권한 부여 대표적인 시스템 권한 create Session : 데이터 베이스를 연결할 수 있는 권한 create table : 테이블을 생성할 수 있는 권한 create s…

TIPS
July 07, 2023
Vim 단축키 정리

Vim의 실행, 저장, 종료 명령 기능 vim [파일명] Vim 실행, 파일명을 지정하면 파일 열기 :q 종료 기능, 작업 내용이 없다면 바로 종료 :q! 작업한 내용을 저장하지 않고 종료 :w [파일명] 저장 기능, 파일명을 지정하면 새 파일로 저장 :wq, wq! 작업한 내용을 저장하고 종료 ZZ 작업한 내용을 저장하고 종료 Vim의 입력 모드 명령 기능 i 현재 커서 앞에 입력 a 현재 커서 다음 자리에 입력 o 커서가 위치한 행의 다음 행에 입력 I(대문자 i) 커서가 위치한 행의 첫 칼럼으로 이동 후 입력 A 커서가 위치한 행의 마지막 컬럼으로 이동 후 입력 O 커서가 위치한 행의 이전 행에 입력 Vim 커서 이동 명령 기능 h, ← 커서를 한 문자 왼쪽으로 이동 j, ↓ 커서를 한 행 아래로 이동 k, ↑ 커서를 한 행 위로 이동 l, → 커서를 한 문자 오른쪽으로 이동 ^, 0(숫자) 커서를 행의 첫번째 칼럼으로 이동 $ 커서를 행의 마지막 칼럼으로 이동 - 커서를 이…

OperatingSystem
TABA
July 05, 2023
07.05(수)-3 Virtual Memory

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. Virtual Memory 드라이브의 일부를 물리 메모리의 일부처럼 활용하는 기법 Swapping 실제 물리 메모리가 가득 찼을때 프로세스를 swap-in & swap-out 을 통해 드라이브의 일부를 가상 메모리로 활용 프로세스 상태 전이도(expand) 대기 → 보류대기 : swap out 보류 대기 → 보류 준비 : wake 보류 준비 → 준비 : swap in 페이지 교체 알고리즘 First-In-First-Out (FIFO) 가장 오래된 페이지를 swap out 하고 새로운 페이지를 swap in 하는 알고리즘 Optimal Algorithm 앞으로 가장 오래 쓰이지 않을 페이지를 교체하는 알고리즘 미래 예측이기 때문에 현실적으로 제약사항이 많음 그래서 이후 알고리즘이 등장함 Least Recently Used (LRU) 가장 오랫동안 사용하지 않은 페이지를 swap out 하고…

OperatingSystem
TABA
July 05, 2023
07.05(수)-2 Main Memory

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. Main Memory Address Binding 절대주소는 프로그램의 실행에 필요한 데이터와 명령어가 메인 메모리에서 실제로 위치하는 고정된 주소→absolute program(프로그램을 작성할때 주소를 결정) 상대주소는 프로그램 내에서 상대적인 위치를 나타내며, 실행 시에 절대 주소로 변환(런타임에 결정) 상대주소를 절대주소로 변환하는 과정을 Address Binding 이라고 한다. 개발시에 주소를 결정하는 방법, 컴파일시에 결정하는 방법 등이 있지만 런타임에 결정하는 방법이 대표적이다. Address 변환 3단계 Symbolic address : 프로그래머들이 특정 이름을 통해 변수를 지정하고 값을 저장, 변수의 이름 자체를 Symbolic address라고 함. Relocatable address(=Logical address) : 주소를 프로그램이 실행될 때마다 재배치할 수 있는 상대…

OperatingSystem
TABA
July 05, 2023
07.05(수)-1 Synchronization, Deadlock

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. Synchronization Tools Background 협력적인 프로세스는 다른 프로세스에 영향을 주거나 받을 수 있다. 프로세스간 공유 데이터 영역은 데이터 불일치의 가능성이 있다. 협력적인 프로세스에서는 데이터의 일치성을 유지시키는 것이 필요. Race Condition 여러개의 프로세스가 동시에 에 접근하는 것 공유된 데이터의 최종값은 마지막으로 완료된 프로세스에 의존 Race Condition을 예방하기 위해 동시적인 프로세스는 동기성을 유지해야 함. Example of a Race Condition 💡 Counter++ is not atomic if… a→b→c→1→2→3 : 5 a→1→b→2→c→3 : 4 a→1→b→2→3→c : 6 결과에 일관성이 없음 암달의 법칙의 한가지 원인 임계 영역(Critical Section) 여러 프로세스 또는 스레드가 공유 자원에 접근하는 코드 영역…

OperatingSystem
TABA
July 04, 2023
07.04(화)-3 CPU Scheduling

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. CPU Scheduling Basic Concept 멀티프로그래밍을 통해 최대 CPU 활용률을 얻기 위함 CPU – I/O 버스트 주기 – 프로세스 실행은 CPU 실행 주기와 I/O 대기 주기로 구성됨 → → 분포가 기본 CPU Scheduler CPU Scheduler는 준비 큐에서 어떤 프로세스를 선택해서 Processor에 할당할지 결정한다. 준비 큐는 다양한 방법으로 순서를 정할 수 있다. CPU Scheduling은 process를 어떤 상태로 만들지 결정한다. Switches from running to waiting state(e.g., I/O request) Switches from running to ready state(e.g., timer out) Switches from waiting to ready state(e.g, I/O finished interrupt) Ter…

OperatingSystem
TABA
July 04, 2023
07.04(화)-2 Thread

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. Thread & Concurrency Thread Overview ❗ 쓰레드는 코드, 데이터, 힙 영역을 공유하고 스택영역만을 따로 할당한다. 스택을 독립적으로 할당하는 이유 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다. 따라서 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행 흐름이 추가되는 것이다. 결과적으로 실행 흐름의 추가를 위한 최소 조건이 독립된 스택을 제공하는 것이다. 코드 영역을 공유 프로세스는 독립적인 구조이기 때문에 다른 프로세스의 Code영역에 있는 함수를 호출할 수 없다.쓰레드는 Code영역을 공유하기 때문에 두 개 이상의 쓰레드가 자신이 포함된 프로세스의 Code영역에 있는 함수를 호출할 수 있다. 데이터 영역과 힙 영역을 공유 전역 변수와 동…

OperatingSystem
TABA
July 04, 2023
07.04(화)-1 Process

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. Process Concept Process Code 영역 실행할 프로그램의 코드가 저장됩니다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리하게 됩니다. Data 영역 전역변수와 정적변수가 저장됩니다. 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸됩니다. +) 더 자세히 들어가면 BSS(Block Stated Symbol) 영역이 있는데요, 이 영역에는 초기화 되지 않은 전역변수가 저장됩니다. 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리인 ROM에 저장되는데 이 부분은 비용이 많이 들어 RAM에 저장될 것과 ROM에 저장될 것을 구분하기 위해 영역을 구분해 사용합니다. Stack 영역 지연변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역입니다. 함수 호출 시 할당되고 함수 반환 시 소멸됩니다. 로드 시(컴파일 타임) 크기가 결정…

OperatingSystem
TABA
July 03, 2023
07.03(월)-2 Computer architecture, Virtualization, Linux, etc

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. 컴퓨터 아키텍처 폰 노이만 구조 프로세스 구조 Code 영역 가 저장됩니다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리하게 됩니다. Data 영역 가 저장됩니다. 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸됩니다. +) 더 자세히 들어가면 BSS(Block Stated Symbol) 영역이 있는데요, 이 영역에는 초기화 되지 않은 전역변수가 저장됩니다. 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리인 ROM에 저장되는데 이 부분은 비용이 많이 들어 RAM에 저장될 것과 ROM에 저장될 것을 구분하기 위해 영역을 구분해 사용합니다. Stack 영역 지연변수, 매개변수, 리턴값 등 를 저장하는 영역입니다. 함수 호출 시 할당되고 함수 반환 시 소멸됩니다. 로드 시(컴파일 타임) 크기가 결정됩니다. 위 세 영역은 컴파일 할 때 data, stack 영역의 …

OperatingSystem
TABA
July 03, 2023
07.03(월)-1 Introduction, I/O, etc

❗️날짜별로 정리하여 복습하기를 원하기 때문에 내용이 길고 다소 정리되지 않았습니다. Introduction Structure 💡 OS : User단과 HW단 사이에서 동작하는 프로그램 Performance metrics(OS 평가 기준) Throughput : jobs / sec. - system oriented Utilization : % of time busy - system oriented Response time : sec / job - user oriented 4 Components Hardware Operating system Application programs Users OS’s role Resource allocator CPU, 메모리 저장공간, 파일 저장 공간, 입출력장치 등의 자원을 관리 자원 요구에 대한 충돌적 요구를 효과적/공정하게 분배 Control program 에러 예방 등 💡 커널 : OS에서 항상 실행되는 부분 System program vs. A…

ComputerNetwork
Assignments
June 19, 2023
홈페이지 개발 방식 및 후기, 컴퓨터 네트워크 과목을 마치며

홈페이지 개발일지 뭘로 만들건데? WIX? SITE123? 컴퓨터 네트워크 강좌 과제의 일환으로 공부 내용을 정리하여 직접 만든 홈페이지에 게시해야했습니다. 교수님께선 WIX 및 기타 플랫폼을 이용하시라 하셨지만 그래도 개발자인데 직접 바닥부터 웹사이트를 빌드해서 배포까지 해보자는 생각으로 기존에 알고있던 JS, React지식을 활용하여 프론트 부분을 구성하고 백엔드 쪽은 Firebase를 사용하든지 Spring으로 직접하든지 하도록 하자! 하고 바로 웹사이트 개발을 시작했습니다. 마크다운 형식(.md)를 재활용할 수 없을까? 저는 평소에 강의자료 등을 이라는 워크스페이스를 통해 요약 및 관리하고 있는데, 여기에 정리해 둔 자료들을 놔두고 다시 웹사이트에 처음부터 적는것이 번거로울 것 같았습니다. 그래서 일일히 html문서로 게시글을 새로 올리는 방식 대신 .md 파일을 이식하여 통합관리하는 정적인 사이트를 만들기로 결정했습니다. 이와 딱 맞는 서비스를 제공해주는 플랫폼이 …

ComputerNetwork
June 15, 2023
운영 보안 - 방화벽과 침입 탐지 시스템

운영 보안: 방화벽과 침입 탐지 시스템 방화벽 은 전체 인터넷으로부터 기관의 내부 네트워크를 분리시킨 하드웨어와 소프트웨어의 조합으로, 어떤 패킷은 통과가 허용되나 어떤 패킷은 차단된다. 네트워크 관리자가 해당 네트워크에 대한 트래픽 출입을 관리하여 접속을 제어한다. 방화벽의 목표 외부와 내부를 오가는 모든 트래픽은 방화벽을 거친다. 로컬 보안 정책에 정의된 대로 승인된 트래픽만이 통과가 허용된다. 방화벽 자체가 침입 시도에 안전해야 한다. 전통적인 패킷 필터 기관은 일반적으로 내부의 네트워크를 ISP에 연결하는 게이트웨이 라우터를 갖는다. 외부와 내부를 오가는 모든 트래픽은이 라우터를 지나야만 하고, 이 라우터에서 패킷 필터링이 일어난다. 필터링 결정의 근거 IP 출발지 또는 목적지 주소 불행히 출발지 주소를 위장한 데이터그램을 막을 수 없다. IP 데이터그램 내의 프로토콜 타입 : TCP,UDP OSPF 등 TCP 또는 UDP 출발지와 목적지 포트 TCP 플래그 비트 : SY…

ComputerNetwork
June 15, 2023
무선랜과 4G, 5G 셀룰러 네트워크 보안

무선 랜과 4G/5g 셀룰러 네트워크 보안 802.11(와이파이) 무선 랜의 인증키와 키 합의 802.11 네트워크에서 다루어야 할 핵심적인 보안 관심사 상호인증 이동 장치가 AP에 접속하여 데이터그램을 외부에 전송하기 전에, 네트워크는 접속하는 이동 장치의 신원을 확인하고, 그 장치의 접속 권한을 점검하기 위해 장치를 인증하기를 원한다. 이동장치의 경우도 접속하는 네트워크가 진짜 접속을 원하는 네트워크가 맞는지 인증하기를 원한다. 이런 양방향 인증을 상호 인증이라고 한다. 암호화 802.11 프레임은 무선 채널을 통해 교환되기 때문에, 이동 장치와 AP 간에 교환되는 사용자 레벨 데이터를 지니고 있는 링크 레벨 프레임의 암호화가 중요하다. 높은 속도를 요해 대칭키 암호화가 사용된다. 상호 인증과 암호화 키 생성 및 사용 절차 발견 AP는 자신의 존재와 함께 이동 장치에게 제공될 수 있는 인증과 암호화 형식을 알린다. 이동 장치는 원하는 인증과 암호화 형식을 요청한다. 상호 인증…

ComputerNetwork
June 14, 2023
IPsec과 가상 사설 네트워크

네트워크 계층 보안: IPsec과 가상 사설 네트워크 IPsec이라고 알려진 IP 보안 프로토콜은 네트워크 계층의 보안을 제공한다. IPsec 특징 호스트나 라우터 같은 네트워크 계층의 어떤 두 개체 사이에서 IP 데이터그램을 보호한다. 데이터그램의 페이로드 부분을 암호화하여 TCP 세그먼트 등이 암호화된다. 위의 기밀성을 제공하는 것처럼 출발지 인증, 데이터 무결성, 재생 공격 방지 같은 보안 서비스를 제공할 수 있다. IPsec과 가상 사설 네트워크 흩어져있는 기관들은 그들의 호스트와 서버가 기밀성을 유지하며 안전하게 서로에게 데이터를 전송할 수 있도록 종종 자신만의 IP 네트워크를 갖기를 원한다. 이를 위해 공공 인터넷과 완전히 분리된 라우터, 링크, DNS 시스템을 포함하는 물리적으로 독립된 네트워크를 실제로 설치할 수 있고, 이러한 네트워크를 라고 한다. 큰 유지 비용이 드는 사설 네트워크 대신 오늘날에는 기존 공공 인터넷 상에 을 설치한다. 을 이용하면 기관의 사무실…

ComputerNetwork
June 14, 2023
TCP 연결의 보안 - TLS

TCP 연결의 보안: TLS 보안 서비스가 추가되어 향상된 TCP 버전을 흔히 라고 부른다. TLS는 기밀성, 데이터 무결성, 서버인증과 클라이언트 인증을 통해 TCP를 향상하여 보안 서비스를 제공한다. TLS는 TCP를 보호하기 때문에 TCP 상에서 일어나는 어떠한 애플리케이션에든 사용될 수 있다. TLS는 소켓을 사용하는 간단한 API를 제공하는데, TCP의 API와 유사하다. TLS는 애플리케이션 계층에 존재하나 개발자의 관점에서는 보안 서비스로 강화된 TCP 서비스를 제공하는 트랜스포트 프로토콜이다. TLS 개요: almost TLS TLS를 이해하기 위해 TLS의 단순화된 버전인 를 먼저 설명한다. 는 핸드셰이크, 키 유도, 데이터 전송이라는 세 단계로 되어 있다. 핸드셰이크 클라이언트는 서버와 TCP 연결을 설립한다. 서버가 진짜 서버인지 확인한다. 클라이언트는 hello 메시지를 보내고, 서버는 CA로부터 인증된 인증서를 보내어 클라이언트는 인증서 내의 공개키가…

ComputerNetwork
June 14, 2023
전자메일 보안

전자메일의 보안 보안은 인터넷 프로토콜 스택 위쪽 4개 계층의 어느 곳에서나 보안 서비스를 제공할 수 있다. 보안이 특정 애플리케이션 계층 프로토콜을 위해 제공되면 그 프로토콜을 사용하는 애플리케이션은 보안 서비스를 사용할 수 있게 된다. 보안 기능이 하나 이상의 계층에서 제공되는 이유 보안은 네트워크 계층에서 제공하는 것으로 충분하지 않을까? 네트워크 계층에서 데이터그램의 모든 데이터를 암호화하고 IP 주소를 인증함으로써 ‘전면적 범위’의 보안을 제공하더라도 사용자 레벨의 보안은 제공할 수 없다. 예를 들어, 인터넷 상거래 사이트는 물건을 구입하려는 고객을 인증하는 데 IP 계층 보안에만 의존할 수는 없다. 프로토콜 상위 계층에서 보안 서비스를 포함한 새로운 인터넷 서비스를 구현하는 일이 점차 쉬워지고 있다. 보안 전자메일 보안 전자메일 시스템을 만들기 위해 암호화 원리들을 이용해보자. 기밀성 메시지를 대칭키 기술(AES,DES 등)으로 암호화 복호화하여 기밀성을 얻을 수 있다…

ComputerNetwork
June 13, 2023
종단점 인증(Authentication)

종단점 인증 종단점 인증이란 하나의 통신 개체가 다른 개체에게 자신의 신원을 컴퓨터 네트워크상으로 증명하는 작업이다. 예를 들어, 전자 메일 사용자가 서버에 신원을 입증할 수 있다. 서로 간의 인증은 인증 프로토콜의 한 부분으로서 교환된 메시지와 데이터만을 기반으로 수행되어야 한다. 대부분의 인증 프로토콜은 다른 프로토콜을 수행하기 전에 수행된다. 즉, 인증 후에 작업을 수행한다. 인증 프로토콜 ap(authentication protocol) 2.0 송신자가 이미 알려진 네트워크 주소(IP 주소)를 가지고 통신을 한다면 수신자는 인증 메시지를 가지고온 IP 데이터 그램 출발지 주소가 송신자의 IP 주소와 일치하는지 확인함으로써 앨리스를 인증할 수 있다. 그러나 IP 데이터그램을 생성해서 원하는 출발지 IP 주소를 넣고 그 데이터그램을 라우터로 보낼 수 있으므로 이는 안전하지 못하다. 예를 들어, 침입자가 가짜 출발지 주소를 쓰고 데이터를 보낼 수 있는데 이 방법은 의 한 형태이…

ComputerNetwork
June 13, 2023
암호 원리

암호의 원리 송신자가 보내는 원래 형태의 메시지를 평문 또는 원문이라고 한다. 송신자는 평문을 암호화 알고리즘을 사용해서 암호화하며, 암호화된 메시지인 암호문은 다른 침입자가 해석할 수 없다. 이 암호화 알고리즘은 모든이에게 알려져있고, 누구나 쉽게 사용할 수 있다. 즉, 전송한 데이터를 침입자가 복원할 수 없게 해주는 비밀 정보가 필요한데 이것이 바로 키이다. 시나리오 앨리스는 숫자나 문자의 열인 키 A를 암호화 알고리즘의 입력값으로 사용하여 암호화된 메시지 을 완성한다. 밥은 키 B와 암호문 을 복호화 알고리즘에 입력값으로 넣어 의 출력을 받는다. 대칭키 시스템 앨리스와 밥의 키가 동일하며 이 키는 둘만의 비밀이다. 공개키 시스템 키 중 하나는 세상 모두에게 알려져있고 다른 키는 앨리스 밥 중 한명만 알고 있다. 대칭키 암호화 카이사르 암호 영어로된 원문에 대해 평문의 각 철자를 알파벳 순서로 k번째 뒤에 오는 철자로 대치한다. (철자들의 순환을 가정. z의 1번째 뒤에 오…

ComputerNetwork
June 13, 2023
메세지 무결성과 전자서명

메시지 무결성과 전자서명 메시지 무결성 메시지가 정말 해당 출발지로부터 왔는가? 메시지가 전달되는 도중 변경되지는 않았는가? 암호화 해시 함수 해시 함수는 입력 m을 받아서 해시라 불리는 고정된 크기의 문자열 H(m)을 계산해낸다. 암호화 해시 함수는 H(x) = H(y)가 되는 서로 다른 두 메시지 x와 y를 찾는 일이 산술적으로 실행 불가능하다. 즉, (m, H(m))이 원래 메시지와 그 메시지에 대해 송신자가 만들어낸 해시값이라고 할 때, 침입자가 원래 메시지와 동일한 해시값을 갖는 다른 메시지 y를 위조해낼 수 없다. 인터넷 체크섬과 같은 간단한 체크섬은 같은 값을 만들기 쉬워 암호화 해시 함수로 사용하기에는 너무 허술하다. MD5, SHA MD5 해시 알고리즘이 오늘날 널리 쓰이고 있다. 덧붙이는 단계 하나의 1을 메시지 뒤에 붙이고 충분히 많은 0을 뒤에 덧붙여서 메시지 길이가 단위 길이 조건을 만족시킨다. 추가 단계 덧붙이기 전 메시지 길이를 64비트로 표현하여 추가…

ComputerNetwork
June 12, 2023
네트워크 보안-개요

네트워크 보안이란 무엇인가? 안전한 통신에 요구되는 특성 기밀성 송신자와 지정된 수신자만이 전송되는 메시지 내용을 이해할 수 있어야 한다. 도청자가 메시지를 가로챌 수도 있으므로 도청자가 해석할 수 없도록 메시지를 어떠한 방식으로 암호화해야한다. 메시지 무결성 통신하는 내용이 전송 도중에 변경되지 않아야 한다. 종단점 인증 통신에 참여하는 상대방이 누구인지 확인하기 위해 상대방의 신원을 확인할 수 있어야 한다. 운영 보안 오늘날 대부분 기관들의 네트워크는 공공 인터넷에 연결되어 있다. 따라서 외부로부터의 공격을 받을 수 있는 위험을 갖고 있고 대비하여 방화벽이나 보안 체계를 갖고 있어야 한다. 보안 시나리오 송신자와 수신자 데이터 일부 혹은 전부를 암호화하여 안전한 통신을 하려고 할 것이다. 침입자 채널상의 제어 메시지 및 데이터 메시지를 스니핑하거나 기록 메시지 혹은 메시지 내용의 조작, 삽입 혹은 삭제 안전한 통신에 요구되는 특성 보안 시나리오

ComputerNetwork
June 11, 2023
이동성 관리

이동성 관리: 원칙 💡 이동 장치 = 시간에 따라 네트워크로의 접속점을 변경하는 노드 장치 이동성: 네트워크 계층의 관점 네트워크 계층의 관점에서 본 다양한 이동성 스펙트럼 물리적인 이동 장치가 네트워크 접속점을 이동할 때 그 장치가 얼마나 활성화된 상태인가에 따라 다양한 문제들을 네트워크 계층에 제기한다. (a) 접속 네트워크 간 장치 이동성, 이동 중에는 전원을 끔 이곳에는 네트워크 사이를 물리적으로 이동하지만 이때 이동 장치의 전원을 끄고 움직이는 이동 사용자가 위치한다. 전원이 켜져 있는 동안 하나의 네트워크에만 접속하며 이동하지 않고 머물기 때문에, 네트워킹 관점에서 이 장치는 이동 중인 것, 즉 이 아니다. (b) 하나의 동일한 무선 접속 네트워크 안에서의 장치 이동성 이동 장치는 물리적으로 이동 가능하지만 동일한 접속 네트워크에 연결된 상태를 유지한다. 이러한 장치도 네트워크 계층 관점에서는 모바일이 아니다. 또한 장치가 동일한 802.11 AP 또는 LTE 기지국과…

ComputerNetwork
June 10, 2023
셀룰러 네트워크 4G, 5G

셀룰러 네트워크: 4G, 5G 셀룰러(cellular) 네트워크 라는 용어는 셀룰러 네트워크의 영역이 전파 도달 능력에 따라 여러 개의 지리적 영역, 즉 로 나뉜다는 사실에서 비롯되었다. 각각의 셀은 셀 영역 안의 와 신호를 주고받는 을 갖고 있다. 하나의 셀이 담당하는 영역의 넓이는 여러 요소에 의해 영향을 받는다. 기지국과 단말기의 송신 강도 셀 내의 방해가 되는 건물 기지국 안테나의 설치 높이와 종류 4G LTE 셀룰러 네트워크: 구조 및 요소 아래 그림은 구조의 주요 요소를 보여준다. 이동 장치(mobile device) 셀룰러 통신 사업자의 네트워크에 연결되는 스마트폰, 태블릿, 랩톱 또는 IoT 장치 등이며, (고정된 온도 세선 또는 감시 카메라도 포함) 웹 브라우저, 지도 앱, 음성 및 화상회의 앱, 모바일 결제 앱 등이 실행되는 곳이다. 전체 을 구현한다. NAT을 통해 얻을 수 있는 를 갖고 있는 네트워크의 종단점이다. 전 세계적으로 고유한 라는 64비트의 …

ComputerNetwork
June 09, 2023
WiFi 802.11 무선 랜

와이파이: 802.11 무선 랜 1990년대 다양한 관련 기술 및 표준이 개발되었으나 그중 가장 성공적인 기술, 와이파이(WiFi)라고 알려진 이 관련 기술들을 통합하게 되었다. IEEE 802.11 표준안 802.11b, g, n, ac, ax 표준 일반적으로 거리가 70m 미만인 영역에서 동작하는 WLAN 용도 이전 표준과의 을 갖는다. 즉, 802.11g 기능만을 갖는 이동 단말도 802.11ac 또는 802.11ax 기지국과의 상호작용이 가능하다. 모두 라는 동일한 매체 접속 프로토콜을 사용한다. 802.11af, ah 표준 IoT, 센서 네트워크, 측정 애플리케이션을 활용하기 위한 용도 (좀 더 먼 거리에서 동작) 주파수 영역 802.11 무선 랜 장치들은 두 종류의 주파수 영역에서 동작한다. 2.4 GHz 대역 5.1~5.8 GHz 주파수 영역 비허가(unlicensed) 주파수 대역 이 영역에서 802.11 장치들은 2.4 GHz 무선 전화 및 가전제품과 주파수 경…

ComputerNetwork
June 08, 2023
무선 링크와 네트워크의 특징

무선 링크와 네트워크의 특징 무선 링크는 유선 링크와 다르게 추가로 고려해야 하는 것들이 존재한다. 신호 세기의 감소, 경로 손실 전자기파는 물체를 통과함에 따라 약화된다. 자유 공간에서도 전자기파 신호는 분산되고, 송신자와 수신자 사이의 거리가 증가함에 따라 신호의 세기가 감소한다. 이런 현상을 이라고도 한다. 다른 출발지로부터의 간섭 동일 주파수 대역으로 전송되는 무선 신호들은 서로 하게 된다. 이러한 송신자 간의 간섭 외에 주변의 전자기 잡음(e.g., 근처의 모터 또는 전자레인지로 인한) 등도 간섭을 일으킬 수 있다. 이런 이유로 최근의 802.11 표준들은 5 GHz 대역에서 동작한다. 다중 경로 전파 송신자와 수신자 간에 전송되는 전자기파의 일부가 물체나 지표에 부딪혀서 서로 길이가 다른 여러 개의 경로를 겨처갈 때 이 생긴다. 이는 수신 측에서 감지되는 신호를 또렷하지 않게 만든다. 이들을 통해 알 수 있듯이, 유선 링크보다는 무선 링크에서 비트 오류가 더 자주 발생한…

ComputerNetwork
June 07, 2023
무선 네트워크-개요

개요 무선 네트워크의 요소 무선 네트워크는 다음과 같은 구성 요소로 이루어진다. 무선 호스트 는 유선 네트워크의 경우처럼 애플리케이션을 실행하는 종단 시스템 장치다. e.g., 스마트폰, 태블릿, 랩톱, 센서 등의 IoT(Internet of Things) 장치, 가전제품, 자동차, 그 외 인터넷에 연결된 무수히 많은 장치 무선 링크 호스트는 를 통해 기지국(base station)이나 다른 무선 호스트에 연결된다. 위 그림에서 무선 링크는 네트워크 가장자리에 있는 호스트를 코어에 있는 네트워크 인프라스트럭처로 연결해준다. 무선 링크는 때로는 네트워크 코어에서도 라우터, 스위치 등 네트워크 장치들 사이를 연결해주는 데 사용될 수 있다. 기지국 은 기지국에 결합된 무선 호스트와의 데이터(e.g., 패킷) 송수신에 대한 책임을 진다. 즉, 자신과 결합되어 있는 다수의 무선 호스트들 사이의 전송을 중재하고 조정한다. 는 것은 아래 두 가지를 의미한다. 호스트가 해당 기지국의 무선 통신…

ComputerNetwork
June 06, 2023
데이터센터 네트워킹

데이터 센터 네트워킹 데이터 센터는 인터넷에 연결되어 있을 뿐만 아니라 내부 호스트들 간 상호연결을 위해 자체 를 갖고 있다. 데이터 센터의 3가지 목적 웹 페이지, 검색 결과, 전자메일, 스트리밍 비디오와 같은 콘텐츠 제공 검색 엔진을 위한 분산 인덱스 계산과 같은 특정 데이터 처리 작업이 가능한 대량 병렬 컴퓨팅 인프라스트럭처 역할 다른 회사에게 을 제공 데이터 센터 구조 호스트 데이터 센터에서 작업을 수행한다. 피자 박스 모양의 라고도 불린다. CPU, 메모리, 디스크 저장장치를 갖고 있는 범용 호스트다. 호스트들은 20~40대의 블레이드를 적재할 수 있는 에 적재된다. 데이터 센터 내부에서 사용되는 자신만의 IP 주소를 할당 받는다. TOR(top of rack) 스위치 랙의 맨 위에는 TOR스위치라고 불리는 스위치가 있다. TOR 스위치는 네트워크 인터페이스 카드를 통해 랙에 있는 호스트들을 연결해준다. 그 외의 다른 포트들을 통해 데이터 센터의 다른 스위치들과 연결된다…

ComputerNetwork
June 05, 2023
링크 가상화

링크 가상화: 링크 계층으로서의 네트워크 💡 MPLS의 목표는 고정 길이 레이블과 가상 회선을 기반으로 데이터그램을 전달하기 위해 목적지 기반 IP 데이터그램 인프라스트럭처를 포기하는 것이 아니라, 가능한 경우 데이터그램을 선택적으로 레이블링해서 라우터로 하여금 고정 길이 레이블을 기반으로 데이터그램을 전달할 수 있도록 목적지 기반 IP 데이터그램 전달 하부구조를 확장하는 것이다. MPLS 헤더 MLPS가능 라우터에 의해 처리되는 링크 계층 프레임의 형식은 2계층 헤더와 3계층 헤더 사이에 작은 MPLS 헤더를 가진다. MPLS 헤더에는 레이블, 실험을 위해 예약된 3개의 비트, 일련의 스택된 MPSL 헤더들의 끝을 나타내는 1개의 S 비트, TTL 필드가 있다. MPLS 헤더는 MPLS 가능 라우터들 사이에서만 전송될 수 있다. MPLS 동작 과정 MPLS 가능 라우터는 MPLS 레이블을 포워딩 테이블에서 찾아 적당한 출력 인터페이스로 데이터그램을 전달하여 MPLS 프레임을 전…

ComputerNetwork
June 04, 2023
스위치 근거리 네트워크

스위치 근거리 네트워크 스위치는 링크 계층에서 동작하기 때문에 링크 계층 프레임을 교환한다. 또한, 네트워크 계층 주소를 인식하지 않으며, 2계층 스위치들로 구성된 네트워크에서 경로를 결정하는 데 OSPF 같은 라우팅 알고리즘을 사용하지 않는다. 즉, IP 주소가 아닌 링크 계층 주소를 사용한다. 링크 계층 주소체계와 ARP 네트워크 계층 주소와 링크 계층 주소 네트워크 계층 주소 체계가 있는데도 링크 계층 주소를 갖는 이유 랜은 IP와 인터넷만을 위해서가 아니라 임의의 네트워크 계층 프로토콜을 위해 설계되었기 때문이다. 만일 어댑터가 MAC 주소 대신에 네트워크 계층 주소를 사용한다면, 네트워크 계층 주소를 어댑터 RAM에 저장하고 어댑터를 이동할 때마다 재구성해야 한다. 즉, 네트워크 구조에서 계층이 독립적인 구성요소가 되도록 하려면 각 계층은 자신만의 주소 기법을 가져야만 한다. MAC 주소 실제로 링크 계층 주소를 가진 것은 호스트나 라우터가 아닌 호스트나 라우터의 어댑…

ComputerNetwork
June 03, 2023
다중 접속 프로토콜

다중 접속 링크와 프로토콜 두 종류의 네트워크 링크 링크의 한쪽 끝에 한 송신자와 링크의 다른 쪽 끝에 한 수신자가 있다. 과 이 여기에 속한다. (뒤에 다룬다.) 동일한 하나의 공유된 브로드캐스트 채널에 다수의 송신 노드 및 수신 노드가 연결된다. 임의의 한 노드가 프레임을 전송하면 채널이 그 프레임을 브로드캐스트해서 다른 모든 노드가 그 프레임의 복사본을 수신하기 때문에 브로드캐스트 용어가 쓰인다. 다양한 다중 접속 채널 다중 접속 문제(multiple access problem) 모든 노드가 프레임을 전송할 수 있으므로 2개 이상의 노드가 브로드캐스트 채널에서 직접 통신할 수 있고, 이런 일이 발생하면 모든 노드는 동시에 여러 개의 프레임을 받게 된다. 즉, 전송된 프레임들이 각 수신자에서 충돌하게 되고 어떤 수신 노드도 전송된 프레임의 의미를 파악할 수 없게 된다. 따라서 충돌에 관련된 모든 프레임은 손실되며, 다수의 노드가 빈번히 프레임을 전송하려 한다면 많이 충돌할…

ComputerNetwork
June 02, 2023
오류 검출, 정정

오류 검출 및 정정 기술 비트 오류를 방지하기 위해 송신 노드에서 에 를 첨가한다. 송신되는 와 는 전송 도중 변경될 수 있다. 즉, 수신자는 변경의 가능성이 있는 비트로 오류 검출 여부를 확인하여야 한다. 오류 검출 및 정정 기술을 사용하더라도 여전히 미검출된 비트 오류(undetected bit error)가 있을 수 있다. 즉, 수신자는 잘못된 데이터그램을 네트워크 계층으로 전달할 수 있고, 프레임 헤더의 다른 필드의 내용이 잘못된 것을 모를 수도 있다. 따라서 오류를 감지하지 못할 확률이 낮은 기법을 선택해야한다. (대체로 확률이 낮을 수록 오버헤드가 크다.) 패리티 검사 단일 패리티 비트 데이터 D가 d개의 비트를 갖고 있다고 가정하자. 짝수 패리티 기법에서는 단순히 D에 한개의 를 추가하고, d+1개의 비트에서 1의 총개수가 짝수가 되도록 을 선택한다. 수신자는 수신된 d+1개의 bit에서 1의 개수가 짝수임을 확인한다. (당연히 홀수라면 1의 개수를 홀수로 정…

ComputerNetwork
June 01, 2023
Link Layer

링크 계층 소개 노드 링크 계층 프로토콜을 실행하는 장치 e.g. 호스트, 라우터, 스위치, AP(access point, 7장에서 설명) 등 링크 통신 경로상의 인접한 노드들을 연결하는 통신 채널 데이터그램을 출발지 호스트에서 목적지 호스트로 이동시키기 위해서는 데이터그램을 종단 간 경로의 개별 링크들로 이동시켜야만 한다. 한 링크에서 전송 노드는 데이터그램을 으로 캡슐화해서 링크로 전송한다. 위 그림에서는 6개의 링크를 거쳐간다. 링크 계층이 제공하는 서비스 데이터그램을 링크상으로 전송하기 전에 링크 계층 프레임에 캡슐화한다. 프레임은 데이터그램이 들어있는 데이터필드와 여러 개의 헤더 필드로 구성된다. 프로토콜은 링크상으로 프레임을 전송하는 규칙을 명시한다. 단일 송신자와 단일 수신자의 점대점 링크에서의 은 단순하며, 링크가 사용되지 않을 때마다 프레임을 전송할 수 있다. 하나의 브로드캐스트 링크를 여러 노드가 공요하는 경우, MAC 프로토콜은 여러 노드로부터의 프레임 …

ComputerNetwork
May 24, 2023
ICMP

인터넷 제어 메시지 프로토콜(ICMP) 은 호스트와 라우터가 서로 간에 네트워크 계층 정보를 주고받기 위해 사용된다. ICMP는 종종 IP의 한 부분으로 간주되지만, ICMP 메시지가 IP 데이터그램에 담겨 전송되므로 구조적으로는 IP 바로 위에 있다. 즉, ICMP 메시지도 IP 페이로드로 전송되며, 호스트가 상위 계층 프로토콜이 ICMP라고 표시된(상위 계층 프로토콜 번호가 1번인) IP 데이터그램을 받으면 ICMP로 내용을 역다중화한다. ICMP 메시지는 가 있고, ICMP 메시지의 발생 원인이 된 IP 데이터그램의 헤더와 첫 8바이트를 갖는다. 이는 송신자가 오류를 발생시킨 패킷을 알 수 있도록 하기 위해서이다. 중요한 ICMP 메시지 타입들은 다음과 같다 💡 ICMP 메시지는 오류 상태를 알리기 위해서만 사용되는 것이 아니다. ping 프로그램 를 특정 호스트에 보낸다. 목적지 호스트는 에코 요청을 보고 나서 을 보낸다. 대부분의 TCP/IP 구현은 ping 서버를 운영…

ComputerNetwork
May 24, 2023
Network Management & SNMP

네트워크 관리와 SNMP, NETCONF/YANG 란 무엇인가? [Saydam 1996]에는 이에 대해 잘 정리된, 한 문장으로 된 정의가 나온다. 네트워크 관리는 적정한 비용으로 실시간, 운용 성능, 서비스 품질 등의 요구사항을 만족시키기 위해 네트워크와 구성요소 자원을 감시, 테스트, 폴링, 설정, 분석, 평가, 제어하는 하드웨어, 소프트웨어, 인간 요소 등을 배치하고, 통합, 조정하는 것이다. 이 절에서는 이 광범위한 정의 중에서 네트워크 관리의 기초, 즉 네트워크 관리자가 자신의 일을 수행하는 데 사용하는 구조, 프로토콜, 데이터만을 다룬다. 네트워크 관리 프레임워크 아래 그림은 네트워크 관리의 핵심 요소들을 나타낸다. 관리 서버(managing server) 관리 서버는 의 중앙 집중형 네트워크 관리 스테이션에서 동작하는, 일반적으로 와 상호작용하는 애플리케이션이다. 네트워크 관리 활동이 일어나는 장소로서 네트워크 관리 정보의 수집, 처리, 분석, 발송을 제어한다. 여기…

ComputerNetwork
May 22, 2023
SDN Control Plane

소프트웨어 정의 네트워크(SDN) 제어 평면 이 절에서는 4.4절에서 사용한 SDN 용어들을 다시 채택하여 네트워크의 포워딩 장비들은 ‘’ 또는 그냥 ‘’라고 부를 것이다. 이 스위치들에서의 포워딩 결정은 네트워크 계층에서의 출발지/목적지 주소, 링크 계층에서의 출발지/목적지 주소 외에도 트랜스포트 계층, 네트워크 계층, 링크 계층 패킷 헤더의 다른 많은 값에 기반하여 이루어진다. SDN 구조의 특징 플로우 기반 포워딩 으로 제어되는 스위치들에서의 패킷 전달은 트랜스포트 계층, 네트워크 계층, 또는 링크 계층 헤더의 어떤 값을 기반으로 하든 이루어질 수 있다. 이는 앞 절에서 살펴본, 의 포워딩이 온전히 데이터그램의 목적지 주소를 기반으로 이루어지는 전통적인 라우터 기반 포워딩과는 매우 대조적인 특성이다. 💡 SDN에서는 모든 네트워크 스위치의 플로우 테이블 항목들을 계산하고 관리, 설치하는 일이 모두 의 임무다. 데이터 평면과 제어 평면의 분리 데이터 평면 네트워크의 들로 구성된…

ComputerNetwork
May 20, 2023
BGP

BGP eBGP (External BGP): 이웃 AS로부터 서브넷의 도달 가능성 정보를 얻습니다. 즉, 게이트웨이 간에 서브넷의 도달 가능성 정보를 교환하는 역할을 합니다. 인접한 AS 간의 경로 정보 교환을 통해 AS는 다른 네트워크로의 경로를 확인할 수 있습니다. iBGP (Internal BGP): 도달 가능성 정보를 AS 내부의 모든 라우터로 전파합니다. iBGP는 게이트웨이에서 내부 라우터로 도달 가능성 정보를 전달하는 역할을 수행합니다. 이를 통해 AS 내부의 모든 라우터는 최신의 도달 가능성 정보를 유지할 수 있습니다. BGP는 도달 가능성 정보와 정책에 기반하여 다른 네트워크로의 “좋은” 경로를 결정하는 데 사용됩니다. AS는 자체 정책과 관련하여 다른 네트워크로의 경로 선택을 조정할 수 있습니다. 또한, BGP는 서브넷이 자신의 존재를 인터넷 전체에 알릴 수 있도록 해줍니다. 즉, “나는 여기에 있어요”라는 메시지를 인터넷에게 알릴 수 있습니다. BGP는 인터넷…

ComputerNetwork
May 19, 2023
OSPF

개방형 최단 경로 우선(OSPF) 프로토콜 과 는 인터넷에서 AS 내부 라우팅에 널리 사용된다. OSPF는 링크 상태 정보를 플러딩(flooding)하고 다익스트라 최소 비용 경로 알고리즘을 사용하는 링크 상태 알고리즘이다. OSPF를 이용하여 각 라우터는 전체 AS에 대한 완벽한 토폴로지 지도(그래프)를 얻는다. 각 라우터는 자신을 루트 노드로 두고 모든 서브넷에 이르는 최단 경로 트리를 결정하기 위해 혼자서 다익스트라의 최단 경로 알고리즘을 수행한다. OSPF를 사용하는 라우터는 자율 시스템 내의 다른 모든 라우터에게 라우팅 정보를 브로드캐스팅한다. 링크 상태가 변경될 때마다 링크 상태가 변경되지 않았더라도 정기적으로(최소한 30분마다 한 번씩) OSPF 메시지에 포함된 상태 정보는 인터넷 프로토콜에 의해 전달되며, 상위 계층 프로토콜 번호로는 OSPF를 의미하는 를 갖는다. 따라서 OSPF 프로토콜은 신뢰할 수 있는 메시지 전송과 링크 상태의 브로드캐스트와 같은 기능을 스스…

ComputerNetwork
May 17, 2023
Routing Protocol

Network Layer Functions Forwarding : Data Plane Routing : Control Plane 전통적 방식 SDN Controller : 별도의 서버가 전체 네트워크를 관리 라우팅이란? 라우터에 저장될 라우팅 테이블을 만드는 과정 포워드 테이블의 구조 : 기존 방식(전통적 방식) 각각의 라우터가 제어평면(Control Plane)에서 각각의 포워딩 테이블을 작성 Logically Centralized Control Plane(최근) 별도의(일반적으로 원격) 컨트롤러가 라우터의 로컬 제어 에이전트(CAs)와 상호 작용하여 포워딩 테이블을 작성 동적 라우팅의 종류 💡 정적 라우팅은 사람이 직접하는 것이므로 따로 다루지 않는다. Global 전체 네트워크의 구조와 연결비용을 알고 있음 Link state 알고리즘 각 라우터는 전체 네트워크의 구성(topology)과 링크 상태 정보를 유지 모든 목적지 네트워크까지의 최적 경로 계산 최적 경로를 기…

ComputerNetwork
May 15, 2023
NAT, IPv6

NAT 가정 내 여러대의 컴퓨터, 스마트폰에 각각 IP를 할당하는 것이 아니라, 인터넷 공유기 1대에만 IP할당 같은 공유기에 연결된 기기들은 사설(가상)IP를 사용하고, 외부에서는 하나의 IP(공식 IP)를 공유함 A Class : 10.x.x.x B Class : 172.16.x.x ~ 172.31.x.x C Class : 192.168.0.x ~ 192.168.255.x 10.0.0.1 호스트가 128.199.40.186 외부 IP에 접근하고 싶다. 해당 데이터그램이 라우터를 거칠때, 라우터에서 NAT translation table에 WAN, LAN의 IP주소 및 포트번호를 각각 매핑한다. 라우터로 응답이 오면 table을 참조하여 해당 IP에 전달한다. 💡 NAT는 IPv4가 IPv6으로 전환되는 과도기에 사용되도록 개발되었다. → 결국 IPv6로 전환되어야 함. IPv6 IPv4의 주소 고갈로 등장, Header의 길이가 20Byte → 40Byte로 증가 pri…

ComputerNetwork
May 14, 2023
IPv4 - Internet Protocol

The Internet Network Layer IP RIP, OSPF, BGP : Control Plane(제어 평면) - 라우터들끼리 정보를 교환하는데 사용(나중에 설명) ICMP : Error reporting에 사용 IP Format ver : IP v4/v6 구분 head. len(length) : 기본 20바이트(32bit = 4byte 가 5줄) type of service : 맨 아래 data(=payload)의 타입 결정 time to live : 남아있는 홉의 개수(라우터 경유마다 1개씩 줄어듬, 좀비화를 막기 위함) upper layer : 어떤 레이어에서 온건지(TCP or UDP) length : 전체 길이(header + payload) options (if any) : 타임스탬프, 경로 지정, 경로 정보 등 저장 16-bit identifier & flgs & fragment offset IP fragmentation, Reassembly 경로를 통…

ComputerNetwork
May 11, 2023
Data plane & Control plane & Inside Router

라우터 구조 라우터는 Data plane, Control plane 두 부분으로 나뉘어 있다. Control Plane(라우팅 담당) 소프트웨어적으로 처리 일정한 시간마다 라우팅 Control Plane은 네트워크 장비 사이의 통신, 경로 선택, 라우팅 테이블 관리 등의 기능을 수행 Control Plane은 네트워크 장비의 동작을 제어하고, 네트워크 상태를 모니터링하여 최적의 경로를 결정 Control Plane은 네트워크의 안정성과 효율성을 유지하고, 서비스 제공을 위한 정책을 관리 Data Plane(포워딩 담당) 하드웨어적으로 처리 Data Plane은 패킷 전달과 관련된 작업을 처리하며, 주로 라우터나 스위치와 같은 네트워크 장비에서 동작 Data Plane은 패킷의 전달 경로를 결정하고, 포워딩 기능을 수행하여 패킷을 목적지로 전달 Data Plane은 네트워크의 성능과 속도에 직접적인 영향을 미치는 핵심적인 역할을 담당 라우터 구조 방식 간단하지만 메모리를 거쳐서…

ComputerNetwork
May 09, 2023
TCP

TCP 서비스 연결형(Connection-Oriented): TCP는 IP 계층 위에 가상의 회선을 설정하여 실제 연결을 수립하는 방식으로 동작합니다. 신뢰성(Reliability): TCP는 확인 메커니즘을 통해 데이터의 신뢰성 있는 전송을 제공합니다. 데이터의 손실이나 손상을 감지하고, 재전송을 통해 신뢰성 있는 통신을 보장합니다. 흐름제어(Flow Control): TCP는 상대방이 처리할 수 있는 범위 내에서 데이터를 전송하도록 흐름을 제어합니다. 수신측의 버퍼 상태를 고려하여 데이터의 전송 속도를 조절합니다. 혼잡제어(Congestion Control): TCP는 네트워크의 혼잡 현상을 방지하거나 제어하는 기능을 갖추고 있습니다. 네트워크 상황을 모니터링하고 데이터의 전송 속도를 조절하여 네트워크 혼잡을 예방합니다. 스트림 통신: TCP는 데이터를 바이트 단위로 나누어 전송합니다. 이는 데이터를 연속된 스트림으로 처리하며, 수신측에서는 이를 다시 조립하여 원본 데이터로 …

ComputerNetwork
May 09, 2023
UDP

UDP 목적 프로세스-대-프로세스 통신 생성 : 포트번호 이용 최소한의 오류 제어 메커니즘 수행 프로세스로부터 데이터 단위를 받아 신뢰성 없는 전달 제공 비 연결형, 신뢰성이 없는 전송 프로토콜 최소한의 오버헤드만 사용하는 간단한 프로토콜 UDP (User Datagram Protocol) UDP는 “no frills” 또는 “bare bones” 인터넷 전송 프로토콜입니다. UDP는 “best effort” 서비스를 제공하며, UDP 세그먼트는 다음과 같은 특징을 가질 수 있습니다: 손실될 수 있음 순서가 바뀌어 애플리케이션으로 전달될 수 있음 연결이 없는 프로토콜로, UDP 송신자와 수신자 간에는 핸드셰이킹이 없습니다. 각 UDP 세그먼트는 다른 세그먼트와 독립적으로 처리됩니다. UDP는 다음과 같은 용도로 사용됩니다: 스트리밍 멀티미디어 애플리케이션 (손실에 대해 관대하고 전송률에 민감) DNS (Domain Name System) SNMP (Simple Network Man…

ComputerNetwork
May 07, 2023
Multiplexing & Demultiplexing

다중화 | 역다중화 💡 다중화(Sender) 다중화는 여러 소켓으로부터 데이터를 처리하고, 전송 헤더를 추가하여 나중에 역다중화를 위해 사용합니다. 역다중화(Receiver) 역다중화는 헤더 정보를 사용하여 받은 세그먼트를 올바른 소켓으로 전달합니다. 네트워크의 다중화는 여러 개의 데이터 흐름을 하나의 통신 매체를 통해 동시에 전송하고, 역다중화는 다중화된 데이터 흐름을 각각의 목적지로 분리하여 독립적으로 수신하는 것을 의미합니다. 다중화 해제(Demultiplexing)의 작동 방식 호스트는 IP 데이터그램을 수신합니다. 각 데이터그램은 소스 IP 주소와 목적지 IP 주소를 가지고 있습니다. 각 데이터그램은 한 개의 전송 계층 세그먼트를 운반합니다. 각 세그먼트는 소스 포트 번호와 목적지 포트 번호를 가지고 있습니다. 호스트는 IP 주소와 포트 번호를 사용하여 세그먼트를 적절한 소켓으로 전달합니다. 페이로드: 상위 계층에서 전송된 데이터로 이루어진 부분입니다. (상위 헤더 +…

ComputerNetwork
May 06, 2023
TransportLayer - TCP / UDP

전송 서비스와 프로토콜 전송 프로토콜은 서로 다른 호스트에서 실행되는 애플리케이션 프로세스 간의 논리적 통신을 제공합니다. 전송 프로토콜은 종단 시스템(end systems)에서만 실행됩니다. 송신 측에서는 전송 프로토콜이 애플리케이션 메시지를 세그먼트로 분할하고 네트워크 계층으로 전달합니다. 수신 측에서는 전송 프로토콜이 세그먼트를 메시지로 재조립하고 애플리케이션 계층으로 전달합니다. 인터넷에서는 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)라는 두 가지 전송 프로토콜이 일반적으로 사용됩니다. 전송 계층 vs. 네트워크 계층 비유 네트워크 계층은 호스트 간의 논리적 통신을 제공합니다. 전송 계층은 프로세스 간의 논리적 통신을 제공합니다. 전송 계층은 네트워크 계층을 의존하며 강화합니다. 프로그램, 프로세스, 스레드: 가정의 비유: Ann의 집에 있는 12명의 아이들이 Bill의 집에 있는 12명의 아이들에게 …

ComputerNetwork
Assignments
April 29, 2023
소켓프로그래밍 과제#2-4 (계산기 구현)

소켓 프로그래밍 과제#2-4 : 계산기 구현 요구사항 클라이언트에서 서버에게 수식을 보내면 서버는 해당 수식의 해를 클라이언트에게 전송 코드 코드(클라이언트) 코드(서버) 계산 과정은 후위표기법으로 구현하였음. 각 연산자의 우선순위를 고려하여 연산자스택, 피연산자스택에서 push or pop 실행 결과 1+512/2+(23)-1 서버 클라이언트 (1+2)*3/(3-1)+13 서버 클라이언트 (3+5)/(1+3)*11 서버 클라이언트 파일 : 깃허브 링크 요구사항 코드 코드(클라이언트) 코드(서버) 실행 결과

ComputerNetwork
Assignments
April 28, 2023
소켓프로그래밍 과제#2-3 (DBMS활용 DNS구현)

소켓 프로그래밍 과제#2-3 : DBMS활용 DNS구현 요구사항 클라이언트에서 서버에게 IP or Domain Name을 보내면 서버는 Domain Name or IP를 클라이언트에게 반환, 구분 코드는 N,R,W이고, W는 INSERT쿼리 실행하여 새로운 Domain Name, IP할당 DBMS MySQL사용 JAVA에서 구현할 것이기 때문에 JDBC드라이버 필요. 코드 코드(클라이언트) 코드(서버) IP주소는 개인 테스트를 위해 localhost(127.0.0.1)로 하였음 클라이언트로부터 받은 메세지를 파싱( : 를 기준으로)하여 N,R,W중 어떤 명령을 실행할지 판단 DB 기본키는 id IP, NAME은 유니크 키로 설정하였음 실제 다른 두 컴퓨터로 연결해보기 💡 서버 컴퓨터는 공유기 와이파이에 연결하였고, 클라이언트 컴퓨터는 핸드폰 핫스팟으로 연결하였습니다. Domain Name → IP 전환 기능 IP → Domain Name 전환 기능 새로운 IP&Domain …

ComputerNetwork
Assignments
April 27, 2023
소켓프로그래밍 과제#2-2 (파일 읽기/쓰기)

소켓 프로그래밍 과제#2-2 : 파일 읽기/쓰기 요구사항 클라이언트에서 서버에게 파일 이름을 보내면, 해당 파일을 읽고/쓰는 기본적인 기능 구현 코드 코드(클라이언트) 클라이언트에서 지원하는 형식은 두가지이다. R:파일이름 W:파일이름:추가할내용 코드(서버) 클라이언트로부터 받은 문자열을 “:”기준으로 파싱하여 읽기타입인지, 쓰기타입인지를 첫번째 인자로부터 알아내고, 파일 이름을 두번째 인자로부터 알아내며, (만약 쓰기라면) 세번째 인자를 통해 쓸 내용을 알아낸다. 텍스트 파일 실행 결과 클라이언트 읽기(R) 클라이언트 쓰기(W) 파일 내용 예외처리 파일 : 깃허브 링크 요구사항 코드 코드(클라이언트) 코드(서버) 텍스트 파일 실행 결과

ComputerNetwork
Assignments
April 26, 2023
소켓프로그래밍 과제#2-1 (ASCII)

소켓 프로그래밍 과제#2-1 : ASCII 변환 요구사항 클라이언트에서 서버로 문자열을 보내면, 서버에서 해당 문자열을 아스키 코드로 변환 후 클라이언트에게 전송. 코드 코드(클라이언트) 코드(서버) 실행 결과 서버측은 붉은색, 클라이언트 측은 푸른색으로 표시하였습니다. 서버 오픈 클라이언트 오픈 클라이언트 오픈 후 서버 상태 클라이언트에서 서버로 문자열 전송 & 완료 완료 후 서버 상태 아스키 코드표 코드표를 확인해 보면, D : 68 a : 97 n : 110 k : 107 o : 111 o : 111 k : 107 U : 85 n : 110 i : 105 v : 118 로 올바르게 전송된 것을 확인할 수 있다. 코드 개선 Scanner 대신 BufferedReader를 쓰는 것이 속도가 더 빠르다. Scanner는 버퍼 크기가 1KB이고, BufferedReader는 버퍼 크기가 8KB이다. 예제같은 경우처럼 문자열 크기가 작을 경우는 큰 이득은 없음. Scann…

Algorithms
April 12, 2023
탐욕 알고리즘3

마감시간 있는 스케줄 짜기 마감시간이 있는 스케줄 짜기에서는 모든 작업들이 끝나는데 걸리는 시간이 같고 마감시간과 보상이 할당되어 있다. 작업을 마감시간 전이나 마감시간에마친다면 보상을 받으며 목표는 마감시간안에 작업을 끝내서 최대의 보상을 얻는 것이다. 작업, 마감시간 보상이 다음과 같다고 가정하자 Job Deadline Profit 1 2 30 2 1 35 3 2 25 4 1 40 가능한 결과들 Schedule Profit [1,3] 30+25 [2,1] 35+30 [2,3] 35+25 [3,1] 25+30 [4,1] 40+30 [4,3] 40+25 불가능한 경우는 나타내지 않음 마감시간안에 스케쥴링하는 알고리즘을 살펴보기 전에 몇가지를 정의 적절한 순서(feasible sequence) : 작업순서상의 모든 작업들을 마감시간안에 끝내는 경우 적절한 집합(feasible set) : 작업의 집합에서 적당한 순서가 존재하면 그 집합은 적절한 집합이다 최적순서(optimal seq…

Algorithms
April 05, 2023
탐욕 알고리즘2

가중치 그래프 신장 트리 연결된 비방향성 그래프 G에서, 순환경로(cycle)가 없어지도록 이음선을 제거하여 구성한 연결된 부분그래프를 신장 트리(spanning tree)라 한다. 따라서 신장 트리는 G안에 있는 모든 정점을 다 포함하되 트리가 되는(i.e., 순환경로가 존재하지 않는) 연결된 부분 그래프이다. (좌) 신장트리 (우) 최소 비용 신장 트리 최소 비용 신장 트리 신장트리가 되는 G의 부분그래프 중에서 가중치의 합이 최소가 되는 부분 그래프를 최소 비용 신장 트리라고 한다 여기서 최소의 가중치를 가진 부분 그래프는 반드시 트리가 되어야 한다. 그 이유는 다음과 같다. 만약 트리가 아니라면, 분명히 순환경로가 있을 것이다. 그렇게 되면 순환 경로 상의 한 이음선을 제거하면 더 작은 비용의 신장 트리가 만들어진다. 모든 신장 트리가 최소 비용 신장 트리는 아니다. 최소 비용 신장 트리의 응용 도로건설 : 도시들을 모두 연결하면서 도로의 길이가 최소가 되도록 하는 문제…

Algorithms
March 30, 2023
탐욕 알고리즘1

탐욕 알고리즘 vs. 동적 계획법 최적화 문제를 해결하여라. 탐욕 알고리즘은 동적 계획처럼 작은 부 문제들로 나뉘어지지 않는다. 탐욕 알고리즘은 순서대로 답을 하나씩 모아서 최종 답을 구축하는데, 가장 좋아보이는 답을 선택하여 모은다. 지역적으로는 최적이다. 결정된 선택은 재 고려 대상이 아니다. 과거와 미래의 선택은 현재 선택의 영향을 끼치지 않는다. 탐욕 알고리즘 접근 방법 공집합에서 시작한다. 그 집합이 문제의 해답이 될 때까지 원소를 그 집합에 차례로 추가한다. 절차 선택 과정(Selection procedure):선택과정 집합(set solution)에 추가할 다음 원소를 고른다. 그 당시 최적을 선택하는 탐욕(greedy)기준에 따라 선택한다. 적절성 검사(Feasibility Check)): 새로운 집합이 해답이 되기 적절한지 검사한다. 해답 점검(Solution Check): 새로운 집합이 문제의 최적의 해답인지를 결정한다. 예) 거스름돈 계산하기 문제 문제 : 동전…

Algorithms
March 29, 2023
분할-정복3 (Divide and Conquer) 행렬곱-쉬트라센

행렬곱 행렬 곱셈 - 재귀알고리즘 쉬트라센-행렬곱셈 알고리즘 💡 쉬트라센 알고리즘은 입력행렬의 크기가 2의 거듭제곱이어야 하며, 정사각행렬이어야 한다. 💡 행렬 곱셈보다 행렬의 합을 구하는 것이 더 빠르다는 데서 기인한 알고리즘이다. 입력행렬의 크기가 매우 큰 경우에 한해 더 효율적이다. 점화식 T(n) = 7×7×⋯×7 (7 times) =7^k =7^{logn} =n^{log7} ≈n^{2.8} 분할 정복을 피해야 하는 경우 크기 n인 문제가 거의 n에 가까운 두 개 이상의 문제로 분할된다. 지수 시간 복잡도 알고리즘이 나온다. 대표적 사례: 피보나치 수열을 분할정복으로 해결하는 경우 F(n) = F(n-1)+F(n-2) 크기n인 문제가 n/c 크기의 n개에 가까운 문제로 분할된다. 시간 복잡도가 n^{Θ(logn)}의 알고리즘이 나온다. F(n) = (n-1)F(n/c)+d 분할 정복을 피할 이유가 없는 경우 입력 크기가 작은 경우 분할정복은 직관적으로 이해하기 쉽다. 입력…

ComputerNetwork
March 28, 2023
CDN:Content Distribution Network

Video Streaming and CDNs: context 동영상 트래픽은 인터넷 대역폭의 주요 소비자 Netflix와 YouTube는 가정용 ISP 트래픽의 37%와 16%를 차지합니다. 약 10억 명의 YouTube 사용자와 약 7500만 명의 Netflix 사용자가 있습니다. Challenge : 규모 - 약 10억 명의 사용자에게 어떻게 도달할 것인가? 메가 비디오 서버는 작동 불가능 Challenge : 이질성 다양한 사용자들은 다양한 가용성을 지님 (예: 유선 vs 무선; 대역폭 풍부 vs 대역폭 부족) 해결책: 분산된 응용 수준(Application Level)의 인프라 Multimedia : Video 동영상: 일정한 속도로 표시되는 이미지의 연속(예: 초당 24개의 이미지) 디지털 이미지: 픽셀 배열 각 픽셀은 비트(RGB)로 표현됨 코딩: 이미지 내부 및 이미지 간의 중복을 사용하여 이미지를 인코딩하는 데 사용되는 비트 수를 줄임 공간적 압축 (이미지 내부)…

ComputerNetwork
March 24, 2023
P2P Applications

P2P Applications 분산시스템 클라이언트-서버 P2P 외부인이 볼때 하나의 시스템이 동작하는 것처럼 느껴져야함 Client-Server vs. P2P Client-Server 파일 F를 N클라이언트에 배포하는데 걸리는 시간 N = 클라이언트 수 F = 파일 크기 u_{s} = 서버 전송 속도 d_{min} = 클라이언트 속도 중 최저값 server transmission: N개의 파일 사본을 순차적으로 전송(upload)해야한다. 하나의 카피를 보내는데 걸리는 시간: F/u_{s} N개의 카피를 보내는데 걸리는 시간: NF/u_{s} client: 각 클라이언트들은 파일 사본을 download해야한다. dmin = min client download rate min client download time: F/d_{min} P2P N, F, u_{s}, d_{min} : Client-Server와 동일 server transmission: 최소한 하나의 사본을 up…

Algorithms
March 23, 2023
분할-정복2 (Divide and Conquer) 퀵정렬

분할-정복 2 퀵정렬(Quick Sort) 퀵 정렬의 시간복잡도 N = 2^k 개의 원소를 정렬한다고 가정할 때, 최선의 경우, 배열이 균등하게 이등분 되어 순환 호출의 깊이는 k가 된다. 각각의 단계에서 pivot을 올바르게 위치시키기 위한 비교 연산 횟수는 평균적으로 N번 이루어지므로 총 연산횟수는 O(kN)이다. 이때, k = logN 이므로 O(kN) = O(NlogN)이다. 베열이 이미 정렬되어있는 경우 최악의 시간복잡도를 가진다. 배열에서 원소가 한개씩만 분리되어 순환 호출의 깊이가 N이 된다. 각각의 단계에서 비교 연산이 평균적으로 N번 이루어지므로 총 연산횟수는 O(N^2)이다. 안정성과 제자리성 퀵 정렬은 정렬 후 동일한 원소에 대한 우선순위가 유지되지 않는다. 따라서 퀵 정렬은 불안정정렬(Unstable sort)이다. 기존 배열 이외의 추가적인 메모리를 거의 사용하지 않으므로 제자리정렬(In-place sort)이다. 분할-정복 2 퀵정렬(Quick Sort)…

ComputerNetwork
March 23, 2023
DNS:Domain Name System

DNS: Domain Name System 사람들은 여러 식별자를 가지고 있다: SSN(사회보장번호), 이름, 여권 번호 등이 있다. 인터넷 호스트와 라우터는 다음과 같은 식별자들이 있다: 32비트의 IP 주소 - 데이터그램을 주소 지정하는데 사용된다. “이름”, 예를 들면 www.yahoo.com - 사람들에게 읽기 쉬운 형태로 사용된다. 질문: IP 주소와 이름 간의 매핑, 그리고 그 반대의 경우에는 어떻게 할 수 있을까? 도메인 이름 시스템: 계층적인 많은 네임 서버 에 구현된 분산 데이터베이스 응용 계층 프로토콜: 호스트와 네임 서버가 이름을 확인하여 주소/이름 변환을 한다. 참고: 핵심 인터넷 기능이며, 응용 계층 프로토콜로 구현되어 있다. 네트워크의 “가장자리”에서 복잡성이 발생한다. 전송계층 : UDP사용 (불필요한 데이터 최소화, 트래픽 감소) DNS 서비스, 구조 DNS 서비스 호스트 이름을 IP 주소로 변환 호스트 별칭 정식 이름과 별칭 이름(alias) 메일 서…

Algorithms
March 22, 2023
분할-정복1 (Divide and Conquer) 이진탐색, 병합정렬

분할-정복1 이진탐색 반드시 이미 정렬된 배열에 대해 사용 배열에서 임의의 값을 선택, 찾으려는 값보다 임의의 값이 크면 임의의 값 왼쪽에서 재탐색(재귀). 찾으려는 값보다 임의의 값이 작으면, 임의의 값 오른쪽에서 재탐색(재귀) 시간복잡도 분석 처음에 입력된 개수 n이라 하면 첫 시행 후 n/2, 재시행 후 n/2 x 1/2 … k번의 시행 후에 (1/2)^k x n 이고, 최악의 경우, 마지막에 1개가 남을때이므로 (1/2)^k x n ~= 1 양변에 2^k를 곱해주면, n ~= 2^k이다. 여기서, 양변에 2를 밑으로 하는 로그를 취하면 k = log_2(n), 시간복잡도는 O(logn)으로 나타낼 수 있다. (상수 무시) 합병 정렬(Merge sort) 시간복잡도 배열의 길이 n이라 할때, 단계의 높이는 logn을 따르고, 병합시 비교는 배열의 길이만큼의 횟수가 필요하기 때문에 n이다. 따라서 시간복잡도 O(nlogn)이다. 최악의 경우 및 점화식 분석 분할-정복1 이진…

ComputerNetwork
March 21, 2023
이메일

Electronic mail 3개의 주 요소 : User agent Mail server Simple Mail Transfer Protocol : SMTP User agent 클라이언트: 클라이언트는 서버에게 서비스를 요청하는 컴퓨터나 디바이스를 의미한다. 클라이언트는 웹 브라우저, 웹 애플리케이션, 모바일 앱 등 다양한 형태로 존재할 수 있다. 사용자는 클라이언트를 통해 웹 서버에 요청을 보내고, 서버로부터 응답을 받아 화면에 웹 페이지를 렌더링하거나 서비스를 이용할 수 있다. 예를 들어, 사용자가 웹 브라우저를 통해 웹 페이지를 요청하면 웹 브라우저가 클라이언트 역할을 수행하여 요청을 서버에 전달하고, 서버로부터 받은 응답을 렌더링하여 사용자에게 보여준다. User Agent: User Agent는 HTTP 요청을 보내는 클라이언트의 소프트웨어나 애플리케이션을 식별하는 문자열 정보를 의미한다. 이 정보는 HTTP 헤더에 포함되어 서버에게 전달된다. User Agent는 클라이…

ComputerNetwork
March 16, 2023
웹 & HTTP

웹 & HTTP 웹 페이지는 객체(object)들로 이루어져 있다. 객체는 HTML 파일, JPEG 이미지, Java applet, 오디오 파일 등이 될 수 있다. 웹 페이지는 여러 개의 참조된 객체들을 포함하는 기본 HTML 파일로 구성된다. 각 객체는 URL(예: Uniform Resource Locator)을 통해 주소 지정이 가능하다. 도메인 이름(Domain Name)과 URL의 차이점이 있다. 웹 문서 HTML CSS HTML5 = HTML + CSS + Javascript SGML, XML HTML vs. XML 목적 및 사용범위: HTML은 웹 페이지의 구조와 내용을 표현하는 언어로 주로 웹 브라우저에서 사용된다. 반면에 XML은 데이터를 표현하고 전송하는 일반적인 마크업 언어로, 다양한 분야에서 사용될 수 있다. 태그와 문법: HTML은 미리 정의된 태그들로 이루어진 마크업 언어로, 태그에는 미리 정의된 의미와 스타일이 부여되어 있다. XML은 사용자가 직접 태그…

Algorithms
March 15, 2023
차수, Big-O 표기법

차수(Order) 알고즘이 얼마나 복잡한지를 정량적으로 다루기 위한 개념 항시 어떤 알고리즘이 좋다고 이야기할 수 없다. 어떤 알고리즘이 효율적인지 척도가 필요하다. 일반적으로 입력 크기 n이 매우 크다고 가정한다. Ο(f(n)) - At most as fast as f Ω(f(n)) - At least as fast as f Θ(f(n)) - At the rate of f Big-O 표기법 정의 : 점근적 상한(Asymptotic Upper Bound) 주어진 복잡도 함수 f(n)에 대해서 g(n)∈ O(f(n))이면 다음을 만족한다. n ≥ N인 모든 정수 n에 대해서 g(n) ≤ c ×f(n)이 성립하는 실수 c > 0 와 음이 아닌 정수 N이 존재한다 g(n) ∈ O(f(n)) g(n)은 f(n)의 큰 O이다. 어떤 함수 g(n)이 O(n^2)에 속한다는 말은 함수 g(n)는 궁극에 가서는 (즉, 어떤 임의의 N값보다 큰 값에 대해서는 어떤 2차함수 cn^2보다는 작은 값을…

ComputerNetwork
March 14, 2023
네트워크 어플리케이션 원리

네트워크 어플리케이션 원리 네트워크 어플리케이션 e-mail ftp : file 공유 web text messaging (카톡) remote login P2P file sharing multi-user network games streaming stored video (YouTube, Hulu, Netflix : OTT(over-the-top)) Skype : voice over IP Zoom : real-time video conferencing social networking Searching engine TCP/IP Protocol Layers 네트워크 앱 만들기 다음과 같은 프로그램 작성: (다른) 엔드 시스템에서 실행 네트워크를 통해 통신 예: 웹 서버 소프트웨어가 브라우저 소프트웨어(클라이언트)와 통신함 네트워크 코어 장치용 소프트웨어를 작성할 필요가 없음 네트워크 코어 디바이스에서 사용자 애플리케이션을 실행하지 않음 엔드 시스템의 애플리케이션을 통해 신속한 애플리케이…

ComputerNetwork
March 14, 2023
인터넷의 역사

인터넷의 역사: 패킷 교환에서 현대 클라우드까지 1961-1972: 초기 패킷 교환 원리 1961년: Kleinrock이 큐잉 이론으로 패킷 교환의 효율성을 보임 1964년: Baran이 군사 네트워크에 패킷 교환을 적용 1967년: ARPAnet이 ARPA(Advanced Research Projects Agency)에 의해 고안됨 1969년: 최초의 ARPAnet 노드가 동작 1972년: ARPAnet 공개 데모, NCP(Network Control Protocol) 최초의 호스트 간 프로토콜, 최초의 이메일 프로그램, ARPAnet에 15개의 노드가 존재 1972-1980: 인터네트워킹, 새로운 독점 네트워크들 1970년: 하와이의 ALOHAnet 위성 네트워크 1974년: Cerf와 Kahn이 네트워크 상호연결을 위한 아키텍처를 제안 1976년: Xerox PARC의 Ethernet 1970년대 후반: 독점 아키텍처들인 DECnet, SNA, XNA가 등장 1970년대 후반…

ComputerNetwork
March 09, 2023
프로토콜

프로토콜 “계층” 네트워크는 많은 “요소”들로 구성되어 복잡함 : 호스트 라우터 다양한 매체의 링크 응용 프로토콜 하드웨어, 소프트웨어 💡 네트워크 구조를 조직화 하기 위해서는? 예 : 항공 여행의 조직화 분업, 조직화가 중요하다 계층화의 이유 복잡한 시스템을 다룰 때 : 명시적인 구조가 복잡한 시스템의 요소들의 식별과 관계를 분명하게 해 줌. 논의를 위한 계층화된 참조모델 모듈화로 시스템의 관리와 갱신이 용이해짐. 한 계층의 구현을 변경해도 시스템의 다른 부분에 영향을 주지 않음. ISO/OSI 참조 모델(Open Systems Interconnection Reference Model) 응용(Application) 계층: 사용자와 네트워크 간의 상호작용을 담당하며, 응용 프로토콜을 통해 다양한 네트워크 애플리케이션을 지원합니다. 표현(Presentation) 계층: 데이터의 형식을 변환하고 암호화, 압축, 인코딩 등의 기능을 제공하여 응용 계층이 전송할 데이터를 처리합니다. …

ComputerNetwork
March 09, 2023
지연, 손실, 처리율

네트워크에서의 지연, 손실, 처리율 손실과 지연은 어떻게 발생하는가? 라우터의 버터에 패킷들이 큐잉된다. 패킷 도착률 > 출력 링크 용량(대역폭)을 넘으면 큐잉 패킷들은 자기 차례를 기다림. 패킷 지연의 4가지 원인 d_{nodal}=d_{proc} + d_{queue} + d_{trans} + d_{prop} d_{proc} : nodal processing 에러 검사 출력 링크 결정 대개 msec이하 d_{queue} : queueing delay 출력 링크에서 전송을 기다리는 시간 라우터의 혼잡 정도에 따라 의존적 d_{trans} : transmission delay L : 패킷 길이(bits) R : 링크 대역폭(bps) d_{trans} = L/R d_{prop} : propagation delay d : 물리 링크의 길이 s : 전파 속도 (~2x10^8 m/s) d_{prop} = d/s 큐잉 지연 R : 링크 대역폭 (bps) L : 패킷 길이 (bits) a…

Algorithms
March 09, 2023
알고리즘 분석 외

피보나치 수열 : 재귀 알고리즘 T(n) = fib(n)을 계산하기 위해서 fib()함수를 호출하는 횟수 T(0) = 1, T(1) = 1 T(n) = T(n-1) + T(n-2) (for ≥ 2) 재귀 알고리즘의 증명 알고리즘 분석 시간복잡도(Time Complexity Analysis) 분석 입력 크기(Input Size)를 정의한다 배열의 크기 등 단위 연산(Basic Operation)을 정의한다. 비교문(Comparison), 지정문(Assignment) 등 알고리즘의 시간 복잡도 분석은 입력크기를 기준으로 단위연산을 몇 번 실행하는지 구하는 것이다. 어떤 겨웅에는 입력크기 및 입력 값에도 좌우된다. 순차검색에서 검색요소가 배열의 첫 번째 요소 : 1번 수행 배열에 없는 경우 : n번 실행 알고리즘 분석 종류 일정 시간 복잡도 분석(Every-case time complexity analysis) 복잡도는 입력 크기에만 종속 입력 값과는 무관하게 복잡도는 일정 (예 : 배…

ComputerNetwork
March 09, 2023
네트워크 코어

네트워크 코어 상호 연결된 라우터들의 망 패킷교환(packet-switching):호스트는 데이터를 패킷으로 분할 출발지에서 목적지까지의 경로를 따라, 패킷들을 한 라우터에서 다음 라우터로 전송 각 패킷은 링크의 전체 용량을 사용해서 전송됨 : 대역폭을 최대한 사용해서 전송 패킷 교환 저장 후 전달(store-and-forward) 💡 라우터에서 패킷 전송 전에 저장하는 장소 : 큐, 메모리 L 비트 패킷을 R bps 링크에 전송하는데 걸리는 시간 : L/R 초 저장 후 전달 : 각 패킷은 라우터에 완전히 도달해야 다음 라우터로 전송 가능. 종단지연시간 : 2L/R 큐잉 지연, 손실 링크로의 도착률 > 링크의 전송률 이면, 라우터의 큐에 데이터가 쌓임 메모리가 넘치면 데이터(패킷)는 손실될 수 있다. 네트워크 코어의 두가지 핵심 기술 라우터는 패킷의 헤더에 있는 IP정보(네트워크 id / 스위치는 호스트 id)가 필요함. IP주소 : 176.165.1.1 , 176.165 =…

Algorithms
March 08, 2023
알고리즘이란? 외

알고리즘이란? 문제에 대한 답을 찾기 위해서 계산하는 절차이다 일반적인 단계적 절차를 명시한다. 문제의 표기 문제 : 해답을 찾으려고 물어보는 질문 매개변수(parameters) 문제에서 어떤 특정 값이 지정되지 않는 변수 문제의 입력(input) 파라미터에 특정 값을 지정하면 “개별 문제”가 된다. 이렇게 파라미터에 지정할 값을 문제의 입력사례(instance)라고 한다. 사례에 대한 대답(solution) : 출력(output) 알고리즘의 기술 자연어 : 한글 또는 영어 (부정확하고 모호함) 프로그래밍언어 : C, C++, Java, Pascal 등 (특정 언어에 의존적이어서 일반적인 알고리즘 기술에 부적합) 의사코드(Pseudo-code) : 직접 실행할 수 있는 프로그래밍 언어는 아니지만, 실제 프로그램에 거의 가깝게 계산과정을 표현할 수 있는 언어 알고리즘은 보통 의사코드로 표현한다. 의사코드 사용법 제어구조 repeat (n times) {…} 프로시저와 함수의 구분 프…

ComputerNetwork
March 07, 2023
컴퓨터 네트워크와 인터넷

인터넷이란? Internet vs. intranet inter + network intra + network nuts & bolts 관점 호스트 = 종단시스템 모든 서버는 호스트이지만 모든 호스트가 서버인 것은 아니다. 네트워크에 연결이 확립된 모든 장치는 호스트의 자격이 있는 반면, 다른 장치(클라이언트)로부터의 연결을 수락하는 호스트만 서버가 될 수 있다. 전송률 : 대역폭(bandwidth) 네트워크를 도로로 비유하면, 대역폭은 도로의 넓이, 넓으면 넓을수록 많은 데이터를 보낼 수 있다. 호스트끼리의 데이터 교환시 데이터의 단위(패킷), 패킷의 크기는 동일하다. 라우터 & 스위치 스위치 : 동일한 네트워크의 호스트간 데이터 교환을 도와주는 장치 (주로LAN) 라우터 : 서로 다른 네트워크 간 데이터 교환을 도와주는 장치 (주로WAN) 인터넷 네트워크들의 네트워크 상호 연결된 ISPs(Internet Service Providers : KT, LG U+, …) 프로토콜 통신 프…