
🔍 RDS (Relational Database Service)데이터베이스에는 크게 관계형 데이터베이스와 NoSQL같이 JSON의 형태를 지닌 비관계형 데이터베이스가 존재한다. RDS는 주로 전자에 속하며, 아래와 같은 행과 열이 있는 각각의 Column마다 특징적인 값들이 들어간다.AWS RDS에서는 Microsoft SQL, Oracle, MySQL, Postgre, Aurora, Maria DB 등이 존재한다.🔍 Data Warehousing여러 출처에서 데이터를 수집, 저장, 관리하고 분석하기 위해 중앙 집중화된 데이터 저장소(데이터 웨어하우스, Data Warehouse)를 구축하는 프로세스를 의미한다. 주로 비즈니스 인텔리전스 등 의사결정 지원을 위한 대량의 데이터를 효율적으로 관리하는 데..

🔍 IAM (Identity and Access Management)IAM(Identity and Access Management)은 클라우드 환경에서 리소스에 대한 접근 권한을 관리하는 핵심 보안 서비스다. 특히 AWS, Google Cloud, Azure와 같은 클라우드 서비스 제공자들의 필수적인 구성 요소로, 올바른 사용자가 올바른 리소스에 올바른 방식으로 접근할 수 있도록 보장한다.📌 IAM의 기본 개념IAM은 다음과 같은 핵심 요소로 구성된다.사용자(User): 서비스와 상호작용하는 개별 계정그룹(Group): 유사한 접근 권한이 필요한 사용자들의 모음역할(Role): 특정 작업 수행을 위해 일시적으로 부여되는 권한 세트정책(Policy): 누가 어떤 리소스에 어떤 조건에서 접근할 수 있는지..
![[OS] 가상 메모리 #1 (Virtual Memory)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb94qVA%2FbtsHtc5cIHO%2Fn7xVX0HROFxvB7zKoRnQeK%2Fimg.png)
https://reo91004.vercel.app/os-2 [OS] 가상 메모리 (Virtual Memory)가상 메모리의 모든 것reo91004.vercel.app더 잘 정리되어 있습니다. 🖥️ 시작하며이전 포스팅에서 가상 메모리를 왜 쓰는지에 대해 알아봤으므로, 이번 포스팅에서는 가상 메모리를 구현하는 방법에는 무엇이 있는지 알아보려고 한다.🔍 Paging결국 가상 메모리를 쓰는 이유는, 물리 메모리를 효율적으로 쓰는 동시에 크고 연속적인 주소 공간을 보고 싶어서다. 페이징은 이런 프로그래머의 요구를 충족시켜 준다.📌 Features물리적 주소 공간이 비연속적일 수 있도록 허용한다.물리적 메모리를 Frame 이라는 고정된 크기의 블록으로 나눈다.논리적(가상) 메모리를 Page 라는 동일한 크기의..
![[Leetcode] 1. Two Sum](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoyXOx%2FbtsHgmVaQTe%2Fk64UqjjggLeN4m3eYRTkXk%2Fimg.png)
문제 링크 : https://leetcode.com/problems/two-sum/description/🖥️ 시작하며브루트 포스 방법으로 접근할 수 있다.이중 for문 으로 순차적으로 모든 배열을 탐색하며 결괏값을 찾으면 된다. 조건에 You may assume that each input would have ***exactly* one solution**, 라고 명시했으므로 쉬운 문제라 할 수 있다.⚙️ Pythonclass Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i + 1, len(nums)): ..
![[Leetcode] 2816. Double a Number Represented as a Linked List](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnX9z0%2FbtsHddjUaD0%2FL4G9iS9KWE2VDisVnZaMhk%2Fimg.png)
[Leetcode] 2816.문제 링크 : https://leetcode.com/problems/double-a-number-represented-as-a-linked-list/?envType=daily-question&envId=2024-05-07🖥️ 시작하며간단한 연결 리스트 문제다.받은 연결리스트에서 숫자를 문자열로 하나하나 저장문자열을 숫자로 바꾼 후, 2배결과물을 다시 연결 리스트로 저장class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = nextclass Solution: def doubleIt(self, head: Optional[ListNode]) -> Optio..
![[Leetcode] 42. Trapping Rain Water](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCxHwI%2FbtsHgBcOfZv%2FkyyI61Jv1oLePEaGdkxrO1%2Fimg.png)
문제 링크 : https://leetcode.com/problems/trapping-rain-water/description/🖥️ 시작하며처음 접근이 어려웠던 문제였다.우선 height 배열에 검은색 블럭의 높이가 주어지고, 비가 왔을 시 웅덩이가 생기는 칸이 몇 칸인지 답을 도출해야 하는 문제다.아마 직관적으로는 왼쪽 벽과 오른쪽 벽 중 낮은 벽의 높이로 바로 접근할 수 있지 않나 싶다.그래서 본인은 왼쪽 벽의 최대 높이를 저장하는 배열, 오른쪽 벽의 최대 높이를 저장하는 배열을 생성하는 쪽으로 가닥을 잡았다.아래 그림을 중심으로 파헤쳐보자.결국 이를 식으로 풀어내자면**왼쪽과 오른쪽 벽의 최솟값 - 검은색 블록 높이** 라고 할 수 있다.Pythonclass Solution: def trap(..
![[OS] 메모리 관리 (Memory Management)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA6sxD%2FbtsG6gzDpka%2Fweu0prc6Fby0dK3BaQZQ11%2Fimg.png)
🖥️ 목표프로그래밍을 위한 편리한 추상화 제공부족한 메모리 자원을 경쟁 프로세스간 할당 → 최소한의 오버헤드프로세스 간 고립된 환경 제공🔍 Single/Batch Programming간단하게, 하나의 프로세스를 위한 것이므로 메모리를 다 쓰면 된다.🔍 Multiprogramming한 번에 여러 프로세스를 돌려야 함여러 작업의 I/O 및 CPU가 오버랩각 프로세스는 연속적인 공간과 요구하는 메모리 사이즈가 다름요구사항보호 : 각 프로세스가 사용하는 주소 공간을 제한해야 함빠른 변환 : 가상 메모리에서 물리 메모리로의 변환이 빨라야 함빠른 context switch : (보호 및 변환을 위해) 메모리 하드웨어 업데이트가 빨라야 함💡 1. Fixed Partitions📌 물리 메모리를 일정한 크기의 ..
![[CS] 캐시 메모리의 총정리 (Direct Mapping Cache를 중점으로)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwwhmt%2FbtsGCozAY5H%2F7ikm8g4VknlRzhXDFCeJjk%2Fimg.jpg)
🖥️ 들어가며 자꾸 헷갈렸던 캐시 메모리의 총정리를 해보려고 한다. 왜 이리 헷갈리는지 드디어 가닥을 잡은 것 같아 포스팅으로 이 기억을 남기려고 한다. 🔍 캐시(Cache)란? 프로세스는 트랜지스터의 등장 이후 굉장히 빠른 속도로 발전한 반면, 메모리의 발전 속도는 프로세서에 비해 굉장히 더디게 발전했다. 이런 속도 간격을 메꾸기 위해 캐시(Cache) 가 나오게 되었다. 캐시는 CPU 안에 들어가는 매우 빠른 메모리다. 자주 사용하는 데이터들은 미리 캐시에 넣어둔 후, 프로세서가 메인 메모리 대신 캐시에서 데이터를 가져오도록 해 처리 속도를 높이는 것이 목적이다. 💡 메모리 구조 그림에서 보는 바와 같이, 속도는 위로 올라갈수록 빨라지고 용량은 위로 올라갈수록 적어진다. 그리고 가장 중요하게 알아 둬..
![[자료구조] 큐 (Queue) - 배열로 구현 (C, Python)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnPhwI%2FbtsGCYTX9Zg%2FRf0bNL9LuHXG2yfR5kmk5K%2Fimg.jpg)
🖥️ 들어가며 큐 (Queue) 는 선입선출 (First In First Out) 구조입니다. 가장 대표적인 예시로는 식당에서 줄 서는 상황이라 할 수 있을 것입니다. 큐는 다양한 애플리케이션에서 매우 중요한 역할을 합니다. 예를 들어, 운영체제에서는 프로세스 관리를 위해 작업들을 큐에 넣고, 네트워크 시스템에서는 데이터 패킷의 전송을 위해 큐를 사용하여 데이터의 순서를 유지합니다. 또한 프린터의 작업 대기열, 웹 서버의 요청 처리 등 실생활에서도 큐의 원리를 적용한 시스템을 쉽게 찾아볼 수 있습니다. 큐는 여러 가지 방식으로 구현될 수 있습니다. 가장 기본적인 형태는 선형 큐(Linear Queue)이며, 이외에도 순환 큐(Circular Queue), 우선순위 큐(Priority Queue), 덱(D..
![[CS] 메모리, 캐시 - Direct Mapping Cache](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3V8DT%2FbtsGDBD8wox%2FwIRaaWXkYSd3H9YOkxWeKk%2Fimg.jpg)
여기는 왜 공부 할때마다 헷갈리는지.. 일단 적어두고 나중에 또 다시 봐야 할 것 같다. 우선 메모. Block offset이 없는 자료는 무엇인가? 저 블록이 없는 자료도 있던데 무엇인가? 캐시는 7bit로 나타나는데, 태그는 그럼 캐시의 상위 2bit? 참고 문헌 https://kimtaehyun98.tistory.com/48 Chapter 11. 캐시 메모리 # 본 내용은 한국항공대학교 길현영 교수님의 '컴퓨터 구조' 강의 및 컴퓨터 아키텍처(우종정, 한빛 아카데미)를 바탕으로 작성한 글입니다. 교재에는 메모리에 대한 챕터가 따로 있으나 강의에 kimtaehyun98.tistory.com https://developbear.tistory.com/75 [Chapter 5.2 컴퓨터 구조 및 설계] 직..
![[자료구조] 스택 - Stack (C, Python)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5k6E4%2FbtsGDzsKwIM%2Fk2H00TOIxNeuPbDBGIYHDk%2Fimg.jpg)
우측 상단에서 다크 모드를 끌 수 있습니다! 🖥️ 들어가며 스택(Stack)은 우리 주변에서도 흔히 볼 수 있는 자료구조입니다. 문서 수정 시 되돌리기나, Ctrl-C Ctrl-V라는 좋은 예도 있고, 가장 대표적으로 사용되는 프링글스 과자 예시도 직관적으로 다가옵니다. 즉, 스택은 말 그대로 ‘쌓아놓은 어떤 더미’를 뜻합니다. 스택 스택의 가장 큰 특징은 후입선출(LIFO : Last-In First-Out)입니다. 아래 그림을 보면 이해하기 쉽습니다. 요는 가장 최근에 들어온 데이터가 가장 먼저 나간다 입니다. 스택의 구조 Push : 데이터 삽입 연산 Pop : 데이터 삭제 연산 요소(데이터) : 삽입된 데이터 스택 하단 : 가장 먼저 삽입된 데이터가 있는 곳, 최하단 스택 상단 : 스택의 입출력이..
![[자료구조] 연결 리스트 - Linked List (C, Python)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2PEEX%2FbtsGx1de05E%2FpIZFcNB1nraWILExVBHWGK%2Fimg.jpg)
🖥️ 들어가며 리스트는 프로그래밍에서 매우 중요한 자료 구조 중 하나입니다. 이는 순서가 있는 데이터의 집합을 관리하기 위한 방법으로, 데이터를 효율적으로 저장하고 검색, 수정, 삭제하는 작업을 수행할 수 있도록 돕습니다. 리스트는 크게 두 가지 유형으로 나눌 수 있습니다. 순차 리스트 (Sequential List) 순차 리스트는 가장 기본적인 형태의 리스트로, 배열을 기반으로 구현됩니다. 배열의 인덱스를 사용하여 데이터에 접근하기 때문에 특정 위치의 데이터를 빠르게 찾거나 읽어올 수 있습니다. 이러한 특성 덕분에 생성 및 데이터 검색(또는 출력) 작업은 순차 리스트에서 매우 효율적으로 이루어집니다. 그러나 순차 리스트는 데이터의 삽입이나 삭제가 비효율적입니다. 특히 리스트의 중간에서 삭제나 삽입 연산..