분류 전체보기 165

WebSocket 채팅 시스템

기반 구성 사항 : https://red-horse.tistory.com/167 WebSocket(Chat System)WebSocket?HTTP는 요청-응답 구조입니다.클라이언트가 요청하면 서버가 응답하고 연결을 닫습니다.서버가 먼저 데이터를 보낼 방법이 없는데 WebSocket은 이 문제를 핸드세이크로 해결합니다.클라이red-horse.tistory.com 채팅 시스템 구조WebSocket/Chat/├── ChatMessage.cs ← 메시지 프로토콜 (JSON)├── ChatRoomManager.cs ← 룸 멤버십 관리└── ChatWebSocketHandler.cs ← 채팅 이벤트 처리Components/Pages/Chat/├── ChatPage.razor ..

C#/이모저모 2026.03.22

WebSocket

WebSocket?HTTP는 요청-응답 구조입니다.클라이언트가 요청하면 서버가 응답하고 연결을 닫습니다.서버가 먼저 데이터를 보낼 방법이 없는데 WebSocket은 이 문제를 핸드세이크로 해결합니다.클라이언트 -> 서버: HTTP Upgrade 요청서버 -> 클라이언트: 101 Switching Protocols이후: TCP 연결 위에서 양방향 통신(연결 유지)한 번 연결되면 서버도 먼저 데이터를 보낼 수 있고, 연결은 명시적으로 닫을 때까지 유지됩니다. TCP 위의 애플리케이션 프로토콜이라는 게 핵심입니다. 아키텍처 설계단순히 WebSocket을 열고 닫는 것이 아니라, 여러 기능에서 재사용 가능한 인프라를 목표로 설계했습니다. 채팅뿐 아니라 나중에 운동 세션 실시간 공유, 알림 들을 추가할 때도 같은..

C#/이모저모 2026.03.22

Redis

Redis는 In-Memory 데이터 구조 저장소로, 다양한 자료형을 지원합니다. 그 중에서도 String은 Redis에서 가장 기본적이면서도 널리 사용되는 자료형입니다. 실제로 Redis 사용 사례의 90% 이상이 String 자료형을 활용한다고 할 수 있을 정도로 중요하고 유용한 자료형입니다.Redis String의 내부 구조: SDS (Simply Dynamic String) SDS란?Redis String은 내부적으로 SDS(Simply Dynamic String) 구조를 사용합니다. 이는 C언어의 전통적인 null-terminated string이 아닌, Redis가 자체적으로 구현한 동적 문자열 구조입니다. SDS의 주요 장점1. 빠른 문자열 길이 조회시간 복잡도: O(1)C의 strlen()..

ZeroBase/Redis 2026.03.02

웹 애플리케이션(.NET)

1. ASP.NET MVC (Server-Side Rendering)동작 방식:전통적인 서버 사이드 렌더링 방식클라이언트 요청 → 서버에서 HTML 생성 → 완성된 HTML 반환각 페이지 이동마다 전체 페이지 새로고침장점:SEO 친화적 (검색엔진이 콘텐츠 쉽게 크롤링)초기 로딩 빠름 (서버에서 완성된 HTML 전송)서버 리소스 활용 (클라이언트 부담 적음).NET Framework 4.8 같은 레거시 환경에서도 안정적단점:페이지 전환시 깜빡임서버 부하 높음 (매 요청마다 HTML 생성)인터랙티브한 UX 구현 어려움JavaScript로 추가 작업 필요적합한 경우:콘텐츠 중심 웹사이트SEO가 중요한 경우레거시 시스템 유지보수// Controllerpublic class ProductController : C..

C#/이모저모 2025.11.30

임시 파일 자동정리(.NET TimerQueue & .NET IHostedService)

웹 어플리케이션 운영시 파일을 생성하고 다운로드 링크로 제공할시에 정상적인 플로우로 다운로드 및 임시파일 삭제가 이루어지면 문제가 없지만 간혹 프로세스 진행중에 브라우저를 닫거나 예기치 못한 오류로 종료가 되었을때 임시 파일이 서버에 쌓이는 문제가 있습니다.이러한 문제를 해결하기 위해 .NET Timer Queue에 정리하는 프로세스를 예약해놓고 주기적으로 해당 동작이 수행되게 구성합니다. 서버 자동 삭제의 장점브라우저 상태와 무관확실한 정리 보장관리 편의성리소스 효율적 사용 Timer의 동작 원리_timer = new Timer(callback, state, dueTime, period);```**내부 동작:**1. Timer 생성 시 OS의 타이머 큐에 등록2. 대기 중에는 CPU/쓰레드 사용 안 함..

C#/이모저모 2025.11.27

IIS(Internet Information Services)

Microsoft가 만든 웹 서버 소프트웨어 식당으로 비유:- ASP.NET MVC 앱 = 요리사가 만든 음식- IIS = 식당 건물 + 웨이터 (손님에게 음식을 서빙)- 브라우저 = 손님// 역할1. 브라우저 요청 받기 사용자: "http://localhost/Home/Index 주세요!" 2. ASP.NET 앱에게 전달 IIS: "야, ASP.NET! /Home/Index 처리해줘" 3. 결과를 브라우저에게 돌려주기 IIS: "여기 HTML 페이지 나왔습니다~" 타 웹 서버들과 비교웹서버 주로 사용하는 언어운영체제IISC# (ASP.NET)WindowsApachePHP, PythonLinux/WindowsNginx모든 언어Linux/WindowsTomcatJavaLinux/Windo..

C#/이모저모 2025.11.27

파일 생성 및 다운로드 관리(물리 경로 vs 가상 경로)_Web

물리 경로 (Physical Path)// Server.MapPath()로 변환string physicalPath = Server.MapPath("~/Content/Data");// 결과: C:\Projects\MyApp\Content\Data// 사용: 파일 시스템 작업Directory.CreateDirectory(physicalPath);File.WriteAllBytes(Path.Combine(physicalPath, "file.xlsx"), bytes);File.Delete(Path.Combine(physicalPath, "file.xlsx"));특징:실제 디스크 경로운영체제 파일 시스템이 이해하는 경로C#의 File, Directory 클래스가 사용가상 경로 (Virtual Path)// 웹 UR..

C#/이모저모 2025.11.27

Http -> Https Domain 변경

환경 설정서버: 리눅스 Ubuntu웹서버: Nginx (리버스 프록시)도메인: 가비아에서 구매한 도메인네트워크: iptime 공유기 환경SSL: Let's Encrypt 무료 인증서목표https://jenkins.[도메인] - 브라우저 경고 없는 안전한 접속https://fitnesspt.[도메인] - 브라우저 경고 없는 안전한 접속준비 단계: certbot 설치sudo apt update sudo apt install certbotsudo apt install python3-certbot-nginx # Nginx와 acme챌린지를 위한 플러그인sudo apt install python3-certbot-apache # Apache와 acme챌린지를 위한 플러그인 1단계: 도메인 DNS 설정가비아 관리콘솔..

ZeroBase/Infra 2025.10.25

CSS Position - 요소 배치의 모든 것

Position은 HTML 요소를 원하는 위치에 배치하기 위한 CSS 속성입니다.top, bottom, left, right 속성과 함께 사용하여 정확한 위치를 지정할 수 있습니다. 1. 부모-자식 관계 설정기본 원칙부모 요소: position: relative자식 요소: position: absolute→ 자식 요소는 부모를 기준으로 배치됨CSS.parent { position: relative; /* 기준점 설정 */ width: 600px; height: 300px; background-color: dodgerblue;}.child { position: absolute; /* 부모 기준 절대 위치 */ width: 200px; height: 100px; ..

Jenkins CI/CD 구축

이 가이드는 Ubuntu 22.04 환경에서 Jenkins를 설치하고, .NET 프로젝트의 CI/CD 파이프라인을 구축하는 전 과정을 다룹니다. 1. 환경 준비 및 기본 설정1.1 시스템 업데이트sudo apt update && sudo apt upgrade -y 1.2 SSH 서버 설정 (원격 접속용)# SSH 서버 설치sudo apt install openssh-server -y# SSH 서비스 시작 및 자동 시작 설정sudo systemctl start sshsudo systemctl enable ssh# SSH 서비스 상태 확인sudo systemctl status ssh 1.3 방화벽 설정# UFW 방화벽 활성화sudo ufw enable# SSH 포트 허용 (기본 22번 포트)sudo ufw..

CICD/Jenkins 2025.10.17