분류 전체보기
-
PHP의 Fiber분석과탐구 2024. 4. 11. 04:14
개요 PHP는 멀티스레딩 지원이 빈약하다. pthread 같은 extension을 잠시 지원했으나 더 이상 지원을 하지 않는다. 한편, parallel란 익스텐션이 나와 멀티스레딩을 지원하려는 시도가 있었다. 그리고 활발하게 개발되다가 중단되었다. 멀티스레딩 지원이 빈약하고 또 개발 중단이 일어나는 이유를 추측해 본다면, 프로그래머가 그것을 필요로 하는 경우가 적기 때문이다. 즉, 수요가 없는 것이다. PHP는 C++, Java같은 일반적인 언어가 아니라 웹 페이지 전달을 목적으로 하기 때문이다. 일반적인 언어에선 처리 속도의 향상, 처리량의 향상을 이유로 멀티스레딩이 요구된다. PHP에선 그렇진 않다. 그런데도, PHP를 하다 보면 멀티스레드가 있으면 좋겠다 싶은 경우가 있다. 파일 입출력, 다른 서버..
-
Postman CLI기반 API 테스트 자동화분석과탐구 2024. 4. 9. 16:25
개요 Postman을 사용하여 개별 API 테스트를 하는 것은 널리 알려진 개발 방법이다. 그러나, 개별 API뿐만 아니라 여러 API를 CLI에서 일괄적으로 테스트할 수 있다는 사실은 그렇지 않다. 프로그래머가 버튼을 매번 누르는 것보다, Postman CLI을 기반으로 테스트를 자동화하여 효율적으로 개발을 할 수 있을 것이다. 이에 그 방법을 제시하고자 한다. Postman CLI Postman은 GUI기반으로 API를 테스트할 수 있다. 하지만, 자동화를 하기에 GUI는 부족한 점이 있다. 이에, Newman이라는 이름의 node.js 패키지가 나왔고, CLI 기반으로 테스트를 할 수 있었다. 현재, Postman CLI이라는 이름으로 공식적으로 CLI툴을 지원한다. Postman CLI를 이용하여..
-
cron, logrotate 그리고 docker짧은경험기 2024. 2. 6. 21:19
서론 docker위에 cron, logrotate를 아파치 웹 서버에 적용하면서 발생한 문제와 해결 방법을 다룬다. 관련링크 용어정리 cron: 잡 스케줄링 시스템이다. 커맨드, 스크립트, 프로그램 실행 등을 할 수 있다. cron job: cron으로 실행할 로직을 가리킨다. crontab으로 등록할 수도 있고, /etc/cron.d에 로직을 담은 파일을 위치시키면 자동으로 실행된다. crontab: cron table의 줄임말로, cron에서 실행할 잡을 관리하기 위한 커맨드이다. logrotate: 로그 파일을 관리하기 위한 유틸리티이다. 'mylog.log'에 rotate가 적용되면 'mylog.log.1', 'mylog.log.2'... 와 같이 분리 저장되고, 새로운 로그는 'mylog.log..
-
스트리밍 서비스가 궁금하다분석과탐구 2023. 12. 16. 00:10
스트리밍 서비스가 궁금하다. 최근 트위치가 한국에서 철수했다. 관련 담화들을 보면서 몇 가지 키워드들을 발견했다. 망 사용료, 그리드 네트워크, 스트리밍 서비스 등등... 가벼운 주제가 하나도 없다. 기억을 더듬어보니 개인적으로 스트리밍과 관련된 뭔가를 다룬 적이 한 번도 없었다. 그래서 한 번 알아봤다. 실시간 중계 서비스 분석 스트리밍 서비스도 클라이언트가 서버에 비디오 파일을 요청하고 서버가 파일을 응답하는 구조일 것이다. 서버는 나중에 보기로 하고 보통의 클라이언트인 브라우저에선 어떻게 처리할까? 브라우저에선 HTML5의 video 태그를 이용하여 브라우저에서 비디오를 보여줄 수 있다. 평소에 보던 스포티비에서 실시간 중계를 하길래 보다가 캡처한 것의 일부이다. html을 보니 video 태그를 ..
-
Amazon Lightsail에 배포문제해결 2023. 12. 4. 21:49
서론모두의 토론 백엔드를 아마존 라이트세일에 배포하는 과정을 정리했다.배포 과정모두의 토론 백엔드는 도커 위에 개발 환경을 구축했다. php-apache 이미지를 기반으로 라라벨 웹 서버를 구동시키고, redis 이미지를 활용하여 job을 처리하고, mysql 이미지를 활용하여 데이터베이스를 사용했다. 세 컨테이너를 관리하기 위하여 도커 컴포즈를 활용했다. 따라서 배포 역시 도커를 기반으로 하면 좋을 것이라고 생각하고 진행했다.0. 배포 방법 고민어떻게 배포를 할까 생각했다. AWS, Azure 사이에서 고민했다. Azure를 사용하면 새로운 경험을 할 수 있지만, 결제 정보 관리 포인트가 늘어나므로 AWS로 결정했다. AWS를 만지작 거리다 보니 Lightsail이란 게 눈에 띄었다. AWS의 여러 서..
-
클라우드 트래픽 비용 비교분석과탐구 2023. 11. 29. 20:52
서론 트래픽 비용을 제대로 분석하려면 트래픽당 과금 구조 뿐만 아니라 서버, 디스크, 문제 해결 서비스 등의 가격까지 모두 고려해야 한다. 왜냐하면 트래픽 비용을 다른 서비스 가격에 녹여내서 트래픽 비용은 싼데 다른 서비스가 비싸지거나 그 반대도 가능하기 때문이다. 하지만, 모두 고려할 에너지가 없는 관계로, 관심이 가는 선에서 서버 대여와 트래픽 비용만 따져보려고 한다. 트래픽 계산 트래픽은 사용자가 웹 서비스에 보내는 패킷량과 웹 서비스로부터 받은 패킷양(데이터)의 총합이다. 클라우드 서비스 용어로 다시 말하면, 인바운드(사용자ㅡ>서버)와 아웃바운드(서버ㅡ>사용자) 트래픽이라고 할 수 있다. 인바운드는 초당 트래픽 상한을 두고 무료로 제공하되, 기준을 넘으면 따로 계약하는 것으로 보인다(링크). 아웃..
-
뻘스러운 리팩토링 후짧은경험기 2023. 11. 1. 04:33
뻘스러운 리팩토링 후 개발하던 도중 UserOpinion 클래스가 신경에 거슬렸다. 이 클래스는 현재 로그인한 유저의 의견을 CRUD 하는 용도이다. 내부에 상태가 없고, CRUD하는 용도라 공개된 메소드가 모두 static이었다. 다음과 같은 형태이다. class UserOpinion { static fetch() { ... } static store() { ... } } 그런데, 이상하게 무언가 마음에 안 드는 것이었다. 어떤 점이 신경에 거슬리는지도 모르겠고. 그래서 멍청하게 static을 우선 다 지웠다. 그래도 마음에 안 든다. 왜 신경이 거슬릴까. 그 후로도 이것저것 뻘스럽게 바꿨는데 마음에 안 들었다. 결국, 쉬다가 왜 이런 결과가 나왔는지 처음부터 생각했다. 처음의 계획은 처음의 계획은 U..
-
타입스크립트 삽질짧은경험기 2023. 10. 26. 15:35
1. 타입을 값으로 바꾸려는 삽질 상황 타입스크립트에서 타입을 값으로 바꿀 수 있을까. 이 생각은 FixedArray를 타스에서 구현하려고 한 것으로부터 시작된다. 아래 코드는 타입스크립트에서 FiexArray를 구현하려고 했던 코드이다. class FixedArray { data: RangeObject; constructor() { // 클래스 안에서 N(N으로 주어지는건 1, 2, 4.. 중에 하나인데) // 이것을 타입이 아니라 값으로 얻어오고싶음 // 생성자 인자로 넘기는 방법도 있겠지만, 템플릿 파라미터로도 가능한지 궁금 } } type SIZE = 1 | 2 | 4 | 8 | 16 | 32; type RangeObject = { [K in keyof [...Array]]: T; }; C++의 ..