분류 전체보기
-
1. 문제는 "느린 코드"가 아니라 "워커 점유 시간"이다PHP 웹 애플리케이션에서 요청은 보통 nginx를 거쳐 PHP-FPM worker로 전달된다. FPM worker 하나는 한 번에 요청 하나를 처리한다. 응답을 돌려주기 전까지 그 worker는 다른 요청을 받을 수 없다.동시 처리 가능한 요청 수= 사용 가능한 FPM worker 수문제는 평균 응답 시간이 아니다. 문제는 일부 요청이 갑자기 오래 걸리는 경우다.예를 들어 평소 50ms로 끝나던 엔드포인트가 특정 입력에서 2분 동안 실행된다고 해보자. 대량 메일 발송, 외부 API 폴링, 엑셀 리포트 생성, 대규모 데이터 집계 같은 작업이 여기에 해당한다.이런 요청이 몇 개만 겹쳐도 FPM worker가 오래 묶인다. 그러면 원래 빠르게 끝날 수..
Laravel - 큐1. 문제는 "느린 코드"가 아니라 "워커 점유 시간"이다PHP 웹 애플리케이션에서 요청은 보통 nginx를 거쳐 PHP-FPM worker로 전달된다. FPM worker 하나는 한 번에 요청 하나를 처리한다. 응답을 돌려주기 전까지 그 worker는 다른 요청을 받을 수 없다.동시 처리 가능한 요청 수= 사용 가능한 FPM worker 수문제는 평균 응답 시간이 아니다. 문제는 일부 요청이 갑자기 오래 걸리는 경우다.예를 들어 평소 50ms로 끝나던 엔드포인트가 특정 입력에서 2분 동안 실행된다고 해보자. 대량 메일 발송, 외부 API 폴링, 엑셀 리포트 생성, 대규모 데이터 집계 같은 작업이 여기에 해당한다.이런 요청이 몇 개만 겹쳐도 FPM worker가 오래 묶인다. 그러면 원래 빠르게 끝날 수..
2026.06.26 -
인터프리터와 컴파일러, 그리고 PHP가 Java처럼 동작하지 않는 이유프로그래밍 언어는 결국 컴퓨터가 실행할 수 있는 형태로 바뀌어야 한다. 사람이 작성한 소스 코드를 CPU가 바로 이해하는 것은 아니기 때문이다.그래서 모든 언어는 어떤 방식으로든 변환 과정을 거친다.소스 코드→ 번역 또는 해석→ 실행전통적으로 이 변환을 실행 전에 미리 하면 컴파일 방식, 실행하면서 처리하면 인터프리터 방식이라고 부른다. 하지만 현대 언어에서는 이 구분이 아주 깔끔하게 나뉘지 않는다.1. 컴파일 언어와 인터프리터 언어는 절대 분류가 아니다C, C++, Rust, Go 같은 언어는 보통 실행 전에 기계어 실행 파일로 컴파일한다.C/Rust/Go source→ compiler→ machine code binary→ 실행반대..
PHP - 인터프리터 언어와 컴파일 언어, 그리고 PHP가 Java처럼 동작하지 않는 이유인터프리터와 컴파일러, 그리고 PHP가 Java처럼 동작하지 않는 이유프로그래밍 언어는 결국 컴퓨터가 실행할 수 있는 형태로 바뀌어야 한다. 사람이 작성한 소스 코드를 CPU가 바로 이해하는 것은 아니기 때문이다.그래서 모든 언어는 어떤 방식으로든 변환 과정을 거친다.소스 코드→ 번역 또는 해석→ 실행전통적으로 이 변환을 실행 전에 미리 하면 컴파일 방식, 실행하면서 처리하면 인터프리터 방식이라고 부른다. 하지만 현대 언어에서는 이 구분이 아주 깔끔하게 나뉘지 않는다.1. 컴파일 언어와 인터프리터 언어는 절대 분류가 아니다C, C++, Rust, Go 같은 언어는 보통 실행 전에 기계어 실행 파일로 컴파일한다.C/Rust/Go source→ compiler→ machine code binary→ 실행반대..
2026.06.26 -
개요PHP 애플리케이션은 같은 코드베이스라도 항상 같은 방식으로 실행되지 않는다. 웹 요청은 보통 PHP-FPM worker가 처리하고, php artisan 같은 명령은 CLI 프로세스가 처리한다. 로컬 개발에서 사용하는 php artisan serve는 또 다른 실행 방식인 PHP built-in server를 사용한다.이 차이를 이해하려면 먼저 SAPI를 분리해서 봐야 한다. SAPI는 PHP 엔진이 외부 세계와 만나는 실행 인터페이스다. 즉 PHP 코드 자체가 달라지는 것이 아니라, PHP 엔진에 요청을 어떻게 전달하고 결과를 어디로 내보낼지가 달라진다.1. SAPI란?SAPI는 PHP 문맥에서 Server API, 또는 Server Application Programming Interface로 ..
PHP - SAPI개요PHP 애플리케이션은 같은 코드베이스라도 항상 같은 방식으로 실행되지 않는다. 웹 요청은 보통 PHP-FPM worker가 처리하고, php artisan 같은 명령은 CLI 프로세스가 처리한다. 로컬 개발에서 사용하는 php artisan serve는 또 다른 실행 방식인 PHP built-in server를 사용한다.이 차이를 이해하려면 먼저 SAPI를 분리해서 봐야 한다. SAPI는 PHP 엔진이 외부 세계와 만나는 실행 인터페이스다. 즉 PHP 코드 자체가 달라지는 것이 아니라, PHP 엔진에 요청을 어떻게 전달하고 결과를 어디로 내보낼지가 달라진다.1. SAPI란?SAPI는 PHP 문맥에서 Server API, 또는 Server Application Programming Interface로 ..
2026.06.26 -
1. 엔터프라이즈 아키텍처 (Enterprise Architecture, EA)범위: 조직 전체 (기업 수준)목적: 비즈니스 목표와 IT 전략의 일치설명: 회사의 비즈니스 프로세스, 데이터, 애플리케이션, 기술 인프라가 전체적으로 어떻게 맞물려 돌아가는지 정의하는 가장 거시적인 설계참고 자료: https://www.gartner.com/reviews/market/enterprise-architecture-tools2. 솔루션 아키텍처 (Solution Architecture, SA)범위: 특정 프로젝트 또는 서비스목적: 비즈니스 요구사항을 기술적 해결책으로 변환설명: 특정 문제를 해결하기 위해 필요한 소프트웨어, 인프라, 보안, 데이터 관리 등을 어떻게 통합하여 하나의 완성된 시스템(솔루션)을 만들지 설..
기타 - 아키텍처의 종류1. 엔터프라이즈 아키텍처 (Enterprise Architecture, EA)범위: 조직 전체 (기업 수준)목적: 비즈니스 목표와 IT 전략의 일치설명: 회사의 비즈니스 프로세스, 데이터, 애플리케이션, 기술 인프라가 전체적으로 어떻게 맞물려 돌아가는지 정의하는 가장 거시적인 설계참고 자료: https://www.gartner.com/reviews/market/enterprise-architecture-tools2. 솔루션 아키텍처 (Solution Architecture, SA)범위: 특정 프로젝트 또는 서비스목적: 비즈니스 요구사항을 기술적 해결책으로 변환설명: 특정 문제를 해결하기 위해 필요한 소프트웨어, 인프라, 보안, 데이터 관리 등을 어떻게 통합하여 하나의 완성된 시스템(솔루션)을 만들지 설..
2026.04.23 -
문제 상황Laravel에서 SMTP로 메일 발송 시 다음 오류가 발생했다.Unable to connect with STARTTLS: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed원인 분석먼저 메일 서버 인증서 상태를 확인했다.openssl s_client -starttls smtp -connect office.example.co.kr:25 -servername office.example.co.kr 2>&1 | grep -E "(Verify return code|verify error)"결과:ver..
Laravel - Unable to connect with STARTTLS: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed 에러 해결문제 상황Laravel에서 SMTP로 메일 발송 시 다음 오류가 발생했다.Unable to connect with STARTTLS: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed원인 분석먼저 메일 서버 인증서 상태를 확인했다.openssl s_client -starttls smtp -connect office.example.co.kr:25 -servername office.example.co.kr 2>&1 | grep -E "(Verify return code|verify error)"결과:ver..
2026.02.05 -
기본 명령어# 특정 호스트의 주요 포트 스캔 (1000개 포트)nmap 192.168.1.1# 특정 포트만 스캔nmap -p 80,443,3306 192.168.1.1# 포트 범위 스캔nmap -p 1-65535 192.168.1.1# 서비스 버전 확인nmap -sV -p 80,443 192.168.1.1옵션 설명# === 포트 지정 ===-p 80 # 80번 포트만 검사 (nginx/apache 확인할 때)-p 80,443,3306 # 여러 포트 동시 검사 (웹+DB 서버 확인)-p 1-1000 # 1번부터 1000번까지 순서대로 검사-p- # 1~65535번 전부 검사 (시간 오래 걸림)-p U:53,T:80 # UD..
Linux - nmap 포트 스캔기본 명령어# 특정 호스트의 주요 포트 스캔 (1000개 포트)nmap 192.168.1.1# 특정 포트만 스캔nmap -p 80,443,3306 192.168.1.1# 포트 범위 스캔nmap -p 1-65535 192.168.1.1# 서비스 버전 확인nmap -sV -p 80,443 192.168.1.1옵션 설명# === 포트 지정 ===-p 80 # 80번 포트만 검사 (nginx/apache 확인할 때)-p 80,443,3306 # 여러 포트 동시 검사 (웹+DB 서버 확인)-p 1-1000 # 1번부터 1000번까지 순서대로 검사-p- # 1~65535번 전부 검사 (시간 오래 걸림)-p U:53,T:80 # UD..
2026.01.22 -
개요서버 작업을 하다 보면 DB 덤프를 떠야 하는 상황이 자주 생긴다.로컬 서버, 원격 서버, 도커 컨테이너 등 환경에 따라 명령어가 달라서 헷갈릴 때가 많아 환경별 덤프 명령어를 정리해보았다.1. 로컬 MariaDB 서버에서 DB 덤프기본 명령어mariadb-dump -u root -p database_name > backup.sql사용 예시# 특정 데이터베이스 덤프mariadb-dump -u root -p my_laravel_db > ~/Desktop/laravel_backup_20250117.sql# 모든 데이터베이스 덤프mariadb-dump -u root -p --all-databases > ~/Desktop/all_databases.sql# 특정 테이블만 덤프mariadb-dump -u roo..
Database - mariadb, mysql dump(로컬, 원격, docker)개요서버 작업을 하다 보면 DB 덤프를 떠야 하는 상황이 자주 생긴다.로컬 서버, 원격 서버, 도커 컨테이너 등 환경에 따라 명령어가 달라서 헷갈릴 때가 많아 환경별 덤프 명령어를 정리해보았다.1. 로컬 MariaDB 서버에서 DB 덤프기본 명령어mariadb-dump -u root -p database_name > backup.sql사용 예시# 특정 데이터베이스 덤프mariadb-dump -u root -p my_laravel_db > ~/Desktop/laravel_backup_20250117.sql# 모든 데이터베이스 덤프mariadb-dump -u root -p --all-databases > ~/Desktop/all_databases.sql# 특정 테이블만 덤프mariadb-dump -u roo..
2026.01.17 -
Docker 설치# 필수 패키지 설치sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl software-properties-common# Docker GPG key 추가curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# Docker 저장소 추가echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https..
Docker - Ubuntu 서버에 docker, docker compose 설치하기Docker 설치# 필수 패키지 설치sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl software-properties-common# Docker GPG key 추가curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# Docker 저장소 추가echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https..
2026.01.15