목차 이번엔 컴퓨터의 전원 버튼을 누르면 정확히 어떤 일이 벌어질까? 에 대한 대답을 정리하려 한다. 먼저 부팅(Booting)을 한 마디로 정의하면 컴퓨터가 자기 자신을 구동할 프로그램을 불러오는 과정이다. 대략적으로 다음과 같은 순서를 따른다. Power On 전원 스위치를 누르면 전류가 파워 서플라이로 전달된다. 파워 서플라이는 내부의 칩이 전압이 정상이고 안정적으로 공급된다고 판정하면 Power Good Signal을 발송한다. 이어서 파워 서플라이는 전원을 컴퓨터 내부에서 사용되는 전압으로 변환해 메인보드를 시작으로 CPU, 메모리, 디스크 등에 전력을 공급한다. 이 과정에서 CPU로 보내지던 리셋 신호가 중지되고 CPU가 초기화되며, 그렇지 않을 경우 전원은 들어오지만 화면에 아무것도 표시되지..
목차 DB 설계에서 시작해 제법 멀리도 왔다. 시작점이 안 보여. 어쨌거나 DB는 한 번 잘못 설계하면 그 알아채는 타이밍이 늦을수록 돈이 들어간다. 게다가 만약 그 설계가 데이터 무결성을 무너뜨리는 것을 모자라 데이터 보안까지 위협한다? 돈으로 해결되면 다행일 것이다. 반면 당연하게도 안정적이고 성능 좋은 DB를 설계한다면 여러 비용을 절약할 수 있다. DB 설계의 세 번째 단계인 논리적 설계에서 시작해 데이터 무결성과 그 제약조건을 거쳐 여기까지 왔다. 이 글에선 DB 설계 시 개발자가 기본적으로 알아야 할, 효율적인 디자인에 대해 다룬다. 그럼 여기서 먼저, DB의 효율성이란 무엇일까? 당연히 삽입/갱신/삭제/조회의 비용이 적은 것을 말한다. 그럼 이어서, DB의 효율성을 가장 많이 해치는 근본적인..
1996년 5월 이전까지 서버와 클라이언트는 정적인 자료(HTML 등)만 주고받는 관계였다. 좀 더 정확하겐 미리 가지고 있던 문서 중 클라이언트의 요청에 부합하는 것을 골라 반환하는 관계라고 할 수도 있다. 하지만 사용자가 늘어나고 새로운 요구가 생겨나면서 정적인 웹 페이지에서 벗어나 동적으로 반응하는 웹에 대한 필요가 생겨났고, 이는 1996년 5월 자바원 컨퍼런스의 서블릿 API 발표로 이어졌다. 서블릿이란 한 마디로 말하면 클라이언트의 요청을 처리하고 반환하는 기술, 혹은 그 패키지나 클래스를 말한다. 여기서의 요청 처리 및 반환은 기존과는 다른 동적인 반환(필요한 부분만 선택적으로 반환하는 것)을 말하며, 반환 시 정적인 리소스(HTML)를 활용한다는 특징이 있다. 작동하는 위치는 그림에서 보이..
목차 Multi Process 멀티 프로세스란 말 그대로 두 개 이상의 프로세스가 동시에 실행되는 것을 말한다. 이때 프로세스를 진행 중인 CPU는 하나일 수도, 여러 개일 수도 있으며 이는 전에 알아본 동시성, 병렬성과 같은 차이를 만든다. 다시 언급하자면 하나의 CPU는 한 번에 하나의 작업만을 수행할 수 있기 때문에, 여러 개의 작업이 동시에 실행될 경우 짧은 시간 동안 번갈아가며 동시성을 구현한다(이를 시분할 환경이라 한다). 반면 두 개 이상의 CPU가 멀티 프로세스를 진행할 경우 프로세스를 나눠 처리하며 병렬성을 구현한다. 주로 작업 사이의 독립적인 운영과 안정성이 중시될 때 사용되며, 아래와 같은 장단점을 갖는다. 장점 각 프로세스가 완전히 독립적이기 때문에 안정적이다 ↔ 개별 프로세스의 문..
목차 Deadlock 교착 상태(Deadlock)는 다중스레드 환경에서 설계 미스 등으로 발생하는 무한 대기 상태를 말한다. 조금 더 구체적으로는 두 개 이상의 스레드가 서로 상대방이 들고 있는 락의 해제를 기다리며 상황이 더 이상 진행되지 않는 상태를 말하는데, 이를 해결하는 일반적인 방법은 아직 없다고 한다. 때문에 현대의 OS는 언제나 교착 가능성을 염두에 두고 있으며, Unix와 윈도우의 경우 드물게 발생하는 교착 상태를 무시하는 방법과 교착이 예측되는 구역에 자원을 더 할당하는 식으로 이를 회피하고 있다. 이어서 교착 상태의 발생 조건은 아래와 같으며, 상호 배제(Mutual Exclusion) - 임계 영역의 락은 한 스레드만 획득할 수 있음 점유 대기(Hold and Wait) - 자원을 점..
Process ⊃Thread 프로세스 OS로부터 자원을 할당받는 작업의 단위 여기서 자원이란 파일, 메모리, 코드, 스택, 힙 등을 모두 포함 위와 같은 특성상(메모리 공유 X) 프로세스 사이의 Context Switching(정보 교환) 이 어려워 여러 여러 개의 프로세스를 가진 프로그램의 동시 작업 수행 어려움 → 소프트웨어의 복잡도가 증가할수록 발목을 잡는 요인 독립적인 작업이기 때문에, 한 프로세스의 강제종료가 다른 프로세스에 영향을 주지 않는다. 이와 같은 배경에서 탄생한, 프로세스보다 작은 단위가 바로 스레드 스레드 프로세스의 자원을 사용하는 실행의 최소 단위 독립 실행을 위해 각자의 PC Register, 스택을 가지며 프로세스 내부의 힙 메모리, 데이터, 코드는 공유 때문에 생성 및 처리속..
공부를 하고 프로젝트를 하면서 노드라는 단어를 참 많이 듣기도 했고 쓰기도 했다. 그래도 그림자를 따라다니는 기분을 지울 수가 없어서, 내가 사용하는 범위 안에서만 정리하고 가자. 시작하기 전에, 노드는 맥락과 분야에 따라 굉장히 다양한 의미를 가지며, 내가 정리한 것은 오로지 내가 현재 관심 있는 분야에 한정된 자료에 불과하다. Node - Data Structure 자료 구조를 배울 때, 특히 링크드 리스트나 트리, 더 일반적으로는 그래프에 대해 배울 때 노드라는 단어를 처음 만난다. 자료구조에서의 노드란 추상적으로 말하면 구조의 기본 단위, 트리나 그래프로 치면 정점이라고 할 수 있으며 덜 추상적으로 말하면 메모리 곳곳에 흩어져 있는 데이터의 조각, 혹은 그 기본적인 단위를 가리킨다. 추가로 링크드..
목차 Server Load Balancing(SLB) SLB란 말 그대로 하나의 서버에 사용량이 집중되지 않도록 서버를 분산하고, 서버 리소스에게 작업을 나누어주는 기술을 말하며, 당연하게도 그 목적은 가용성과 응답 시간의 최적화에 있다. 주로 연산장치와 저장장치가 그 대상이 되며, 내부 서버끼리는 병렬 처리를 통해 트래픽을 주고받는데, 이때 서버 외부의 트래픽을 받아 내부 병렬 장치로 분산시켜주는 장치를 로드 밸런서(Load Balancer)라고 부른다. 단일 서버의 경우 갑작스러운 트래픽 증가 혹은 내부적인 이유로 뻗어버리면 클라이언트의 UX에 직결되는 위험이 존재한다. 하지만 로드 밸런싱을 통해 분산 시스템을 구축하면 하나의 모듈이 죽어도 나머지가 일을 계속해서 처리하기 때문에 서버의 문제점을 사용..
으로 구현한 다른 정렬: [Java+Python]삽입 정렬(Insert Sort) [Java+Python]버블 정렬(Bubble Sort) [Java+Python]병합 정렬(Merge Sort) [Java+Python]힙 정렬(Heap Sort) [Java+Python]퀵 정렬(Quick Sort) [Java+Python]카운팅 정렬(Counting Sort) 선택 정렬은 한 마디로 말하면 처음부터 끝까지 훑어서 가장 작은(혹은 큰) 숫자를 처음 인덱스에 넣는 방식이다. 시간 복잡도가 같은 삽입 정렬이나 버블 정렬이 그때그때 값을 바꾸는 데 비해 선택 정렬은 한 바퀴에 한 번씩 원소를 배정한다. 어떤 정렬 상황에서건 일관되게 O(N2)의 속도를 보여준다는 특징도 가지고 있으며, 버블 정렬에 비해 두 배 ..
으로 구현한 다른 정렬: [Java+Python]삽입 정렬(Insert Sort) [Java+Python]선택 정렬(Selection Sort) [Java+Python]병합 정렬(Merge Sort) [Java+Python]힙 정렬(Heap Sort) [Java+Python]퀵 정렬(Quick Sort) [Java+Python]카운팅 정렬(Counting Sort) 버블 정렬(Bubble Sort)은 간단히 말하면 처음부터 시작해 인접한 원소와 비교해 자리를 바꾸는 알고리즘이다. 한 바퀴 돌 때마다 원소 하나가 확실히 정렬되기 때문에, 거품이 떠오르는 것 같다고 해서 붙은 이름이기도 하다. 선택 정렬, 삽입 정렬과 함께 최악의 효율을 보여주며, 그 와중에도 삽입 정렬보다 느리다. 최선의 상황(정렬이 끝난..
- Total
- Today
- Yesterday
- Python
- Backjoon
- 남미
- RX100M5
- 중남미
- 칼이사
- 세계여행
- 스프링
- 기술면접
- 맛집
- 유럽
- 세계일주
- 여행
- 동적계획법
- java
- 유럽여행
- 백준
- 세모
- 알고리즘
- 리스트
- a6000
- 파이썬
- 스트림
- 지지
- 야경
- Algorithm
- 자바
- spring
- 면접 준비
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |