전체 글

전체 글

    AWS - SAA C02 이야기

    AWS - SAA C02 이야기

    AWS SAA (C02) 이야기 이직을 마음먹은 날부터 공부하기 시작해서, 약 4주간 달려온 AWS SAA 자격증 이야기입니다. AWS Certified Solutions Architect - Associate 클라우드 업계의 1위를 달리고 있는, 아마존의 AWS. 그래서 AWS는 Microsoft Azure, GCP 를 합친 것보다도 인기가 많은 게 구글 검색만으로도 느껴진다. 그만큼 자격증 공부가 더 수월하기도 하고, 실제로 유데미나 여러 매체를 통한 강의 또한 많다. 세 업체가 서로 벤치마킹하며 경쟁해나가고 있기에, 하나의 환경에 익숙해짐으로서 클라우드 환경의 기본 지식이 쌓이면, 다른 두 클라우드 공부도 더욱 수월해질거라 생각한다. 그래서 내 첫 클라우드 자격증은 AWS 자격증으로, 그 중 '아키..

    프로세스 기초

    프로세스 기초 프로그램은 저장장치에 저장된 명령문의 집합체를 의미한다. 프로세스는 메모리에 적재되어 실행중인 프로그램을 의미하고, 다음 구조로 이루어진다. Code 영역 자신을 실행하는 코드가 저장되어 있다. Data 영역 전역 변수와 정적(static) 변수가 저장되어 있다. Heap 영역 프로그래머가 런타임 시 동적으로 메모리를 할당하는 데에 쓰인다. Stack 영역 지역 변수와, 함수 호출을 했을 때 필요한 정보들이 저장된다. 멀티프로그래밍 & 멀티프로세싱 유니프로그래밍 (Uniprogramming) 메모리에 오직 하나의 프로세스가 올라온 것을 의미한다. 멀티프로그래밍 (Multiprogramming) 메모리에 여러 개의 프로세스가 올라온 것을 의미한다. 멀티프로세싱 (Multiprocessing)..

    운영체제 기초

    운영체제 기초 Windows, MacOS, Linux, UNIX(를 접하진 못했지만..) 등 다양한 운영체제가 우리 곁에 있다. 다양한 전자기기에 들어가는 임베디드 운영체제나, 안드로이드나 iOS또한 운영체제이다. 컴퓨터는 운영체제 없이도, 엄청난 제약이 걸리긴 하지만, 동작할 수 는 있다. 하지만 적합한 운영체제가 있어야 컴퓨터 하드웨어를 쓸모있게 만들어줄 수 있다. 하는 일 프로세스를 관리한다. 다양한 프로세스를 관리해서, 한 번에 다양한 일을 할 수 있게 해준다. 메모리를 관리한다. 모든 프로그램은 메모리에 올라와서 동작하는데, 이러한 멀티프로그래밍 환경에서 프로세스 메모리 관리는 필수이다. 하드웨어를 관리한다. 다양한 입출력 기기나 하드웨어에 대한 사용자의 직접적인 접근을 막고, 올바른 방법과 관..

    프로카데미에 등록했다.

    프로카데미에 등록했다. 비가 많이 온 다음날, 강남은 아직 물이 안빠졌다는 소식을 들으며 밖으로 나설 채비를 했다. 프로카데미 원장님께서도 폭우로 스케쥴 조정이 필요하면 연락달라고 문자를 보내셨다. 기존에 공부한 거 정리도 좀 하면서 머리 식히며 경찰병원역에 도착했다. 비도 오고 시간도 좀 빠듯하긴 해서 뭘 먹을지 고민할 시간이 많지 않았기에, 그냥 적당히 주변에서 끼니를 떼웠다. 앞으로 일 년동안 수없이 다닐 음식점이기도 하니 미리 잘 알아두는것도..! 늦지 않게 도착했더니 확실히 비도 엄청 온 다음날이기도 하고, 화목 이기도 해서 아카데미는 조용했다. 궁금한거는 테스트 본 이후에 여쭤보기로 하고, 우선 오늘의 목표인 아카데미 기본 테스트를 보기 시작했다. 물론, 프로카데미 홈페이지에 나온대로였다. 코..

    정렬 - 퀵정렬

    퀵 정렬 퀵 정렬은 정렬 중에서 빠른 속도로 인해 유명한 대표적인 정렬 방법론 중 하나이다. 이는 분할 정복 방법을 통해서 배열을 정렬하게 된다. 배열의 값들 중 하나의 원소를 고르고, 이를 피벗이라고 명한다. 이 앞에는 피벗보다 작은 값이 오도록, 이 뒤에는 큰 값이 오도록 배열을 정렬하고 둘로 나눈 뒤, 다시 이 작은 배열에 대해 재귀적으로 퀵 정렬을 반복한다. generateRandomArray, printArray, swap int partition(int *myArray, int left, int right) { int pivot = myArray[left]; int i = left, j = right; while (i < j) { while (pivot < myArray[j]) { j--; }..

    정렬 - 힙정렬

    힙 정렬 힙 정렬은 이진 트리를 이용해서 정렬해 나가는 방식이다. 힙 생성 시 최대 힙으로 생성하고, 왼쪽 자식의 인덱스는 부모 인덱스의 / 2, 오른쪽 자식의 인덱스는 부모 인덱스의 / 2 + 1 이라는 점을 이용한다. 단, 배열은 인덱스가 0부터 시작하지만 힙 정렬에서 예시로 사용하기 위해서, 배열의 0번을 비우고 1번부터 사용하기로 한다. 이를 위해 출력과 랜덤 값 채우기 메서드를 힙 정렬에 맞추어 아래와 같이 조금 변경했다. template void swap(T *a, T *b) { T temp = *a; *a = *b; *b = temp; return; } template void printArrayForHeap(T &array, int size) { for (int i = 1; i = 2; i..

    정렬 - 기수정렬

    기수 정렬 기수 정렬은 값의 자릿수를 이용해서 정렬하는 특이한 정렬인데, 이는 비교를 하지 않고 정렬한다는 또 다른 특징을 가지고 있다. 우선 n진수인지에 따라서 n개의 저장 공간 (일반적으로 스택 등) 을 마련한다. 배열과는 다르게, 이 저장 공간에는 여러 데이터가 들어갔다가 순차적으로 나올 수 있어야 한다. 그리고 나서, n진수의 끝의 자리 숫자 (10진수라면 1의 자리 숫자) 를 기준으로, 해당 값에 맞는 버킷을 값을 push 한다. 예를 들어, 142 라는 값은 2 번째 버킷에 들어가는 형식이다. 이후, 이 모든 버킷들을 첫번재 버킷부터 순차적으로 pop 하면서 배열에 다시 담는다. 그 후, 배열의 값 중 최대 자리 수만큼 이 행위를 반복하면서, 정렬을 만들어내는 과정이다. generateRand..

    정렬 - 삽입정렬

    삽입 정렬 삽입 정렬은 기준점을 점점 뒤로 이동시키면서 해당 기준점 이전의 앞 데이터가 정렬되도록 유지하는 정렬 방식이다. generateRandomArray, printArray, swap static int arrayLength = 20; int *myArray = generateRandomArray(arrayLength); // 랜덤으로 값이 초기화된 배열 생성 printArray(myArray, arrayLength); // 정렬 전 배열 출력 for (int i = 0; i < arrayLength; i++) { // 배열의 첫 번재 요소부터 뒤쪽으로 탐색하는데, int tempValue = myArray[i]; // 임시 값의 초기화는 현재 위치의 배열 값 int searchIndex = i ..