본문 바로가기

Backend

(14)
토큰 검증시 캐시 처리하기 이번에 인증서버 작업을 신행하면서 리소스서버에 접근할시, 토큰을 검증하는 부분이 필연적으로 발생하게 되는데, 페이로드안의 유저아이디가 db상에 존재하는지를 확인하기 위해 API 호출마다 쿼리가 발생하는 것을 보게되었다. 이 부분은 나중에 db 부하지점이 될 수 있고, 반복적인 읽기에 대한 호출이기에 캐시로 처리를 하기로 했다. 캐시의 읽기 전략은 look aside 패턴을 사용했다. 플로우는 대략 아래와 같다. - 데이터를 찾을때 우선 캐시된 데이터를 우선 확인하여 있으면(cache Hit) 캐시데이터를 제공한다. - 캐시된 데이터가 없으면 DB에서 조회한다. - DB에서 조회해온 데이터를 cache store에 업데이트 한다. 캐시의 만료시간 TTL을 accessToken의 만료 시간(1시간)으로 잡았..
젠킨스 도커플러그인이 인식되지 않을때 https://stackoverflow.com/questions/27879713/is-it-ok-to-run-docker-from-inside-docker/33003273#33003273 Is it ok to run docker from inside docker? I'm running Jenkins inside a Docker container. I wonder if it's ok for the Jenkins container to also be a Docker host? What I'm thinking about is to start a new docker container for each integratio... stackoverflow.com 젠킨스로 도커이미지를 빌드하는 파이프라인을 실행하던 중에..
잡큐와 마이크로큐 계속)
Image resizing with Lambda@edge -2 이미지 리사이징 서버 구조를 구성하고, 서버 로직까지 작성해서 서비스를 구축했더니 갑자기 특정 파라미터를 호출한 사진 파일에서 503에러 났다. aws lambda 503 error 를 검색하자 이와같은 설명이 있었다. 이후 cloudwatch에 쌓여있는 람다함수의 로그를 유심히 보기 시작했는데, 에러가 난 요청의 총 실행시간이 3초를 초과한것이 아닌가?! 람다함수의 제한 시간은 디폴트 값이 3초로 지정되어있다. 이를 초과했기 때문에 503에러를 응답한 것이다. 하.지.만! 이미지 리사이징을 처리하는데 3초이상 걸린다는것이 몹시 이상하다고 생각했는데, 람다 서버의 메모리가 128mb로 맞춰져 있어 터무니 없는 시간이 걸린 것이었다. 아래의 차트를 참고하자. 여기서 중요한 점은, 람다의 메모리는 비용과 선..
Image resizing with Lambda@edge -1 이미지 리사이징 서버의 구조는 이러하다. 개발팀에 공유하기 위해서 간단히 그린 그림인데 설명하자면, 이미지 요청시 캐싱된 이미지의 경우 바로 응답처리되고 캐싱되지 않은 경우, 람다함수에서 실시간 리사이징 처리되어 응답된다. 리사이징 함수의 코드는 아래와 같다. 'use strict'; const querystring = require('querystring'); // Don't install. const AWS = require('aws-sdk'); // Don't install. // http://sharp.pixelplumbing.com/en/stable/api-resize/ const Sharp = require('sharp'); const S3 = new AWS.S3({ signatureVersi..
Image resizing with Lambda@edge 이번에 클라이언트 개발측에서 호출되는 이미지가 너무 커서 로딩시간이 오래걸린다는 점을 문제로 제기했다. 기존에 GCP storage에 썸네일 이미지와 원본이미지를 같이 저장했는데 원본이미지를 호출하는 페이지가 많아 앱에서는 무리가 되었으리라 생각한다. 그래서 이미지를 원하는 사이즈로 호출하면 바로바로 잘라서 줄 수 있게끔 lambda@edge를 사용해, 이미지 리사이징 서버를 구축하기로 했다. 기존에 Lambda를 지원하는데 lambda@edge를 써야했던 이유는 이미지 리사이징을 온디맨드로 진행하려 했기 때문이다. 바로바로 이미지를 잘라준다는 것은 이미지를 한번 호출할때마다 이미지 리사이징 서버에 호출이 된다는 것을 의미한다. 그래서 중간에 이미 호출한 이미지를 캐싱해주는 역할을 해주는 cloudfro..
null은 언제 허용해야 하는가? null 값은 pain of ass 어떻게 관리할지 정리해보자 계속)
why JWT? jwt 인증은 왜 쓰는지? issue) - jwt 방식 vs API token 방식 vs session 방식 비교 - jwt 토큰이 도둑맞는 문제?!
mysql - like문 특정 문자를 포함한 데이터를 가져오고싶을때 like문을 쓴다. 최근에 지역을 구분하여 데이터를 가져오는 처리를 하면서 like문 쓰는 것을 봤는데 성능이슈가 없을까 하는 생각이 들었다. 아니나 다를까 성능이슈에 대한 질문이 많았는데... 계속)
배포 원리 배포는 어떻게 이루어지는걸까? 지금까지 AWS의 클라우드 서비스를 이용한 기본적인 배포시스템을 구축해본적은 있다. 배포시스템을 구축하는 것까지에 대해서는 다양한 설명과 서적이 많다보니 어렵지 않았는데, 어떤원리로 내가 짠 코드가 모두가 볼 수 있는 인터넷에서 구동 되는것인지 알고싶어졌다. 먼저, 웹 호스팅이라는 개념이 있다. 리소스를 저장, 중개, 관리하는 일을 웹호스팅이라고 한다. 계속)