목록CS (50)
GiYeong

Process 운영체제로부터 자원을 할당받은 작업의 단위(메모리에 올라와 실행되고있는 프로그램의 인스턴스) 특징 프로세스를 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다. 프로세스는 최소 1개의 스레드(메인 스레드)를 가지고 있다. 각 프로세스는 별도의 주소 공간에서 실행되며, 다른 프로세스의 변수나 자료구조에 접근할 수 없다. 다른 프로세스의 자원에 접근하려면 프로세스 간 통신을 사용해야 한다. Thread 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 특징 스레드는 프로세스 내에서 각각 Stack 영역만 할당 받고, Code, Data, Heap 영역은 공유한다. 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 ..

JPA(Java Persistence API) 현재 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음이다. JPA의 동작 과정 JPA는 어플리케이션과 JDBC 가이에서 동작한다. 개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하고, DB와 통신한다. 즉, 개발자가 직접 JDBC API를 사용하지 않는다. 저장 과정 MemberDAO에서 객체를 저장하고 싶은 경우 1. JPA에 Member 객체를 넘긴다. 2. JPA에서 Member 엔티티를 분석한다. 3. JPA에서 SQL을 생성한다. 4. JPA에서 JDBC API를 사용해서 SQL을 DB에 날린다. 조회 과정 Member 객체를 조회하고 싶은 경우 1. JPA에 member의 pk 값을 넘신다. 2. JPA에..

ORM(Object-Relational Mapping, 객체 관계 매핑) ORM이란 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 이를 통해 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하기 때문에 불일치가 존재하는데, ORM이 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다. ORM의 장점 1. 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있도록 해준다. ORM을 통해 SQL Query가 아닌 직관적인 코드(메서드)로 데이터를 조작할 수 있기 때문에 개발자가 객체 모델로 프로그래밍하는데 집중할 수 있도록 도와준..

Tree 트리는 비선형 구조로서, 원소들 간에 1:n 관계를 가지고 계층 관계를 가지는 자료구조이다. 상위 원소에서 하위 원소로 내려가면서 확장되는 나무 모양을 하고있다. 용어 루트 노드(root node): 부모가 없는 노드, 트리는 하나의 루트 노드만을 가진다. 단말 노드(leaf node): 자식이 없는 노드, ‘말단 노드’ 라고도 부른다. 내부(internal) 노드: 단말 노드가 아닌 노드 간선(edge): 노드를 연결하는 선 (link, branch 라고도 부름) 형제(sibling): 같은 부모를 가지는 노드 노드의 크기(size): 자신을 포함한 모든 자식 노드의 개수 노드의 깊이(depth): 루트에서 어떤 노드에 도달하기 위해 거쳐야 하는 간선의 수 노드의 레벨(level): 트리의 특..

Heap 특정 연산을 빠르게 수행하기 위한 완전 이진 트리(Complete Binary Tree) 자료 구조로서, 여러 값(node) 중 최대값/최소값을 찾는 연산이 빠르다. Max Heap(최대 힙) 값이 가장 큰 노드를 찾기 위한 완전 이진 트리로서 부모 노드의 값이 자식 노드의 값보다 크다. 따라서 루트 노드는 가장 큰 값을 가지게 된다. Min Heap(최소 힙) 값이 가장 작은 노드를 찾기 위한 완전 이진 트리로서 부모 노드의 값이 자식 노드의 값보다 작다. 따라서 루트 노드는 가장 작은 값을 가지게 된다. Priority Queue(우선순위 큐) 먼저 들어오는 데이터가 먼저 나가는 형태가 아닌, 우선순위가 높은 데이터가 먼저 나가는 형태의 자료구조이다. 일반적으로 Heap을 사용하여 구현한다...

Stack 가장 마지막에 삽입(PUSH)된 데이터가 가장 먼저 삭제(POP)되는 자료구조이다. 즉, 후입선출(LIFO, Last In First Out) 방식의 자료구조이다. 비어있는 Stack에서 데이터를 POP 하는 경우를 'stack underflow', Stack이 꽉 찬 상태에서 데이터를 PUSH 하는 경우를 'stack overflow'라고 한다. 활용예시 웹 브라우저 방문기록(뒤로가기) 역순 문자열 만들기 실행 취소(undo) 후위 표기법 계산 수식의 괄호 검사 Queue 가장 먼저 삽입(OFFER)된 데이터가 가장 먼저 삭제(POLL)되는 자료구조이다. 즉, 선입선출(FIFO, First InFirst Out) 방식의 자료구조이다. 삭제연산이 수행되는 곳을 front, 삽입연산이 수행되는 ..

Hash Function(해시 함수) 데이터의 효율적인 관리를 목적으로 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다. 매핑 전 기존 데이터의 값을 Key, 매핑 후 데이터 값을 Hash Value(해시 값), 매핑하는 과정을 Hashing이라고 한다. Hashing(해싱) 임의의 길이의 값을 해시 함수(Hash Function)을 사용하여 고정된 크기의 값으로 변환하는 작업 Hash Table(해시 테이블) Hashing을 사용하여 데이터를 저장하는 자료구조를 Hash Table이라고 하며, 이는 기존의 자료구조인 이진탐색트리나 배열에 비해서 굉장히 빠른 속도로 탐색, 삽입, 삭제가 가능하다. 즉, Hash Function을 사용하여 변환한 값(Hash Value)를 index로 사용..

Array Linked List 저장방식 요소들이 인접한 메모리 위치에 저장된다. 요소들이 메모리 어딘가에 저장되며, 새로운 요소의 주소는 Linked List의 이전 노드(Node)에 저장된다. 종류 일차원배열, 이차원배열, 다차원배열 단일 연결 리스트(Singly Linked List), 이중 연결 리스트(Doubly Linked List), 다중 연결 리스트(Multiply Linked List), 원형 연결 리스트(Circular Linked List) 크기 Array의 크기는 반드시 배열 선언 시점에 지정되어야 한다. LinkedList의 크기는 새로운 요소가 추가될 때, runtime 시점에서 크기가 커질 수 있다. 메모리 할당 Array가 선언되자마자 Compile 시점에 Heap 영역에 메..

시간복잡도(Time Complexity)는 알고리즘의 효율성을 판단하기 위한 지표로서, 프로그램 수행에 걸리는 절대적 시간이 나닌 알고리즘을 수행하는데 사용되는 연산들이 몇 번 이루어지는가에 대한 것을 상대적 지표로 나타낸 것이다. 시간복잡도에 사용되는 표기법은 Big-O(상한 점근, 최악의 경우를 나타낸다.), Big-Omega(하한 점근, 최선의 경우를 나타낸다.), Theta(그 둘의 평균)가 있다. 가장 자주 사용되는 표기법은 Big-O 표기법으로, 최악의 경우를 고려한다. 즉, '최소한 특정 시간 이상이 걸린다'가 아닌 '이정도 시간까지 걸릴 수 있다'를 고려한다. Heap의 시간복잡도 정렬의 시간복잡도 자료구조의 시간복잡도

TCP/IP (Transmission Control Protocol / Internet Protocol) 수많은 프로그램들이 인터넷으로 통신하는데 있어 가장 기반이 되는 프로토콜이다. 대부분의 데이터 통신이 TCP와 IP 기반으로 이루어져있기에 인터넷 프로토콜을 대표하는 용어로 사용된다. 이를 이용해서 컴퓨터를 연결하는 체계를 Ethernet(이더넷)이라고 부른다. 계층 역할 데이터 단위 전송 주소 예시 장비 응용 계층 어플리케이션 간의 데이터 송수신 Data/Message - 파일 전송, 이메일, FTP, HTTP, SSH 등 - 전송 계층 호스트 간의 자료 송수신 Segment Port TCP, UDP, RTP, RTCP 등 게이트웨이 인터넷 계층 데이터 전송을 위한 논리적 주소 지정 및 경로 지정 ..