흔히 애플리케이션에 문제가 있을 때 "에러 로그를 본다"고 하는데, 이때 로그에 ERROR 메시지와 함께 at~ at~형태로 쭉 이어지는 정보들을 스택 트레이스(stack trace)라고 부릅니다. 스택 트레이스는 콜스택의 저장된 함수 호출 정보를 출력한 데이터입니다. 콜스택이란? 콜스택(call stack)은 컴퓨터 프로그램에서 함수 호출과 관련된 실행 컨텍스트를 관리하는 데이터 구조입니다. 함수 호출과 반환, 변수 저장을 추적하는 데 사용되며 프로그램 실행 중에 발생하는 함수 호출에 대한 정보를 저장합니다. 콜스택이 작동하는 방식은 다음과 같습니다. 1. 함수 호출 시 호출한 함수에 대한 정보(반환 주소, 함수 인수, 지역 변수 등)를 스택 프레임이라고 부르는 단위로 콜스택에 저장(push)합니다. ..
errono C 런타임 라이브러리의 errno은 일반적으로 프로그래밍 오류를 설명하는 데 사용되는 전역 변수입니다. 런타임 라이브러리 함수 실행에 문제가 있을 때 오류에 대한 정보를 제공하기 위해 사용됩니다. 이는 errno.h 헤더 파일에 정의되어 있습니다. 예시) fopen() 함수에서 오류 처리 함수 호출 전 errno 값으로 설정하고 라이브러리 함수를 호출한 뒤 함수 호출이 실패하면 errno 값을 출력하는 형태로 활용합니다. #include #include int main() { errno = 0; // errno 초기화 FILE *file = fopen("nonexistent_file.txt", "r"); if (file == NULL) { perror("파일 열기 실패"); // 오류 메시지..
UNIX TIMESTAMP란? 유닉스 타임스탬프(Unix Timestamp)는 1970년 1월 1일 00:00:00 UTC부터 경과한 시간을 초 단위로 나타낸 정수 값입니다. 예를 들어, 1970-01-01 00:00:00 (UTC)는 0입니다. 2021-01-01 00:00:00 (UTC)는 1609459200입니다. 이처럼 946684800, 1234567890 등으로 시간을 표현하기 위한 숫자입니다. 그렇다면 왜 yyyy-mm-dd 같은 방식 대신 유닉스 타임스탬프 값을 쓰는지를 알아볼 필요가 있습니다. 실제로 각종 시스템, DBMS에 많이 사용되는 시간 표기 방법이기 때문입니다. UNIX TIMESTAMP 사용하는 이유 1. 전 세계 컴퓨터 시스템에서 일관된 시간을 표기할 수 있습니다. 시간은 지..
인텔 CPU를 탑재한 컴퓨터에는 CPU 코어(Core)와 더불어 논리 프로세서(Logical Processor)라는 개념이 있습니다. 코어는 무엇인지 알겠는데, 논리 프로세서는 무엇일까요. 어떤 지표를 기준으로 성능을 가늠하면 될까요. 이에 대해 알아보겠습니다. 인텔 CPU, 코어 / 논리 프로세서 윈도우에서 CPU 코어 수와 논리 프로세서를 확인하려면 작업 관리자에서 성능 탭으로 진입합니다. 그중 CPU를 선택하면 코어 수와 논리 프로세서 수가 각각 표기되어 있습니다. 코어 / 논리 프로세서 차이 코어는 CPU의 일부분으로서 독립적인 연산을 수행할 수 있는 하드웨어 단위입니다. 코어가 많아질수록 동시에 처리할 수 있는 작업이 늘어납니다. 멀티코어 CPU는 여러 코어를 사용하여 병렬 처리를 수행할 수 있..
상태 저장 / 상태 비저장이란? 상태 저장(stateful)과 상태 비저장(stateless)은 시스템이나 프로토콜이 상호작용하는 과정에서 상태 정보를 추적하거나 유지하는 방식을 나타냅니다. 쉽게 말하면 상태 저장은 이전 요청을 기억(저장)하고 상태 비저장은 이전 요청을 기억하지 않는 방식입니다. 상태 저장, 비저장 개념은 예시를 보면 이해가 금방 됩니다. 다만 워낙 상태 저장, 비저장이 어디에든 적용되는 개념이라 이 글에서 설명드리는 예시 자체가 큰 의미를 갖지는 않습니다. 상태 저장 예시) 1. TCP : TCP는 인터넷에서 데이터 전송을 제어하는 프로토콜입니다. TCP는 상태 저장 프로토콜로 클라이언트와 서버 간의 모든 데이터 패킷의 전송 상태를 추적합니다. 이를 통해 데이터가 올바르게 전달되고, ..
인텔 CPU에 이어 AMD CPU를 정리합니다. CPU 시장은 두 제조사가 양분하고 있기 때문에 사실상 두 브랜드의 CPU만 알면 됩니다. AMD도 일반용과 서버용을 구분해서 각각 Ryzen(라이젠), EPYC(에픽) 시리즈로 판매하고 있습니다. AMD CPU AMD Ryzen과 EPYC의 차이 Ryzen은 데스크톱, 랩톱 등 일반 소비자용에 사용되는 CPU입니다. 특히 가성비로 조립식 컴퓨터를 구성하면 대부분 CPU는 Ryzen으로 구성됩니다. EPYC은 주로 서버나 데이터센터용으로 사용됩니다. 서버, 데이터센터용은 기업에 판매하는 것이고 비즈니스 목적이 있기 때문에 더 높은 성능과 안정성을 제공합니다. 가격도 Ryzen 대비 더 비쌉니다. 전체적인 구조는 인텔의 Core - Xeon이 가지고 있는 차..
CPU 사양을 볼 줄 알아야 원하는 수준의 성능을 낼 수 있는지 가늠할 수 있습니다. 시장에서 가장 많이 사용되는 인텔의 CPU 라인업을 간략하게 알아보겠습니다. 인텔의 CPU 라인업은 크게 일반 데스크톱(또는 노트북)용과 서버용으로 나눌 수 있습니다. 각각을 대표하는 시리즈가 바로 인텔 Core(코어)와 인텔 Xeon(제온)입니다. 인텔 CPU 인텔 Core와 Xeon의 차이 Core 시리즈는 데스크톱이나 노트북에 주로 탑재되는 CPU입니다. Xeon은 서버, 워크스테이션, 데이터센터용으로 주로 사용됩니다. 단순히 정리하면 Core는 일반 소비자용 Xeon은 기업용입니다. 그렇다보니 Xeon 시리즈가 Core 시리즈 대비 더 높은 코어, 스레드 수와 안정성을 제공합니다. 가격도 당연히 더 비쌉니다. 인..
다중 스레드 프로그래밍과 관련하여 스레드 풀이라는 개념이 있습니다. 스레드 풀의 작동 방식과 장단점에 대해 알아보겠습니다. 스레드 풀이란? 스레드 풀(Tread Pool)은 동시에 여러 작업을 효율적으로 실행 및 관리하기 위해 서버에서 만드는 스레드의 모음입니다. 스레드 풀을 이용하면 각 작업에 대해 새 스레드를 생성하는 대신 이미 생성된 스레드 풀에 있는 스레드를 재사용합니다. 이는 성능과 리소스 관리에 도움이 됩니다. 스레드 풀 작동 방식 스레드 풀은 기본적으로 아래와 같은 방식으로 운영됩니다. 1. 미리 정의된 작업자 스레스 수로 스레드 풀이 생성됩니다. 2. 작업 요청이 오면 스레드 풀에 있는 사용 가능한 스레드를 할당합니다. 만약 모든 스레드가 사용 중이면 사용할 수 있는 스레드가 생길 때까지 ..
SHA256과 HMAC-SHA256 해시 알고리즘은 암호 생성과 인증 방식에 차이가 있습니다. SHA-256 vs HMAC-SHA256 두 알고리즘 모두 보안 해시 알고리즘(SHA, Secure Hash Algorithm)을 사용해서 문자를 암호화하는 데 사용됩니다. SHA-256은 임의 길이를 입력받아 256비트로 고정된 해시 값을 생성합니다. 주로 데이터 무결성 검사, 비밀번호 생성, 디지털 서명 등에 사용됩니다. HMAC-SHA256은 HMAC과 SHA256이 결합된 형태입니다. HMAC이란 해시 기반 메시지 인증 코드를 의미합니다. 평문을 해시하는 것에서 그치지 않고 추가로 신뢰성과 무결성을 확인하는 방식으로 이해할 수 있습니다. 예시) SHA-256과 HMAC-SHA256으로 저장된 비밀번호 두..
응용 프로그램을 실행하다가 "닷넷(.NET) 프레임워크가 설치되어 있지 않아서 어떤 프로그램을 실행할 수 없다"는 식의 메시를 본적 있으신가요? 같은 맥락으로 "이 프로그램을 실행하려면 비주얼 C++이 설치되어 있어야한다"도요. 이런 것들이 MS 재배포 패키지와 관련된 이슈입니다. MS 재배포 패키지란? 마이크로소프트(MS) 재배포 패키지는 MS에서 제공하는 소프트웨어 패키지입니다. 이 패키지는 윈도우 운영체제에서 각종 프로그램이 실행되기 위해 필요하기 때문에 거의 대부분 PC에 설치되어 있습니다. 예를 들면, Microsoft Visual C++, Microsoft .NET Framework, Microsoft Silverlight 등의 프로그램이 재배포 패키지입니다. 아마 무엇인지는 정확히 모르셨어도..