분류 전체보기 64

[JPA] N+1 문제

JPA 란 무엇인가에 대해, JPA 를 사용할 때 맞닥뜨릴 수 있는 N+1 문제에 대한 정리가 필요하여 글을 포스팅 한다. 1. JPA (Java Persistence API) - 개념 - Java ORM 기술에 대한 표준 명세로, Java 의 객체와 DB 를 매핑하는 인터페이스 역할 수행 2. N+1 문제 - 개념 - 요청이 1개의 쿼리로 처리 되기를 기대했는데, N개의 추가 쿼리가 발생하는 현상 - 발생 원인 - JPQL을 생성하여 실행할 때, 연관 관계 데이터를 무시하고 해당 Entity 기준으로 쿼리를 조회하기 때문 - 해결 방법 - 1) Fetch Join - 연관된 Entity 또는 Collection 을 한 번에 같이 조회하는 기능 - 연관된 Entity 까지 같이 영속성 컨텍스트에 올림 -..

IT/JPA 2023.05.21

[DataStructure] Queue vs Priority Queue

Queue 와 Priority Queue 의 특징에 대해 정리하고자 한다. 그리고 이와 관련된 Heap 구현에 대한 개념까지 같이 서술한다. 1. Queue - 시간 순서상 먼저 집어 넣은 데이터가 먼저 나오는 선입선출 FIFO (First In First Out) 구조로 저장하는 형식 - 시간 복잡도는 enqueue 시 O(1), dequeue 시 역시 O(1) 2. Priority Queue - 들어간 순서에 상관 없이 우선 순위가 높은 데이터가 먼저 나옴 - 시간 복잡도는 push 시 O(logn), pop 시 O(logn) - Heap 자료구조를 바탕으로 한 구현 방식 - Heap 은 완전 이진 트리 구조이며, 조건은 다음의 경우가 있다. - 1) 각 Node 에 저장된 값은 Child Node ..

IT/DataStructure 2023.05.20

[DataStructure] Array vs LinkedList

Array 와 LinkedList 간의 개념 비교를 카테고리 별로 하고자 한다. 1. 메모리 저장 - 1) Array - 연속성을 유지하기 위해 물리적 메모리 상에서 순차적으로 저장 - 2) LinkedList - 물리적인 메모리 상에서는 비연속적으로 저장이 되지만 Linked List 를 구성하는 각각의 Node가 다음 Node의 Address를 가리킴으로써 논리적인 연속성을 가진 자료구조 - Node 라는 구조체로 이루어져 있는데, Node는 데이터 값과 다음 Node의 address를 저장함 - 물리적 메모리 상에서 연속성을 유지하지 않아도 되기 때문에 메모리 사용이 비교적 자유로운 대신, Next Address를 추가적으로 저장해야 하기 때문에 데이터 하나당 차지하는 메모리가 더 커짐 - 데이터가..

IT/DataStructure 2023.05.20

[Algorithm] 정렬

정렬 알고리즘의 종류에 따라 개념 및 특징 정리를 하기 위해 글을 포스팅 한다. 1. 버블 정렬 - 인접한 두 개의 요소를 비교해 가면서 정렬을 진행하는 방식 - 장점) 구현이 매우 간단함 - 단점) 순서에 맞지 않는 요소들의 교환이 자주 일어남 - 시간 복잡도 - 최악의 경우, O(n^2) - 평균, O(n^2) - 최선의 경우, O(n) 2. 선택 정렬 - 전체 범위에서 차례대로 가장 작은 숫자를 탐색하고, 가장 왼쪽부터 차례대로 교환하는 방식 - 장점) 자료 이동 횟수가 미리 결정 - 단점) 값이 같은 요소가 있다면 상대적인 위치가 변경될 수 있음 - 시간 복잡도 - 최악의 경우, 평균, 최선의 경우 모두 O(n^2) 3. 삽입 정렬 - 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교..

IT/Algorithm 2023.05.17

[CS] Web Socket

Web Socket 에 대한 정리가 필요하여 글을 포스팅 한다. 1. 정의 - TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜 로써, 두 프로그램 간의 메시지를 교환하기 위한 통신 방법 중 하나 2. 특징 - 양방향 통신 (Full-Duplex) - 데이터 송수신을 동시에 처리할 수 있는 통신 방법 - 클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있음 - 통상적인 HTTP 통신은 Client 가 요청을 보내는 경우에만 Server 가 응답하는 단방향 통신 - 실시간 네트워킹 (Real Time-Networking) - 웹 환경에서 연속된 데이터를 빠르게 노출 - Ex) 채팅, 주식, 비디오 데이터 - 여러 단말기에 빠르게 데이터를 교환 - 최초 접속 에서만 HTTP 프로토..

IT/CS 2023.05.16

[CS] TCP vs UDP

통신 프로토콜 중 TCP 와 UDP 의 개념을 정리, 비교하기 위하여 글을 쓴다. 1. TCP (Transmission Control Protocol) - 연결형, 신뢰성 전송 프로토콜 - 연결 지향적 서비스를 제공하기 위해 데이터를 전송하기 전에 3-way handshaking 을 하여 두 호스트의 전송 계층 사이에 논리적 연결을 설립 - 신뢰성 있는 서비스를 제공하기 위하여 오류제어, 흐름제어, 혼잡제어 등을 실행 - 신뢰성을 보장하기 위해 header 가 더 크고 속도가 비교적 느림 - 신뢰성이 중요한 통신(HTTP, File 전송 등)에 사용 2. UDP (User Datagram Protocol) - 비연결형 프로토콜로 3-way handshaking 등의 세션 수립 과정이 없음 - 비신뢰성 프..

IT/CS 2023.05.15

[CS] Hash Table

Hash Table 에 대한 개념 정리를 위해 포스팅 한다. 1. 정의 - 효율적인 탐색(빠른 탐색)을 위한 자료구조로써 key-value 쌍의 데이터를 입력 받고 Hash Function h에 key 값을 입력으로 넣어 얻은 해시값 h(k)을 위치로 지정하여 key-value 데이터 쌍을 저장 2. 특징 - Collision 발생 가능성 존재 - 서로 다른 key의 해시값이 존재할 때 발생 - Collision 이 발생하는 경우, Open Addressing 또는 Separate Chaining 등의 방법을 통해 해결 - Open Addressing (개방 주소 방법) - Collision 이 발생하면 미리 정한 규칙에 따라 Hash Table 의 비어 있는 slot 을 찾음, 메모리를 적게 사용 - ..

IT/CS 2023.05.14

[CS] Index

DB 를 사용할 때 자주 고려해야 할 Index 의 개념을 일목요연하게 정리하기 위해 글을 쓴다. 1. 정의 - RDBMS(관계형 데이터베이스 관리 시스템) 에서 테이블에 대한 검색 속도를 높여주는 자료 구조로, 테이블 내에 1개 이상의 컬럼을 이용하여 생성 2. 특징 - 검색 속도를 향상하는 장점을 가지지만, 정렬된 상태를 유지하기 때문에 insert, update, delete 과정에는 상대적으로 속도가 저하되는 단점을 가짐 - 따라서, 데이터 갱신 보다는 조회에 사용되는 컬럼에 사용하는 것이 합리적 - Cardinality 가 높은 칼럼에 적용하는 것이 좋음 - Cardinality 가 높은 것은 중복도가 낮은 것을 의미 - Cardinality 가 낮은 것은 중복도가 높은 것을 의미 - B+tre..

IT/CS 2023.05.13

[CS] OSI 7 Layer

OSI 7 Layer 에 대한 개념 정리를 위해 포스팅 한다. 1. 정의 - 국제 표준화 기구(ISO) 에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것 2. 각 계층의 기능 계층 1. 물리 계층 물리적으로 연결된 두 대의 컴퓨터가 데이터를 송수신 할 수 있게 해주는 기능 수행 계층 2. 데이터 링크 계층 같은 네트워크에 있는 컴퓨터들이 데이터를 주고 받게 해주는 기능 수행 MAC - 물리적 주소 계층 3. 네트워크 계층 IP 주소를 활용해 서로 다른 네트워크에 속한 컴퓨터 간에 데이터를 주고 받게 해주는 기능 수행 주소 부여 (IP) 경로 설정 (Route) 계층 4. 전송 계층 양 끝단 (End to End)의 사용자들이 서로 데이터를 주고 받게 해주는 기능 수..

IT/CS 2023.05.10

[CS] Multi-Process vs Multi-Thread

멀티 프로세스와 멀티 스레드에 대한 개념 정리를 위해 포스팅 한다. 0. Process 와 Thread 란? - Process 운영체제 로부터 시스템 자원을 할당 받는 작업의 단위 Code, Data, Stack, Heap 의 메모리 영역 구성 - Thread Process 내에서 실행되는 작업의 단위 CPU 이용의 기본 단위 Code, Data, Heap 영역 공유 각 Thread 는 별도의 Stack 영역을 가짐 1. Multi-Process - 개념 2개 이상의 프로세스가 동시에 실행되는 것, 이 때 프로세스 들은 CPU 와 메모리를 공유함 여러 프로세스가 동시에 메모리에 적재된 경우, 각 프로세스가 자신의 메모리 영역에만 접근하도록 운영체제가 관리 2. Multi-Thread - 개념 하나의 프로..

IT/CS 2023.05.07