목록CS (10)
gimmickbutreal
사용자가 프로그램을 실행하면 운영체제는 디스크에 저장된 데이터를 메모리로 로드합니다. 하지만 메모리 공간은 한정되어 있고, 사용자는 동시에 많은 프로그램을 실행하고 싶어하는 상황에 놓이게 됩니다. 이러한 딜레마의 해결사로 가상 메모리가 등장했습니다. 가상 메모리(virtual memory)는 프로세스의 일부만 메모리에 로드하고, 나머지는 디스크에 둔 상태로 프로세스를 실행하는 방식입니다. 쉽게 말해서, 가상 메모리는 한정된 메모리 공간을 효율적으로 사용하기 위해 등장했습니다. 위 그림과 같이 물리 메모리에 프로세스 일부를 로드하고, 프로세스의 나머지 영역은 디스크에 두면 더 많은 프로세스를 메모리에 로드할 수 있습니다. 그렇기 때문에 다음과 같은 장점이 있습니다 가상 메모리의 장점 프로그램이 메..
브라우저는 크게 7가지 구성 요소로 이루어져 있습니다. 1. UI- 사용자와 상호작용하는 서비스 (주소 표시줄, 새로고침 버튼 등) 2. 브라우저 엔진- UI와 렌더링 엔진을 연결함 3. 렌더링 엔진- HTML, CSS를 파싱하여 요청한 웹 페이지를 표시하는 엔진 4. 통신- 각종 네트워크 요청을 수행하는 파트 5. UI 백엔드- 콤보 박스, 체크 박스와 같은 기본적인 위젯을 그리는 파트 6. 자바스크립트 번역기- 자바스크립트 코드를 번역하고 실행 7. 자료 저장소- 로컬 스토리지, 쿠키 등 브라우저 메모리를 활용하여 저장하는 영역
JVM은 'Java Virtual Machine'이란 문장을 줄인 것으로 자바를 실행하기 위한 가상 기계라고 번역할 수 있다. 영미권에서는 컴퓨터를 머신이라고도 부르기 때문에 한국인인 우리는 자바를 실행하기 위한 가상 컴퓨터라고 생각하면 된다. Virtual Machine이란 넓은 의미를 지닌 용어인데, 소프트웨어로 구현된 하드웨어를 뜻한다. 즉, TV와 비디오를 소프트웨어화한 윈도우 미디어 플레이어가 이에 포함된다. 이와 유사하게 JVM의 M은 컴퓨터를 뜻하는 것인데, 가상 컴퓨터는 실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터라는 뜻으로, 컴퓨터 속의 컴퓨터라고 생각하면 된다. 자바로 작성된 애플리케이션은 모두 이 가상 컴퓨터(JVM)에서만 실행되기 때문에, 자바 애플리케이션이 실행되기 위..
OSI 계층이란 네트워크 통신이 이루어지는 과정을 7단계로 표준화한 것입니다. 데이터를 송신할 때는 내림차순으로, 수신할 때는 오름차순으로 전달합니다. 송신할 때는 캡슐화를 해주고 수신할 때는 역캡슐화를 진행합니다. 캡슐화를 하는 이유는 수신부의 같은 계층에서 데이터 호환성을 높이고 오류를 최소화할 수 있기 때문입니다. 또한, 레이어별 통신을 하기 위한 약속이 있는데요, 이를 프로토콜이라고 합니다. 7-응용계층 : 계층 프로토콜 역할 응용(7) HTTP/FTP/SSH/DNS 프로토콜을 응용 프로그램의 UI를 통해 제공 표현(6) SSL/FTP/IMAP/SSH 데이터를 표준화된 형식으로 변경 세션(5) Socket 세션의 유지 및 해제 등 응용 프로그램간 통신 제어와 동기화 수행 전송(4) TCP/UDP ..
스택은 가장 마지막에 들어간 데이터가 가장 첫 번째로 나오는 성질 (LIFO, 후입선출)을 가진 자료구조입니다. 반면에, 큐는 처음에 저장한 데이터를 가장 먼저 꺼내는 성질 (FIFO, 선입선출)을 가진 자료구조입니다. 스택은 바닥이 있고, 큐는 바닥이 없는 통이라고 생각하면 편합니다. 그렇다면 스택과 큐를 구현하기 위해서는 어떤 Collection을 사용하는 게 좋을까요? 순차적인 스택은 ArrayList와 같은 배열기반이 적합합니다. 반면에, 큐는 데이터를 꺼낼 때 항상 첫 번째 저장된 데이터를 삭제하므로 배열기반의 컬렉션 클래스를 사용한다면 데이터를 꺼낼 때마다 빈 공간을 채우기 위해 데이터의 복사가 발생하므로 비효율적입니다. 그렇기 때문에 데이터의 삽입/삭제가 효율적인 연결 리스트(LinkedLi..
배열은 데이터 접근시간이 가장 빠르다는 장점이 있지만 크키를 변경할 수 없고 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸립니다. 이러한 배열의 단점을 보완하는 자료구조가 연결 리스트(Linked List)입니다. 위 그림을 보면, 연결 리스트의 각 요소(node)들은 자신과 연결된 다음 요소에 대한 주솟값과 데이터로 구성되어 있습니다. 연결 리스트의 데이터 추가와 삭제 속도는 배열에 비해 빠릅니다. 새로운 데이터를 추가할 때는 새로운 요소를 생성한 다음 추가하고자 하는 위치의 이전 요소의 참조를 새로운 요소에 대한 참조로 변경해주고, 새로운 요소가 그 다음 요소를 참조하도록 변경하기만 하면 되므로 처리속도가 매우 빠릅니다. 데이터를 삭제할 때는 삭제하고자 하는 요소의 이전요소가 삭제하고자 하..
복잡도는 시간 복잡도와 공간 복잡도로 나뉜다. 시간 복잡도는 '문제를 해결하는 데 걸리는 시간과 입력의 함수 관계'를 의미하며, 어떠한 알고리즘의 로직이 구현되는 데 걸리는 시간을 나타내는데 쓰인다. 주로 빅오 표기법으로 나타낸다. 만일 O(n^2)의 시간 복잡도를 가지고 9초가 걸린다면, O(n)의 시간 복잡도를 가지는 알고리즘으로 개선하면 3초가 걸린다. 시간 복잡도의그래프를 보며 효율적으로 알고리즘을 개선할 수 있도록 지향해야 한다. 공간 복잡도는 프로그램을 실행시켰을 때 필요로 하는 자원 공간의 양을 의미한다. 즉 메모리 사용량을 의미한다.
SQL SQL 관계형 데이터베이스에서 사용하기 위해 설계된 언어입니다. 표준적인 SQL 명령어들이 있으며 이것은 모든 관계형 데이터베이스에 의하여 지원됩니다. SQL 명령어들은 두 가지의 카테고리로 나누어집니다. 1. 데이터 정의 명령어(Data Definitnion Language) 테이블을 생성하거나 변경합니다. 대표 명령어 : CREATE, ALTER, DROP, USE 2. 데이터 조작 명령어(Data Manipulation Language) 데이터를 추출, 추가, 삭제, 수정합니다. 대표 명령어 : SELECT, INSERT, DELETE, UPDATE SQL이 사용되는 분야 관계를 맺고 있는 데이터가 자주 변경되는 프로그램이나 변경될 여지가 없으며 명확한 스키마가 더 중요할 때 사용하면 좋다..