분류 전체보기 107

[MongoDB] MQL 기초 5 - 배열과 내장 Document를 다루는 방법 2 (Update)

❑ 공통 데이터 Insertdb.students.insertMany([ {_id: 1, grades: [85, 80, 80]}, {_id: 2, grades: [88, 90, 92]}, {_id: 3, grades: [85, 100, 90]}]) ❑ 배열의 값 변경하기 : $set[참고] $ : Positioning Operator 1. Array.$ : 배열 내 조건과 일치하는 첫 번째 element에 적용1.1. 배열 Element가 Value일 때 UpdateAS-IS){ _id: 1, grades: [85, 80, 80]}MQL)db.students.updateOne( { _id: 1, grades: 80 }, { $set: { "grades.$": 82 } })_id:1 이고, grades 배..

Back-End/MongoDB 2024.05.31

[MongoDB] MQL 기초 4 - 배열과 내장 Document를 다루는 방법 1 (Read)

1. 내장 Document 조회 (Inner Document)내장 Document는 Document 안에 필드가 Document인 것을 말한다.예시db.sales.findOne() 조회 결과{ ... customer : { gender:'M', age: 50, email:'hello@naver.com', satisfaction:5 } ...}Document를 조회한 결과 customer 필드는 Document를 갖고 있다. 이를 내장 Document라고 한다 조회방법 1. 내장 Document 전체를 filter로 적용내장 Document를 조회할 땐 filter에 해당 Document를 전부 명시해줘야 한다즉, 위의 customer를 조회하려면 다음과 같이 MQL을 써야한다.db.sales.findOn..

Back-End/MongoDB 2024.05.31

[MongoDB] MQL 기초 3 - 유용한 CRUD 쿼리 함수

1. Collection Method공식 DocumentCollection Methods Collection Methods - MongoDB Manual v7.0For details on a specific method, including syntax and examples, click on the link to the method's reference page.www.mongodb.com공식 Document에 아래에 소개한 쿼리 함수 외에도 find(), findOne() 같은 기본적인 함수부터 다양한 함수들이 소개되어 있다.생각보다 읽기 어렵지 않고, 가장 정확한 내용이므로 공식 문서를 보면서 익히는 연습을 하자 db.collection.bulkWrite()여러 개의 insert, update, de..

Back-End/MongoDB 2024.05.31

[MongoDB] SQL vs MQL 비교 문서

MQL = MongoDB Query LanguageMQL은 개발 언어처럼 함수 형태로 작성한다예: db.collection.find({}); SQL과 MQL 비교기본적인 것만 바로 참고할 수 있게 캡처함. 더 자세한 내용은 문서 들어가서 참고하기https://www.mongodb.com/docs/v7.0/reference/sql-comparison/ SQL to MongoDB Mapping Chart - MongoDB Manual v7.0In addition to the charts that follow, you might want to consider the Frequently Asked Questions section for a selection of common questions about Mong..

Back-End/MongoDB 2024.05.31

[MongoDB] Replica Set Local에 구축하기

1. Mongodb 커뮤니티 버전 설치1.1. 다운로드, 설치MongoDB: 애플리케이션 데이터 플랫폼 MongoDB: 개발자 데이터 플랫폼업계 최고의 최신 데이터베이스를 토대로 구축된 개발자 데이터 플랫폼을 사용해 아이디어를 더욱 빠르게 실현하세요. 공통 쿼리 인터페이스와 개발자들이 원하는 데이터 모델을 사용하는 동www.mongodb.com    제품 > 커뮤니티 에디션 클릭 Select package 클릭  다운로드 mongodb-macos-aarch64-7.0.6.tgz 파일을 압축 해제하면 MongoDB 설치가 된 것이다  1.2. 기본 세팅적절한 위치에 다음 폴더들을 생성한다mongodbmongodb/data : mongodb 인스턴스가 데이터를 저장시킬 위치mongodb/log : mongo..

Back-End/MongoDB 2024.05.31

[Java] JavaFX WebView에서 Axios, fetch 사용시 서버로 Body를 전달하지 못하는 문제

1. Trouble Java8의 JVM 환경에서 동작하는 JavaFX의 WebView에서는 Axios, fetch, Ajax 등의 기능을 제한적으로만 사용할 수 있어 Http Body를 넣을 수 없다 2. Root cause JavaFX의 WebView에서 제공하는 javascript 런타임 엔진은 JVM에 있다. 그리고 java 8버전의 javascript 런타임 엔진은 'Nashorn'이다. 문제는, Nashorn은 순수한 ES5.1 스펙(ECMAScript)을 구현한 순수 javascript 엔진이라는 점이다. 그렇기 때문에 Axios (ES6에 도입된 Promise 기반), fetch (ES6부터 내장 라이브러리), Ajax(XMLHttpRequest 기반이며 순수 javascript가 아님) 셋..

Back-End/Java 2023.03.28

[Java] lombok의 @Builder 사용시 필수 필드를 입력하게 하는 방법

Lombok의 @Builder를 사용해 빌더 패턴을 구현할 때, 특정 필드를 반드시 입력하도록 하는 필수 필드로 만들 수 있다. 방법1. @NonNull 애너테이션 사용하기 import lombok.Builder; import lombok.NonNull; @Builder public class Person { @NonNull private String name; @NonNull private Integer age; private String address; } 위의 코드에서 name과 age 필드는 @NonNull 애너테이션이 붙어 있기 때문에 필수 필드가 된다 따라서 Person.builder()를 호출할 때 이러한 필드를 지정하지 않으면 컴파일 오류가 발생함 Person.builder() .addre..

Back-End/Java 2023.03.14

[JavaScript] 객체를 병합하는 세 가지 방법 (Object merge)

1. Object.assign() 메서드 const object1 = {a: 1, b: 2}; const object2 = {c: 3, d: 4}; const mergedObject = Object.assign({}, object1, object2); console.log(mergedObject); // Output: {a: 1, b: 2, c: 3, d: 4} Object.assign() 메서드는 JavaScript에서 두 개의 객체를 병합하는 가장 간단한 방법이다. 두 개 이상의 객체를 인수로 전달하면, 모든 객체의 속성을 결합한 새 객체가 생성된다. 2. Spread operator '...' const object1 = {a: 1, b: 2}; const object2 = {c: 3, d: 4};..

[Design Pattern] 변하는 코드 분리(2) Strategy Pattern

❑ 패턴 소개 1) GoF 패턴 분류 행위 패턴(Behavioral Pattern) [참고] GoF Patterns 더보기 생성 패턴 구조 패턴 행위 패턴 - 객체를 생성하는 것과 관련된 패턴 - 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하고 코드의 유연성을 높임 - 큰 구조를 형성하기 위해 클래스, 객체들을 어떻게 구성하고 합성할지 정하는데 활용할수 있는 패턴화한 것 - 복잡한 구조의 개발과 유지보수를 쉽게 만듦 - 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것 ❑ Factory Method ❑ Abstract Factory ❑ Builder ❑ Prototype ❑ Singleton ❑ Adapter ❑ Bridge ❑ Composite ❑ Decorator ❑ Facade ❑ F..

Design Pattern 2022.11.21

[Design Pattern] 변하는 코드 분리(1) Template Method

❑ 패턴 소개 1) GoF 패턴 분류 행위 패턴(Behavioral Pattern) [참고] GoF's Patterns 더보기 생성 패턴 구조 패턴 행위 패턴 - 객체를 생성하는 것과 관련된 패턴 - 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하고 코드의 유연성을 높임 - 큰 구조를 형성하기 위해 클래스, 객체들을 어떻게 구성하고 합성할지 정하는데 활용할수 있는 패턴화한 것 - 복잡한 구조의 개발과 유지보수를 쉽게 만듦 - 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것 ❑ Factory Method ❑ Abstract Factory ❑ Builder ❑ Prototype ❑ Singleton ❑ Adapter ❑ Bridge ❑ Composite ❑ Decorator ❑ Facade ❑..

Design Pattern 2022.11.16

[Docker] 도커파일(Dockerfile)을 이용한 이미지 생성(build) 방법

❑ 도커파일(Dockerfile)을 이용한 이미지 생성(build) 방법 1. Full Grammar $ docker build -f -t : Dockerfile은 이미지를 생성하기 위한 명세서로 일종의 레시피와 같은 것이다. 완성된 Dockerfile과 docker build 명령어를 이용해 이미지를 생성할 수 있다. Dockerfile을 이용해 이미지를 생성할 땐 아래 세 가지가 필요하다. -f -f 옵션을 이용해 Dockerfile의 위치를 설정한다(호스트 시스템에서의 위치). context 경로에 Dockerfile이 존재할 경우 생략할 수 있는데, 이 경우 반드시 파일명이 'Dockerfile'이어야 한다(확장자 없음). -t : -t 옵션을 이용해 이미지 명과 태그를 설정한다(태그 미설정시 l..

카테고리 없음 2022.10.04

[Kafka] 기초3 - 컨슈머 기본 동작과 예시

❑ 컨슈머의 기본 동작 컨슈머는 프로듀서가 카프카의 토픽으로 전송한 메시지를 가져오는 역할을 한다. 단순히 메시지만 가져오는 것으로 보일 수 있으나, 내부적으로는 컨슈머 그룹, 리밸런싱 등의 동작을 수행한다. 컨슈머 그룹(Consumer Group) 컨슈머 그룹은 하나 이상의 컨슈머들이 모여 있는 그룹을 의미하고, 컨슈머는 반드시 컨슈머 그룹에 속하게 된다. 그룹 내의 컨슈머들은 서로의 정보를 공유한다. 예를 들어, 특정 컨슈머에 문제가 생겨 종료된다면, 그룹 내 다른 컨슈머가 대신해 토픽의 파티션을 컨슘한다. 컨슈머 그룹은 파티션의 리더에게 토픽에 저장된 메시지를 가져오기 위한 요청을 보낸다. 필수는 아니지만, 파티션 수와 한 그룹 안의 컨슈머 수는 1:1 매핑이 이상적이다. 단, '파티션 수 < 컨슈..

Back-End/Kafka 2022.08.23

[Kafka] 기초2 - 프로듀서 기본 동작과 예시

❑ 프로듀서 디자인 프로듀서는 카프카의 토픽으로 메시지를 전송하는 역할을 담당한다. 프로듀서를 설정할 수 있는 여러가지 옵션이 있으므로 원하는 조건으로 메시지를 보내기 위해선 옵션을 적절히 사용할 수 있어야한다. 레코드(ProducerRecord) 레코드는 카프카로 전송하기 위한 실제 데이터이며, 토픽(Topic), 파티션(Partition), 키(Key), 밸류(Value)으로 구성된다. 토픽과 밸류(메시지 내용)는 필수 값이다. 파티션(특정 파티션을 지정), 키(특정 파티션에 레코드를 정렬)은 선택 옵션이다. 시리얼라이저(Serializer) 레코드의 키와 밸류를 Byte Array로 변환시킨다. 파티셔너(Partitioner) 레코드들은 프로듀서의 send() 메시지를 통해 시리얼라이저와 파티셔너를..

Back-End/Kafka 2022.08.11