글쓴이 보관물: A2

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를 아는 프론트엔드 개발자가 더 많은 것을 할 수 있는 것 처럼 백엔드를 아는 프론트엔드 개발자는 더 많은 것을 할 수 있게 될 것이다.

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

호주 겨울(8월) 멀가스 울루루(Uluru) 투어 필독 체험 후기

호주의 겨울인 8월에 멀가스 어드벤처 투어에서 진행하는 3박 4일 울루루 투어를 다녀왔다. (*위키 등의 자료에는 ‘울룰루’가 아닌 ‘울루루’라고 표현되어 있다.)

울루루를 가기전에 옷과 준비물을 위해 많은 블로그 글을 읽어봤는데 직접 체험해보니 진짜 중요한 정보들이 빠져있었다는 것을 알았다. 최소한의 고생으로 완벽한 울루루 투어를 하고 싶다면 이 글을 꼭 읽기 바란다.

<중요!> 이 글은 호주의 겨울(8월)이 기준이며 여름은 다를 것이다.

투어 차량으로 이동중

# 필수 준비물

– 스포츠 타월 / 세면도구

캠프장에서 세수 및 샤워를 할 수 있다. 수건과 세면도구는 당연히 개인이 준비해야 한다. 젖어도 빠르게 마르는 스포츠 타월이 아무래도 편리한다.

– 선크림 / 등산 모자 / 선그라스

구름이 거의 없고 항상 햇빛이 내려쬔다. 하지만 그늘은 춥다. 온도가 아닌 햇빛 그 자체에 대비해야 한다.

– 핸드크림 / 입술보호제 / 보습제품

공기가 무지막지하게 건조하다. 손가락 끝이 마르고 갈라져서 아프고 심지어 아이폰 지문인식도 안된다. 우리나라는 가장 건조한 계절도 습도가 50%를 넘는다. 울루루가 있는 지역의 평균 습도는 24% 이다. 손에 피나고, 입술 터지고, 얼굴에 버짐 생기고 싶지 않으면 수시로 아낌없이 보습제품을 발라라.

킹스캐년

– 상의 / 하의

하루의 일교차가 매우 크다는 점에 유의하자. 새벽에는 0도 가깝게 떨어지다가 낮에는 20도를 넘는다.

상의는 두꺼운 옷 대신 얇은 옷을 여러개 준비하는 것을 적극 추천한다. 나는 기본 티(반팔), 경량 패딩, 바람 막이, 짚업 후드를 가져갔다. 기본 티는 항상 입고 있는 상태에서 나머지 옷을 조합해서 입었다. 등산을 아는 사람들은 환복이 중요하다는 것을 안다. 트레킹 중에는 기본 티에 경량 패딩과 바람 막이를 적절히 환복하면 너무 춥거나 더워서 고생하지 않고 편한 트레킹을 즐길 수 있다.

하의는 스포츠 츄리닝 바지나 여름 등산용 바지가 좋다. 가이드와 몇몇 사람들은 반바지를 입었지만 낮에 긴바지를 입고 트레킹을 해도 다리에 땀이 차지는 않는다. 여자들은 대부분 레깅스를 입고 있었다. 이른 아침에는 긴 바지 하나만으로는 다리가 시렵다. 본인이 추위를 얼마나 타는지에 따라서 준비하자. 나는 반바지, 청바지, 츄리닝 이렇게 3개를 가져갔는데 대부분 츄리닝만 입었고 너무 추울때는 츄리닝 위에 청바지를 입었다.

– 운동화

운동화는 편하기만 하면 아무거나 상관 없다. 트래킹 코스는 우리나라의 흔한 등산 코스 보다 쉽다. 흙 묻어서 더러워지니까 어두운색 운동화가 좋다. 다른 사람들의 신발을 보니 트레킹화나 매쉬소재의 운동화가 흙이 덜 묻었다.

– 물통(300 ~ 500ml 용량)

본인이 물을 매우 자주 마시는 편이 아니라면 작은 물통이면 트레킹중에 마시기에 충분하다. 투어 차량에는 항상 큰 물통에 물이 준비되어 있다. 단, 캠핑장이나 차량의 물은 정수기나 생수가 아닌 수돗물이다.

– 가벼운 가방 / 백팩

트레킹 하면서 물통과 환복할 옷을 담고 다닐 가벼운 가방이 있으면 편리하다.

캠프 파이어를 위한 마른 나무 수집

– 목장갑(고무코팅 추천)

밤에 캠프 파이어를 하기 위해 마른 나무를 모아야 한다. 작은 나뭇가지를 줍는게 아니다. 2미터 넘는 나무를 옮겨야 한다. 손에 가시가 박히거나 생채기를 입고 싶지 않다면 목장갑을 반드시 챙겨라. 나무를 모을때 당신이 목장갑을 끼면 다른 사람들은 마치 타노스의 인피티니 건틀렛을 보듯 부러워 할 것이다. 참고로 나무 할때 옷 엄청 더러워진다.

– 물티슈

손에 흙 등이 묻을때가 자주 있는데 물티슈로 닦고 핸드크림을 발라주는 것이 좋다. 그렇지 않으면 건조한 공기속에 손이 트고 갈라질 것이다.

캠프 파이어

– 흔드는 핫팩(1박에 최소 2개)

붙이는 핫팩이나 너무 싸구려 핫팩은 피하자. 다이소에서 파는 1,000원에 2개짜리 12시간 지속 핫팩을 추천한다. 잠을 잘때 침낭 발끝과 몸통에 핫팩을 하나씩 놓자. 반드시 침낭 발끝에 핫팩을 놓아야 한다. 그렇지 않으면 발이 시려서 잠을 자기 힘들다.

– 숨쉬기 좋은 편한 마스크

공기나 건조하므로 마스크를 쓰고 잠을 자면 좋다. 공기가 너무 건조해서 밤새 마스크를 쓰고 자도 마스크에 습기가 차지 않는다.

– 플래시 라이트(손전등)

밤에는 캠핑장도 매우 어둡다. 스마트폰 플래시를 써도 되지만 휴대용 손전등 보다 불편하고 배터리도 아깝다. 머리에 착용 가능한 스포츠용 헤드렌턴이 가장 편하다.

– 스마트폰, 디지털 카메라 충전기 / 보조 배터리 / 멀티탭

캠핑장에 멀티탭이 있어서 충전을 할 수 있다. 콘센트 개수는 많지만 부족할 것을 대비해서 멀티탭을 따로 준비하면 좋다.

# 기타

겨울이라 그런지 파리는 거의 없었다. 가끔 붙는 한두마리는 그냥 내쫓으면 된다.

가이드가 해주는 음식은 무난했다. 바베큐는 너무 기대하지 말자.

식재료 다듬기, 설거지, 청소, 짐나르기, 나무하기 등 협업을 해야하는 일들이 있는데 가이드가 일일이 배정해주지 않으므로 알아서 적극 참여하자. 누가 열심히 참여하고 누가 뺀질거리는지 티가 난다. 겉보기에 가이드가 신경 안쓰는 것 처럼 보이지만 뺀질이가 누군지 가이드가 체크하고 있다가 나중에는 직접 일을 부여한다.