목록TIL(Today I Learned) (65)
개발자공부일기
Apache HTTP Server1. 개요Apache는 1995년에 처음 출시된 오픈 소스 웹 서버로, 현재도 PHP 기반 웹사이트와 전통적인 웹 애플리케이션에서 널리 사용되고 있다.가장 큰 특징은 모듈화 시스템과 유연한 설정이다.2. 주요 특징멀티 프로세스/멀티 스레드 기반 구조MPM (Multi-Processing Module)을 사용하여 요청을 처리prefork, worker, event 등 다양한 처리 방식을 선택 가능.htaccess 지원개별 디렉터리마다 설정을 변경할 수 있는 유연한 구조공유 호스팅 환경에서 개별 사용자가 설정 변경 가능모듈화된 구조mod_php, mod_ssl, mod_rewrite 등 다양한 모듈을 추가하여 기능 확장 가능광범위한 호환성PHP, Python, Perl, CG..
크리티컬 섹션(Critical Section)이란?크리티컬 섹션(Critical Section)은 멀티스레드 또는 멀티프로세스 환경에서 공유 자원에 접근하는 코드 영역을 의미한다.멀티스레드 프로그래밍에서는 여러 개의 스레드가 동시에 동일한 공유 데이터를 수정하려고 할 때 경쟁 조건(Race Condition)이 발생할 수 있으며, 데이터 무결성이 손상될 위험이 있다.따라서, 크리티컬 섹션은 한 번에 하나의 프로세스 또는 스레드만 실행할 수 있도록 제한하여 데이터 일관성을 유지해야 한다.크리티컬 섹션이 필요한 이유여러 개의 프로세스 또는 스레드가 동시에 동일한 공유 데이터에 접근하면 예기치 않은 결과가 발생할 수 있다.동시에 두 개 이상의 스레드가 변수를 읽고 수정하면 데이터가 손상될 수 있다.크리티컬 섹..
좋은 코드란게 뭘까 사실 검색해보면 일반적으로 '일관성 있다.', '중복이 적다.', '가독성이 높다.', '테스트에 용이하다.', '확장성이 좋다.' 와 같은 특징들을 가지고 있는 코드가 나온다. 다 맞는 말이긴 한데 뭐랄까 다 경우에 따라 기준이 달라지니까 애매한 말들인거 같다. 그래서 생각해보는데 좋은 코드를 판단하는 주체는 누가 되는건지도 모르겠다.나인가? 회사인가? 동료들인가? 어떤 입장에서 바라보느냐에 따라서 좋은 코드의 기준은 달라지지 않을까 생각한다. 그래서 내 생각에는 일관성이 가장 좋은 코드에 어울린다고 생각한다. 변수의 네이밍부터 추상화의 단계라던가 중복코드의 함수화 같은 코드작성 규칙이 명확하고 내 스타일이 아니더라도일관성있게 짜여서 그 구성에 익숙해지면 가독성이 자연스래 좋아지고..

비트(bit)란 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위이다.바이트(byte)는 한 문자를 표한할 수 있는 최소 단위로 8비트로 구성되어있다. (1Byte = 1Bit) 컴퓨터는 데이터를 바이트 단위로 저장하고연속되는 바이트를 저장하는 순서가 바로 바이트 배열 순서(Byte Order)이다. 데이터는 낮은 주소에서 높은 주소 차례로 저장되지만이 데이터가 저장되는 순서에 따라 빅 엔디안과 리틀 엔디안이 나뉜다.빅 엔디안 Big-Endian 여러 개의 연속된 데이터를 1차원의 기억장치 최상위 공간(MSB)부터 차례로 배열하는 기법 으로 평소 사람이 숫자를 사용하는 방식과 같은 방식이다. 큰 자리 수부터 저장하기 때문에 숫자 비교에 유리하고 저장된 순서 그래도 읽을 수 있어 이해가 용이하다..
export const spawnMonsterReqHandler = ({socket}) => { const {user,opponent}=findUserGameOpponentBySocket(socket); testLog(0,`spawnMonsterReqHandler에 user가 있을까? ${user}`,'blue'); testLog(0,`spawnMonsterReqHandler에 user.socket이 있을까? ${user.socket}`,'red'); const monster = spawnMonster(monsterid,monsterNum,user); addMonster(monster); const response = createS2CSpawnMonsterResponse(monster.mons..
oneof는 하나의 필드만 활성화되도록 하는 기능으로, 통신 패킷에서 여러 선택 가능한 데이터 중 하나만 보낼 때 사용됩니다. 예를 들어, 클라이언트와 서버가 서로 다른 메시지 타입(텍스트, 이미지, 상태 변경 등)을 주고받을 때 유용합니다.oneof 필드는 oneof 공유 메모리의 모든 필드를 제외하고 일반 필드와 같으며 최대 한 필드를 동시에 설정할 수 있습니다.oneof의 member를 설정하면 다른 모든 member는 자동으로 지워집니다.선택한 언어에 따라 특별한 case() 또는 WhatOneof() 메서드를 사용하여 oneof에 어떤 값이 세팅되는지 확인할 수 있습니다.Node.js 환경에서 TCP 통신을 할 때 Protocol Buffers의 oneof를 사용하는 예제1. Protobuf 파..

SPOF(Single Point of Failure, 단일 장애점)은 IT 시스템에서 중요한 개념으로, 특히 백엔드 시스템 설계, 네트워크 아키텍처, 물리적 하드웨어 구성 등에서 장애의 주요 원인이 될 수 있습니다. SPOF를 이해하고 이를 제거 또는 최소화하는 전략은 고가용성(High Availability, HA) 시스템 설계의 핵심입니다. 1. SPOF의 정의와 중요성정의: 시스템 구성 요소 중 단 하나라도 고장 나면 전체 시스템이나 서비스가 중단될 수 있는 단일 지점을 의미합니다.중요성: SPOF는 시스템의 안정성, 가용성, 확장성에 직접적인 영향을 미칩니다. 특히 비즈니스 크리티컬 시스템(금융 거래 시스템, 의료 정보 시스템 등)에서는 SPOF 제거가 필수입니다.2. SPOF의 주요 사례1) 하..

게임 서버 아키텍처게임 서버 아키텍처는 게임의 종류, 유저 수, 실시간성과 확장성 등 다양한 요구사항에 따라 설계 방식이 달라집니다. 이번 글에서는 대표적인 게임 서버 아키텍처와 각각의 특징, 그리고 실제 게임 예시를 살펴보겠습니다. 1. 클라이언트-서버 아키텍처구조:클라이언트는 사용자 인터페이스와 그래픽을 처리하며, 서버는 게임 로직, 데이터 동기화, 보안 등을 처리하는 중앙 시스템입니다.특징:클라이언트는 최소한의 게임 상태를 관리하며, 모든 중요한 데이터는 서버에서 처리됩니다.사용 예시:MMORPG: 월드 오브 워크래프트RTS: 스타크래프트장점:보안: 서버가 핵심 데이터를 관리하여 치트 방지에 유리.일관성: 서버가 모든 클라이언트를 동기화하여 데이터 불일치 문제를 방지.확장성: 서버를 증설하여 플레이..