본문 바로가기

분류 전체보기502

4. 리눅스의 기본구성 1. 리눅스와 파일 a) 모든것은 파일이다. - 리눅스는 모든 것은 파일이라는 철학을 따른다. - 컴퓨터에 존재하는 모든 인터렉션과 데이터는 파일처럼 읽고 쓰는 것으로 이루어져 있기 때문이다. - 마우스, 키보드와 같은 디바이스 또한 파일로 취급된다. b) 파일 네임스페이스 - A 드라이브(A:/), C 드라이브(C:/)를 사용하지 않고, - 루트 디렉토리(~ 또는 /)를 사용하는 전역 네임 스페이스를 사용한다. - 즉, 모든 데이터의 경로가 루트 디렉토리로부터 시작한다. c) 파일은 inode방식으로 관리된다. - 리눅스의 모든 파일은 inode 고유값과 자료구조에 의해 관리된다. 2. 리눅스와 프로세스 a) ELF(Executable and Linkable Format) - 리눅스는 ELF라는 실행파.. 2021. 9. 6.
3. AWS EC2 - IP생성 및 서버접속 1. Elastic IP(탄력적 IP) a) IP에 대한 기본적인 이해 - 인터넷에 접속하기 위해서는 반드시 IP주소가 필요하다. - 서버는 Host로서 고정적인 IP주소가 할당된다. - 클라이언트는 인터넷에 접속할 때마다 다른 IP를 할당받게 된다. 이를 동적 IP라고 한다. b) 동적 IP를 사용하는 이유 - 동적 IP를 할당하는 이유는 모든 컴퓨터에게 고유한 IP를 부여하기에는 IP주소가 부족하기 때문이다. - 현재는 우리는 IPv4를 사용하는데, 이는 128.12.10.1과 같이 4자리로 구분된 IP주소 형식을 말한다. - 4자리로 표현되는 IP주소로 전세계의 모든 컴퓨터에게 고유번호를 제공하기에는 턱없이 부족하다. c) Elastic IP란? - AWS의 EC2 서비스를 통해 생성한 서버 인스턴.. 2021. 9. 3.
2. AWS EC2 - 인스턴스(서버) 생성하기 1. 설치하기에 앞서 - VM을 이용하는 우분투 설치는 컴퓨터의 환경에 따라 다양한 error가 발생할 수 있다. - 이러한 단점을 극복하는 가장 쉬운 방법은 클라우드 컴퓨팅을 사용하는 것이다. - AWS를 이용하여 리눅스를 설치하고, 실습을 통해 리눅스에 대해서 배워볼 예정이다. - AWS를 사용하므로 리눅스도 배우고, 현업에서 사용하는 최신기술에도 익숙해 질 수 있다는 장점이 있다. - 특히, 어떤 환경에서도 문제없이 사용이 가능하다는 것이 핵심 장점이다. * AWS는 1년간 무료로 사용할 수 있습니다. * 리눅스 공부를 위해서 AWS를 사용한다면, 공부가 끝난 후 계정을 닫으면 됩니다. 2. 클라우드 컴퓨팅 간단히 이해하기 - 클라우드 컴퓨팅은 자동화 서비스로, 서버 환경을 바로 구축하여 사용할 수.. 2021. 9. 3.
1. 리눅스의 배경 1. 리눅스의 특징 - UNIX 계열의 OS - 서버와 클라우트 컴퓨팅에서 많이 사용되는 OS - 프로그래밍에도 유용한 OS (ANSI C의 C언어 표준을 사용) 2. 리눅스의 역사 a) 리눅스의 시작 ▶ 리누스 토발즈 (리눅스 개발자) - 대학에 있는 UNIX 컴퓨터를 집에서도 사용하고 싶다는 개발동기 - 다중 사용자, 다중 작업(시분할 시스템, 멀티 태스킹)을 지원하는 UNIX와 유사한 OS를 개발하기 시작 b) GNU 프로젝트 ▶ GNU(Gnu is Not UNIX) - UNIX 운영체제는 여러회사에서 각자 개발되었고 서로 소스를 공유하지 않았다. ▶ 리차트 스톨만 - 초기 개발공동체의 상호협력적인 문화로 돌아가자는 GNU 선언문을 발표 - 최초의 컴퓨터 애니악을 개발할 때에는, 여러 개발자들이 상.. 2021. 9. 3.
6. Array(배열) - Quick Select 1. Quick Select란? - 정렬되지 않은 배열에서 N번째로 크거나 작은 수를 찾을 때 사용되는 알고리즘 - N번째 수를 찾기 위해서는 다음과 같은 방법을 사용할 수 있다. 1) 전체 요소를 오름차순으로 정렬한 후, N번째 수를 찾는 방법 - O(N log N)의 시간복잡도 2) Heap 정렬 - O(n log k)의 시간복잡도 - 1)의 방법보다 빠르다. 3) Quick Select - O(n)의 시간복잡도 - 가장 빠른 방법이다. - 이 중에서 가장 빠른 Quick Select에 대해서 알아보자. 2. Quick Select 개념 - Quick Select는 Partitioning(파티셔닝)을 이용한 알고리즘이다. ▶ Partitioning 이란? - Pivot 이라는 하나의 숫자를 기준으로 .. 2021. 9. 2.
27. 컴퓨터 구조 - 병렬처리시스템 0. 시작하기 전에 - 지금까지 컴퓨터 구조에 대해 배우면서 컴퓨터가 어떻게 동작하는지에 대해서 알아보았다. - 컴퓨터의 동작이나 연산 과정에 대해서 배울 때, 언제나 순차적으로 그 과정을 설명했다. - 하지만, 실제로 컴퓨터는 순차적으로 움직이지 않는다. 오히려 동시다발적으로 동작한다. - 이것이 가능한 이유는 컴퓨터가 병렬처리를 사용하기 때문이다. - 이번 포스팅에서는 병렬처리란 무엇인지, 병렬처리는 어떻게 구현되는지에 대해서 알아보자. 1. 병렬처리란? - 이전 포스팅에서 파이프라인과 병렬처리에 대해 배운 적이 있다. - 병렬처리란, 한개 또는 한개 이상의 CPU를 이용하여 여러 작업을 동시다발적으로 처리하는 시스템을 말한다. - 이러한 병렬처리시스템은 다양한 방식으로 구현되는데, 이를 이해하기 위.. 2021. 9. 1.
5. Array(배열) - Merge Sort(병합정렬) 1. Merge Sort란? - 하나의 배열을 반씩 쪼개어, 배열의 요소를 각각의 배열로 만든다. - 독립적으로 쪼개진 배열을 비교해가며 병합하여 하나의 정렬된 배열을 만드는 알고리즘이다. a) 예제를 통한 병합정렬의 이해 b) 배열간의 요소를 비교하고 병합하는 과정 c) 병합정렬의 시간복잡도 2. 병합정렬 코드구현 # Merge Sort # 1) Merge Sort의 개념 # - 하나의 배열을 반씩 쪼개어 요소의 총 개수만큼 독립된 배열을 만든다. # - 반씩 쪼개진 배열을 Left, Right로 구분한다. # - Left에 있는 배열끼리, Right에 있는 배열끼리의 요소를 비교하여 병합한다. # - 비교 후 병합하는 과정을 반복하여 최종적으로 하나의 정렬된 배열을 만든다. # - 이 과정을 재귀적으.. 2021. 8. 31.
버블정렬, 삽입정렬, 선택정렬 완전분석 0. 개요 - 본격적으로 알고리즘 공부를 시작하면서, 가장 기초인 정렬 알고리즘을 배웠다. - 수학공식 외우듯, 개념을 이해하고 외워야겠다는 태도로 접근했는데 쉽지 않았다. - 개념은 이해가 가지만, 코드로 구현했을 때 왜 이렇게 작성하는지 이해가 가지 않는 부분이 있었다. - 그래서 내가 완벽히 이해하기 위해 분석한 내용을 공유한다. - 아래 글의 사진이 잘 안보이는 분들을 위해 PDF 파일을 제공합니다. 1. Bubble Sort a) 정렬과정 b) 코드 기반 개념 이해 c) 완성 코드 from typing import List def bubble_sort(case: List[int]) -> List[int]: for idx in range(len(case) - 1): for i in range(le.. 2021. 8. 30.
26. 입출력 구조 - 입출력 제어 0. 시작하기 전에 - 이전 포스팅에서 입출력 구조를 이해하기 위한 시스템 BUS에 대해서 알아보았다. - 시스템 BUS는 단방향 통신으로 주기억장치와 CPU내부의 레지스터들과의 소통을 위한 회로다. - 이번 포스팅에서는 시스템 BUS와 입출력 장치간의 어떤 과정이 이루어지는지 알아보자. 1. 입출력 장치와 소통하는 방식 - 컴퓨터의 마더보드에는 주소버스, 데이터버스, 제어버스가 존재한다. - 그러나 입출력을 제어하기 위한 또는 입출력 데이터를 전달하기 위한 입출력 버스는 존재하지 않는다. - 왜 그럴까? 함께 알아보자. a) 마더보드에 입출력 BUS가 없는 이유 - 마더보드에 존재하는 다양한 BUS는 고정되어 있는 회로다. - 회로를 추가하거나 삭제하거나 할 수 없기에 고정적이고 불변적이다. - 그러나.. 2021. 8. 26.