본문 바로가기

전체 글

(100)
웹은 당신의 눈을 속인다(2) - 실시간 (아님) 온라인 게임을 생각해 보자. 게임이라 그럴 수 있지만, 몇 분만, 아니 몇 초만 해봐도 이는 무조건 실시간 통신임을 확인할 수 있다. 우리가 흔히 ping이라고 하는 응답 속도가 우리나라 내의 유저끼리는 한 자릿수의 ms정도가 되고,이 말은 실제 상대방의 무빙(입력)은 우리에게 그 정도의 시간 내에 오기에, 이는 거의 실시간과 동일하다고 볼 수 있다.그렇지만 이것은 정해진 상대들에게만 입력 정보를 보내주기에 괜찮을 것으로 생각한다. 하지만 한 때 존재했었던 검색 엔진에서의 실시간 검색어 순위나 이런 것은 어떤가?만약 네이버 실시간 동시접속자 모두에게 fps게임마냥 ms단위로 실시간 정보를 바로바로 주어야 한다면...아마 네이버는 트래픽을 감당하지 못하고 터지지 않을까?그렇기 때문에 이들은 실시간이라고 써..
API 호출 성능 최적화 (feat. 사영 - Projection은 어디서나 보여요) 문제 상황클라이언트가 자주 사용하는 특정 API가 있는데, 이게 체감상 로딩이 느린것 같다라는 얘기를 들었다. 실제로 내가 사용해봐도, 부쩍 느려진 느낌이다.그래서 일단 AOP를 통해 @PerformanceCheck를 구현하고, API에서 걸리는 총 시간을 측정하기로 했다.아래의 코드 예시는 실제 코드가 아니라, 해당 상황을 재현하기 위해 사용된 코드이다. 문제 원인 파악정량적 상황 파악 파악을 위해 다음의 준비를 가진다.간편한 사용과 시간 체크라는 관심사 분리를 위해서 Spring AOP를 통한 어노테이션을 생성하고, 이를 통해 성능체크를 진행하려 한다. 자세한 내용은 이전에 관련 글을 써두었기에, 이를 참조하기 바란다.https://namucy.tistory.com/81 Aspect Oriented ..
AWS 무중단 배포 도입기 feat. CodeDeploy 문제 상황 )실제 서비스를 제공하면서 느낀 것은 "기획에서 요구했던 내용과 실제 사용자들이 사용하면서 필요하다고 느끼는 것이 매우 다르다"는 것이다.어떤 부분은 핫픽스를 요구할 정도로 빠른 업데이트를 요한다. 요청이 올때마다 즉각적으로 수정을 하고 업데이트를 할 수는 있다. 하지만 그것의 배포는 다른 문제다.현재 구축된 서비스 환경은 "중단 배포"를 사용하기 때문이다.또한, 양해를 구하고 중간에 업데이트 공지를 한다고 하더라도수십초의 다운 타임이 존재하게 되기에 이를 공지해주어야 하는 번거로움이 있다. 이 때문에 우리는 실 사용자들이 잘 사용하지 않는 시간인 밤에 업데이트를 하게 되었다. (CDN을 사용하는 프론트엔드측이 이럴때는 부럽다. 캐시가 있고, S3를 사용하는 방식 자체가 서버가 중단되지 않아 ..
private ECR은 public보다 비싸지만, 잘 사용한다면 어떨까? DevOps는 전체 인프라스트럭쳐의 구축 및 관리뿐만이 아니라,추가 리소스(예를 들어, 클라우드 리소스)를 사용할 경우, 이를 사용할 때의 비용을 최적화하는 것 또한 신경 써야 한다. IBM에서는 이와 관련한 FinOps라는 용어를 소개하고 있다. finance와 DevOps의 합성어로,클라우드 비용을 최적화하는 기술을 의미한다. 클라우드 리소스를 사용할 경우, 리소스의 효율성과 가치를 높이기 위해 협업하는 것이다.https://www.ibm.com/kr-ko/topics/finops FinOps란 무엇입니까? | IBMFinOps는 하이브리드 및 멀티클라우드 환경에서 비즈니스 가치를 극대화하는 것을 목표로 하는 클라우드 재무 관리 분야이자 문화적 관행으로 발전하고 있습니다.www.ibm.com  컨테이..
Spring Boot와 비교해보는 Nest.js의 핵심 Nest.js의 공식 문서의 초입부에는 Controller... 까지는 알고, 실제로 이는 Spring과 정말 흡사하다.그렇지만 그것 이외에는 이름이 비슷하더라도 Spring Boot와는 많이 달랐다. Nest.js의 요소를 설명하면서 Spring Boot의 어떤 것과 대응이 되는지 파악해보자. 1. 의존성 관리 기본적으로 둘 다 주로 사용하는 객체를 싱글턴으로 구현하고, 의존성 주입을 프레임워크가 직접해준다는 점에서 공통점이 있다.더보기이를 IoC(Inversion of Control) : 제어의 역전 - 개발자가 프로그램의 흐름을 제어하는게 아니라, 컨테이너 혹은 프레임워크가 흐름을 제어한다. 예를 들어서 Spring의 Spring Container를 IoC Container라 하는데, 이는 Bean..
Nest.js과 TypeORM TypeORM에서 Entity의 사용은 JPA와 흡사해 보여서 쓰면서 적응하면 될 것 같기는 하다. https://docs.nestjs.com/recipes/sql-typeorm Documentation | NestJS - A progressive Node.js frameworkNest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (..
Spring 개발자의 Nest.js 초입 작년에 개발에 입문 후 백엔드 개발에서 나의 학습의 진행은 아래의 순서와 같았다. 1. 사용할 언어에 익숙해지고; Java2. 그런 다음 웹 서버 프레임워크; Spring3. 마지막으로 고도화된 프레임워크를 다룬다; Spring Boot 같은 방식으로 이번에는 TypeScript와 express.js, Nest.js를 공부하려고 했으나일단 Nest.js를 배우기로 했다. express.js와 TypeScript는 Nest.js를 배워가면서 필요한 부분을 그때마다 찾아가는 식으로 해야 할 것 같다.무엇보다 Nest.js가 Spring과 그 구조가 유사하다고 말하기에, Nest.js를 배워가면서내가 모르는 문법이나 express.js(혹은 기타 JS기반 API 관련 내용)은 필요할때마다 알아가는 방식으로 진..
Terraform 핵심 프로세스 지난번 글https://namucy.tistory.com/93 Terraform을 통한 Infrastructure Provisioning서비스를 제공할 Infrastructure를 구성, 구축하는 것을 Infrastructure Provisioning이라고 한다. 연차가 많이 쌓인 개발자들은 코웃음을 칠 수준이겠지만, 본격적으로 개발이라는 것에 손대기 시작한 8월namucy.tistory.com  Terraform을 IaC(Infrastructure as Code)라고 설명했듯이,Terraform은 코드, 프로그래밍 언어를 통해서 인프라를 구축하기 때문에 문법이 존재한다.Go 기반 HCL 선언형 언어로 관리되기 때문에 생소할 수는 있으나, 써본 경험에 의하면 JSON같은 느낌이다.  문법에 대한 설명은 ..