본문 바로가기

분류 전체보기

(100)
[JAVA] JDK21의 Virtual Thread Virtual Thread란 Project Loom의 일환으로 JDK21에서 release 된 Virtual Thread는 기존의 OS Thread와는 다르게 훨씬 더 적은 리소스를 소비한다. 기존 Java의 Thread는 OS Thread를 직접 사용하기에 수천 개 이상의 요청 처리 시 효율적이지 못했다. 그러나 경량 스레드 모델인 Virtual Thread의 등장으로 OS Thread를 그대로 사용하지 않고 JVM의 내부 스케줄링을 통해 다수의 스레드를 사용할 수 있게 하였다. 따라서 더 많은 요청처리가 가능해지고, 컨텍스트 스위칭 비용을 줄이며 성능을 높일 수 있었다. Project Loom has made it into the JDK through JEP 425. It’s available sin..
[Database] MongoDB 이해하기 MongoDB란 MongoDB는 NoSQL 데이터베이스로, Document-Oriented(문서 지향) 모델을 사용하는 오픈소스 데이터베이스 시스템이다. NoSQL 데이터베이스답게 동적으로 스키마 구성이 가능하고, 대용량의 데이터 처리 속도가 빠르며, 수평적 확장, 높은 가용성에 장점이 있다. Document 데이터베이스 Document란 필드와 값의 쌍으로 이루어진 데이터를 JSON과 같은 형식으로 저장한 문서를 뜻한다. 이러한 구조는 복잡한 관계형 데이터베이스의 테이블을 사용하지 않고도 데이터를 자연스럽게 표현할 수 있도록 한다.(실제 현실세계와 요구사항에 매우 유연하게 적용 가능) 관계를 갖는 데이터의 경우, 중첩 Document와 배열을 사용하여 1개의 Document로 표현이 가능하다. 또한 M..
[Database] NoSQL 이해하기 NoSQL이란? Non Relational Operation Database SQL의 줄임말로 관계형 데이터베이스가 아닌 SQL을 의미하였지만, SQL뿐만 아닌 여러 기능들도 부가적으로 지원한다는 Not Only SQL로 일반화되었다. 관계형 데이터베이스의 고정된 스키마 구조, 수평적 확장의 불가, 복잡한 조인 작업 등의 불편한 점들이 존재했다. 이러한 단점으로 인해 NoSQL이 등장하게 되었다. NoSQL 데이터베이스는 데이터 모델을 유연하게 변경할 수 있었고, 수평적 확장, 불필요한 Join을 최소화할 수 있다. 유연성 : 스키마 선언 없이 필드의 추가 및 삭제가 자유로운 Schema-less 구조 확장성 : Scale-Out에 의한 서버 확장 용이 고성능 : 빅데이터 처리에 특화. 대용량 데이터를 ..
[Nginx] Nginx란 Nginx란 웹 서버의 일종으로 Nginx는 웹 서비스, 리버스 프록시, 캐싱, 로드 밸런싱, 미디어 스트리밍 등을 위한 오픈소스 소프트웨어이다. 이벤트 기반 아키텍처로 적은 자원으로 빠른 처리가 가능하다. 간단히 웹서버와 웹 애플리케이션 서버에 대해 살펴보겠다. Web Server 웹 브라우저의 클라이언트로부터 HTTP 요청을 받아 정적인 콘텐츠를 제공(HTML, CSS, 사진) →Web Server선에서 처리 클라이언트가 동적인 콘텐츠 제공을 요청하면 WAS에게 그 요청을 전달한다. WAS에서 처리한 결과를 클라이언트에게 응답한다. 대표적인 웹서버로는 Apache, Nginx 등이 있다. WAS(Web Application Server) 클라이언트 요청에 대한 동적인 콘텐츠를 제공 DB 접근, 회원가..
[IPC] Inter Process Communication 지난 포스팅에서 프로세스, 스레드의 개념, 그리고 멀티 프로세스와 멀티 스레드의 개념에 대해 정리해 보았다. 멀티 프로세싱은 하나의 프로그램을 여러 개의 프로세스로 나누어 각각의 프로세스가 하나의 작업을 병렬적으로 처리하도록 하는 것이다. 하나의 작업을 하는 각각의 프로세스들은 메모리 공간이 독립되어 있어, 한 프로세스에서 문제가 생기더라도 다른 프로세스에 영향을 미치지 않는다. 그러나 데이터를 주고받거나, 서로 통신하기 위한 작업이 필요한데 이를 IPC(Inter Process Communication)이라고 한다. 오늘은 IPC의 종류와 특징에 대해 정리하려고 한다. 프로세스란 멀티프로세스 VS 멀티 스레드 Inter Process Communication 프로세스는 독립된 실행 객체로 다른 프로세스..
[Kafka] Kafka의 기본 개념 알아보기 지난 포스팅을 통해 메시지 큐의 기본 개념, 동작 원리에 대해 학습하였다. 메시지 큐는 Producer와 Consumer 간의 중간 매개체로서 데이터 교환을 도와주는 역할을 한다. 오늘은 메시지 큐와 같은 역할을 하는 오픈소스 중 하나인 Kafka에 대해 알아보고자 한다. 유튜브 데브원영 DVWY님의 아파치 카프카 강의를 보고 정리하였습니다. 카프카란? Kafka는 분산 데이터 스트리밍 플랫폼으로, 실시간으로 쌓이는 대량의 데이터 스트림을 안정적으로 처리하고 저장할 수 있도록 설계된 오픈소스 솔루션이다. 주로 대규모의 실시간 데이터 피드를 수집하고 다양한 소스와 대상 시스템 간에 데이터를 안정적으로 전달하는데 사용된다. Kafka는 링크드인에서 개발되어 2011년 오픈소스로 공개되었다. 이전에는 Rabb..
[JAVA] Record 스프링 프로젝트를 진행하며 레이어 간 통신을 위해 DTO, VO 등의 클래스를 만들어 사용했다. 데이터의 무결성을 유지하기 위해서는 필드의 타입을 final로 설정하고, public 생성자를 정의하며, equals hashCode의 함수를 재정의하는 등의 작업이 필요했다. 이런 작업은 반복되고 번거로워서 코드의 일관성을 유지하는 데 어려움을 겪었다. 그러나 자바 14부터는 데이터의 불변성을 강제할 수 있는 Record라는 새로운 타입이 등장하게 되었다. Record는 간결한 문법을 통해 필드를 정의하고, 불변성과 관련된 메서드들을 자동으로 생성해 주어, 개발자가 불필요한 코드 작업을 줄이고 데이터를 쉽게 다룰 수 있도록 도와준다. 이번 블로그를 통해 Record 타입에 대해 자세히 알아보려고 한다. ..
REDIS 1. Redis란 Redis는 오픈소스로 시스템 메모리를 사용하는 키-값 형태의 데이터 구조 저장소이다. In-Memory 상태에서 데이터를 처리하기 때문에 디스크에 접근하는 데이터베이스보다 빠르게 읽고 쓸 수 있다. 즉, 우리가 흔히 사용하는 관계형 데이터베이스(RDB), 문서형 데이터베이스(NoSQL) 보다 빠르고 가볍게 동작한다. Key-Value 구조이기 때문에 쿼리를 사용할 필요가 없다.(Key에 올 수 있는 자료형은 String, Value는 다양한 타입을 지원) 디스크가 아닌 메모리에서 데이터를 처리하기 때문에 빠른 속도로 처리 가능 String, List, Set, Hash, Sorted set, Stream, Geospatial index, Bitmap, Bitfield 등의 자료구조 지..