PHP-FPM vs RoadRunner (with Laravel)
·
Web/PHP
개요php 프로젝트를 개발하며 Nginx 웹 서버와 CGI(주로 FastCGI)를 사용하여 개발 및 운영했었다. Laravel 패키지들을 둘러보던 중 Octane을 읽어보며 php도 고성능 애플리케이션 서버가 있다는 것을 알게되었다. 그래서 Nginx/php-fpm 환경과 애플리케이션 서버(RoadRunner) 환경을 비교해보고자 간단한 테스트를 해봤다. php-fpm (FastCGI Process Manager)php의 기존 CGI보다 빠르고 효율적인 FastCGI 구현체로 웹 서버로부터 요청을 받아 php 프로세스를 관리한다. Master 프로세스가 초기에 Worker 프로세스들을 생성하여 웹 서버로부터 요청이 들어오면 적절히 분배해준다. Worker 프로세스는 요청 처리 후 idel 상태로 재활용되..
실시간 통신 Polling, Long Polling, SSE, WebSocket
·
Server
Polling ?클라이언트가 서버에 일정 간격을 두고 주기적으로 HTTP 요청을 보내 응답받는 형태의 단방향 실시간 통신이다. 쉽고 간단하게 구현할 수 있지만, 반복적인 요청이 발생하여 불필요한 트래픽이 발생한다. Long Polling ?Polling과 동일하게 동작하지만, 클라이언트가 주기적으로 요청하는 것이 아니라 요청 후 응답을 받을 때 까지 기다린다. 마찬가지로 구현은 쉽지만 연결이 많아질 경우 Polling 보다 서버 리소스(메모리) 사용량이 많아질 수 있다. WebSocket ?초기 HTTP로 핸드셰이크를 통해 연결 후 WebSocket 프로토콜로 업그레이드하여 연결되는 TCP 기반 양방향 통신이다. 클라이언트와 서버는 지속적인 양방향 통신이 가능하여 Polling(+Long Polling)..
SSL/TLS 인증서 테스트 badssl.com
·
Tip
SSL/TLS 관련된 인증서 문제를 테스트하기 위한 웹사이트이다.HTTP 요청 시 SSL 설정마다 어떻게 응답되는지 확인할 수 있도록 다양한 서브도메인을 제공한다. 사설 CA가 적용된 환경에서 사용하는 것으로 추측되는 해외 유저로 부터 티켓을 받아 확인이 필요했는데, badssl.com에서 제공하는 서브 도메인 중  https://untrusted-root.badssl.com로 HTTP 요청을 보내 응답된 Error 객체를 확인할 수 있었다.  https://badssl.com badssl.comYour Browser: 📋 Click to copybadssl.com https://github.com/chromium/badssl.com/tree/master GitHub - chromium/badssl.c..
Docker Compose로 PHP, Nginx, MySQL 개발환경 구성하기
·
Docker
목표Docker compose를 사용하여 각각의 Nginx, PHP, MySQL 컨테이너를 실행하고, php 개발환경을 구성한다. 파일구성docker-compose.ymlservices: php: build: ./docker/php container_name: php ports: - "9000:9000" expose: - "9000" volumes: - {앱 경로}:/home/app mysql: image: mysql:8.0 container_name: db restart: always environment: MYSQL_DATABASE: {DB} MYSQL_USER: {DB 유저} MYSQL_PASS..
비동기 프로그래밍 - Callback, Promise, async/await
·
Web/Javascript
비동기 프로그래밍?Javascript는 싱글 스레드로 동작하기 때문에 한 번에 하나의 작업만 실행할 수 있다. 하지만, Call Stack, Web API, Event Loop, Callback Queue와 함께 동작하여 비동기 프로그래밍이 가능하다.  Call Stack자바스크립트 엔진이 코드 실행을 위해 사용하는 메모리 구조로 실행 중인 함수들이 쌓인다. Web API브라우저에서 제공하는 API로 Call Stack에 있는 비동기 작업들을 위임받아 멀티 스레드로 처리한다. Callback QueueWeb API의 비동기 작업이 완료되고 실행을 대기하는 함수가 쌓인다.  Event Loop Call Stack이 비어있는 경우 Callback Queue에서 대기중인 함수를 Call Stack으로 옮겨 실..
쿠키(Cookie)와 웹 스토리지(Web Storage)
·
Web/Javascript
쿠키(Cookie)브라우저에 저장되는 작은 크기의 문자열이다. 쿠키를 활용하여 HTTP 통신의 무상태 프로토콜(Stateless) 특성을 보완할 수 있다. 하지만, 쿠키에 모든 상태정보를 저장하는 것은 보안에 취약하고 용량의 한계가 있어 대부분 상태정보는 서버 측 세션에 저장하고, 해당 세션 ID를 쿠키에 저장하여 사용한다. 특징도메인 단위로 데이터를 공유도메인마다 저장할 수 있는 쿠키의 개수는 20개(브라우저에 따라 다름)쿠키의 데이터 크기는 약 4KB로 제한만료시간 설정 가능HTTP 요청 시 자동으로 요청 헤더에 Cookie에 값을 포함하여 전달 읽기document.cookie에 name=value 형태로 저장되고, 각 값은 ;(세미콜론)으로 구분된다. 쓰기클라이언트에서 document.cookie에..
함수 바인딩 call, apply, bind
·
Web/Javascript
함수 바인딩Javascript는 함수가 어떻게 호출 되었는지에 따라 this 객체가 동적으로 할당된다. 크게 함수 호출 방식은 함수, 메소드, 생성자 함수, call/apply/bind 호출이 있다. Javascript는 렉시컬 스코프를 따라 함수의 상위 스코프를 결정한다. 글로벌 영역에 함수 호출을 예로 들면 this는 상위 스코프인 전역 객체(Global Object)를 의미한다. Browser-side에서는 window, Service-side에서는 global 객체가 전역 객체가 된다. var name = 'john';function greet() { console.log(`hello, ${this.name}`); // this: window}greet(); // 'hello, john'var ..
Open WebUI + Ollama 연동
·
AI
Open WebUI?Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform designed to operate entirely offline. It supports various LLM runners like Ollama and OpenAI-compatible APIs, with built-in inference engine for RAG, making it a powerful AI deployment solution.  🏡 Home | Open WebUIOpen WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform d..
Ollama로 Deepseek 모델 사용하기
·
AI
Ollama?Ollama는 로컬 환경에서 대형 언어 모델(LLM)과 기타 AI 모델을 실행할 수 있는 오픈소스 프로젝트이다. 복잡한 설정 없이 AI 모델을 쉽고 빠르게 사용할 수 있도록 경량화된 모델을 제공하고, GPT 계열 뿐만 아니라 다양한 모델을 지원한다. Ollama 설치 Download Ollama on macOSDownload Ollama for macOSollama.com  Ollama Model Library OllamaGet up and running with large language models.ollama.comModelParametersSizeDownloadDeepSeek-R17B4.7GBollama run deepseek-r1DeepSeek-R1671B404GBollama run..
Laravel Reverb 웹소켓 서버 구축
·
Web/Laravel
Laravel Reverb는 Laravel 팀에서 제공하는 first-party 오픈소스 웹소켓 서버다. Laravel의 BroadCasting, Pulse, Laravel Echo 등 다양한 기능들과 통합을 지원한다. 속도를 위해 미세 조정되었고, 단일 서버에서 수천 개의 연결이 가능하다고 한다.  Laravel Reverb - Real-time WebSocketLaravel Reverb brings real-time WebSocket communication to Laravel applications.reverb.laravel.com 개요운영중인 서비스에 중복로그인 및 실시간 알림이 필요하여 웹소켓 서버가 필요했다. 운영중인 서비스의 API 서버는 Laravel 애플리케이션이었다. Nest.js를 사..