목록Backend (33)
만족

최근 fastify 라는 nodejs 를 알게 되었는데, 이 framework는 "express 보다 4배 빠르다" 고 한다.https://fastify.dev/benchmarks/ 위 사이트에 들어가보면 다양한 framework 들과 express의 벤치마크를 분석하는데, express 는 그 중에서도 압도적인 최하위를 기록하고 있다.벤치마크'use strict'const fastify = require('fastify')()const schema = { schema: { response: { 200: { type: 'object', properties: { hello: { type: 'string' } ..

const normalDoc = await MyModel.findOne(); mongoose를 이용하여 쿼리할 때 위와 같은 형태로 쿼리한다. https://mongoosejs.com/docs/index.html mongoose 의 quick start에서도 위와 같이 소개하고 있어 계속 이렇게 사용해왔지만, 클러스터링까지 사용하게 되면서 cpu, memory 사용량이 증가하여 조치를 취해야만 한다. 쿼리 시 어떤 데이터를 반환하는가? const normalDoc = await MyModel.findOne(); 이 코드를 사용했을 때 normalDoc에는 어떤 데이터가 할당될까? util.inspect와 console.log를 이용해 normalDoc을 찍어보면 { _id: 659bc8cc415b117a..

웹 서버를 구성할 때 가장 간단하면서 흔한 LAMP Stack(Linux, Apache, Mysql, Php)를 사용하고 별다른 설정을 하지 않았다면 이 포스트가 도움이 될 것이다. 기본적으로 prefork기반의 mpm을 사용하게 되는데, prefork방식은 요청 1개가 프로세스 1개에 대응되기 때문에 사용자가 늘어날 수록 메모리 사용량이 급증한다. (30~40%정도의 메모리를 사용하고 프로세스의 갯수도 매우 많다) 나 역시 이 문제를 해결하기 위해 event기반 mpm으로 변경했다. mpm은 어떤 종류가 있을까? 종류별로 어떤 장단점이 있을까? 어떻게 변경할 수 있을까? 한번 알아보자 Apache mpm prefork (기본값) 프리포크 방식은 한 개의 프로세스가 한 개의 연결을 처리한다. 아파치 설치..

apache mpm을 prefork에서 event로 변경하면서 php 모듈도 변경했는데 해당 작업 이후 발생한 문제이다. Uncaught Error: Call to undefined function apache_request_headers() ... 원인 기존의 apache php 모듈을 제거하고 php-fpm을 대신 활성화해서 apache_request_headers() 함수가 지원되지 않는다. apache-php 연결 모듈에 따라 지원 여부가 갈린다. + 이것도 좀 웃긴게 php 공식 문서에서도 어떤 페이지는 모듈 연결 방식에 상관없이 모두 된다고 하고 또다른 페이지에서는 안된다고 나온다. + 정확한 것은 php_info()를 호출해서 지원되는 환경 변수들을 체크해보면 알 수 있다. 당연하게도 apa..

결론만 보고싶다면 스크롤 맨밑으로 ㅎㅎ.. 현재 apache+express 조합으로 서비스를 운영중이다. client가 request를 보냈을 때 express project까지 도달하는 과정은 위와 같다. 그런데 express에서 req.ip 값을 확인하니, 전부 127.0.0.1로 찍혀 있었다. 왜 그럴까? 사실 express의 관점에서는 앞단에서 아파치가 프록시를 해주고 뭐고 그런건 관심없고 apache가 express에게 request를 보내는 것으로 인식된다. 따라서 자기 자신에게 포트 번호만 바꿔서 보내는 것으로 작동하므로, 요청 ip가 127.0.0.1로 찍히는 것이다. req.ip express의 req.ip는 어떻게 구현되어 있을까? expressjs https://github.com/e..
http 프로토콜을 강제로 https로 변경하여 사용하도록 설정해보자. https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Strict-Transport-Security Strict-Transport-Security - HTTP | MDN HTTP Strict-Transport-Security response header (종종 HSTS (en-US) 로 약칭) 는 HTTP 대신 HTTPS만을 사용하여 통신해야한다고 웹사이트가 브라우저에 알리는 보안 기능. developer.mozilla.org MDN에 의하면, Strict-Transport-Securty 헤더를 통해 클라이언트(브라우저)에게 https를 사용해야 한다고 알려줄 수 있다고 한다. Strict..
현재 운영중인 서비스에서 VPN으로 아이피를 해외로 돌려 악성 댓글을 작성하는 경우가 포착되었다. 따라서 요청 아이피를 확인해 해외 아이피인 경우 일부 기능을 사용할 수 없도록 할 것이다. 클라이언트 아이피 가져오기 function getClientIP() { $ipaddress = ''; if ($_SERVER['HTTP_CLIENT_IP']) { $ipaddress = $_SERVER['HTTP_CLIENT_IP']; } else if ($_SERVER['HTTP_X_FORWARDED_FOR']) { $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; } else if ($_SERVER['HTTP_X_FORWARDED']) { $ipaddress = $_SERVER['..

Attempting to renew cert (secret.kr) from /etc/letsencrypt/renewal/secret.kr.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration. The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping. sudo certbot renew 인증서 유효 기간이 30일도 남지 않아..