본문 바로가기

전체 글

(38)
Node.js architecture 정리 Node.js를 공부하고 사용해보면서 이 스택이 어떤 구조를 이루고 동작하는지 궁금했다. 그것에 대해 내가 이해한데로 간략히 정리해보려고 한다. 대부분의 유명한 서버용 프로그래밍 언어들이 Multi-thread 방식을 지원하는 것과는 달리 Node.js는 한 번에 단 하나의 작업만을 처리하는 Single-thread를 지원한다. 멀티쓰레드를 사용하면 빠르게 여러 요청들을 동시에 처리할 수 있지만, 요청 하나마다 서버자원을 이용해서 쓰레드를 생성시키기 때문에 서버에 부하가 많이 걸린다. 서버의 자원은 한정되어 있기 때문에, 만약 서버의 자원 이상의 요청이 들어온다면, 쓰레드를 생성시키지 못하기 때문에 요청 처리를 하지 못할 것이다. 물론 대안은 있겠지..! 뭐 ELB를 써서 분산시킨다던가 하는 말이 있는데..
CORS 정책 정리 CORS정책에 대해 정리해보려고 한다. 아직 완벽히 이해가 되진 않았지만 정리하다 보면 이해 되겠지..! CORS란? CORS 정책은 서로 다른 origin간 데이터 교환이 이루어질 때, 이를 허용할지 말지를 결정하는 정책이다. 그럼 여기서 origin이란 무엇일까? origin : 프로토콜, 도메인, 포트번호로 구성된 주소 이 세가지 요소 중 하나만 달라도 서도 다른 origin이고, 서로 다른 origin간 요청과 응답이 이루어 질 때, 크로스오리진 요청/응답(Cross Origin request/response) 라고 일컫는다. 예를 들어보자. https://mingu.com:3000이라는 사이트(origin)에서 https://mingus.com:3001 이라는 서버(remote origin)에 ..
HTTP Header 정리 (HTTP/1.1 기준) HTTP 헤더에 대해 공부하던 중, 헤더에 많은 속성들이 존재하는 것을 알게 되었다. 웹개발자라면 요청하고 응답받는 '데이터'의 형식이 구체화 되어 있는 '헤더'에 대해 조금 자세하게 정리할 필요가 있을 것 같았다. HTTP 메시지 클라이언트와 서버가 요청과 응답으로 데이터를 교환할 때, HTTP 메시지를 주고 받는다. 클라이언트가 서버로 요청할 때 보내는 메시지에는 '서버가 어떤 것을 해줬으면 좋겠다'라는 내용이 구체화 되어있고, 서버가 응답할 때, 클라이언트로 보내는 메시지에는 요청의 처리에 대한 성공 여부와 성공했을 시 응답보내는 데이터에 대한 내용이 구체화 되어있다. HTTP 메시지는 헤더와 본문(body)으로 구성되어 있다. 이 중, 헤더에 대해 정리하려고 한다. // 요청헤더 예시 GET /h..
HTTP 기초 정리 HTTP란? HTTP(HyperText Transfer Protocol)란 클라이언트와 서버가 원활하게 데이터를 교환할 수 있는 규칙이라고 볼 수 있다.MDN에는 간단하게 클라이언트-서버 프로토콜이라고 설명한다. HTTP약자에서 HyperText는 여러 기능이 들어간 HTML등의 문서(데이터)등을 일컫고, Protocol이란 컴퓨터 사이에서 데이터를 교환할 수 있는 방식을 정의한 규칙을 의미한다. 이 프로토콜에 의해 클라이언트와 서버는 일정한 규칙으로 데이터를 교환할 수 있다. API? 일반적으로 데이터의 교환은 클라이어트의 요청(Request)과 서버의 응답(Response)의로 정의된다. 단지 HTTP프로토콜 만으로 클라이언트가 요청을 보내 올바른 응답을 얻을 수 있는 것은 아니다. 클라이언트는 서버..
비동기, 동기 정리 (feat. callback, promise, async/await) Node.js는 비동기 기반의 javascript 런타임이다. 여기서 비동기란 무엇일까? 일단 비동기와 대조적인 말인 '동기'란 것의 개념부터 정리하자. '동기적'이라는 말은 어떤 일을 진행할 때, 한 번에 한 가지 일만을 처리하는 것을 말한다. 예를 들어, 카페에서 점원이 손님 A의 주문을 받은 후, A에게 커피를 제공한 다음 다른 손님의 주문을 받는 것을 말한다. 다른 손님들은 손님 A가 커피를 받기전까지 주문조차 못한다. 만약 점원이 '비동기적'으로 일처리를 진행했다면 손님 A의 주문뿐만 아니라 대기하고 있는 다른 손님의 주문을 모두 받은 다음, 차례대로 커피를 제공할 것이다. 영어로 동기적은 'blocking' 하다고 하고, 비동기적은 'non-blocking' 하다고 한다. 영어가 더 직관적이다..
[Today I Learned] 11월 5일(목) - solo day -오늘 한 일 1. 어제 봤던 HA 이어서 풀고 제출 => 문제를 잘 안읽고 풀어서 엉뚱한 답을 쓴 것도 있다. tree구현한거 issue sharing하기(제일 오래 걸렸던 문제!!) 추가적으로 코드스테이츠에서 제공해준 레퍼런스를 참고해가며 리팩토링도 해보았다. 제공해준 코드에서는 화살표 함수가 대부분인데 나는 이 화살표함수가 왜 이렇게 익숙해지지가 않는지 ㅎㅎ 2. n-queens 스프린트 진행 => queens는 Rooks와 재귀구조가 거의 비슷해서 그 구조를 잘 활용했다. 애초에 rooks도 처음부터 내 힘으로 한게 아니라 zoom시간에 엔지니어님께서 대략적인 틀을 잡아주셨는데 이게 거의 다 알려주신 거였다.. 애초에 잘 이해하고 푼 것은 아니다. 콘솔로 디버깅해가면서 거의 끼워맞추는 식으로 해결..
객체지향언어 - prototype과 __proto__의 관계 protoype과 __proto__를 공부하고 있던 참에 코드스테이츠 엔지니어 분께서 좋은 글을 추천해주셨고 이를 보고 이 개념에 대해 어느 정도 이해하게 되었다. 까먹을새라 내가 이해한데로 나만의 언어로 정리해보고자 한다. 먼저 Food라는 함수를 하나 생성해보자. function Food() { } 함수를 생성하면 prototype이라는 것이 자동적으로 생성이된다. (이것은 진리) 그 prototype이라는 것에 접근하면 객체형태가 반환되는데, 이는 prototype이 객체라는 것을 의미한다. Food.prototype => {constructor: ƒ} //객체가 반환됨. 그 prototype 객체를 까보면 constructor라는 속성과 __proto__라는 속성이 있다. 아래에 보이는 것처럼 c..
[Today I Learned] 10월 28일(수) - 객체지향언어 - 오늘 공부했던 부분. #객체지향 😄javascript는 왜(why) 객체지향 언어(OOP)일까에 대한 생각? javascript를 배우면서 처음 객체(object)를 마주했을 때 들었던 생각은 배열(Array)보다는 조금 더 명확하게(key를 이용) 데이터를 관리할 수 있고, 뭔가 익숙해지기가 배열보다는 훨씬 어려울 것 같다는 것이 객체를 마주한 나의 첫 느낌이었다. 그래서 이 당시 난 이 객체가 중요하지 않은 개념이었으면 하는 바람이 있었다. 그렇지만 지금의 나는 javascript가 대표적인 객체지향 언어(OOP)라는 것을 알고 있다. 나는 'javascript는 객체지향언어다'임을 확실히 인지하게 된 계기는 1. 객체에 value값으로 익명함수(function)를 넣을 수 있다는 점을 알게 된 ..