- [ backend/aws ][aws] aws 시작하기 (region/AZ/IAM)2024-01-01 04:31:50aws란?aws는 Amazon Web Services의 약자로, 아마존에서 제공하는 클라우드 서비스*다. aws는 블랙프라이데이 때문에 증설한, 남아도는 컴퓨팅 자원을 파는 것에서 시작되었다.*클라우드 서비스 : 데이터 스토리지와 컴퓨팅 파워 같은 컴퓨터 자원을 제공하는 서비스클라우드 서비스의 장점가격 : 초기 비용이 적게 든다.탄력성과 확장성 : 서비스의 규모에 맞게 인프라를 확장/축소할 수 있다.가용성과 내구도 : 전 세계에 여러 데이터 센터를 보유하고 있기 때문에 데이터 센터 간에 데이터를 복제하여 장애가 전체 서비스에 영향을 미치지 않도록 보장한다.aws를 사용하기 전에 먼저 주요 용어를 살펴보자. region리전은 aws의 물리적으로 독립된 지역을 의미한다. 사용자와 가까운 지역에서 서비스를 제..
- [ backend/docker ][docker] 캐싱으로 이미지 빌드 속도 향상시키기 (Dockerfile/build/run)2023-12-29 23:40:07앞에서 알아본 도커 개념을 바탕으로 도커 컨테이너에 어플리케이션을 띄워볼 것이다. Dockerfile을 이용하여 이미지를 빌드하고 도커 CLI를 이용하여 컨테이너를 실행시켜보자. Dockerfile 작성하기Dockerfile이란?이미지를 빌드하기 위해서는 Dockerfile을 작성해야 한다. Dockerfile은 이미지를 빌드하기 위한 명령들이 포함된, 파일 확장자가 없는 텍스트 기반의 파일이다.FROM node:20RUN apt-get update && apt-get install -y tiniWORKDIR /app/wasCOPY was/package*.json ./RUN npm installCOPY was .RUN npm run buildCMD ["tini", "--", "npm", "run", "s..
- [ backend/docker ][docker] docker 시작하기 (아키텍처)2023-12-29 00:04:21docker를 공부하다보면 허브, 레지스트리 등 생소한 용어가 많이 등장한다. 허브는 뭐고, 레지스트리는 또 뭐야? docker architecture 도커는 클라이언트-서버 구조를 갖는다. 클라이언트*는 데몬*과 통신하여 도커 컨테이너를 구축하고 실행 및 배포할 수 있다. *docker client (=`docker`) : 도커 사용자가 도커와 상호작용하는 주요 방법이다. *docker daemon (=`dockerd`) : 도커 API 요청을 수신하고 이미지/컨테이너/네트워크/볼륨 같은 도커 개체들을 관리한다. docker registry 도커 레지스트리는 도커 이미지를 저장하고 관리하는 서비스다. 도커 허브가 레지스트리의 한 예로, 누구나 사용할 수 있는 퍼블릭 레지스트리다. 하지만 개인이나 조직이..
- [ backend/docker ][docker] docker 시작하기 (컨테이너/이미지/레이어)2023-12-28 21:55:22구글에 시스템 아키텍처만 검색해봐도 docker 로고를 쉽게 찾아볼 수 있다. 사람들은 어떤 이유로 docker를 선택했을까? docker란?도커는 컨테이너 기반 가상화 플랫폼으로, 어플리케이션을 패키징하고 배포하는 데 사용된다. 이렇게만 설명하면 도커가 무엇인지 아직 감이 안 올 것이다. 도커를 이해하기 위해 몇 가지 용어를 살펴보자. container도커 컨테이너는 어플리케이션을 실행하는 가상화된 환경을 의미한다. 즉, 어플리케이션의 실행에 필요한 모든 것들을 포함하고 (이미지) 격리된 환경에서 실행할 수 있도록 (이미지 실행 = 컨테이너) 도와주는 기술이다. 가상머신도 로컬과 분리된 실행 환경을 제공하는데 왜 도커를 사용할까? 가상머신을 설치해본 사람은 알겠지만, 가상머신을 실행하기 위해서는 무거운..
- [ backend/내가 만든 패키지 ][node] http 모듈 커스텀하기 3편2023-12-28 01:36:04http 파서에 개선할 점이 아주 많아요. 추후에 개선해 나갈 예정이니 과정만 참고 부탁드립니다. https://github.com/kimyu0218/custom-http 이번 포스트에서는 2편에서 다루지 못한 `HttpRequest`를 작성할 예정이다. 요청은 클라이언트가 서버로 보내는 메시지이기 때문에 HTTP 프로토콜을 준수하고 있는지 검사해야 한다. 유효성 검사가 끝나면 메서드를 이용하여 요청에 들어있는 정보를 쉽게 사용할 수 있도록 `HttpRequest`로 파싱할 것이다. HttpRequest를 위한 파서 만들기 요청은 크게 request-line, header, message-body로 구분된다. request-line에는 HTTP 메서드, 요청 대상, HTTP 버전이 들어있다. 요청 대상,..
- [ backend/내가 만든 패키지 ][node] http 모듈 커스텀하기 2편2023-12-24 01:47:22아직 부족한 게 많은 패키지에요. 핵심만 구현했으니 귀엽게(?) 봐주세요. http 모듈에는 어떤 게 들어있을까? http 모듈을 위한 코드를 작성하기에 앞서 http 모듈에 들어있는 객체들을 살펴보자. http 모듈은 HTTP 프로토콜을 다루기 위한 핵심 모듈이다. nodejs - http documentation (사실 캡처해서 가져오려고 했으나 너무 많아서 포기했다. 위 사이트 들어가서 확인해주세요) 내가 구현할 객체는 일부 상수와 HTTP 메시지 부분이다. 메시지 객체를 구현하기 위해서는 메서드와 상태코드 정보를 넘겨줘야 하기 때문에 `METHODS`, `STATUS_CODES`를 구현하기로 결정했다. http.METHODS http.STATUS_CODES http.IncomingMessage h..
- [ backend/내가 만든 패키지 ][node] http 모듈 커스텀하기 1편2023-12-23 22:43:16예비 개발자의 http 모듈 뜯어보기 웹의 3요소는 HTTP, HTML, URL이다. 웹 개발자가 되고 싶은 사람으로서 http 모듈은 뜯어봐야 되지 않겠냐라는 마인드로 http 모듈을 모방하기로 결심했다. 패키지는 npm에 배포된 상태이며, 소스코드는 깃허브 에서 확인할 수 있다. (아직 부족한 부분이 많기에 계속해서 수정할 예정이다.) 이번 포스트에서는 HTTP가 무엇인지 알아볼 것이다. HTTP가 뭐야? HTTP : Hyper Text Transfer Protocol 클라이언트 서버 구조 무상태 프로토콜 (stateless) 비연결성 (connectionless) HTTP는 HTML 문서와 같은 데이터들을 가져올 수 있도록 해주는 프로토콜로, 위와 같은 특징을 갖는다. 해당 특징들을 하나씩 자세히 ..
- [ backend/삽질일기 ][node] 당신의 socket.io가 동작하지 않는 이유 (Feat. socket.io는 파싱을 해)2023-12-23 16:58:53소켓아이오를 소켓아이고로 부르기로 결심한 이유 😇 지금부터 말하는 트러블 슈팅은 단일 서버에서 하나의 웹소켓을 이용하는 경우엔 발생하지 않았을 것이다. 하지만 여러 path에 대해 웹소켓을 사용하고 있다면 이 문제에 부딪혔을 수도 있다. 아주 허무하지만, 상상도 못한 이슈 지금부터 시작하겠다. 삽질의 시작, 라우팅 시작에 앞서 프로젝트 구조를 간단히 설명하겠다. 백엔드는 두 개의 서버를 띄우고 있고, nginx가 가장 앞단에 위치하여 경로에 따라 다른 서버로 프록시한다. nginx 라우팅 정보 - /signal : 시그널링 서버 - / : WAS 서버 두 서버 모두 웹소켓을 사용하고 있는데 아이너리하게 오직 시그널링 서버로의 소켓 요청만 동작하지 않았다. 결론부터 말하자면, socket.io가 url에다..