Computer-Sience41 [OS] 메모리 구조 운영 체제의 프로그램이 실행되려면 실행되려는 프로그램(코드)이 메모리에 먼저 적재되고, 추가로 프로그램에서 사용할 변수를 할당할 메모리 또한 필요로 한다. 위의 그림을 토대로 운영체제에서 프로그램(한 개 이상의 프로세스로 이루어진 집합체)에 배정하는 메모리 영역은 4가지 영역으로 구분되어 있다. Code 영역 Data 영역 Heap 영역 Stack 영역 Code -> Data -> Heap -> Stack 순으로 Low Memory -> High Memory로 분류된다. Low Memory : logical address가 존재하는 메모리 공간 High Memory : logical address를 갖고 있지 않는 메모리 공간 1. Code 영역 : 메모리에 배정된 Code 영역은 이름 그대로 프로그램의.. 2023. 7. 13. [Network] 도메인 주소 입력 시 데이터 요청 과정 일반적으로 인터넷을 이용할 때, 간편하게 도메인 주소를 이용하여 접속을 하지만, 그 과정에 대하여 잘 알지 못하고 당연하게 이용하였기에 자세히 알아보자는 취지에서 주제를 정하고 조사하게 되었다. 브라우저에 도메인 주소(ex : www.youtube.com)를 입력했을 때 데이터를 요청하고 받아오는데 일어나는 과정은 크게 5가지의 단계로 나누어서 볼 수 있다. 1. 입력한 URL을 기반으로 DNS 검색 (캐싱 조회) 브라우저는 입력한 URL을 DNS 서버에 요청하기 전에 브라우저에 캐싱된 DNS에 일치하는 IP가 있는지 조회를 하고, 존재한다면 그것을 이용하고, 존재하지 않는다면 DNS 서버에 요청을 하게 된다. 2. 인접한 DNS 서버에 DNS query 전달 (DNS 서버 요청 - 반복) ISP(In.. 2023. 6. 25. [CS] Iterator / Generator 1. Iterator (반복자) 프로그래밍에서는 다양한 타입의 객체가 존재한다. 문자를 나타내는 char, 문자열을 나타내는 string와 정수를 나타내는 integer와 같은 타입과 Array나 List와 같은 다양한 형식을 객체는 가질 수 있는데, 그중에서 Array와 List 같이 각각의 원소를 순회할 수 있는 객체를 Iterable 하다고 칭한다. 이러한 점에서 유추할 수 있는 것처럼 Iterator 또한 크게 다르지 않다. 다음은 Python에서 반복자의 예시이다. Example : # 예제 리스트 a = [1,2,3,4,5] # 예제 리스트의 Iterator 객체 iter_a = iter(a) # 첫 번째 원소 print(next(iter_a)) # 두 번째 원소 print(next(iter_.. 2023. 5. 4. [CS] 객체 지향 프로그래밍 (Object-Oriented Programming) / SOLID 프로그래밍을 시작하면서, 객체 지향과 절차 지향과 같은 용어에 대하여 많이 접해봤을 것이다. 프로그래밍을 하는 관점에서 어떠한 기준을 두고 프로그래밍을 할 지에 관한 것이기에 다소 낯선 개념으로 느껴질 수도 있을 것이다. 그중 객체 지향 프로그래밍(OOP)과 그 원칙인 SOLID에 관하여 다루어 볼 것이다. 1. 객체 지향 프로그래밍(Object-Oriented Programming) 객체 지향 프로그래밍은 말 그대로 프로그래밍에서 모든 관점을 객체 중심으로 설계하여 프로그래밍하는 것을 의미하며, 이는 사람이 사물을 하나의 객체로 이해하는 것처럼, 이를 프로그래밍에 도입한 개념이다. 객체 지향 프로그래밍에서 큰 개념은 3가지로 나뉘어서 구분할 수 있다. 객체 자체를 의미하는 Object, 객체를 추상화한.. 2023. 4. 22. [Algorithm] DFS / BFS 알고리즘 공부를 하다 보면 DFS와 BFS라는 단어를 자주 접하게 되는데, 이는 트리 구조(또는 그래프)의 탐색과 관련된 알고리즘이다. 1. 깊이 우선 탐색 : DFS (Depth-First Search) 깊이 우선 탐색은 미로를 탐색할 때 벽을 따라 한 방향으로 끝까지 간 후 더 갈 수 없을 때 분기점으로 돌아와서 다른 방향으로 다시 탐색을 진행하는 방법으로 볼 수 있다. 모든 노드의 방문을 확인하고자 할 때 해당 탐색 방식을 채택하며, 기본적으로 BFS 방식보다 조금 더 느릴 수 있다. (Back-Tracking 과정으로 분기점 방문을 위해 노드를 거슬러 올라가는 과정이 존재) * DFS 특징 : 재귀적으로 호출하는 순환 알고리즘의 형태이다. 전위 순회(Pre-Order Traversals)를 포함한.. 2023. 4. 19. [Database] N + 1 1. N + 1 Database에서 Query 1번으로 N건의 자료를 가져오고 각 건에 대하여 데이터를 조회하려고 할 때, 각 건마다 Query가 추가로 발생하는 현상 이는, 주로 Lazy Loading의 특성을 가진 ORM에서 많이 발생하고 아래 예시를 통해 보게 되면, * Lazy Loading : ORM의 객체를 통해 데이터가 처리되는 순간 Query가 발생 Ex : 과일 테이블에서 가격이 1만원 미만인 과일의 이름들의 배열을 얻고자 할 때, SQL문을 이용하면 Query 1회로 데이터를 얻을 수 있다. 하지만 ORM을 통하면 Code에 for문이 필요하고, 그로 인하여 N + 1 현상이 발생한다. 이는 DB에 불필요한 Query를 많이 발생시켜, 성능을 저하시키는 큰 요인이 된다. 하지만 대부분의.. 2023. 4. 12. 이전 1 2 3 4 5 6 7 다음