프로세스 스케줄러(Process Scheduler)는 OS의 핵심 기능으로서 동시에 실행되는 프로세스의 실행순서와 우선순위를 관리하는 역할을 한다. 조금 더 자세히 말하자면 여러 프로세스가 시스템의 리소스에 접근할 때 필연적으로 경쟁상태에 놓이게 되는데, 프로세스 스케줄러는 이 경쟁상태를 적절히 조율해서 리소스의 사용 효율성과 짧은 응답시간, 처리량과 처리율 등을 극대화시키기 위해 다양한 알고리즘을 이용해 프로세스의 스케줄을 관리한다. 이와 같은 프로세스 스케줄링 알고리즘은 크게 아래의 두 가지로 나뉘며, 선점형 스케줄링 특정 프로세스가 CPU를 점유하고 있더라도 우선순위가 높은 다른 프로세스가 실행되면 강제로 기존 프로세스를 중단시키고 새로운 프로세스를 실행시키는 방식이다. 우선순위 기반, 라운드 로빈..
목차 XSS, CSRF, SQL Injection은 웹 보안에서 가장 많이 발생하는 취약점들이다. 말을 바꾸면 좋지 않은 의도를 가진 사람이 해당 서비스나 서비스를 이용하는 사용자를 공격하는 방법들인데, 이 글에선 하나씩 개괄적으로 보고 그 방지책에 대해 알아본다. XSS(Cross-Site Scripting) XSS는 악성 스크립트를 삽입하여 해당 페이지를 요청하는 사용자의 브라우저에서 실행되도록 하는 방식이다. 이 공격은 주로 사용자의 개인정보가 담긴 쿠키나 세션을 하이재킹해 권한을 탈취하는 것을 목적으로 한다. 최악의 경우 탈취한 권한으로 사용자의 계좌에서 돈을 인출하는 상황도 발생할 수 있기 때문에, XSS는 최악의 보안 위협으로 간주되고 있다. 이를 방지하기 위해서는 입/출력 값의 스크립트 태그..
목차 객체 지향 프로그래밍과 함수형 프로그래밍은 둘 다 프로그래밍 패러다임의 한 종류이며, 여기서 패러다임이란 단순히 말하자면 프로그래밍을 무엇으로 정의할 것인가에 대한 관점이라고 정리할 수 있다. 이런 맥락에서, 본격적으로 두 패러다임에 관해 정리하기 전에 근본적인 차이를 말하자면 객체 지향 프로그래밍은 "프로그래밍은 상호작용하는 객체의 집합이다."라는 관점을 가진 패러다임이며 함수형 프로그래밍은 "프로그래밍은 연속된 함수의 집합이다."라는 관점을 가진 패러다임이라 정리할 수 있다. 추가로 객체 지향 프로그래밍은 일반적으로 명령형 프로그래밍으로, 함수형 프로그래밍은 일반적으로 선언형 프로그래밍으로 작성한다는 차이도 있다. 여기서 명령형/선언형 프로그래밍 역시 프로그래밍 패러다임의 한 종류이며, 대략 아..
목차 Program, Process, Thread 프로그램, 프로세스, 그리고 스레드는 모두 컴퓨터에서 실행되는 코드를 가리킨다. 하지만 당연하게도 중요한 차이점들이 있는데, 짧게 정리하면 아래와 같다. 프로그램 프로그램은 실행 가능한 코드와 데이터의 집합이다. 실행 파일이나 라이브러리 형태로 디스크에 저장되며 실행되기 전에 디스크에서 메모리로 로드되는데, 이를 '프로그램 인스턴스'라고 한다. 프로세스 위에서 말한 '프로그램 인스턴스'가 바로 프로세스이다. 다시 한번 정리하자면 프로그램이 실행되어 운영체제에 의해 메모리상에 올라가면 이를 프로세스라 부른다. 따라서 운영체제로부터 자원을 할당받는 작업의 단위라 볼 수 있으며, 프로세스 사이에는 자원이 공유되지 않는다. 이 때문에 Context Switchi..
Hash 배열은 빠른 검색 속도를 가지고 있으나 삽입/삭제 시 많은 비용이 소모된다. 이를 극복한 LinkedList는 삽입/삭제의 비용이 적지만 데이터가 많아질수록 검색에 비용이 많이 든다. 해시는 이를 극복하기 위해 도입된 개념이다. 해시, 해시 함수(Hash Function)란 임의의 길이를 갖는 임의의 데이터를 받아 고정된 길이의 데이터를 리턴하는 단방향 함수를 말한다. 가장 쉬운 예로는 나머지 연산자(%)가 있을 수 있겠다. 해시 함수의 특징은 아래와 같으며, 비교적 간단한 알고리즘으로 시스템 자원을 덜 소모한다, 즉 해시값 생성에 많은 시간이 들지 않는다. 해시값을 해독할 때는 많은 시간이 든다. 같은 입력 값에 대해선 같은 출력 값이 보장되며, 출력 값은 고르게 분포한다. 입력값이 아주 조금..
목차 Scale-Up 가장 먼저 생각할 수 있는, 단순하면서도 확실한 방법이다. 사용하고 있는 서버 자체의 Cpu, Ram 등을 업그레이드해서 처리 용량과 속도를 올리게 된다. 단점 역시 단순한데, 좋은 부품은 비싸며, 출시된 제품의 성능 한계가 명확하다는 점이다. 비용 대비 성능 증가폭이 상대적으로 작다. Scale-Out 다음으로 생각할 수 있는 방법은 수평 확장이다. 서버 하나의 처리속도와 용량을 올리는 것이 아닌, 서버의 대수를 증가시켜 처리 용량을 늘린다. 수직 확장에 비해 비용이 비교적 적게 든다. 단순히 대수를 늘리기 때문에 업그레이드에 한계가 없는 듯 보인다. Amdahl's law 그러나 이는 정확하게는 처리 용량에만 해당되는 말이고, 처리 속도의 경우는 암달의 법칙에 의해 한계가 뚜렷하..
목차 Multi Process 멀티 프로세스란 말 그대로 두 개 이상의 프로세스가 동시에 실행되는 것을 말한다. 이때 프로세스를 진행 중인 CPU는 하나일 수도, 여러 개일 수도 있으며 이는 전에 알아본 동시성, 병렬성과 같은 차이를 만든다. 다시 언급하자면 하나의 CPU는 한 번에 하나의 작업만을 수행할 수 있기 때문에, 여러 개의 작업이 동시에 실행될 경우 짧은 시간 동안 번갈아가며 동시성을 구현한다(이를 시분할 환경이라 한다). 반면 두 개 이상의 CPU가 멀티 프로세스를 진행할 경우 프로세스를 나눠 처리하며 병렬성을 구현한다. 주로 작업 사이의 독립적인 운영과 안정성이 중시될 때 사용되며, 아래와 같은 장단점을 갖는다. 장점 각 프로세스가 완전히 독립적이기 때문에 안정적이다 ↔ 개별 프로세스의 문..
목차 Deadlock 교착 상태(Deadlock)는 다중스레드 환경에서 설계 미스 등으로 발생하는 무한 대기 상태를 말한다. 조금 더 구체적으로는 두 개 이상의 스레드가 서로 상대방이 들고 있는 락의 해제를 기다리며 상황이 더 이상 진행되지 않는 상태를 말하는데, 이를 해결하는 일반적인 방법은 아직 없다고 한다. 때문에 현대의 OS는 언제나 교착 가능성을 염두에 두고 있으며, Unix와 윈도우의 경우 드물게 발생하는 교착 상태를 무시하는 방법과 교착이 예측되는 구역에 자원을 더 할당하는 식으로 이를 회피하고 있다. 이어서 교착 상태의 발생 조건은 아래와 같으며, 상호 배제(Mutual Exclusion) - 임계 영역의 락은 한 스레드만 획득할 수 있음 점유 대기(Hold and Wait) - 자원을 점..
목차 Server Load Balancing(SLB) SLB란 말 그대로 하나의 서버에 사용량이 집중되지 않도록 서버를 분산하고, 서버 리소스에게 작업을 나누어주는 기술을 말하며, 당연하게도 그 목적은 가용성과 응답 시간의 최적화에 있다. 주로 연산장치와 저장장치가 그 대상이 되며, 내부 서버끼리는 병렬 처리를 통해 트래픽을 주고받는데, 이때 서버 외부의 트래픽을 받아 내부 병렬 장치로 분산시켜주는 장치를 로드 밸런서(Load Balancer)라고 부른다. 단일 서버의 경우 갑작스러운 트래픽 증가 혹은 내부적인 이유로 뻗어버리면 클라이언트의 UX에 직결되는 위험이 존재한다. 하지만 로드 밸런싱을 통해 분산 시스템을 구축하면 하나의 모듈이 죽어도 나머지가 일을 계속해서 처리하기 때문에 서버의 문제점을 사용..
목차 스택, 큐, 트리, 그래프에 대해선 지난번에 짧게 요약했다. 이번 글에선 자료구조 중 배열 + 컬렉션 프레임워크에 대해 가능한 짧게 요약한다. Array 배열은 한 마디로 말하면 같은 자료형과 길이가 정해진 행렬이라고 할 수 있다. 행렬이기 때문에 인덱스가 정의되어 있고, 메모리를 연속으로 사용할 것을 요구하기 때문에 각각의 값은 변경할 수 있으나 한 번 정해진 크기는 바꿀 수 없다. 또한 엄밀하게 말하면 자바의 배열은 기본적으로 제공하는 자료형이기 때문에 다양한 관련 함수가 정의되어 있으며, 별도의 호출 없이 손쉽게 정의할 수 있다. 배열은 자료형인가? 결론부터 말하자면 자바에서 배열은 자료형이며 동시에 자료구조로도 분류할 수 있다. 자료형은 변수의 타입을 가리키는 단어이며, 자료구조는 데이터의 ..
- Total
- Today
- Yesterday
- 야경
- 세계여행
- RX100M5
- 파이썬
- java
- 리스트
- 지지
- 세모
- 면접 준비
- 맛집
- 스트림
- 자바
- 유럽여행
- BOJ
- 동적계획법
- 기술면접
- Python
- Backjoon
- 백준
- a6000
- 세계일주
- spring
- 중남미
- 여행
- 스프링
- 알고리즘
- 유럽
- 남미
- 칼이사
- Algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |