목표. NAT뒤의 OpenWRT 웹 서버에 접속하기 지난 3월부터 끌어온 이슈를 5월 중순이 되어 해결했다. 원했던 기능은 NAT(공유기) 뒤에 호스트에서 실행되는 서버에 접속하는 것이다. 호스트는 우리가 OpenWRT를 기반으로 펌웨어를 다시 올린 공유기이며, OpenWRT에서 동작하는 웹서버인 Luci에 접속하는 것이 목표이다. 방법 1. 포트포워딩 이를 달성하는 가장 간단한 방법으로는 포트 포워딩이 있다. 공유기에서 제공하는 기능인 포트포워딩은 외부에서 접속하는 포트와 내부 포트를 연결해주는 기능이다. 그러나, 중첩된 NAT(공유기에 공유기를, 다시 또 공유기를 물리는 중첩된 상태)에서 포트 포워딩을 해줘야 하는 경우를 고려해야 했다. 또한, 설치하는 사람이 이러한 설정 방법을 알고 적용해야 하는 ..
-
OverlappedIO에서 소켓 버퍼 사이즈를 바꾸는 것은 대부분 성능에 영향이 없다.
윈도우즈 소켓 함수인 send()는 데이터의 전송을 보장하지 않는다. 정확히는 유저 버퍼에 있는 데이터를 소켓의 송신 버퍼에 복사를 해줄 뿐이다. 데이터 전송은 운영체제에서 알아서 해준다. 그럴 수밖에 없는 것이, TCP 같은 경우는 congestion control, flow control 같은 전송량 제어 프로토콜을 따라야 하기 때문이다. OverlappedIO을 이용하여 콜백 함수(OverlappedIO Completion Routine)나 IOCP 큐로 통지를 받은 것은 유저 버퍼의 데이터가 소켓의 송신 버퍼에 복사된 것을 의미한다. 이 경우엔 All or Nothing으로 요청한 데이터 사이즈만큼 복사가 완료될 때까지 성공 이벤트가 뜨지 않는다. 그런데, 예외적인 동작이 하나 있다. 그것은 바로..
-
소켓의 수신 버퍼 크기를 0으로 할 때 주의할 점.
IOCP 및 overlapped IO를 다루는 글에서 소켓의 수신 버퍼 사이즈를 0으로 만들어서, zero copy의 이점을 살리라고 되어 있다. setsockopt 함수와 SO_RCVBUF를 이용하여 소켓의 수신 버퍼 사이즈를 0으로 만들 수 있다. zero copy는 도착한 패킷이 커널의 소켓 수신 버퍼를 거치지 않고, 유저가 제공한 버퍼에 바로 복사되는 것을 의미한다. 그러나, SO_RCVBUF의 사이즈를 0으로 만든다고 zero copy가 되는 것은 아니며, 수신 버퍼 사이즈를 0으로 만드는 것은 주의해야할 점이 있다. zero copy와 SO_RCVBUF의 관계는 이 링크에 있다. https://crmerry.tistory.com/29?category=1031711 아래 인용글에 커널 소켓의 수..
-
Amazon Lightsail에 배포
서론모두의 토론 백엔드를 아마존 라이트세일에 배포하는 과정을 정리했다.배포 과정모두의 토론 백엔드는 도커 위에 개발 환경을 구축했다. php-apache 이미지를 기반으로 라라벨 웹 서버를 구동시키고, redis 이미지를 활용하여 job을 처리하고, mysql 이미지를 활용하여 데이터베이스를 사용했다. 세 컨테이너를 관리하기 위하여 도커 컴포즈를 활용했다. 따라서 배포 역시 도커를 기반으로 하면 좋을 것이라고 생각하고 진행했다.0. 배포 방법 고민어떻게 배포를 할까 생각했다. AWS, Azure 사이에서 고민했다. Azure를 사용하면 새로운 경험을 할 수 있지만, 결제 정보 관리 포인트가 늘어나므로 AWS로 결정했다. AWS를 만지작 거리다 보니 Lightsail이란 게 눈에 띄었다. AWS의 여러 서..
-
CRTP는 어떻게 가능할까?
링크 : CRTP(Curiously recurring template pattern) Curiously recurring template pattern - Wikipedia The curiously recurring template pattern (CRTP) is an idiom in C++ in which a class X derives from a class template instantiation using X itself as a template argument.[1] More generally it is known as F-bound polymorphism, and it is a form of F-bounded qu en.wikipedia.org CRTP라는 코드 구성이 어떻게 가능한지 살펴볼 ..
-
std::move에 대하여
std::move 선언std::move의 선언은 다음과 같다.템플릿 함수 std::move는 함수다. 그 선언 모습은 위와 같다. 첫 번째 줄을 보면 템플릿으로 된 것을 볼 수 있다.반환형함수의 반환형을 보자. constexpr 키워드가 붙어있다. 함수에 붙은 constexpr은 이 함수가 컴파일 타임에 계산될 수도 있으니, 컴파일 타임에 계산할 수 있다면 우선하라는 의미이다. constexpr을 제외한 반환형은 std::remove_reference_t&&이다. 즉, T라는 타입에서 reference를 제거한 것에 &&을 추가한다. &&은 rvalue reference이다. 즉, T라는 타입에서 reference을 제거하고 다시 rvalue reference를 추가하는 것이다.함수 이름 std::mov..
-
스트리밍 서비스가 궁금하다
스트리밍 서비스가 궁금하다. 최근 트위치가 한국에서 철수했다. 관련 담화들을 보면서 몇 가지 키워드들을 발견했다. 망 사용료, 그리드 네트워크, 스트리밍 서비스 등등... 가벼운 주제가 하나도 없다. 기억을 더듬어보니 개인적으로 스트리밍과 관련된 뭔가를 다룬 적이 한 번도 없었다. 그래서 한 번 알아봤다. 실시간 중계 서비스 분석 스트리밍 서비스도 클라이언트가 서버에 비디오 파일을 요청하고 서버가 파일을 응답하는 구조일 것이다. 서버는 나중에 보기로 하고 보통의 클라이언트인 브라우저에선 어떻게 처리할까? 브라우저에선 HTML5의 video 태그를 이용하여 브라우저에서 비디오를 보여줄 수 있다. 평소에 보던 스포티비에서 실시간 중계를 하길래 보다가 캡처한 것의 일부이다. html을 보니 video 태그를 ..
-
도커를 이용하여 PHP 개발 환경 설정하기
도커를 이용한 PHP 개발 환경 구축의 이점 도커를 이용한 개발, 배포 환경 구성의 이점은 무엇일까. 재사용하기 좋다는 것이 가장 크지 않나 싶다. 재사용하기 좋다는 것은 다음과 같다. 한 명의 프로그래머가 도커 기반으로 개발환경을 꾸미면 나머지 사람들은 그대로 사용하면 된다. 나머지 사람들은 같은 팀원일 수도 있고 미래의 내가 될 수도 있다. 그리고 이렇게 올려놓은 개발환경에 설정파일을 바꿔 서비스에도 올릴 수 있고. 개발환경을 꾸민다는 것은 단순히 IDE만을 설치하는 것이 아니라 프로그램을 실행하기 위한 라이브러리나 시스템 도구, 런타임 등 필요한 것들을 구성하는 것을 의미한다. 따로 세팅을 한다면, 똑같은 일을 여러 번 반복하게 되어 시간이 낭비된다. 그리고, 시스템에 기본적으로 적용된 버전 차이에..
-
TOC 만들기
TOC 만들기 TOC는 Table of contents로 목차를 가리킨다. 티스토리 블로그에서는 자체 목차는 없지만, Tocbot같은 라이브러리가 존재한다. tocbot을 그대로 적용하려고 했다가 직접 만들어보는 것도 해볼 만한 것 같아서 시작하였다. 목적 현재 블로그에 TOC를 적용할 수 있도록, TOC를 처음부터 만든다. 목표 블로그에 TOC를 라이브러리 없이 제작한다. 대상은 사용 중인 티스토리 블로그와 현재 선택한 블로그 스킨이다. TOC를 선택하면 해당 문단으로 이동하는 등의 기본적인 기능을 추가한다. 과정 티스토리 블로그는 관리자 메뉴에서 스킨 편집을 할 수 있다. 편집을 누르면, HTML과 CSS를 수정할 수 있고, 필요한 파일을 업로드할 수 있도록 되어 있다. 이에 HTML 탭 하단에 자바..
Recent
-
웹서버 권한분석과탐구 2025.03.25 13:37
1. 개요웹서버 권한을 보면 644, 600이 보이는데, 왜 이런 권한을 사용하는지 알아본다2. 644, 600 권한의 의미644 권한은 rw | r | r 권한으로 사용자는 rw, 그룹은 r, other는 r인 권한이다. 실행은 없는 권한이다. 600은 이것보다 더 강력한 권한으로 그룹과 other는 읽기조차 못한다. 이러한 권한의 주요 특징은 다음과 같다.보안(실행을 하지 못함)필요 최소의 권한(목적에 맞는) 644 권한이 들어간 파일은 주로 html, css, js로 공개적으로 읽을 수 있는 파일들이다.600 권한이 들어간 파일은 소유자만 읽고 쓸수있는 설정 파일, 비밀 키 등이다.3. 웹서버에서 644, 600 권한을 사용하는 이유644 권한웹 서버는 클라이언트에 콘텐츠를 제공해야하므로, 웹서버 ..
-
PHP의 Fiber분석과탐구 2024.04.11 04:14
개요PHP는 멀티스레딩 지원이 빈약하다. pthread 같은 extension을 잠시 지원했으나 더 이상 지원을 하지 않는다.한편, parallel란 익스텐션이 나와 멀티스레딩을 지원하려는 시도가 있었다. 그리고 활발하게 개발되다가 중단되었다.멀티스레딩 지원이 빈약하고 또 개발 중단이 일어나는 이유를 추측해 본다면, 프로그래머가 그것을 필요로 하는 경우가 적기 때문이다. 즉, 수요가 없는 것이다. PHP는 C++, Java같은 일반적인 언어가 아니라 웹 페이지 전달을 목적으로 하기 때문이다. 일반적인 언어에선 처리 속도의 향상, 처리량의 향상을 이유로 멀티스레딩이 요구된다. PHP에선 그렇진 않다. 그런데도, PHP를 하다 보면 멀티스레드가 있으면 좋겠다 싶은 경우가 있다. 파일 입출력, 다른 서버에 A..
-
스트리밍 서비스가 궁금하다분석과탐구 2023.12.16 00:10
스트리밍 서비스가 궁금하다. 최근 트위치가 한국에서 철수했다. 관련 담화들을 보면서 몇 가지 키워드들을 발견했다. 망 사용료, 그리드 네트워크, 스트리밍 서비스 등등... 가벼운 주제가 하나도 없다. 기억을 더듬어보니 개인적으로 스트리밍과 관련된 뭔가를 다룬 적이 한 번도 없었다. 그래서 한 번 알아봤다. 실시간 중계 서비스 분석 스트리밍 서비스도 클라이언트가 서버에 비디오 파일을 요청하고 서버가 파일을 응답하는 구조일 것이다. 서버는 나중에 보기로 하고 보통의 클라이언트인 브라우저에선 어떻게 처리할까? 브라우저에선 HTML5의 video 태그를 이용하여 브라우저에서 비디오를 보여줄 수 있다. 평소에 보던 스포티비에서 실시간 중계를 하길래 보다가 캡처한 것의 일부이다. html을 보니 video 태그를 ..
-
Amazon Lightsail에 배포문제해결 2023.12.04 21:49
서론모두의 토론 백엔드를 아마존 라이트세일에 배포하는 과정을 정리했다.배포 과정모두의 토론 백엔드는 도커 위에 개발 환경을 구축했다. php-apache 이미지를 기반으로 라라벨 웹 서버를 구동시키고, redis 이미지를 활용하여 job을 처리하고, mysql 이미지를 활용하여 데이터베이스를 사용했다. 세 컨테이너를 관리하기 위하여 도커 컴포즈를 활용했다. 따라서 배포 역시 도커를 기반으로 하면 좋을 것이라고 생각하고 진행했다.0. 배포 방법 고민어떻게 배포를 할까 생각했다. AWS, Azure 사이에서 고민했다. Azure를 사용하면 새로운 경험을 할 수 있지만, 결제 정보 관리 포인트가 늘어나므로 AWS로 결정했다. AWS를 만지작 거리다 보니 Lightsail이란 게 눈에 띄었다. AWS의 여러 서..
-
클라우드 트래픽 비용 비교분석과탐구 2023.11.29 20:52
서론 트래픽 비용을 제대로 분석하려면 트래픽당 과금 구조 뿐만 아니라 서버, 디스크, 문제 해결 서비스 등의 가격까지 모두 고려해야 한다. 왜냐하면 트래픽 비용을 다른 서비스 가격에 녹여내서 트래픽 비용은 싼데 다른 서비스가 비싸지거나 그 반대도 가능하기 때문이다. 하지만, 모두 고려할 에너지가 없는 관계로, 관심이 가는 선에서 서버 대여와 트래픽 비용만 따져보려고 한다. 트래픽 계산 트래픽은 사용자가 웹 서비스에 보내는 패킷량과 웹 서비스로부터 받은 패킷양(데이터)의 총합이다. 클라우드 서비스 용어로 다시 말하면, 인바운드(사용자ㅡ>서버)와 아웃바운드(서버ㅡ>사용자) 트래픽이라고 할 수 있다. 인바운드는 초당 트래픽 상한을 두고 무료로 제공하되, 기준을 넘으면 따로 계약하는 것으로 보인다(링크). 아웃..