Computer Science 42

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.
Interpreter와 Compiler 인터프리터와 컴파일러는 둘 다 고급 프로그래밍 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 도구입니다. 그러나 이 두 가지 도구는 코드를 실행하는 방식과 처리 과정에서 차이가 있습니다. 인터프리터(Interpreter) 인터프리터는 소스 코드를 한 줄씩 읽고, 해석하며, 실행합니다. 즉, 코드를 기계어로 미리 변환하지 않고 실행 시점에 해석하는 방식입니다. 이로 인해 인터프리터는 디버깅이 쉽고 코드 수정이 빠르지만, 실행 속도가 상대적으로 느립니다. 파이썬, 루비, JavaScript 등이 인터프리터 언어의 예입니다. 컴파일러(Compiler) 컴파일러는 소스 코드를 전체를 읽어 분석한 후, 기계어로 변환하는 과정을 거칩니다. 이렇게 생성된 기계어로 된 실행 파일은 원래의 소스 코드와.. Computer Science/Programming 2023. 4. 21.
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.
Process & Thread Process Process란 메모리를 할당받아 컴퓨터에서 연속적으로 실행중인 Program이라고 할 수 있습니다. OS(Operating System)로부터 시스템 자원을 할당 받습니다. Process는 독립된 메모리 영역에 Code, Data, Stack, Heap 구조를 가지고 있습니다. Process는 최소 1개의 Thread를 가지고 있습니다. (Main Thread) Process가 다른 Process의 자원에 접근하려면 IPC와 같은 통신을 이용할 수 있습니다. Thread Process 내에서 실행되는 흐름의 단위를 의미합니다. Process로부터 자원을 할당 받습니다. Process 내에서 Stack만을 따로 할당받고 Code, Data, Heap 영역은 공유합니다. 공유 자원이 존재하기.. Computer Science/Programming 2023. 2. 7.
관찰자패턴 (Observer Pattern) 옵저버 패턴은 객체의 상태 변화를 관찰하는 옵저버를 객체에 등록하여 상태 변화가 있을때마다 notify를 통해 객체가 관찰자들에게 알림을 보내는 패턴을 말합니다. 쉽게 말해서 어떤 이벤트가 일어나는 것을 감시하는 패턴입니다. 옵저버 패턴을 활용하면 다른 객체의 상태 변화를 별도의 함수 호출 없이 즉각적으로 알 수 있습니다. 따라서 이벤트에 대한 처리를 자주 해야하는 프로그램이라면 매우 효율적일 수 있습니다. public class AppMain { /* * 예제의 설정 * 가장 보편적인 설정이라고 볼 수 있는 Youtuber와 Subscriber들의 관계로 예제를 설정하였습니다. * Youtuber가 새로운 영상을 올리거나, 공지를 등록하는 것을 모두 notify 함수로 개념을 통일하여서 작성하였습니다... Computer Science/Design Pattern 2023. 1. 29.
전략패턴 (Strategy Pattern) 특정한 계열 또는 행위를 Interface로 캡슐화하고 구체적으로 구현된 알고리즘을 상호 교체가 가능하도록 만드는 패턴입니다. 전략패턴을 사용하면 기능이 추가 또는 변경 되더라도 기존 클래스의 수정이 아닌 Interface의 구현을 통해 확장하여 해결 할 수 있어 OCP 원칙을 지킬 수 있습니다. Context는 전략을 실제로 사용하는 사용자의 입장입니다. 이때 A라는 상황에는 ConcreateStrategy1, B라는 상황에는 ConcreateStrategy2를 사용하도록 구성할 수 있습니다. public class AppMain { /* * 예제의 설정 * Android와 Ios Mobile 개발자가 있는데 각각 프로젝트에서 2가지 언어를 사용한다는 가정입니다. * 인스턴스가 개발자의 숫자를 의미하도.. Computer Science/Design Pattern 2023. 1. 29.
ArrayList Array의 단점을 해결한 것입니다. 미리 크기를 정해주지 않아도 됩니다. Array와 다르게 index는 단순히 몇번째의 데이터인지를 나타내는 역할입니다. 불연속적인 메모리 공간을 차지합니다. Array와 동일하게 데이터의 추가 삭제에 있어서 O(N)이라는 시간이 발생합니다. 장점 Array와 동일합니다. 동적으로 크기가 변경될 수 있습니다. 단점 Array와 동일합니다. 내부적으로 배열을 사용하기 때문에 배열이 꽉 차면 새로운 배열을 생성하고 옮기는 등의 오버헤드가 추가로 발생할 수 있습니다. Computer Science/Data Structure 2022. 10. 7.
Array (배열) 선형 자료구조의 한 종류로 동일한 자료형의 데이터를 연속적으로 저장하기 위한 자료구조입니다. 연속적인 메모리 공간에 순차적으로 데이터를 저장합니다. index와 value의 쌍으로 구성됩니다. 배열은 최초에 선얼할 때 크기를 설정하고 그 크기로 고정됩니다. 논리적 저장 순서와 물리적 저장 순서가 일치합니다. 이 순서에 대한 식별자가 index 입니다. 배열의 원소와 원소 사이에는 자료형의 크기만큼 메모리 공간의 차이가 존재합니다. int형 배열의 첫번째 원소의 주소가 0이라면 두번째 원소의 주소는 4입니다. (int의 자료형의 크기는 4Byte) short형 배열의 첫번째 원소의 주소가 0이라면 두번째 원소의 주소는 2입니다. (short의 자료형의 크기는 2Byte) index를 통해 배열의 요소에 직.. Computer Science/Data Structure 2022. 10. 7.
선형 자료구조 vs 비선형 자료구조 선형 자료구조 선형 자료구조란 하나의 자료 뒤에 하나의 자료가 존재하는 것 입니다. 자료들간의 앞 뒤 관계가 1:1의 선형 관계를 이룹니다. 배열, 리스트, 스택, 큐가 이에 해당됩니다. 비선형 자료구조 하나의 자료 뒤에 여러개의 자료가 존재할 수 있는 것 입니다. 자료들간의 앞 뒤 관계가 1:N 또는 N:M의 관계를 이룹니다. 트리, 그래프가 이에 해당됩니다. 참고자료 선형(Linear) / 비선형(NonLinear) 자료구조 Computer Science/Data Structure 2022. 10. 7.