백엔드 개발자(node.js)가 되는 과정 76

백엔드 기술 면접 회고 (객체지향, 데이터베이스, 호이스팅과 스코프)

객체지향프로그래밍에 대한 질문 파이썬을 처음 공부하던 시절부터 지금까지 몇 차례 객체지향에 대해 정리된 글들을 읽어왔었지만 항상 구체적으로 어떻게 구현해야할까 생각하면 쉽게 감이 오지 않았다. 지금 생각해보면 Nest.js 프레임워크가 객체지향 프로그래밍을 따르는 것으로 보인다. 컨트롤러와 서비스 하나하나를 객체로 구분하고 의존성 주입, 상속 등의 개념이 객체지향과 연관되어 있으니 말이다. 이렇듯 완성된 거대한 구조를 지닌 객체지향 프로그래밍의 예시를 주로 접하다 보니 설계 관점에서 바라봤을 때 너무 큰 벽으로 느껴졌기에 그저 막막했던게 아닌가 생각한다. 객체지향이란? 객체 지향은 소프트웨어의 핵심을 기능이 아닌 객체로 삼으며 “누가 어떠한 일을 할 것인가?”에 초점을 둔다. 책임과 권한을 가진 객체들이..

http 프로토콜로 서버 간 통신하기 - Nest.js와 Flask

Nest.js에서 파이썬 Flask 서버에 접근하기 해당 과정은 MSA 학습 과정에서 메시징, 큐 기반 통신을 구현하기 전, http 통신으로 서버간 소통한다면 어떻게 구현할 수 있을까를 알아보는 과정에서 구현한 결과이다. Python 서버와 Node.js 서버 간 통신하기 아래 과정을 간단하게 구현한다. pytube라는 파이썬 패키지를 사용하면 유튜브 링크 입력 시 해당 영상 정보를 받을 수 있다. 1번 기능을 하는 서버를 Flask로 구축하고, Nest.js 서버에서 Flask서버로 유튜브 링크를 보내면 관련 정보를 받도록 한다. 파이썬 pytube 서버 # app.py from flask import Flask, request from werkzeug.exceptions import BadReque..

Nestjs 기반 테스트코드 작성법 공부중 - 2일 차 회고

지난 시간 Nest.js 공식 문서를 참조하여 내가 만든 간단한 API를 기반으로 테스트 코드를 아래와 같이 무작정 작성했다. 아래 테스트코드에 담긴 의미는 "컨트롤러가 서비스에 잘 연결되어 있나?" 이다. 아래 코드는 현재 문제가 많은 상태이며 오늘 어떤 문제게 직면했고, 어떻게 수정했는지 살펴보고자 한다. import { Test, TestingModule } from '@nestjs/testing'; import { UserService } from './user.service'; import { User } from './user.entity'; import { UserController } from './user.controller'; describe('UserService', () => { l..

Nestjs 기반 테스트코드 작성법 공부중 - 1일 차 회고

Nestjs로 테스트코드를 작성하는 방법을 배워 둘 필요성을 느껴 공부를 시작했다. 가장 먼저 Nest 공식 문서를 참고했지만 솔직히 어떤 느낌으로 접근하는지 정도만 파악할 수 있었을 뿐 거~의 도움이 되지 않았다. 공식문서에서 아래 코드를 확인할 수 있다. import { Test } from '@nestjs/testing'; import { CatsController } from './cats.controller'; import { CatsService } from './cats.service'; describe('CatsController', () => { let catsController: CatsController; let catsService: CatsService; beforeEach(asy..

socket.io를 활용한 채팅 기능 구현에 대한 회고

이전 라이브 스트리밍 프로젝트에서 작성한 채팅 구현 코드를 회고하는 과정에서 문제점을 개선했습니다. 먼저 WebSocket과 Socket.io의 차이점에 대해서 다시 살펴보았습니다. WebSocket: 웹 표준 프로토콜로, RFC 6455에 정의되어 있습니다. 이는 웹 브라우저와 웹 서버 간의 표준화된 양방향 통신 프로토콜입니다. Socket.io: WebSocket을 기반으로 하지만, 실제로는 여러 프로토콜을 사용할 수 있습니다. 먼저 WebSocket을 시도하고, 그 후에 다른 전송 방법(예: 폴링)을 사용할 수 있습니다. 또한 이벤트 처리, 룸, 네임스페이스 등의 기능을 내장하고 있어 WebSocket 연결 이후 여러 부수적인 기능을 지원하는 편의성을 지니고 있습니다. 결론적으로, WebSocket..

마이크로 서비스에 대해 간략히 살펴보기

마이크로 서비스란? 클라우드 서비스의 발전으로 서버 인프라 구축에 드는 시간이 월등히 감소했고, 이에 맞춰 애플리케이션 개발과 운영도 적시에 진행되도록 하는 설계, 개발, 운영 기법이 요구되었다. 그 중 하나로 떠오른 기법이 바로 마이크로 서비스 기법이다. 이는 독립적으로 개발된 서비스(서비스 컴포넌트)를 여러 개 조합해서 하나의 애플리케이션으로 만드는 구조를 말한다. 이를 통해 소규모 서비스를 빠르게 런칭하고, 철회하는 것이 가능한 유연한 환경을 구성하여 빠른 시장 선점을 기대한다. 장점 작은 단위의 애플리케이션의 릴리즈, 변경이 가능 (기존 모놀리스는 작은 단위의 수정이 곧 애플리케이션 전체 수정을 의미한다.) 각 서비스의 규모, 요청의 정도에 따라 유연한 스케일 인/아웃이 가능하다. (가령 주문 조..

이벤트 기반 아키텍처(EDA) 살펴보기

이벤트기반 아키텍처 아래 설명은 우아한테크 MSA의 이벤트기반 아키텍처 영상을 참고하여 정리한 내용입니다. 영상 참조 MSA와 EDA EDA(Event-Driven Architecture)는 MSA(Microservice Architecture)도입의 핵심 이유 중 하나인 서비스의 독립을 충족시키기에 적합하여 적용된다. 사업 규모가 커지게 되면 다수의 회사가 Monolithic 구조에서 MSA로의 전환을 고려하는데, 그 이유는 내부적으로 관리해야할 서비스의 확장, 규모가 증가하는데 있다. 가령 로그인 기능을 생각해보자. 과거 서비스 규모가 작을 떄는 로그인 요청 시 계정 검증, 로그인 허용 정도의 수준에서 끝났을지도 모른다. 하지만 이후 사업이 확장되면서 유저가 로그인을 요청했을 뿐인데 '로그인 기록 남..

HTTPS와 SSL 인증 방식에 대한 이해

HTTP/HTTPS http는 OSI 7계층에서 어플리케이션 계층 프로토콜에 해당하며 클라이언트-서버 간 단방향, 비연결성 통신을 한다. 즉 웹 브라우저에서 CRUD에 대한 요청을 보내야지만 서버에서 그에 대해 응답하는 형태이다. 여기서 중요한 점은 요청과 응답 과정에서 전달되는 정보가 암호화 되어있지 않다는 점이다. 이를 통해 중간자 공격(Man-in-the-middle-attack)을 통해 데이터를 가로챌 수 있는 가능성이 열리게 된다. https는 끝자리에 secure가 들어간 것으로 서버와 브라우저 간 암호화된 연결을 생성한다. 여기서 암호화되어 전달되는 데이터는 http message body에 해당한다. https의 암호화는 SSL/TLS 통신을 기반으로 이루어 진다. SSL/TLS SSL은 ..

AWS Cloudfront의 work flow 살펴보기

Origin 요청과 Edge location 요청 간 응답시간 비교 S3를 cloudfront로 배포했을 때 응답 시간 감소의 효과가 얼마나 좋은건지 직접 확인해 보고 싶었다. 라이브 스트리밍 프로젝트를 진행하면서 동일한 ts파일에 대한 GET 요청을 보냈을 경우 cloudfront에 배포할 때와 단순히 Origin(S3)에서 GET 요청을 보낼 때의 차이를 비교하는 방식으로 테스트를 진행하고자 했다. 그래서 Chrome의 inspector창을 열어 '네트워크'의 '타이밍' 항목을 통해 응답 대기 시간을 비교해 보았다. 방식은 간단하다. 다시보기 서비스 이용을 통해 cloudfront의 캐시 정책을 no-cache로 설정하여 전혀 캐싱을 하지 않을 때와 Elemental-MediaPackage 캐시 정책..

Nestjs passport로 카카오, 구글 로그인 인증 구현하기

Nest.js passport로 카카오, 구글 로그인 인증 구현하기 passport를 통해 카카오, 구글 계정으로 로그인할 수 있도록 구현하면 유저 입장에서는 회원가입 절차 없이 바로 로그인 가능하기 때문에 편의성을 제공해 줄 수 있게 되고, 무엇보다 소셜 로그인 정보를 기반으로 유저에게 특별한 회원가입 절차 요청 없이 회원 가입 처리가 가능해진다. 아래 링크에 접속하면 카카오에서 로그인 인증을 어떤 과정으로 처리하는지에 대한 설명이 담겨 있으니 관심있으면 참고해보자. 카카오 로그인 처리 Flow 간략하게 소셜 로그인 인증과정을 정리하자면 아래와 같다. 사용자가 사이트(이하 프론트)에서 카카오 로그인 버튼을 클릭합니다. 백엔드는 카카오 인증 서버에게 인가 코드 발급을 요청합니다. 카카오 인증 서버에서 사..