분류 전체보기 150

[Modern C++20] 🚀주요 특징 & 설명

✅ 1. Concepts – 템플릿 타입 제약templateconcept Addable = requires(T a, T b) { { a + b } -> std::convertible_to;};templateT add(T a, T b) { return a + b; }템플릿에 조건을 부여할 수 있음컴파일 에러가 명확해짐, 가독성 증가enable_if, SFINAE 대체 가능✅ 2. Modules – 헤더보다 더 나은 코드 구성// math.ixxexport module math;export int add(int a, int b);// main.cppimport math;#include 대신 import컴파일 속도↑, 중복 include 문제 해결대규모 프로젝트에서 효과적✅ 3. Coroutines – ..

[opensearch] #0 failed to flush the buffer.

org.opensearch.action.search.SearchPhaseExecutionException: all shards failed은 OpenSearch에서 검색 쿼리를 수행했지만, 모든 샤드가 실패해서 결과를 반환할 수 없었다는 뜻이에요.💥 주요 원인 정리원인설명❌ 인덱스 손상일부 샤드가 손상되어 쿼리를 처리할 수 없음🛑 매핑 오류필드 타입 불일치 등으로 쿼리 실행 중 예외 발생🔒 샤드 비정상샤드가 UNASSIGNED 상태일 수 있음🔍 잘못된 쿼리잘못된 필드명이나 DSL 오류⛔ 리소스 문제디스크 부족, 노드 다운, 클러스터 헬스 red 등✅ 해결 절차1. 클러스터 상태 확인curl -X GET http://localhost:9200/_cluster/health?pretty확인할 것:"st..

[Modern C++20] coroutine

🌀 코루틴(Coroutine)이란?"함수를 중간에 멈췄다가, 나중에 다시 이어서 실행할 수 있는 함수"즉, co_await, co_yield, co_return 같은 키워드를 통해비동기 흐름이나 게으른 계산을 간단하게 표현할 수 있게 해주는 기능🔍 왜 코루틴을 쓰는 걸까?콜백 지옥 없이 비동기 코드를 쉽게 표현 가능 (비동기 흐름을 ‘선형’ 코드처럼 표현할 수 있는)지연 평가(lazy evaluation) 처리 가능 (ex. 제너레이터)상태 머신을 코루틴 하나로 표현 가능✨ 간단 예제 1: co_yield 제너레이터#include #include #include // GCC에서 또는 라이브러리 필요std::generator count_to_3() { co_yield 1; co_yield..

[Modern C++20] concept

🧠 concept란?C++ 템플릿에 제약 조건(조건식)을 줄 수 있는 문법📌 “이 타입은 이런 행동을 할 수 있어야 템플릿에 넣을 수 있다”✅ 안 되면 컴파일 에러를 깔끔하게 내줌 (더 이상 무시무시한 템플릿 에러 아님!)🧩 예시 없이 설명 못 하지!#include #include template concept Addable = requires(T a, T b) { { a + b } -> std::convertible_to;};template T add(T a, T b) { return a + b;}int main() { std::cout 🔍 위 예제 해석:Addable은 concept 이름requires(...) 안에 조건이 있음T 타입은 + 연산이 가능해야 하고결과도 T로 변환..

Go의 "경량 스레드"란?

🧵 Go의 "경량 스레드"란?Go에서는 스레드(thread) 대신에 **고루틴(goroutine)**이라는 걸 써.이 고루틴은 OS 스레드보다 훨씬 가볍고, 수천수백만 개도 동시에 쓸 수 있어!👉 한마디로?고루틴은 Go가 만든 엄청 가벼운 "경량 스레드"📌 고루틴(goroutine)의 특징특징설명✅ 가볍다시작 시 스택 크기가 약 2KB (필요 시 자동 증가)✅ 수십만 개 생성 가능OS 스레드에 비해 매우 적은 자원 사용✅ OS 스레드와 매핑 아님Go 런타임이 직접 스케줄링함✅ 빠르게 생성/종료고루틴은 함수를 go 키워드로 호출하면 바로 생성됨📦 예제 코드package mainimport ( "fmt" "time")func sayHello() { fmt.Println("Hello f..

프로그래밍/Go 2025.04.04

시스템콜(System Call) 이란?

✅ 1. 시스템 콜이란?**시스템 콜(System Call)**은사용자 프로그램(유저 모드)에서 운영체제의 기능(커널 모드)을 요청하기 위해 사용하는 인터페이스입니다.📌 즉,"운영체제에 뭔가를 해달라고 요청하는 함수 호출"예: 파일 열기, 메모리 할당, 네트워크 사용, 프로세스 생성 등✅ 2. 왜 시스템 콜이 필요한가?일반 프로그램은 직접 하드웨어를 제어할 수 없음 (보안, 안정성 문제)하드웨어 접근은 운영체제를 통해서만 가능따라서 운영체제가 제공하는 함수들(시스템 콜)을 통해 우회 접근해야 함📌 예를 들어:int fd = open("file.txt", O_RDONLY); // 파일 열기 요청 (시스템 콜)이 함수는 내부적으로 커널에게 "이 파일 좀 열어줘"라고 요청하는 것임✅ 3. 시스템 콜의 구..

프로그래밍 2025.04.04

[Modern C++] string_view

✅ 1. std::string_view란?C++17에서 도입된 std::string_view는 문자열을 복사하지 않고 참조하는 경량 래퍼입니다.기존의 std::string과 const char*의 단점을 보완하며, 문자열을 더 효율적으로 처리할 수 있습니다.📌 주요 특징:✔ 문자열을 복사하지 않고 참조 → 빠르고 메모리 절약✔ std::string, "문자열 리터럴", char* 등과 함께 사용 가능✔ 읽기 전용 (mutable X)📌 기본 문법:#include #include void print(std::string_view sv) { // 복사 없이 문자열 참조 std::cout ✅ 2. std::string vs. std::string_view 차이점 비교 항목 std::string ..

[Modern C++20] 삼중 비교 연산자(Three-Way Comparison)

🔹 C++20 삼중 비교 연산자 (Three-Way Comparison, )✅ 1. 삼중 비교 연산자 ()란?C++20에서는 새로운 삼중 비교 연산자(Three-Way Comparison Operator) 인 (일명 "우주선 연산자"라고도 불림)가 도입되었습니다.이 연산자는 두 값을 비교하고 순서를 결정하는 통합 연산자로, 기존 ==, , = 연산자를 하나로 통합하는 역할을 합니다.📌 기본 문법:a b; // a와 b를 비교하여 결과 반환✔ a가 b보다 작으면 음수 값 반환✔ a가 b와 같으면 0 반환✔ a가 b보다 크면 양수 값 반환📌 반환 타입: 연산자의 반환값은 비교 대상에 따라 다를 수 있으며, 대표적인 타입은 다음과 같습니다.std::strong_ordering (강한 순서 비교)st..

객체 지향 설계 - SOLID 원칙

SOLID 원칙은 객체 지향 프로그래밍(OOP)에서 유지보수성과 확장성을 높이기 위한 5가지 설계 원칙을 의미합니다. SOLID는 각 원칙의 앞 글자를 따서 만든 약어입니다.1️⃣ 단일 책임 원칙 (SRP: Single Responsibility Principle)클래스는 단 하나의 책임만 가져야 합니다.❌ 잘못된 예제#include #include using namespace std;class Report {public: void generateReport() { cout Report 클래스가 생성, 출력, 저장을 모두 담당 → 단일 책임 원칙 위반.✅ 개선된 예제#include #include using namespace std;class Report {public: string gener..

프로그래밍 2025.03.28