PHP 22

PHP 비동기 i/o 공식지원 요구를 보며...

PHP 는 항상위기라고했고 그동안 무사히 넘겼는데요.이번에는 좀더 실질적인 위기가 찾아왔네요. 결론부터 말하자면 비동기 I/O 를 도입하지 않으면 AI 서비스를 사용하기 위해 대거 이탈할것이라는 의견이예요. PHP 는 오랫동안 비동기I/O 관련 API 도입요구가 많았습니다.PHP 이 실행되는 모델과는 맞지않고 변경점이 너무 많아서 미뤄지던 가운데swoole , 로드러너같은 실행환경프로그램이 등장했고비동기 i/o 지원, 워커모드 실행이 가능했어요 그러나 이들 프로그램을 쓰려면 소스코드 변경이 많이 필요해서잘안쓰였죠. 본론으로 들어가면 php 내부 메일링리스트이야기인데요올해초부터 php 기본 vm 에 비동기 api 를 추가하자고하고 어떤 방식으로 도입할지논의가 계속이루어졌고 현재까지는 방향이 정해지지않은채 ..

PHP 2025.10.17

PHP SQL 인젝션 관련 2025 최신 취약점 내용

PHP 에는 DB 연결 라이브러리가 대표적으로 두가지가 많이 쓰이는데 mysqli , PDO 가있다.이번에 PHP src 엔진저장소의 이슈를 보다가 sql 인젝션 관련 글이 올라왔다.https://github.com/php/php-src/issues/19777 Pdo MySQL prepared sqli · Issue #19777 · php/php-srcDescription https://slcyber.io/assetnote-security-research-center/a-novel-technique-for-sql-injection-in-pdos-prepared-statements/ Maybe someone of authors can solve this problem PHP Version Php ma.....

PHP 2025.09.25

그누보드5 성능 이슈 겪은 것들 정리

한때 그누보드 차세대도 만들고 그누보드를 많이 만졌던 사람이다.그누보드로된 사이트를 운영하며 사람들이 많이 늘어나면 소규모에서는 눈에 띄지않던 문제점들이 부각된다. 오늘은 개인 사이트를 운영하며 일어난 일들의 코드를 살펴보자.그누보드는 2003년에 만들어졌는데 그 시절의 MySQL 에는 MyIsam 이라는 트랜젝션을 지원하지 않던 엔진이 있었다.그이후 InnoDB 엔진에서는 트랜젝션 지원이 되었지만 아마도 하위호환성으로 인해 그누보드에는 트랜젝션 쿼리는 없다. 그누보드는 PHP 가 나온대로 html 과 DB 쿼리, php 함수가 섞여있고 실행순서는 아래와 같다.사용자 요청 -> 요청한 php 파일 -> common.php -> 테마나 스킨 시작 -> tail.php 이다.경우에 따라 tail.php는..

PHP 2025.07.01

PHP 로 된 프로젝트는 왜 유독히...

PHP 는 처음에 템플릿 스크립트로 시작했습니다.그래서 html 과 php 를 섞어쓰는것은 당연했지요. 사람들은 PHP 를 쓰며 여러 문제를 겪었습니다.PHP 가 외면 받는것은 최근 몇년만 보면 비동기 미지원.. 제네릭 미지원 이런게 있겠지만이건 부차적인 문제입니다. 정말로 외면받는것은 PHP 가 처음 나온 방식대로 사용하는 바로 그런 코드들에 환멸 느끼고 사용자가 떠났기 때문입니다.워드프레스, 제로보드, 그누보드, 그 밖에 줌라, EC 큐브 3 등등 공통점은 mvc 가 아니며 인클루드에 인클루드를 반복, 전역변수가 너무나 난무, 함수도 사용안하고 그저 데이터를 html 에 반복하는 코드들입니다. NextJS 14를 보며 저거 옛날 PHP 잖아? 하는건 조롱입니다. 칭찬이 아니구요. MVC 패턴은 은탄환..

PHP 2025.02.17

라라벨의 파사드 찬성/반대 측면

라라벨에서 파사드라는 기능이 있다.이름은 파사드이지만 파사드 패턴을 구현한건아니고 서비스로케이터 패턴을 구현해놨다. 겉으로 보기에는 클래스의 정적매서드를 호출하는것과 같아보인다.실제로는 파사드 호출함수가 런타임에 클래스를 생성하고 캐시를 한뒤 함수를 호출하게된다.여기서 한가지 문제가 생기는데런타임에 동작하므로 IDE 가 해당클래스에 뭐가있는지 알 수없다는것이다.이에 라라벨 커뮤니티에선 파사드 함수에 PHP Doc 을 달면된다고 하고 라라벨프레임워크의 코드도 그렇게 되어있다. 이때문에 파사드를 지지하는 측과 반대하는 측이 종종 레딧에서 온갖 글과 토론이 오간다 파사드 찬성 측 주장- 코드의 간결화- 의존성 주입을 하지않아도 된다.- 파사드를 써도 라라벨에서는 테스트가 가능하게 구현되어있다. 반대 측 주..

PHP 2023.06.08

php 사용자에게 도움되는 사이트

https://modernpug.github.io/php-the-right-way/ PHP: The Right Way 한국어판쉽게 읽을 수 있는 PHP의 베스트 프랙티스, 코딩 표준, 권위있는 튜토리얼로의 링크를 제공합니다.modernpug.github.ioPHP The right way https://refactoring.guru/ko/design-patterns/catalog 디자인 패턴 목록 refactoring.guruPHP 를 비롯한 다양한 언어로 작성된 디자인 패턴 예시들입니다. https://laravel.kr/docs 라라벨 9.x라라벨 한글 메뉴얼 9.xlaravel.kr https://psr.kkame.net/ Introduction - 한글판 PHP Standards Recommend..

PHP 2022.11.20

코드이그나이터 4 REST API 주의점

코드이그나이터 4는 네임스페이스와 라우터에서 REST API를 지원합니다. 라우터 코드이그나이터 4를 설치하면 3과 마찬가지로 함수이름을 이용해서 라우팅이 됩니다. 자동라우터라고 합니다. app/config/Routes.php 파일에 $routes->setAutoRoute(true); 자동라우터 기능이 켜져있을때는 REST API 컨트롤러의 HTTP 메소드로 설정해도 우회방법이 생깁니다. Routes.php $routes->resource('City'); //컨트롤러 클래스를 등록 $routes->post('/', 'City::show'); //연결할 url과 메소드를 string 으로 넘김. show같이 보여주는건 보통 GET메소드를 씁니다. 여기서는 확인을 위해 post를 썼습니다. City 컨트롤러..

PHP 2022.04.14

그누보드 보안 SQL 인젝션 방어하기

그누보드는 sql 쿼리를 문자열 그대로 취급하기에 sql 인젝션 공격 문제가 있습니다.SQL 인젝션 공격을 막기 위해서는 prepared statement 쿼리 일명 바인딩쿼리를 써야합니다.변수자리에 ? 를 넣고 나중에 값을 채우는 방식이라 SQL 인젝션 공격을 막는 확실한 방법입니다.예시)$query = 'select wr_id, wr_num, wr_subject from g5_write_free where wr_id =  ? '; 그누보드 자유게시판에서 게시글 id 가 1 인 글을 불러오는 쿼리입니다.wr_id = ?   //  그누보드에서 쓰는방법common.php 는 많은 일을 합니다.DB 연결, 확장, 라이브러리, 게시물 처리, POST, GET 문자열을 변수화시키는 것들 등등 common.ph..

PHP 2022.03.30

PHP 동작방식 - 생명주기

PHP 재단 소식 보다가 PHP internals Book을 정리한다고 해서 보게 되었습니다. 생명주기: 프로그램은 시작되고 어떤 것이 로딩되고 실행 후 끝나고 하는 생명주기가 있습니다. PHP The internals Book (PHP 내부 동작에 관한문서) 에 관련 내용이 자세하게 나와있습니다. PHP로 작성한 코드를 실행하는 환경은 크게 두 가지가 있습니다. 1) CLI (터미널에서 실행) 하나의 요청을 처리하는 환경, 2) 웹 서버와 SAPI 인터페이스를 통해 여러 웹 요청을 처리하는 환경입니다. 1. 의 경우 간단한데요 php -s 로 시작하는 php내장 개발 서버도 여기에 해당하죠 PHP 엔진에서 해당 프로그램을 실행 후 종료합니다. 2. 웹서비스를 하려면 PHP를 nginx , 아파치등 웹서..

PHP 2022.03.27

PHP 8.1 의 변경점: 클래스 로딩 최적화

PHP 8.1 이 출시되었습니다. PHP 8.1 에는 Enum , Fiber 도입등 다양한것이 있지만 https://github.com/php/php-src/pull/6627 Inheritance cache by dstogov · Pull Request #6627 · php/php-src github.com PHP 프로세스 실행시 클래스 링킹과정을 캐시해서 파일이 변경되기전에 한번만 하게 바뀌었습니다. 5~8% 성능향상이 있다고 밝혔는데요 심포니와 같은 객체지향적으로 작성된 프레임워크들은 많은 클래스를 로딩하게됩니다. 클래스 참조 속도 향상과 링킹과정 캐시등으로 20%의 성능향상이 있네요 반면 절차지향적인 코드인 워드프레스는 3.5%정도로 성능향상이 미미합니다. 국내 CMS 인 그누보드도 성능향상은 미미..

PHP 2021.12.05