IT 55

[Spring] Spring IoC Container

Spring IoC Container 의 개념에 대한 정리를 하고자 글을 쓴다. 1. Spring IoC Container 의 역할 - Spring Framework 에서 객체를 생성하고 관리하고 책임지고 의존성을 관리 해주는 컨테이너 - IoC (Inversion of Control, 제어의 역전) - 개념 - 객체의 생성, 생명 주기의 관리 등 모든 객체에 대한 제어권이 내부에서 외부로 역전 - 사용 이유 - 역할과 관심을 분리해 응집도를 높이고 결합도를 낮추며, 이에 따라 변경에 유연한 코드를 작성할 수 있는 구조를 만들어 객체 지향 원칙을 잘 지킬 수 있기 때문 - DI (Dependency Injection) 개념과의 비교 - DI 는 의존 방향의 역전을 의미 - 고수준 모듈이 저수준 모듈에 의..

IT/Spring 2023.05.21

[Java] JVM의 Garbage Collector

JVM 및 Garbage Collector 개념에 대한 정리를 하고자 한다. 1. JVM (Java Virtual Machine) 이란? - 운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램 2. Garbage Collector 란? - 동적으로 할당된 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능 - 이를 온전히 이해하기 위해, 메모리의 구조 중 Stack 영역과 Heap 영역에 대해 알아야 한다. - Stack 영역 - 정적으로 할당된 메모리 영역 - 원시 타입의 데이터가 값과 함께 할당 - Heap 영역에 생성된 Object 타입의 데이터의 참조 값 할당 - Heap 영역 - 동적으로 할당된 메모리 영역 - 모든 Object 타입의 데이터가 할당 - Heap 영역의 Obje..

IT/Java 2023.05.21

[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