목록Backend (33)
만족
가령 새로운 문의사항이 있다거나, 서버의 컴퓨팅 자원 소모량이 갑자기 늘어날 때 항상 모니터링을 하고 있는 것이 아니기 때문에 즉시 인지하기 어렵다. 그렇다고 별도의 알림 서버를 구축하자니 시간과 비용이 만만치 않은데, 텔레그램에서 지원하는 봇 API 를 사용하면 간단히 구현할 수 있다. https://telegram.org/ 텔레그램 – 새로운 메시징의 시대 빠르고. 안전하며. 강력함 telegram.org 먼저 텔레그램 계정을 생성하고, 앱을 다운로드받는다. Bot 생성 BotFather를 검색하고 우측에 파란색 체크 아이콘이 이있는 봇(맨 위)을 선택한다. start또는 시작 버튼을 누르면 다음과 같은 채팅이 표시된다. /newbot을 입력하면 두 종류의 봇 이름을 결정하게 된다. 첫 번째 봇 이름..
이것은 클라우드플레어의 프록싱이 켜진 상태에서 네트워크 정보를 시각화한 것이다. 클라우드플레어의 프록싱 기능을 사용하면, 인증서 설치 없이 https를 사용하거나 캐싱 등의 기능을 사용할 수 있지만 위에서 본 것 처럼 TTFB가 심하게 치솟는다. 이참에 웹 페이지 제공 서버와 리소스 전용 서버를 제외하고(이 경우 cdn을 이용했을 때 얻어지는 캐싱 효과가 더 크다고 판단했다) 나머지(api 서버 등)는 전부 자체 ssl을 사용하고 프록싱 기능은 꺼버렸다. 왜 일부 서비스에서 cloudflare cdn을 사용하지 않기로 했는지 작성할 것이다. TTFB가 늘어지는 이유가 뭘까 많은 블로그에서 찾아볼 수 있듯이 한국 망 사용료 관련 문제로 인해 무료 계정을 사용하면 외국에 있는 cdn으로부터 컨텐츠를 받아온다..
CPU 사용량 function get_server_cpu_usage() { $load = sys_getloadavg(); return $load[0]; } sys_getloadavg()는 길이가 3인 배열을 리턴하며, 각각 1분, 5분, 15분 평균 CPU 사용률을 의미한다. 배열의 0번 인덱스는 1분 평균 CPU 사용률을 의미한다. 이 값은 0~1사이의 값을 리턴하므로, 백분율로 표현하려면 $load[0]*100을 리턴한다. 메모리 사용량 function get_server_memory_usage() { $free = shell_exec('free'); $free = (string) trim($free); $free_arr = explode("\n", $free); $mem = explode(" ", ..
forever 모듈로 express 서비스를 배포한 후, 서비스가 죽는 현상이 관찰되었다. DDoS공격이 감지되긴 했지만, 서버가 아예 서버리는 상태가 아니라면 서비스가 죽은 후 다시 해당 서비스를 실행시키는 액션을 기대했지만 튕긴 상태로 유지될 뿐이였다. error: Forever detected script exited with code: 1 forever 에러 로그 맨 마지막엔 해당 오류가 찍혀 있었고, 그 외에 다른 특이사항은 없었다. 재미있는 것은 어떤 로그에서는 해당 로그가 표시된 뒤 서비스를 재시작한 이후, SIGTERM을 받고 프로세스가 죽어버리는 경우도 있었다. error: Forever detected script exited with code: 1 error: Script restar..
기존 사용하던 서버에서 Apache+php 조합을 사용하고 있기 때문에 nginx를 새로 설치하기는 부담스러워 apache+express 조합으로 서비스할 것이다. node/npm은 기존에 설치되었다고 가정한다. 설치하지 않았다면, soojae.tistory.com/25 를 참고해 설치를 진행하면 된다. apache의 경우엔 단순히 sudo apt-get install apache2 하면 된다. 버전 정보 Ubuntu 16.04 Apache 2.4.18 아파치 설정 sudo nano /etc/apache2/sites-avaliable/000-default.conf 를 이용해 vhost정보를 수정할 것이다. ... ServerName [도메인명(ex: test.com)] ServerAdmin [관리자 이메..
SQL Injection이란? SQL 주입(삽입)이라고도 부르며, 개발자의 의도대로 동작하지 않는 구문을 추가하여 피해를 입히는 공격 방식이다. SQL Injection 예시 const removeAccount= (accountId)=>{ database.executeQuery(`DELETE FROM Account WHERE id='${accountId}'`); }; 다음과 같은 코드가 있다고 해 보자. 유저가 정상적인 id를 입력할 때는 상관 없지만, 공격자가 accountId 값에 1' OR 1=1; -- 를 입력하게 되면 쿼리문은 다음과 같이 변한다. DELETE FROM Account WHERE id='1' OR 1=1; 따라서 모든 계정이 삭제되는 결과가 초래된다. 이런 식으로 데이터를 몽땅 날..
www.w3schools.com/php/phptryit.asp?filename=tryphp_compiler 실행 결과가 궁금하지만 내 프로젝트에 추가하긴 싫을 때 쓰면 유용하다. 속도는 기대하지 말 것...
참고: https://expressjs.com/en/4x/api.html#res Express 4.x - API Reference Express 4.x API express() Creates an Express application. The express() function is a top-level function exported by the express module. var express = require('express') var app = express() Methods express.json([options]) This middleware is available in Ex expressjs.com 자주 쓸 것 같은 프로퍼티에 대해 정리한다 Res.headersSent response heade..
