분류 전체보기 135

Spring Mongo Transaction 적용기 Condition 회사에서 신규프로젝트 개발에 있어서 Mongo를 DB로 채택하였습니다. Local과 Dev에서 테스트 환경에서 Mongo를 Single Pod로 구성하였습니다. 4.0 버전부터 지원하는 Multi-Document Transaction을 적용하기 위해서 ReplicaSet 구성의 필요성을 느꼈습니다. Single Mongo Instance는 Transaction을 사용할 수 없습니다. 최소 3개의 ReplicaSet을 구성해야 합니다. 트랜잭션은 WiredTiger 스토리지 엔진에서만 지원됩니다. 그리고 MongoDB 4.0 이후의 버전에서는 WiredTiger가 기본 스토리지 엔진으로 사용됩니다. Authentication Failed. Issue Single Pod로 운영되던 Mong.. Computer Science/DataBase 2023. 9. 25.
컴퓨터와 OS의 기본적인 구조 (feat. 널널한 개발자 TV) Computer의 이해 컴퓨터는 크게 3가지 계층을 가진다고 이해하면 됩니다. User 계층 : User가 사용하는 환경을 의미합니다. Kernel 계층 : Kernel은 OS의 핵심적인 부분으로 H/W와 S/W간 통신을 담당합니다. H/W 계층 : 물리적인 구성요소를 의미합니다. H/W 계층은 실제로 Physical한 부분이고, 나머지 User와 Kernel은 Logical(Virtual)한 부분입니다. User와 Kernel 계층은 OS와 Platform으로 이루어져 있다고 할 수 있습니다. OS는 단순한 S/W이지만 User 계층에서 Application과 같은 Process가 잘 동작하도록 Support하고 H/W 구성요소를 관리하고 제어하는 역할을 합니다. OS를 이해하려면 H/W에 대한 일정 .. Computer Science/OS 2023. 6. 13.
Spring Security What is Spring Security? Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications. Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can.. Domain/Spring 2023. 5. 31.
ObserveOn(), SubscribeOn(), PublishOn() Reactive Programming에서 작업 스레드 관리는 보통 두가지 연산자를 사용하여 처리됩니다. 아래는 그 두 예시입니다. 또 대표적으로 사용되는 ReactiveX와 Reactor의 관점에서 보겠습니다. subscribeOn() ReactiveX의 관점에서의 SubscribeOn은 데이터를 생성하고, I/O 작업을 수행하는 스레드를 지정합니다. 즉, Observable을 실행할 스레드를 결정하는 메함수로 Observable이 Subscribe 되었을 때, 어떤 Thread에서 실행할지를 결정하는 역할을 합니다. 이를 통해, CPU 작업과 I/O 작업이 동시에 일어나는 비동기 처리를 가능케 합니다. 이때, 지정되는 Thread는 ReactiveX의 Schedulers에서 선택할 수 있습니다. Rea.. Domain/Reactive Programming 2023. 5. 12.
Hot vs Cold Reactive Programming에서는 Data Stream을 "Hot" 또는 "Cold"로 분류할 수 있습니다. 여기서 사용하는 Library에 따라 Observable(ReactiveX의 관점)과 Sequence(Reactor의 관점)로 용어가 나뉠 수 있습니다. 따라서 아래의 내용에서 Stream이라는 내용이 나온다면 Observable 또는 Sequence라고 이해하시면 될 것 같습니다. Cold Observable/Sequence 발행자(Publisher)가 구독자(Subscriber)가 등록될 때마다 데이터 스트림을 처음부터 다시 시작하는 방식으로 동작합니다. 이 스트림은 데이터를 새롭게 다시 발행할 수 있으며, 새로운 구독자가 등록될 때마다 데이터의 처음부터 끝까지 모든 항목을 발행합니다.. Domain/Reactive Programming 2023. 5. 12.
Reactive Programming? Reactive Programming은 시스템이 외부 이벤트에 적절하게 대응할 수 있도록 하는 프로그래밍 모델로, 이벤트나 데이터 변화에 반응하여 데이터 처리를 수행합니다. 이 때, 데이터 처리를 비동기적으로 수행하여 높은 성능과 확장성을 제공합니다. Reactive Programming은 이벤트 기반 아키텍처, 즉 마이크로서비스와 같은 분산 시스템에서 많이 사용됩니다. Reactive Programming은 이벤트 스트림을 처리하고, 이벤트 간의 의존성과 관계를 파악하여 다음에 수행할 작업을 예측할 수 있도록 합니다. 이를 통해 시스템의 반응성(Responsiveness)을 향상시키고, 시스템 전체의 성능을 개선할 수 있습니다. Reactive Programming은 비동기적으로 데이터를 처리하고 이벤.. Domain/Reactive Programming 2023. 5. 12.
Interpreter와 Compiler 인터프리터와 컴파일러는 둘 다 고급 프로그래밍 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 도구입니다. 그러나 이 두 가지 도구는 코드를 실행하는 방식과 처리 과정에서 차이가 있습니다. 인터프리터(Interpreter) 인터프리터는 소스 코드를 한 줄씩 읽고, 해석하며, 실행합니다. 즉, 코드를 기계어로 미리 변환하지 않고 실행 시점에 해석하는 방식입니다. 이로 인해 인터프리터는 디버깅이 쉽고 코드 수정이 빠르지만, 실행 속도가 상대적으로 느립니다. 파이썬, 루비, JavaScript 등이 인터프리터 언어의 예입니다. 컴파일러(Compiler) 컴파일러는 소스 코드를 전체를 읽어 분석한 후, 기계어로 변환하는 과정을 거칩니다. 이렇게 생성된 기계어로 된 실행 파일은 원래의 소스 코드와.. Computer Science/Programming 2023. 4. 21.
Rust로 by-pass 기능을 가진 Proxy Server 개발하기 특정 조건은 Rust에서 작업하고 그 조건을 제외한 로직은 proxy 서버 개념으로 Main Server로 by-pass하는 Route 로직을 구현해야하는 요구사항. 요구사항 application/json 형식의 Http 통신을 처리해야한다. form-data 형식의 Http 통신을 처리해야한다. Header의 모든 데이터를 포함해야 한다. Method와 Url은 모두 Dynamic하게 처리해야 한다. Solution Util로 Header 또는 Property에 해당되는 정보를 뽑아오는 함수를 개발한다. Util로 Main Server의 Response를 Client용으로 Convert 해주는 함수를 개발한다. Util로 Multipart Type인지 확인하는 함수를 개발한다. application/j.. Language/Rust 2023. 4. 20.
Rust ERROR: linker `cc` not found Cause Rust에는 링커가 없으므로 링커를 수행하려면 gcc 또는 make와 같은 컴파일러가 필요한데, 이 때 cc 컴파일러 프로그램을 찾을 수 없어서 에러가 발생합니다. Solution //Mac OS xcode-select --install //CentOS, RHEL sudo yum groupinstall "Development Tools" sudo yum install cmake make gcc -y //Ubuntu sudo apt install build-essential -y sudo apt install make gcc cmake -y Language/Rust 2023. 4. 7.
What is GraphQL 기존의 RESTFul API 생태계에서는 보통의 경우 Server와 Client의 통신이 있어서 Server에 Template하게 구현된 API에 맞게 특정 EndPoint를 Client가 호출하여 데이터를 가져옵니다. 원하는 결과를 얻기 위해서 한번 또는 그 이상의 API 통신을 통해 원하는 데이터 결과를 도출할 수 있습니다. 이는 성능에 부정적인 영향을 미칠 수 있는 Over-Fetch 또는 Under-Fetch로 이어질 수 있습니다. 이러한 한계를 극복하기 위해 등장한 것이 GraphQL입니다. GraphQL은 고객이 한 번의 요청으로 필요한 데이터만 요청할 수 있게 함으로써 이러한 한계를 극복하기 위해 개발되었습니다. 이는 사용 가능한 데이터와 작업을 정의하는 강력한 유형의 Schema와 Clie.. Computer Science/Programming 2023. 2. 16.