From fbe032e022c28ef15142146547692bf788f5c6e1 Mon Sep 17 00:00:00 2001 From: thinkjin99 Date: Thu, 8 Aug 2024 14:40:07 +0000 Subject: [PATCH] Processed Markdown files using obs3dian --- ...34\353\260\270\353\237\260\354\213\261.md" | 2 +- .../(AWS \354\236\205\353\254\270) IAM.md" | 2 +- ...5 \355\205\214\354\212\244\355\212\270.md" | 8 ++--- ...0\353\212\245 \354\234\204\354\236\204.md" | 4 +-- ...4\354\227\220 \354\227\260\352\262\260.md" | 18 +++++----- ...0\354\270\240 \354\240\234\352\263\265.md" | 6 ++-- ...0 \354\225\224\355\230\270\355\231\224.md" | 22 ++++++------ ...4\355\201\254 \354\203\235\354\204\261.md" | 4 +-- AWS/vpc/VPC Reachability Analyzer.md | 6 ++-- ...0\353\263\270 \354\204\244\354\240\225.md" | 2 +- ...inary Search Tree (AVL, Red-Black Tree).md | 36 +++++++++---------- .../Circular Queue/Circular queue.md | 4 +-- Data Structure/Circular queue.md | 4 +-- Data Structure/MST/Disjoint Set.md | 8 ++--- Data Structure/MST/Kruskal, MST.md | 4 +-- Data Structure/b tree/B*tree.md | 4 +-- Data Structure/b tree/B+tree.md | 14 ++++---- Data Structure/deque/deque.md | 6 ++-- Data Structure/hashmap/hashmap.md | 4 +-- .../hasing algorithm/hashing algorithm.md | 6 ++-- .../single linked list/Single Linked List.md | 4 +-- 21 files changed, 84 insertions(+), 84 deletions(-) diff --git "a/AWS/EC2/\353\241\234\353\223\234\353\260\270\353\237\260\354\213\261.md" "b/AWS/EC2/\353\241\234\353\223\234\353\260\270\353\237\260\354\213\261.md" index acecc8e..35e838d 100644 --- "a/AWS/EC2/\353\241\234\353\223\234\353\260\270\353\237\260\354\213\261.md" +++ "b/AWS/EC2/\353\241\234\353\223\234\353\260\270\353\237\260\354\213\261.md" @@ -38,7 +38,7 @@ ___ 서버에 요청을 전달하기 이전에 라는 말에 집중하자. 로드밸런서는 서버의 앞 단에 위치해 요청을 서버보다 먼저 전달받는 역할을 수행한다. 그림으로 보면 아래와 같다. -![[Pasted image 20240719211054.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1%20/%20Pasted%20image%2020240719211054.png) 클라이언트는 각 서버의 실제 주소는 파악하지 못한채 로드밸런서의 주소 만을 파악할 수 있다. 이에따라 서버의 실제 주소를 클라이언트에게 숨길 수 있어 보안성을 높일 수 있다. 또한 실제 서버로 요청을 전달하기 이전에 검증 등의 작업을 수행할 수 있어 서버의 안전성을 높일 수 있다. >[! 엥 이거 완전 리버스 프록시 아니야?] diff --git "a/AWS/IAM/(AWS \354\236\205\353\254\270) IAM.md" "b/AWS/IAM/(AWS \354\236\205\353\254\270) IAM.md" index 4c329a4..4a85e17 100644 --- "a/AWS/IAM/(AWS \354\236\205\353\254\270) IAM.md" +++ "b/AWS/IAM/(AWS \354\236\205\353\254\270) IAM.md" @@ -40,7 +40,7 @@ ___ IAM은 접근 권한 설정을 유저, 그룹, 역할, 정책 총 4가지의 카테고리를 활용해 관리한다. -![[스크린샷 2024-04-11 오전 11.54.17.png|500]] +![500](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/%28AWS%20%EC%9E%85%EB%AC%B8%29%20IAM%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-04-11%20%EC%98%A4%EC%A0%84%2011.54.17.png) * **유저**: 엑세스 키와 비밀 키를 가지고 AWS 리소스를 사용하는 객체를 말한다. * **그룹**: 하나 혹은 여러 유저를 저장하고 있으며 권한을 개개인이 아닌 유저 집단에 적용할 수 있다. * **역할**: 역할은 하나 혹은 다수의 정책을 포함할 수 있으며 유저에게 할당하는 것이 가능하다. diff --git "a/AWS/IAM/1.4 IAM \354\240\225\354\261\205 \354\213\234\353\256\254\353\240\210\354\235\264\355\204\260\353\245\274 \354\202\254\354\232\251\355\225\264\354\204\234 IAM \354\240\225\354\261\205 \355\205\214\354\212\244\355\212\270.md" "b/AWS/IAM/1.4 IAM \354\240\225\354\261\205 \354\213\234\353\256\254\353\240\210\354\235\264\355\204\260\353\245\274 \354\202\254\354\232\251\355\225\264\354\204\234 IAM \354\240\225\354\261\205 \355\205\214\354\212\244\355\212\270.md" index b99802b..93bd9f0 100644 --- "a/AWS/IAM/1.4 IAM \354\240\225\354\261\205 \354\213\234\353\256\254\353\240\210\354\235\264\355\204\260\353\245\274 \354\202\254\354\232\251\355\225\264\354\204\234 IAM \354\240\225\354\261\205 \355\205\214\354\212\244\355\212\270.md" +++ "b/AWS/IAM/1.4 IAM \354\240\225\354\261\205 \354\213\234\353\256\254\353\240\210\354\235\264\355\204\260\353\245\274 \354\202\254\354\232\251\355\225\264\354\204\234 IAM \354\240\225\354\261\205 \355\205\214\354\212\244\355\212\270.md" @@ -1,7 +1,7 @@ # 문제 설명 IAM 정책을 실제로 사용하기 전에 영향 범위를 확인하려 한다. # 해결 방법 -IAM 정책을 IAM 역할에 연결하고 나서 IAM 정책 시뮬레이터로 작업한다.![[TestingIAMPolicieswiththeIAMPolicySimulator.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.4%20IAM%20%EC%A0%95%EC%B1%85%20%EC%8B%9C%EB%AE%AC%EB%A0%88%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C%20IAM%20%EC%A0%95%EC%B1%85%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20/%20TestingIAMPolicieswiththeIAMPolicySimulator.png) # 작업 방법 1. assign-role.policy.json이라는 파일을 생성한다. ```json @@ -22,7 +22,7 @@ IAM 정책을 IAM 역할에 연결하고 나서 IAM 정책 시뮬레이터로 ```shell aws iam create-role --assume-role-policy-document file://assume-role-policy.json --role-name AWSCookbook104IamRole ``` -![[스크린샷 2024-04-14 오후 2.26.05.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.4%20IAM%20%EC%A0%95%EC%B1%85%20%EC%8B%9C%EB%AE%AC%EB%A0%88%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C%20IAM%20%EC%A0%95%EC%B1%85%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-04-14%20%EC%98%A4%ED%9B%84%202.26.05.png) 3. IAM 관리형 정책인 AmazonEC2ReadOnlyAccess를 생성한 IAM 역할에 연결한다. ```shell aws iam attach-role-policy --role-name AWSCookbook104IamRole --policy-arn arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess @@ -39,14 +39,14 @@ aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::117855555634: >[링크](https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html)를 참고한다. EC2ReadOnly만 허용되어 있음으로 암시적인 거부를 한다. -![[스크린샷 2024-04-14 오후 3.11.58.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.4%20IAM%20%EC%A0%95%EC%B1%85%20%EC%8B%9C%EB%AE%AC%EB%A0%88%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C%20IAM%20%EC%A0%95%EC%B1%85%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-04-14%20%EC%98%A4%ED%9B%84%203.11.58.png) 그렇다면 `ec2:DescribeInstances` 작업을 해보자. ```shell aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::117855555634:role/AWSCookbook104IamRole --action-names ec2:DescribeInstances ``` -![[스크린샷 2024-04-14 오후 3.11.31.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.4%20IAM%20%EC%A0%95%EC%B1%85%20%EC%8B%9C%EB%AE%AC%EB%A0%88%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C%20IAM%20%EC%A0%95%EC%B1%85%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-04-14%20%EC%98%A4%ED%9B%84%203.11.31.png) # 참고 IAM 정책을 사용해 AWS에서 사용하는 엑세스 관리 권한을 정의할 수 있다. 또한 IAM 정책 시뮬레이터의 콘솔을 통해 IAM 정책에 대한 영향 범위를 확인할 수 있다. diff --git "a/AWS/IAM/1.5 \352\266\214\355\225\234 \352\262\275\352\263\204\353\245\274 \354\202\254\354\232\251\355\225\234 IAM \352\264\200\353\246\254 \352\270\260\353\212\245 \354\234\204\354\236\204.md" "b/AWS/IAM/1.5 \352\266\214\355\225\234 \352\262\275\352\263\204\353\245\274 \354\202\254\354\232\251\355\225\234 IAM \352\264\200\353\246\254 \352\270\260\353\212\245 \354\234\204\354\236\204.md" index 63eddec..7ab8764 100644 --- "a/AWS/IAM/1.5 \352\266\214\355\225\234 \352\262\275\352\263\204\353\245\274 \354\202\254\354\232\251\355\225\234 IAM \352\264\200\353\246\254 \352\270\260\353\212\245 \354\234\204\354\236\204.md" +++ "b/AWS/IAM/1.5 \352\266\214\355\225\234 \352\262\275\352\263\204\353\245\274 \354\202\254\354\232\251\355\225\234 IAM \352\264\200\353\246\254 \352\270\260\353\212\245 \354\234\204\354\236\204.md" @@ -84,7 +84,7 @@ sed -e "s|AWS_ACCOUNT_ID|${AWS_ACCOUNT_ID}|g" boundary-policy-template.json > bo ```shell aws iam create-policy --policy-name AWSCookbook105PB --policy-document file://boundary-policy.json ``` -![[스크린샷 2024-04-14 오후 4.36.14.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.5%20%EA%B6%8C%ED%95%9C%20%EA%B2%BD%EA%B3%84%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%9C%20IAM%20%EA%B4%80%EB%A6%AC%20%EA%B8%B0%EB%8A%A5%20%EC%9C%84%EC%9E%84%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-04-14%20%EC%98%A4%ED%9B%84%204.36.14.png) 8. policy-template.json 파일을 생성한다. ```json { @@ -185,7 +185,7 @@ sed -e "s|AWS_ACCOUNT_ID|${AWS_ACCOUNT_ID}|g" policy-template.json > policy.json ```shell aws iam create-policy --policy-name AWSCookbook105Policy --policy-document file://policy.json ``` -![[스크린샷 2024-04-14 오후 4.58.46.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.5%20%EA%B6%8C%ED%95%9C%20%EA%B2%BD%EA%B3%84%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%9C%20IAM%20%EA%B4%80%EB%A6%AC%20%EA%B8%B0%EB%8A%A5%20%EC%9C%84%EC%9E%84%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-04-14%20%EC%98%A4%ED%9B%84%204.58.46.png) 11. 정책을 연결한다. ```shell aws iam attach-role-policy --policy-arn arn:aws:iam::$AWS_ACCOUNT_ID:policy/AWSCookbook105Policy --role-name AWSCookbook105Role diff --git "a/AWS/IAM/1.6 AWS SSM Session Manager\353\245\274 \354\202\254\354\232\251\355\225\264 EC2 \354\235\270\354\212\244\355\204\264\354\212\244\354\227\220 \354\227\260\352\262\260.md" "b/AWS/IAM/1.6 AWS SSM Session Manager\353\245\274 \354\202\254\354\232\251\355\225\264 EC2 \354\235\270\354\212\244\355\204\264\354\212\244\354\227\220 \354\227\260\352\262\260.md" index bcbd912..dfdb3e6 100644 --- "a/AWS/IAM/1.6 AWS SSM Session Manager\353\245\274 \354\202\254\354\232\251\355\225\264 EC2 \354\235\270\354\212\244\355\204\264\354\212\244\354\227\220 \354\227\260\352\262\260.md" +++ "b/AWS/IAM/1.6 AWS SSM Session Manager\353\245\274 \354\202\254\354\232\251\355\225\264 EC2 \354\235\270\354\212\244\355\204\264\354\212\244\354\227\220 \354\227\260\352\262\260.md" @@ -11,7 +11,7 @@ -![[Pasted image 20240503232608.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.6%20AWS%20SSM%20Session%20Manager%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90%20%EC%97%B0%EA%B2%B0%20/%20Pasted%20image%2020240503232608.png) VPC는 기본적으로 가상의 네트워크 영역이기에 사설 아이피 주소를 가지게 된다. - 사설 IP 대역 @@ -21,7 +21,7 @@ VPC는 기본적으로 가상의 네트워크 영역이기에 사설 아이피 이렇게 3개의 대역을 가지며, 하나의 VPC에는 위의 네트워크 대역, 혹은 서브넷 대역이 할당 가능하다. -![[Pasted image 20240503233116.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.6%20AWS%20SSM%20Session%20Manager%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90%20%EC%97%B0%EA%B2%B0%20/%20Pasted%20image%2020240503233116.png) 예시로 10.0.0.0/16의 아이피 주소를 VPC에 할당한 상황에서, VPC를 원하면 다시 서브넷으로 나눠서 (단, VPC를 나눈 서브넷을 다시 나누지는 못한다!) @@ -39,7 +39,7 @@ VPC를 원하면 다시 서브넷으로 나눠서 (단, VPC를 나눈 서브넷 >어떻게 Public Subnet을 만드는데? -![[Pasted image 20240504100036.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.6%20AWS%20SSM%20Session%20Manager%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90%20%EC%97%B0%EA%B2%B0%20/%20Pasted%20image%2020240504100036.png) AWS의 Internet Gateway를 통해 해당 서브넷을 퍼블릭 서브넷이 되게 할 수 있다. 서브넷이 외부와 통신할 때, Internet Gateway를 거치게 하면 외부와 통신이 가능하게 된다! >퍼블릭 서브넷으로 만들고 싶은 서브넷을 인터넷 게이트웨이를 통해 밖으로 나가도록 라우팅 테이블을 설정을 해줘야한다. @@ -69,7 +69,7 @@ private Subnet은 Public Subnet과 달리, - 보안 강화 - SSH 접근은 인스턴스가 외부로부터 공격 받을 수 있는 벡터를 제공하므로, 특정 상황에는 이를 완전히 차단한다. - 예 : 금융기관이나 의료 데이터를 처리하는 회사에서는 데이터 보안 및 개인정보 보호 규정을 엄격히 준수해야 한다. 이런 기관들은 외부 공격의 위험을 최소화하기 위해 프라이빗 서브넷에 EC2 인스턴스를 배치하고, 외부 네트워크 접속을 차단한다. 이 경우, AWS Systems Manager의 Session Manager를 사용하여 인스턴스에 접근하며, 모든 접속 기록과 데이터 전송은 AWS CloudTrail과 CloudWatch를 통해 로깅되어 감사 및 모니터링이 이루어지게 된다. - - ![[Pasted image 20240504102002.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.6%20AWS%20SSM%20Session%20Manager%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90%20%EC%97%B0%EA%B2%B0%20/%20Pasted%20image%2020240504102002.png) - 관리 및 운영 자동화 - 대규모 클라우드 인프라를 운영하는 기업에서는 수백 개의 인스턴스를 효율적으로 관리하기 위해 자동화 도구를 사용합니다. @@ -77,7 +77,7 @@ private Subnet은 Public Subnet과 달리, ## 해결 방법 -![[Pasted image 20240504102208.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.6%20AWS%20SSM%20Session%20Manager%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90%20%EC%97%B0%EA%B2%B0%20/%20Pasted%20image%2020240504102208.png) - IAM 역할을 생성하고, `AmazonSSMManagedInstanceCore`정책에 연결한다. - EC2 인스턴스 프로필을 생성하고 생성한 IAM 역할을 인스턴스 프로필에 연결한다. - EC2 인스턴스 프로필을 EC2 인스턴스에 연결하고 @@ -87,7 +87,7 @@ private Subnet은 Public Subnet과 달리, - Amazon VPC내에 배포된 프라이빗 서브넷 및 라우팅 테이블 - [AWS System Manager에 필요한 VPC 엔트포인트](https://repost.aws/ko/knowledge-center/ec2-systems-manager-vpc-endpoints) - [Session Manager 플러그인을 설치한 AWS CLI v2](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html) -![[Pasted image 20240505203639.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.6%20AWS%20SSM%20Session%20Manager%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90%20%EC%97%B0%EA%B2%B0%20/%20Pasted%20image%2020240505203639.png) ##### EC2 운영체제에 맞게 SSM Agent를 수동설치 @@ -102,7 +102,7 @@ SSM은 Aws System Manager로 AWS 리소스를 통합적으로 관리하고 자 ssh 없이 원격으로 명령 실행 가능하다. ##### 역할 생성 -![[Pasted image 20240505200921.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.6%20AWS%20SSM%20Session%20Manager%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90%20%EC%97%B0%EA%B2%B0%20/%20Pasted%20image%2020240505200921.png) 만든 역할을 ec2->작업->보안->IAM역할 수정 탭을 눌러서 EC2 인스턴스에 역할을 연결한다. ##### VPC Endpoint @@ -197,14 +197,14 @@ HttpTokens=required,HttpPutResponseHopLimit=64,HttpEndpoint=enabled \ --output text) ``` 8. 확인 -![[Pasted image 20240505212412.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.6%20AWS%20SSM%20Session%20Manager%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90%20%EC%97%B0%EA%B2%B0%20/%20Pasted%20image%2020240505212412.png) ``` aws ssm describe-instance-information \ --filters Key=ResourceType,Values=EC2Instance \ --query "InstanceInformationList[].InstanceId" --output text ``` 9. 실행 -![[Pasted image 20240505212525.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.6%20AWS%20SSM%20Session%20Manager%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90%20%EC%97%B0%EA%B2%B0%20/%20Pasted%20image%2020240505212525.png) #### Session Manager의 장점 - 인스턴스와 연결된 보안 그룹에서 인터넷 연결 TCP 포트를 허용할 필요가없다. diff --git "a/AWS/IAM/CloudFront\353\245\274 \354\202\254\354\232\251\355\225\264 S3\354\227\220\354\204\234 \354\225\210\354\240\204\355\225\230\352\262\214 \354\233\271 \354\275\230\355\205\220\354\270\240 \354\240\234\352\263\265.md" "b/AWS/IAM/CloudFront\353\245\274 \354\202\254\354\232\251\355\225\264 S3\354\227\220\354\204\234 \354\225\210\354\240\204\355\225\230\352\262\214 \354\233\271 \354\275\230\355\205\220\354\270\240 \354\240\234\352\263\265.md" index c89a17b..bb9ef27 100644 --- "a/AWS/IAM/CloudFront\353\245\274 \354\202\254\354\232\251\355\225\264 S3\354\227\220\354\204\234 \354\225\210\354\240\204\355\225\230\352\262\214 \354\233\271 \354\275\230\355\205\220\354\270\240 \354\240\234\352\263\265.md" +++ "b/AWS/IAM/CloudFront\353\245\274 \354\202\254\354\232\251\355\225\264 S3\354\227\220\354\204\234 \354\225\210\354\240\204\355\225\230\352\262\214 \354\233\271 \354\275\230\355\205\220\354\270\240 \354\240\234\352\263\265.md" @@ -9,7 +9,7 @@ - 물리적으로 거리가 멀면 멀수록 지연시간이 생길 수 밖에 없다. - 이럴 때 클라이언트와 서버 중간에 캐시 서버를 두어 속도를 높이는 것 -![[스크린샷 2024-06-10 14.32.48.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/CloudFront%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20S3%EC%97%90%EC%84%9C%20%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C%20%EC%9B%B9%20%EC%BD%98%ED%85%90%EC%B8%A0%20%EC%A0%9C%EA%B3%B5%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-06-10%2014.32.48.png) - “엣지 로케이션”이라고 하는 aws 데이터 센터를 이용하여 전세계 네트워크를 통해 콘텐츠를 제공 - 일반적인 웹 서버에서 이미지의 경우 url을 통해 제공되어짐 @@ -36,11 +36,11 @@ 1. 전역 엣지 로케이션인 POP는 사용자에게 가장 가까운 위치. 2. 리전 엣지 캐시는 POP와 오리진 서버 사이에 위치, POP보다는 덜 사용되는 데이터들의 정보를 가지고 있다. -![[스크린샷 2024-06-05 13.42.47.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/CloudFront%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20S3%EC%97%90%EC%84%9C%20%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C%20%EC%9B%B9%20%EC%BD%98%ED%85%90%EC%B8%A0%20%EC%A0%9C%EA%B3%B5%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-06-05%2013.42.47.png) ## 사용 사례 - s3 + cloudFront로 정적 웹 콘텐츠 (html, css, js)의 전송속도를 높일 수 있다. -![[스크린샷 2024-06-10 13.35.31.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/CloudFront%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20S3%EC%97%90%EC%84%9C%20%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C%20%EC%9B%B9%20%EC%BD%98%ED%85%90%EC%B8%A0%20%EC%A0%9C%EA%B3%B5%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-06-10%2013.35.31.png) - 미디어를 스트리밍하기 위한 몇 가지 옵션을 제공한다 - 온디맨드 비디오 : hls, mpeg dash 등과 같은 일반적인 포맷으로 디바이스에 상관없이 스트리밍 가능 - 라이브 스트리밍 : 엣지에 미디어 조각을 캐싱하여 해당 소작을 올바른 순서로 전송하는 manifast 파일에 대한 여러 요청을 결합함으로써 오리진 서버의 부하를 줄일 수 있음. diff --git "a/AWS/KMS/1.7 KMS \355\202\244\353\245\274 \354\202\254\354\232\251\355\225\264 EBS \353\263\274\353\245\250 \354\225\224\355\230\270\355\231\224.md" "b/AWS/KMS/1.7 KMS \355\202\244\353\245\274 \354\202\254\354\232\251\355\225\264 EBS \353\263\274\353\245\250 \354\225\224\355\230\270\355\231\224.md" index 35f5f72..77ce977 100644 --- "a/AWS/KMS/1.7 KMS \355\202\244\353\245\274 \354\202\254\354\232\251\355\225\264 EBS \353\263\274\353\245\250 \354\225\224\355\230\270\355\231\224.md" +++ "b/AWS/KMS/1.7 KMS \355\202\244\353\245\274 \354\202\254\354\232\251\355\225\264 EBS \353\263\274\353\245\250 \354\225\224\355\230\270\355\231\224.md" @@ -39,19 +39,19 @@ ### CMK 동작방식 -![[스크린샷 2024-05-11 오후 7.36.51.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%207.36.51.png) 1) KMS 에 Customer Master key(CMK)를 생성한다. 이 Master key 는 데이터를 암호화 하기 위해 사용되는 **Data key**를 생성하는데 사용 2) **Data key**는 CMK 로부터 _**GenerateDataKey**_ 라는 작업을 통해 생성, 이때 생성되는 Data key 는 크게 두가지 종류로 Plaintext data key와 Encrypted data key가 있다. 3) Plaintext data key는 데이터를 암호화 하는데 사용한다. 암호화를 마무리 한 후 Plaintext data key를 메모리에서 삭제. 암호화된 데이터와 Encrypted data key를 한 묶음으로 데이터를 전송 4) 암호화된 데이터를 복구화 해야함 -> 아까 버린 Plaintext data key가 필요. 동봉된 Encrypted data key와 master key를 사용해서 다시 Plaintext data key를 생성. 그 후 데이터 복호화. -![[스크린샷 2024-05-11 오후 7.39.31.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%207.39.31.png) ### aws console에서 암호화하는법 - ec2 볼륨 생성 시 Encryption 체크하면 KMS를 사용하여 암호화 키 생성 가능 -![[스크린샷 2024-05-11 오후 5.30.08.png]] -![[스크린샷 2024-05-11 오후 5.30.27.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%205.30.08.png) +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%205.30.27.png) ### KMS 키를 사용해 EBS 볼륨 암호화 @@ -59,21 +59,21 @@ ```bash KMS_KEY_ID=$(aws kms create-key --description "AWSCookbook187Key" --output text --query 'KeyMetadata.KeyId') echo "Created KMS Key ID: $KMS_KEY_ID" ``` -![[스크린샷 2024-05-11 오후 6.57.32.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%206.57.32.png) 2. 키 별칭을 생성 ```bash aws kms create-alias --alias-name alias/AWSCookbook187Key --target-key-id $KMS_KEY_ID echo "Alias 'alias/AWSCookbook187Key' created for Key ID: $KMS_KEY_ID" ``` -![[스크린샷 2024-05-11 오후 6.59.19.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%206.59.19.png) 3. 키의 자동 교체를 활성화 ```bash aws kms enable-key-rotation --key-id $KMS_KEY_ID echo "Key rotation enabled for Key ID: $KMS_KEY_ID" ``` -![[스크린샷 2024-05-11 오후 7.00.52.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%207.00.52.png) 4. EBS 암호화를 기본으로 활성화 ```bash @@ -81,16 +81,16 @@ aws ec2 enable-ebs-encryption-by-default echo "EBS encryption by default is enabled." ``` -![[스크린샷 2024-05-11 오후 7.03.52.png]] -![[스크린샷 2024-05-11 오후 7.03.43.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%207.03.52.png) +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%207.03.43.png) 5. EBS 기본 KMS 키를 설정 ```bash aws ec2 modify-ebs-default-kms-key-id --kms-key-id alias/AWSCookbook187Key echo "EBS default KMS key set to: alias/AWSCookbook187Key" ``` -![[스크린샷 2024-05-11 오후 7.05.57.png]] -![[스크린샷 2024-05-11 오후 7.05.48.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%207.05.57.png) +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/1.7%20KMS%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20EBS%20%EB%B3%BC%EB%A5%A8%20%EC%95%94%ED%98%B8%ED%99%94%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-05-11%20%EC%98%A4%ED%9B%84%207.05.48.png) ### Key 삭제 방법 - KMS 에서 제공되는 key 를 삭제할 경우, 만약 해당 key를 활용해 암호화된 데이터가 있다면 복호화는 영원히 불가능. diff --git "a/AWS/NETWORK/Amazon VPC\353\245\274 \354\202\254\354\232\251\355\225\264 \355\224\204\353\235\274\354\235\264\353\271\227 \352\260\200\354\203\201 \353\204\244\355\212\270\354\233\214\355\201\254 \354\203\235\354\204\261.md" "b/AWS/NETWORK/Amazon VPC\353\245\274 \354\202\254\354\232\251\355\225\264 \355\224\204\353\235\274\354\235\264\353\271\227 \352\260\200\354\203\201 \353\204\244\355\212\270\354\233\214\355\201\254 \354\203\235\354\204\261.md" index f660d4e..8a43ba7 100644 --- "a/AWS/NETWORK/Amazon VPC\353\245\274 \354\202\254\354\232\251\355\225\264 \355\224\204\353\235\274\354\235\264\353\271\227 \352\260\200\354\203\201 \353\204\244\355\212\270\354\233\214\355\201\254 \354\203\235\354\204\261.md" +++ "b/AWS/NETWORK/Amazon VPC\353\245\274 \354\202\254\354\232\251\355\225\264 \355\224\204\353\235\274\354\235\264\353\271\227 \352\260\200\354\203\201 \353\204\244\355\212\270\354\233\214\355\201\254 \354\203\235\354\204\261.md" @@ -3,7 +3,7 @@ - aws를 사용하기 위해서 알아야할 정보들 - 제일 처음 aws를 사용하기 위해서 이해해야 되는 개념들이다. -![[스크린샷 2024-06-10 11.10.08.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Amazon%20VPC%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20%ED%94%84%EB%9D%BC%EC%9D%B4%EB%B9%97%20%EA%B0%80%EC%83%81%20%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%20%EC%83%9D%EC%84%B1%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-06-10%2011.10.08.png) ## VPC (Virtual Private Cloud) @@ -48,7 +48,7 @@ VPC_ID=$(aws ec2 create-vpc --cidr-block 10.10.0.0/16 \ aws ec2 describe-vpcs --vpc-ids $VPC_ID ``` -![[스크린샷 2024-06-14 오후 6.25.04.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Amazon%20VPC%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%20%ED%94%84%EB%9D%BC%EC%9D%B4%EB%B9%97%20%EA%B0%80%EC%83%81%20%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%20%EC%83%9D%EC%84%B1%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-06-14%20%EC%98%A4%ED%9B%84%206.25.04.png) ## Reference diff --git a/AWS/vpc/VPC Reachability Analyzer.md b/AWS/vpc/VPC Reachability Analyzer.md index 97c341d..7ae950a 100644 --- a/AWS/vpc/VPC Reachability Analyzer.md +++ b/AWS/vpc/VPC Reachability Analyzer.md @@ -3,7 +3,7 @@ VPC 접근 가능성 분석기 정도로 해석할 수 있을 듯하다. **이는 네트워크 트레이스 용 도구로 내 AWS 인스턴스간의 네트워크 연결 방식을 트레이싱하고 분석하는 것을 도와주는 도구이다.** 리눅스의 `traceroute` 명령어와 흡사한 작업을 도와준다고 생각하면 된다. -![[스크린샷 2024-07-19 오후 6.17.26.png|600]] +![600](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/VPC%20Reachability%20Analyzer%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-07-19%20%EC%98%A4%ED%9B%84%206.17.26.png) ___ ### 써먹어 보기 @@ -12,11 +12,11 @@ ___ 네트워크 인터페이스에 대한 정보는 ec2의 네트워크 인터페이스 탭 내부에서 확인할 수 있다. -![[스크린샷 2024-07-19 오후 6.41.46.png|700]] +![700](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/VPC%20Reachability%20Analyzer%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-07-19%20%EC%98%A4%ED%9B%84%206.41.46.png) 경로를 분석하는데는 어느정도의 시간이 소요되고 분석이 완료되면 아래와 같은 결과를 확인할 수 있다. 확인해보면 우선적으로 보안 그룹을 지나고 이후 라우팅 테이블을 통해 연결이 되는 것을 확인할 수 있다. **두 eni 모두 별도의 보안이 존재하지 않고 라우팅 테이블을 통해 라우팅이 가능하므로 연결이 가능하다고 표시된다.** -![[스크린샷 2024-07-19 오후 6.47.17.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/VPC%20Reachability%20Analyzer%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-07-19%20%EC%98%A4%ED%9B%84%206.47.17.png) 만약 라우팅 테이블 설정을 변경해 서브넷 간의 라우팅을 불가능하게 설정하거나 보안그룹에서 TCP를 차단하면 경로 설정이 불가해진다. ___ ### 결론 diff --git "a/AWS/\352\270\260\353\263\270 \354\204\244\354\240\225.md" "b/AWS/\352\270\260\353\263\270 \354\204\244\354\240\225.md" index 34cfe96..5726fb8 100644 --- "a/AWS/\352\270\260\353\263\270 \354\204\244\354\240\225.md" +++ "b/AWS/\352\270\260\353\263\270 \354\204\244\354\240\225.md" @@ -10,4 +10,4 @@ aws ec2 describe-instances ```shell aws sts get-caller-identity ``` -![[스크린샷 2024-04-10 오후 9.31.00.png]] \ No newline at end of file +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/%EA%B8%B0%EB%B3%B8%20%EC%84%A4%EC%A0%95%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-04-10%20%EC%98%A4%ED%9B%84%209.31.00.png) diff --git a/Data Structure/Balanced Binary Tree/Balanced Binary Search Tree (AVL, Red-Black Tree).md b/Data Structure/Balanced Binary Tree/Balanced Binary Search Tree (AVL, Red-Black Tree).md index 3b48b47..a449729 100644 --- a/Data Structure/Balanced Binary Tree/Balanced Binary Search Tree (AVL, Red-Black Tree).md +++ b/Data Structure/Balanced Binary Tree/Balanced Binary Search Tree (AVL, Red-Black Tree).md @@ -5,7 +5,7 @@ ### 나오게 된 이유 - 보통의 이진 탐색트리에서 새로운 노드가 삽입이 될 때, 부모의 노드보다 작은값은 왼쪽, 큰 값은 오른쪽으로 추가됨. -> 이렇게 추가하다가 자료가 많아질수록 트리의 높이가 커지기 때문에 최악의 경우 특정 노드를 탐색하는데 O(n)이 소요됨 -![[스크린샷 2024-02-23 오후 4.16.07.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-23%20%EC%98%A4%ED%9B%84%204.16.07.png) -> 이렇게 편향 이진 트리가 나올 경우 성능면에서 최악의 경우가 되어버림 -> 이러한 점을 피하기 위해서 균형 이진 트리가 나오게 됨. @@ -27,24 +27,24 @@ - Right-Right, 특정 노드를 기준으로 오른쪽 오른쪽으로 편향된 경우 - 왼쪽으로 한번 회전해서 해결 -![[Pasted image 20240223173200.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223173200.png) 2. LL - Left-Left 특정 노드를 기준으로 왼쪽 왼쪽으로 편향된 경우 - 오른쪽으로 한번 회전해서 해결 -![[Pasted image 20240223173157.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223173157.png) 3. LR - Left-Right 특정 노드를 기준으로 왼쪽 오른쪽으로 편향된 경우 - RR회전 후 LL회전으로 해결 -![[Pasted image 20240223173210.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223173210.png) 4. RL - Right-Left 특정 노드를 기준으로 오른쪽 왼쪽으로 편향된 경우 - LL회전 후 RR회전으로 해결 -![[Pasted image 20240223173214.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223173214.png) ### 장점 - 삽입, 검색, 삭제의 최악의 케이스에서도 (BST의 선형 형태에서도) O(logN)이다. @@ -58,7 +58,7 @@ - 1978년 레오 귀바스와 로버트 세지윅이 만듦 - 자가 균형 이진 탐색 트리의 한 종류 -![[스크린샷 2024-02-23 오후 6.58.37.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-23%20%EC%98%A4%ED%9B%84%206.58.37.png) ### 특징 1. 모든 노드는 red 혹은 black이다 2. 루트 노드는 black이다 @@ -69,7 +69,7 @@ 4. red의 자녀들은 반드시 black이다 (red는 연속적으로 존재할 수 없다) 5. 임의의 노드에서 자손 nil 노드들까지 가는 경로들의 black 수는 같다 (자기 자신은 카운트에서 제외) - 또한 모든 자식노드의 색과 부모의 색을 바꾸더라도 만족한다 -![[스크린샷 2024-02-23 오후 7.02.57.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-23%20%EC%98%A4%ED%9B%84%207.02.57.png) > **black height** > 노드 x에서 임의의 자손 nil 노드까지 내려가는 경로에서의 black 수 @@ -86,7 +86,7 @@ -> Recoloring 진행 삽입한 노드의 부모와 부모의 형제 노드를 black 으로 변경 부모의 부모 노드를 red로 변경, 부모의 부모 노드가 root 인지 double red인지에 따라 조정 진행 -![[Pasted image 20240223193154.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223193154.png) 2. 노드 삽입 후 dobule red 발생(부모 노드의 형제 노드가 black 이거나 없을때) -> Restructuring 진행 @@ -95,29 +95,29 @@ 가운데 노드를 부모 노드로 선정하고 black으로 변경 나머지 두 노드를 자식 노드로 두고 red로 변경 -![[Pasted image 20240223192557.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223192557.png) #### 삭제 - 삭제되는 색이 중요함. - 만약 삭제하려는 노드의 자식이 없거나 한 개일 경우 -> 삭제되는 노드의 색 - 만약 삭제하려는 노드의 자식이 두 개일 경우 -> 삭제 후 대체되는 노드의 색 -![[스크린샷 2024-02-23 오후 8.44.41.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-23%20%EC%98%A4%ED%9B%84%208.44.41.png) -> 삭제되는 색이 빨간색이면? 어떠한 속성도 위반하지 않는다 1. 지워진 노드가 red 경우 - 아무일도 일어나지 않음 -![[Pasted image 20240223203945.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223203945.png) ##### 삭제되는 색이 검은색이라면? - 거의 대부분 5번째 속성을 만족시키지 못한다. > extra black 부여 > 속성을 다시 만족시키기 위해 삭제된 색의 위치를 대체한 노드에 extra black을 부여 -![[스크린샷 2024-02-23 오후 8.55.06.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-23%20%EC%98%A4%ED%9B%84%208.55.06.png) -> 10을 지운 후 -![[스크린샷 2024-02-23 오후 8.55.26.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-23%20%EC%98%A4%ED%9B%84%208.55.26.png) 2. 삭제 대상 노드가 black, 그 자리에 오는 노드가 black인 경우 @@ -126,7 +126,7 @@ - 형제 노드를 red로 변경 - 이중 흑색 노드의 검은색 1개를 부모 노드로 전달 - 부모가 root가 아닌 이중 흑색 노드가 되면 해당 case 반복 진행 -![[Pasted image 20240223204031.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223204031.png) 2-2 이중 흑색 노드의 형제 노드가 red인 경우 - 형제 노드를 black으로 변경 @@ -134,24 +134,24 @@ - 부모 노드를 기준으로 왼쪽으로 회전 - 그 다음 2번에 따라 반복 진행 -![[Pasted image 20240223210358.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223210358.png) 2-3 이중 흑색 노드의 형제 노드가 black이고, 오른쪽 자식이 red인 경우 - 부모 노드와 형제 노드의 오른쪽 자식 노드를 검은색으로 변경 - 부모 노드를 기준으로 왼쪽으로 회전 -![[Pasted image 20240223210122.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240223210122.png) 2-4 이중 흑색 노드의 형제 노드가 black이고, 왼쪽 자식이 red인 경우 - 형제 노드를 red로 변경 - 형제 노드의 왼쪽 자식 노드를 black으로 변경 - 형제 노드를 기준으로 오른쪽으로 회전 -![[Pasted image 20240224120424.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20Pasted%20image%2020240224120424.png) ### AVL과 레드블랙트리의 차이 -![[스크린샷 2024-02-23 오후 8.37.48.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Balanced%20Binary%20Search%20Tree%20%28AVL%2C%20Red-Black%20Tree%29%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-23%20%EC%98%A4%ED%9B%84%208.37.48.png) ### red-black tree에 대한 설명영상 https://www.youtube.com/watch?v=2MdsebfJOyM \ No newline at end of file diff --git a/Data Structure/Circular Queue/Circular queue.md b/Data Structure/Circular Queue/Circular queue.md index 3e0c210..763fd29 100644 --- a/Data Structure/Circular Queue/Circular queue.md +++ b/Data Structure/Circular Queue/Circular queue.md @@ -3,7 +3,7 @@ **큐의 문제점** -> 데이터 삽입 / 삭제 시 데이터들을 앞 혹은 뒤로 당겨주는 과정이 필요하다. ==불필요한 시간 낭비== - 큐의 문제점을 해결하고자 메모리를 효율적으로 활용할 수 있는 circular queue가 등장 했다. -[![[queue.png]]]() +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Circular%20queue%20/%20queue.png) **Circular Queue의 개념** - 시작점과 끝점이 연결된 원형 구조를 가지고 있어, 배열의 끝에 도달하면 다시 배열의 시작점으로 돌아가는 특징을 가진다. - 큐가 가득 차 있지 않은 상태에서도 빈 공간을 효율적으로 재활용할 수 있게 한다. @@ -201,4 +201,4 @@ int main() { ``` 실행화면 -![[execute.png]] \ No newline at end of file +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Circular%20queue%20/%20execute.png) diff --git a/Data Structure/Circular queue.md b/Data Structure/Circular queue.md index cf7827c..763fd29 100644 --- a/Data Structure/Circular queue.md +++ b/Data Structure/Circular queue.md @@ -3,7 +3,7 @@ **큐의 문제점** -> 데이터 삽입 / 삭제 시 데이터들을 앞 혹은 뒤로 당겨주는 과정이 필요하다. ==불필요한 시간 낭비== - 큐의 문제점을 해결하고자 메모리를 효율적으로 활용할 수 있는 circular queue가 등장 했다. -![[queue.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Circular%20queue%20/%20queue.png) **Circular Queue의 개념** - 시작점과 끝점이 연결된 원형 구조를 가지고 있어, 배열의 끝에 도달하면 다시 배열의 시작점으로 돌아가는 특징을 가진다. - 큐가 가득 차 있지 않은 상태에서도 빈 공간을 효율적으로 재활용할 수 있게 한다. @@ -201,4 +201,4 @@ int main() { ``` 실행화면 -![[execute.png]] \ No newline at end of file +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Circular%20queue%20/%20execute.png) diff --git a/Data Structure/MST/Disjoint Set.md b/Data Structure/MST/Disjoint Set.md index 003ffe7..b82c5bf 100644 --- a/Data Structure/MST/Disjoint Set.md +++ b/Data Structure/MST/Disjoint Set.md @@ -10,12 +10,12 @@ 1. **MakeSet(x)** : 원소 x만을 포함하는 새로운 집합을 생성한다. 초기에는 각 원소가 자신만을 포함하는 집합의 대표로 설정이 된다. 2. **Find(x)** : 원소 x가 속한 집합의 대표를 찾는다. - 대표를 왜 찾아? -> 대표가 집합을 식별하는데 사용되기 때문 - ![[Pasted image 20240306164804.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Disjoint%20Set%20/%20Pasted%20image%2020240306164804.png) 3. **Union(x, y)**: 두 원소 x와 y가 포함된 집합을 합친다. 1. 두 집합의 대표를 찾는다. 2. 한 대표를 다른 대표에 연결하여 두 집합을 하나로 합치는 과정을 포함한다. - ![[Pasted image 20240306165121.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Disjoint%20Set%20/%20Pasted%20image%2020240306165121.png) #### 최적화 기법 - 위 그림처럼 Union을 하는 과정에서 선형 트리가 생겨버릴 수도 있다. @@ -23,12 +23,12 @@ **경로 압축(Path Compression)** Find 연산을 수행하면서 만나는 모든 노드가 직접 대표를 가리키도록 만든다. -![[Pasted image 20240306165652.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Disjoint%20Set%20/%20Pasted%20image%2020240306165652.png) **랭크 기반 합치기(Union by Rank)** - 두 트리를 합칠 때, 더 낮은 랭크를 가진 트리를 더 높은 랭크를 가진 트리 밑에 붙인다. - 트리의 높이나 사이즈를 저장할 rank 배열 사용 - ![[Pasted image 20240306165955.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Disjoint%20Set%20/%20Pasted%20image%2020240306165955.png) **크기 기반 합치기(Union by Size)** - 랭크 대신 트리의 노드 수(크기)를 기준으로 Union을 수행한다. diff --git a/Data Structure/MST/Kruskal, MST.md b/Data Structure/MST/Kruskal, MST.md index e939677..c66337e 100644 --- a/Data Structure/MST/Kruskal, MST.md +++ b/Data Structure/MST/Kruskal, MST.md @@ -8,7 +8,7 @@ - 가중치가 최소인 정점부터 MST에 포함시키기 때문에 그리디한 방식으로 볼 수 있다. -![[Kruskal 1.gif]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Kruskal%2C%20MST%20/%20Kruskal%201.gif) #### 원리 - **간선 정렬** @@ -106,7 +106,7 @@ for u, v, weight in mst: - 시작 정점에서부터 출발하여, MST를 점진적으로 확장해 나간다. - 하나의 정점에서 인접한 간선들 중에서 가장 가중치가 낮은 간선을 선택하고 이 간선을 통해 연결되는 새로운 정점을 트리에 추가한다. -![[Prim-animation.gif]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Kruskal%2C%20MST%20/%20Prim-animation.gif) #### 활용 - Kruskal에서 살펴보았던 활용 예와 같다. (Kruskal이 MST를 만드는 알고리즘이기 때문) diff --git a/Data Structure/b tree/B*tree.md b/Data Structure/b tree/B*tree.md index ed4c74b..46fae72 100644 --- a/Data Structure/b tree/B*tree.md +++ b/Data Structure/b tree/B*tree.md @@ -21,8 +21,8 @@ B-tree의 단점은 구조를 유지하기 위해서 추가적인 연산이 수 ## 내부 연산 #### 삽입 -![[Pasted image 20240309094235.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/B%2Atree%20/%20Pasted%20image%2020240309094235.png) 24 추가 시, 오버플로우 발생 원래는 split이 발생됨 하지만 B\*tree는 그대로 유지 후, 형제에게 분배 -![[Pasted image 20240309110202.png]] \ No newline at end of file +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/B%2Atree%20/%20Pasted%20image%2020240309110202.png) diff --git a/Data Structure/b tree/B+tree.md b/Data Structure/b tree/B+tree.md index a367789..d20fabd 100644 --- a/Data Structure/b tree/B+tree.md +++ b/Data Structure/b tree/B+tree.md @@ -34,27 +34,27 @@ DB index 같은 경우에 B-tree보다 B+tree 형태를 많이 사용한다. (le 해당 node의 가장 앞이 아닌 곳에 삽입되는 경우는 단순히 삽입해 주면 된다. > 하지만, leaf node의 가장 앞에 삽입되는 경우는, 해당 node를 가리키는 부모 node의 포인터의 오른쪽에 위치한 key를 K로 바꿔준다. 그리고 leaf node끼리 Linked list로 이어줘야 하므로 삽입된 key에 Linked list로 연결한다. -![[Pasted image 20240309101737.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/B%2Btree%20/%20Pasted%20image%2020240309101737.png) - **key의 수가 최대인 leaf node에 삽입하는 경우** key의 수가 최대이므로 삽입하는 경우 분할을 해주어야 한다. 만약 중간 node에서 분할이 일어나는 경우는 B-Tree와 동일하게 해주면 된다. > leaf node에서 분할이 일어나는 경우는 중간 key를 부모 node로 올려주는데 이때, 오른쪽 node에 중간 key를 붙여 분할한다. 그리고 분할된 두 node를 Linked List로 연결해준다. -![[Pasted image 20240309101925.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/B%2Btree%20/%20Pasted%20image%2020240309101925.png) #### 삭제 - **삭제할 key가 leaf node의 가장 앞에 있지 않은 경우** B-tree와 동일한 방식으로 삭제 - **삭제할 key가 leaf node의 가장 앞에 위치한 경우** leaf node가 아닌 node에 key가 중복해서 존재한다. 따라서 해당 key를 노드보다 오른쪽에 있으면서 가장 작은 값으로 바꿔주어야 한다. -![[Pasted image 20240309102030.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/B%2Btree%20/%20Pasted%20image%2020240309102030.png) #### 검색 구현하는 방식에 따라 다르겠지만, leaf 노드가 아닌 노드는 자신의 값이 자신의 오른쪽 자식의 가장 왼쪽 키 보다 크거나 같은 값으로 구성되어 있는 기준을 잘 보고 따라가면 된다. 단, 무조건 leaf 노드까지 도달해야 해당 값이 존재하는지 파악할 수 있기에 모든 값에 대해서 빠른 접근을 보장하지는 않는다. 예시) 14를 탐색하는 상황 -![[Pasted image 20240309102304.png]] -![[Pasted image 20240309102309.png]] -![[Pasted image 20240309102332.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/B%2Btree%20/%20Pasted%20image%2020240309102304.png) +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/B%2Btree%20/%20Pasted%20image%2020240309102309.png) +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/B%2Btree%20/%20Pasted%20image%2020240309102332.png) 결과적으로 구조가 변경되는 것을 최소화하기 위해서 작동한다. (숫자가 변경되는건 작은 변화, 트리의 구조가 변경되는건 큰 변화이기 때문에) @@ -62,7 +62,7 @@ leaf node가 아닌 node에 key가 중복해서 존재한다. 따라서 해당 k ## B-tree VS B+tree 가장 큰 차이점은 B+tree는 leaf 노드가 아닌 경우에는 leaf 노드로 가기 위한 경로를 안내할 뿐, 그것이 데이터를 저장하는 값이 아니라는 것입니다. 이러한 특징 때문에 업데이트가 발생할 시, non-leaf 노드들의 값이 쉽게 변화할 가능성이 있습니다. -![[Pasted image 20240309090824.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/B%2Btree%20/%20Pasted%20image%2020240309090824.png) ## 참고사항 #### Visualization diff --git a/Data Structure/deque/deque.md b/Data Structure/deque/deque.md index 8ba270e..57e9046 100644 --- a/Data Structure/deque/deque.md +++ b/Data Structure/deque/deque.md @@ -6,11 +6,11 @@ > 선형 구조(Linear Structure) > - 데이터를 저장하기 위한 기본적인 형태로 데이터가 **일렬로 나열**되어 있을 뿐만 아니라 데이터 간에 순서가 있고 논리적으로 이어져 있는 구조를 의미 -![[Pasted image 20240202121115.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/deque%20/%20Pasted%20image%2020240202121115.png) ### 동작흐름 -![[Pasted image 20240202120723.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/deque%20/%20Pasted%20image%2020240202120723.png) - 입력과 출력이 양방향 가능 - 데이터 입력 순서와 상관없이 출력 순서 조절 가능 - 큐의 선입선출과 스택의 후입선출의 개념을 복합적으로 사용할 수 있다. @@ -173,4 +173,4 @@ print(max_sliding_window(nums, k)) # [3, 3, 5, 5, 6, 7] #### 파이썬에서의 덱과 리스트의 차이 - 덱의 경우에는 양쪽 끝의 요소를 제거하는 것 모두 O(1), - 하지만 리스트의 경우에는 제일 앞부분을 제거하면 뒤에있는 원소들을 앞으로 땡겨오는 작업을 하므로 O(n)이다. -![[스크린샷 2024-02-02 오후 12.27.22.png]] \ No newline at end of file +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/deque%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-02%20%EC%98%A4%ED%9B%84%2012.27.22.png) diff --git a/Data Structure/hashmap/hashmap.md b/Data Structure/hashmap/hashmap.md index a4e1b07..4836157 100644 --- a/Data Structure/hashmap/hashmap.md +++ b/Data Structure/hashmap/hashmap.md @@ -6,7 +6,7 @@ - 해시맵에서의 핵심 원리. - "해싱 함수"를 통해서 키 값을 "해시코드"로 변환. -> 그 해시코드를 기준으로 데이터를 저장한다. -![[Pasted image 20240324021137.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/hashmap%20/%20Pasted%20image%2020240324021137.png) ### 특징 @@ -25,7 +25,7 @@ ### 해시충돌 - 해시맵에서 해시 충돌이란, 두 개 이상의 키가 동일한 해시값을 가지게 되면 일어난다 - 해결 방법으로는 Open Addressing 방식과 Chaining 방식이 있다. -![[Pasted image 20240324024328.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/hashmap%20/%20Pasted%20image%2020240324024328.png) open addressing - 찾은 해시값의 버킷이 이미 사용중인 경우 비어있는 다른 해시 버킷에 데이터를 삽입하는 방식 diff --git a/Data Structure/hasing algorithm/hashing algorithm.md b/Data Structure/hasing algorithm/hashing algorithm.md index 012635b..3f3bfa6 100644 --- a/Data Structure/hasing algorithm/hashing algorithm.md +++ b/Data Structure/hasing algorithm/hashing algorithm.md @@ -34,11 +34,11 @@ - 이동 접지 함수 : 각 분할 부분을 이동시켜 오른쪽 끝자리가 일치하도록 맞추고 더하는 방법 ex) 해시 테이블 인덱스가 3자리이고 키 값 k가 122312312312인 경우 - ![[스크린샷 2024-03-24 오전 6.10.24.png|500]] +![500](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/hashing%20algorithm%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-03-24%20%EC%98%A4%EC%A0%84%206.10.24.png) - 경계 접지 함수 : 분할된 각 경계를 기준으로 접으면서 서로 마주보도록 배치하고 더하는 방법 ex) 해시 테이블 인덱스가 3자리이고 키 값 k가 12312312312인 경우 - ![[Pasted image 20240324061220.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/hashing%20algorithm%20/%20Pasted%20image%2020240324061220.png) - ==숫자 분석 함수== 키 값을 이루고 있는 각 자리수의 분포를 해석하여 해시 주소로 사용하는 방법 각 키 값을 적절히 선택한 진수로 변환한 후에 각 자릿수의 분포를 분석하여 가장 편중된 분산을 가진 자릿수는 생략하고, 가장 고르게 분포된 자릿수부터 해시 테이블 주소의 자릿수만큼 차례로 뽑아서 만든 수를 역순으로 바꾸어 주소로 사용 @@ -109,7 +109,7 @@ - 항상 0부터 $2^r$+q-1까지의 버킷만 활성화됨 - 0부터 q-1과 $2^r$부터 $2^r$+q-1까지의 활성 버킷은 h(k,r+1)을 이용하여 인덱싱 - 나머지 활성 버킷들은 h(k,r)을 이용하여 인덱싱 - ![[Pasted image 20240324063541.png|500]] +![500](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/hashing%20algorithm%20/%20Pasted%20image%2020240324063541.png) ### 사용 분야 diff --git a/Data Structure/single linked list/Single Linked List.md b/Data Structure/single linked list/Single Linked List.md index 603f966..d3327c6 100644 --- a/Data Structure/single linked list/Single Linked List.md +++ b/Data Structure/single linked list/Single Linked List.md @@ -24,7 +24,7 @@ data의 타입은 원하는 타입으로 지정한다. 마지막 node의 next 값은 NULL 혹은 HEAD의 메모리 주소로 설정한다. ## 과정 #### 추가 -![[스크린샷 2024-02-16 오후 5.47.14.png]] +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Single%20Linked%20List%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-16%20%EC%98%A4%ED%9B%84%205.47.14.png) - 데이터를 추가하는 방법은 2가지가 있다. 1. 리스트의 맨 마지막에 추가하기 2. 리스트의 맨 앞에 추가하기 @@ -43,4 +43,4 @@ data의 타입은 원하는 타입으로 지정한다. 3. prev의 next 값을 current의 next 값으로 한다면, 다음 탐색부터는 current가 가리키는 데이터는 탐색할 수 없다. 4. current로 저장된 노드를 메모리 해제해준다. -![[스크린샷 2024-02-16 오후 5.48.33.png]] \ No newline at end of file +![](https://csocrates-s3.s3.ap-northeast-2.amazonaws.com/Single%20Linked%20List%20/%20%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202024-02-16%20%EC%98%A4%ED%9B%84%205.48.33.png)