태그 보관물: 개발

PHP에서 pcntl_async_signals(true)와 register_shutdown_function()

PHP에서 pcntl_signal()을 사용하여 시그널을 핸들링 하려면 declare(ticks=1) 선언이 필요하다.
또는 PHP 7.1부터 pcntl_async_signals(true)을 사용하는 것으로 대신할 수 있다.

그런데 SIGINT 시그널이 발생하여 핸들링을 하는 경우 declare(ticks=1)를 쓸 때와 pcntl_async_signals(true)를 쓸 때 각각의 register_shutdown_function()에 등록한 핸들러의 호출 여부가 달라진다. (PHP 7.4에서 테스트)

  • declare(ticks=1)
    • register_shutdown_function()에 등록한 핸들러가 호출되지 않는다.
  • pcntl_async_signals(true)
    • register_shutdown_function()에 등록한 핸들러가 호출된다.

부모 프로세스에서 pcntl_fork()로 나온 자식 프로세스에서 exec()로 또 다른 PHP 스크립트를 실행하는 과정에서 인터럽트에 의한 종료에서도 가능한 정상적인 종료에서와 같은 종료 로직을 거치게 하려고 테스트 하는 과정에서 발견했다.

위 내용이 어렵고 무슨 이야기인지 모른다고 해서 심각하게 들여다 볼 필요는 없다. 단순히 register_shutdown_function()에 등록한 핸들러에 실행 여부를 체크하는 변수 한개만으로 중복 실행만 막으면 된다. 나는 단지 궁금해서 다양한 사례로 테스트를 해본 것이고 그 결과를 기록하는 것 뿐이다. 또한 이 결과는 PHP 버전이 바뀌면 달라질 수도 있다.

정리하면 상황에 따라 register_shutdown_function()에 등록한 핸들러가 중복 실행이 될 수 있으므로 중복 실행이 되지 않도록 방어적인 코딩을 하면 좋을 것 같다.

이 글은 개발 카테고리에 분류되었고 , 태그가 있으며 님에 의해 에 작성되었습니다.

프론트엔드 개발자가 백엔드 영역까지 다루게 될 때

개발자들은 코드나 파일을 구분하고 분리하려고 하는데 실력이 늘수록 더 많이 조각을 낸다.

그래서 논리적으로 연결되어 있음에도 분리를 하는데 대표적으로 언어가 다르고 역할이 다르다 하여 HTML, CSS, JS를 떼어놓는다. 논리적으로 연결이 되어 있다보니 이들을 떼어 놓으면 상당히 불편하다. 그래서 나는 이전부터 대부분의 개발자들이 싫어하는 방법인 HTML+CSS+JS 를 묶어서 코딩했는데 다행히 웹컴포넌트 기술이 나오면서 자연스럽게 HTML+CSS+JS 가 묶이게 되었다.

이와 비슷하게 이전부터 계속 의구심을 갖고 있는 것중 하나가 프론트엔드와 백엔드의 분리이다. 프론트엔드와 백엔드는 논리적으로 딱 떨어지지 않으며 코드나 파일은 분리되어 있을지 몰라도 논리적으로 의존되어 있다.

나는 프론트엔드와 백엔드를 모두 다루다 보니 프론트엔드와 백엔드가 면밀하게 협력하도록 코딩을 하는데 협력을 극대화 할수록 점점 가까워지다가 마치 웹컴포넌트 처럼 둘이 하나로 융합되어 버렸다.

한때 웹퍼블리셔가 HTML, CSS만 하면 된다고 했지만 결국 JS까지 다루는 프론트엔드 개발자로 변하였다. 초반에는 프론트엔드 개발자가 보이는 화면을 만드는 것이 끝이었지만 이제는 서버의 API를 호출해서 동작하는 하나의 프로그램을 만들고 있다.

이로 인해 기존에 없던 보안 문제, 비효율적인 API 호출, 프론트엔드 종속적 API 개발 등의 문제들이 발생하게 되었다. 파일이나 코드가 물리적으로 분리되어 있을 뿐 논리적으로 종속되어 있을 수 밖에 없으니 최종 사용자가 쓰는 프론트엔드의 장단에 백엔드가 맞춰줄 수 밖에 없다.

많은 개발자들이 불편한데? 비효율인데? 나만 그렇게 생각하나?라는 생각이 퍼져나가는 시점에 웹퍼블리셔가 JS까지 배워 프론트엔드 개발자가 된 것 처럼 프론트엔드 개발자가 백엔드 언어를 배워 융합시켜 버리게 되지 않을까 조심스럽게 예측해본다.

이렇게 된다면 스마트폰 네이티브 앱의 경우 프론트엔드 UI가 고정되어 있는 것이 아닌 마치 웹브라우저 처럼 백엔드가 정한 UI를 그려내는 것이 가능하고 이를 위한 프레임워크도 나오게 된다면 하이브리드 앱의 즉각적인 업데이트와 네이티브 앱의 성능이라는 두마리 토끼를 잡는 것도 가능할 것이다.

웹퍼블리셔 보다 JS를 아는 프론트엔드 개발자가 더 많은 것을 할 수 있는 것 처럼 백엔드를 아는 프론트엔드 개발자는 더 많은 것을 할 수 있게 될 것이다.

그렇다고 풀스택 개발자가 되어야 한다고 말하는 것이 아니다. 프론트엔드에 초점을 둔 백엔드를 말하는 것이다. 프론트엔드와 백엔드 양쪽을 다 해본 개발자라면 이 말이 무슨 뜻인지 알 것이다.

팀에서 스크럼과 XP를 시작했습니다.

scrum_and_xp

그동안 개발을 하면서 기존 SW개발 방법에 불만이 많았습니다.

그런데 이번에 스크럼과 XP라는 책을 보니 제가 원했던 방법들이 정리되어 실제 쓰여지고 있었음을 알게 되었습니다.

스크럼은 방법론이 아닌 프레임웍 입니다.

앞으로 팀이 어떻게 발전될지 많이 기대됩니다. ^^