PHP
-
개요laravel 서버의 대용량 트래픽 처리에 대해 테스트하다 PHP FPM 프로세스의 부족으로 인해 병목 현상이 발생함을 발견하게 되었고 서버 스펙을 무리하게 올리기 보다는 다른 방식으로 해결을 하는 것이 바람직하다 판단되어 Nginx 캐싱에 대해 찾아보게 되었다./etc/nginx/sites-available/default# server 블록 상단에 추가fastcgi_cache_path /dev/shm/nginx_cachelevels=1:2keys_zone=PHPCACHE:100mmax_size=500minactive=60muse_temp_path=offfastcgi_cache_use_stale error timeout updating invalid_header http_500;fastcgi_cach..
PHP - Nginx 캐싱 설정개요laravel 서버의 대용량 트래픽 처리에 대해 테스트하다 PHP FPM 프로세스의 부족으로 인해 병목 현상이 발생함을 발견하게 되었고 서버 스펙을 무리하게 올리기 보다는 다른 방식으로 해결을 하는 것이 바람직하다 판단되어 Nginx 캐싱에 대해 찾아보게 되었다./etc/nginx/sites-available/default# server 블록 상단에 추가fastcgi_cache_path /dev/shm/nginx_cachelevels=1:2keys_zone=PHPCACHE:100mmax_size=500minactive=60muse_temp_path=offfastcgi_cache_use_stale error timeout updating invalid_header http_500;fastcgi_cach..
2025.11.02 -
개요DomPDF로 PDF를 생성할 때 한글이 깨지는 문제가 발생하여 폰트 등록부터 인코딩 문제까지, 여러 시행착오를 겪어가며 해결하였다.하지만 DomPDF로 PDF를 생성하는 방법은 font 관련 css를 넣었을때 또 깨지는 문제가 발생하고 일부 css가 먹질 않아서 폐기하게 되었다.그리하여 결국에는 이 방식을 사용하지 않게 되었지만 그냥 갖다버리기는 아까워서 글로라도 남기려한다...DomPDF 한글 깨짐 문제문제의 원인DomPDF는 기본 폰트(DejaVu Sans)에 한글 글리프가 없다. 한글을 표시하려면 한글을 지원하는 폰트를 명시적으로 등록해야 한다.증상별 원인? (물음표): 인코딩 문제 또는 폰트 미등록□ (네모): 폰트에 해당 글리프 없음깨진 문자: UTF-8 인코딩 미지정해결 과정1단계: 인코..
PHP -dom pdf로 html -> pdf 변환개요DomPDF로 PDF를 생성할 때 한글이 깨지는 문제가 발생하여 폰트 등록부터 인코딩 문제까지, 여러 시행착오를 겪어가며 해결하였다.하지만 DomPDF로 PDF를 생성하는 방법은 font 관련 css를 넣었을때 또 깨지는 문제가 발생하고 일부 css가 먹질 않아서 폐기하게 되었다.그리하여 결국에는 이 방식을 사용하지 않게 되었지만 그냥 갖다버리기는 아까워서 글로라도 남기려한다...DomPDF 한글 깨짐 문제문제의 원인DomPDF는 기본 폰트(DejaVu Sans)에 한글 글리프가 없다. 한글을 표시하려면 한글을 지원하는 폰트를 명시적으로 등록해야 한다.증상별 원인? (물음표): 인코딩 문제 또는 폰트 미등록□ (네모): 폰트에 해당 글리프 없음깨진 문자: UTF-8 인코딩 미지정해결 과정1단계: 인코..
2025.10.29 -
스펙 정리 표aws t3 서버 스펙 공식문서인스턴스 타입RAMvCPU동시 접속용도t3.nano0.5GB22~5명개발/테스트 전용t3.micro1GB25~15명매우 가벼운 사이트, 사내 도구t3.small2GB220~50명소규모 비즈니스 사이트t3.medium4GB250~150명중소 규모 서비스t3.large8GB2150~300명중간 규모 서비스t3.xlarge16GB4300~600명대규모 서비스t3.2xlarge32GB8600~1,200명엔터프라이즈급네트워크 성능 - 최대 5Gbps동시 접속 가능량 계산t3.micro (1GB RAM) 예시OS + 기본 서비스: ~300MBMariaDB: 200 ~ 300MBNginx: ~50MB남은 여유: 350 ~ 450MBPHP-FPM 프로세스 수: 7 ~ 15개 ..
PHP - aws t3 서버 사용 시 관련 스펙 정리스펙 정리 표aws t3 서버 스펙 공식문서인스턴스 타입RAMvCPU동시 접속용도t3.nano0.5GB22~5명개발/테스트 전용t3.micro1GB25~15명매우 가벼운 사이트, 사내 도구t3.small2GB220~50명소규모 비즈니스 사이트t3.medium4GB250~150명중소 규모 서비스t3.large8GB2150~300명중간 규모 서비스t3.xlarge16GB4300~600명대규모 서비스t3.2xlarge32GB8600~1,200명엔터프라이즈급네트워크 성능 - 최대 5Gbps동시 접속 가능량 계산t3.micro (1GB RAM) 예시OS + 기본 서비스: ~300MBMariaDB: 200 ~ 300MBNginx: ~50MB남은 여유: 350 ~ 450MBPHP-FPM 프로세스 수: 7 ~ 15개 ..
2025.10.29 -
개요laravel 프로젝트를 도커에 얹기 위해 sail로 컨테이너를 빌드하는데 apt-get update && apt-get upgrade ... 명령어에서 억겁의 시간이 걸리는 상황이 발생했다.원인sail로 컨테이너를 빌드할때 패키지 파일을 ports.ubuntu.com에서 받아오는데 이 서버가 영국에 있기 때문에 한국과 물리적으로 거리가 멀어 지연이 발생하는 것으로 확인되었다.해결방법권장되는 방법은 아닐 것 같지만(애초에 vendor 내의 파일을 수정하려고 하면 PhpStorm에서 안내 메시지가 나온다.) vendor 디렉토리 내에 있는 기본 Dockerfile에서 저장소 서버의 url을 한국에 위치한 비공식 미러서버 url로 바꿔주는 명령어를 추가해 해결하였다.이 방법에서 사용한 미러서버는 KAIS..
laravel - sail 컨테이너 apt-get update 지연 해결 방법개요laravel 프로젝트를 도커에 얹기 위해 sail로 컨테이너를 빌드하는데 apt-get update && apt-get upgrade ... 명령어에서 억겁의 시간이 걸리는 상황이 발생했다.원인sail로 컨테이너를 빌드할때 패키지 파일을 ports.ubuntu.com에서 받아오는데 이 서버가 영국에 있기 때문에 한국과 물리적으로 거리가 멀어 지연이 발생하는 것으로 확인되었다.해결방법권장되는 방법은 아닐 것 같지만(애초에 vendor 내의 파일을 수정하려고 하면 PhpStorm에서 안내 메시지가 나온다.) vendor 디렉토리 내에 있는 기본 Dockerfile에서 저장소 서버의 url을 한국에 위치한 비공식 미러서버 url로 바꿔주는 명령어를 추가해 해결하였다.이 방법에서 사용한 미러서버는 KAIS..
2025.08.30 -
개요php로 서비스를 운영하며 속도가 너무 느려 원인을 찾아보려 했으나 코드상에서 병목이 발생할만한 부분을 찾지 못했다.서버 성능의 문제가 아닌가 싶었지만 원인을 분명히 하고 싶어 모니터링 시스템을 추가하게 되었고 많은 모니터링 시스템 중 Prometheus Grafana 조합을 선택하게 되었다.왜 Prometheus + Grafana인가?기준Prometheus + GrafanaZabbixNagiosInfluxDB + ChronografDatadog데이터 수집Pull 기반, PHP-FPM exporter로 PHP 메트릭 수집 가능, 다양한 exporter 지원Push 기반, 에이전트 설치 필요, PHP 스크립트로 커스텀 메트릭 지원스크립트 기반 체크, PHP 메트릭은 플러그인으로 제한적Push 기반, T..
PHP - Docker Prometheus Grafana 모니터링개요php로 서비스를 운영하며 속도가 너무 느려 원인을 찾아보려 했으나 코드상에서 병목이 발생할만한 부분을 찾지 못했다.서버 성능의 문제가 아닌가 싶었지만 원인을 분명히 하고 싶어 모니터링 시스템을 추가하게 되었고 많은 모니터링 시스템 중 Prometheus Grafana 조합을 선택하게 되었다.왜 Prometheus + Grafana인가?기준Prometheus + GrafanaZabbixNagiosInfluxDB + ChronografDatadog데이터 수집Pull 기반, PHP-FPM exporter로 PHP 메트릭 수집 가능, 다양한 exporter 지원Push 기반, 에이전트 설치 필요, PHP 스크립트로 커스텀 메트릭 지원스크립트 기반 체크, PHP 메트릭은 플러그인으로 제한적Push 기반, T..
2025.05.15 -
개요Grafana로 PHP 서버 상태를 모니터링하려고 하다가 Apache 환경에서의 설정과 보안 문제를 겪게 되어, 그 과정을 정리해보았다.특히 server-status를 외부에서 접근 가능하게 열었을 때 생기는 보안 이슈와, Nginx 프록시 환경에서의 IP 처리 문제를 어떻게 해결했는지를 중심으로 다룬다.Apache server-status 활성화Apache에서는 mod_status 모듈을 활성화한 뒤 /server-status 엔드포인트를 열어 서버 상태 정보를 확인할 수 있다.Grafana로 apache 서버를 모니터링 할때는 해당 데이터를 수집하기 위해 보통 Prometheus용 Apache Exporter와 연결하여 시각화한다.처음에는 다음과 같은 설정으로 server-status를 활성화했었..
PHP - Apache server status 설정 + 프록시 IP 처리개요Grafana로 PHP 서버 상태를 모니터링하려고 하다가 Apache 환경에서의 설정과 보안 문제를 겪게 되어, 그 과정을 정리해보았다.특히 server-status를 외부에서 접근 가능하게 열었을 때 생기는 보안 이슈와, Nginx 프록시 환경에서의 IP 처리 문제를 어떻게 해결했는지를 중심으로 다룬다.Apache server-status 활성화Apache에서는 mod_status 모듈을 활성화한 뒤 /server-status 엔드포인트를 열어 서버 상태 정보를 확인할 수 있다.Grafana로 apache 서버를 모니터링 할때는 해당 데이터를 수집하기 위해 보통 Prometheus용 Apache Exporter와 연결하여 시각화한다.처음에는 다음과 같은 설정으로 server-status를 활성화했었..
2025.04.21 -
개요개발을 하다보면 변수를 넣어야하는 문자열을 또 변수로 사용하게 될때가 있는데 매번 문자열을 불러와서 변수를 .으로 붙여주거나 복잡하게 넣어주게 돼서 간단한 방법이 없나 찾아보다 클로저 함수라는 것을 사용하게 되었다.사용 예시// 문자열에 변수 추가$exam_url = fn($id) => "https://example.com/user/$id";echo $exam_url(123); // "https://example.com/user/123"// 문자열에 변수 여러 개 추가$profile = fn($name, $age) => "이름: $name, 나이: $age";echo $profile("aleph", 26); // "이름: aleph, 나이: 26"// 문자열에 삼항연산자로 변수 추가$status = ..
PHP - 클로저(Closure, 익명 함수)개요개발을 하다보면 변수를 넣어야하는 문자열을 또 변수로 사용하게 될때가 있는데 매번 문자열을 불러와서 변수를 .으로 붙여주거나 복잡하게 넣어주게 돼서 간단한 방법이 없나 찾아보다 클로저 함수라는 것을 사용하게 되었다.사용 예시// 문자열에 변수 추가$exam_url = fn($id) => "https://example.com/user/$id";echo $exam_url(123); // "https://example.com/user/123"// 문자열에 변수 여러 개 추가$profile = fn($name, $age) => "이름: $name, 나이: $age";echo $profile("aleph", 26); // "이름: aleph, 나이: 26"// 문자열에 삼항연산자로 변수 추가$status = ..
2025.03.21 -
개요웹개발을 할때 svg 아이콘이 필요하면 유튜브에서 사용하는 svg 태그를 가져다 사용하고 있는데 유튜브에 존재하는 모든 svg를 미리 분류해두고 싶어 php를 사용해 유튜브 페이지의 전체 html에서 svg 태그만 추출하기 위해 php로 태그 추출기를 만들어보았다.코드(.*?)/is";preg_match_all($pattern, $html, $matches);// 결과 처리$output = implode("\n", $matches[0]);// 파일로 저장file_put_contents('output.html', $output);echo "태그 추출이 완료되었습니다.";사용 예시input.html 위 html을 php 파일과 같은 경로에 input.html로 저장하..
PHP - html 태그 추출기개요웹개발을 할때 svg 아이콘이 필요하면 유튜브에서 사용하는 svg 태그를 가져다 사용하고 있는데 유튜브에 존재하는 모든 svg를 미리 분류해두고 싶어 php를 사용해 유튜브 페이지의 전체 html에서 svg 태그만 추출하기 위해 php로 태그 추출기를 만들어보았다.코드(.*?)/is";preg_match_all($pattern, $html, $matches);// 결과 처리$output = implode("\n", $matches[0]);// 파일로 저장file_put_contents('output.html', $output);echo "태그 추출이 완료되었습니다.";사용 예시input.html 위 html을 php 파일과 같은 경로에 input.html로 저장하..
2025.03.17