본문 바로가기

기술들/Today I Learned

(22)
MVC 패턴 프로젝트 하루 전, 조금 쉴까도 생각해봤지만 그래도 조금이라도 더 공부하는 것이 프로젝트할 때 도움이 될 것 같아서, 서버 개발할 때 많이 사용하는 MVC 패턴에 대해 정리할까 한다. MVC패턴이란? Model-View-Controller로 가독성면이나 유지보수면에서 수월하도록 기능을 나눈 디자인 패턴을 의미한다. 한 파일안에 모든 기능을 쓰면, 잘 정리했다고 하더라도 가독성이 좋지 않고, 유지보수하기가 쉽지 않다. 한 파일에 유저의 요청을 받고 그 요청을 DB와 상호작용해서 응답까지 하는 코드가 모두 들어가 있다면, 그 코드를 직접 작성한 당사자야 알아볼 수 있겠지만 제 3자가 보는 경우 바로 GG를 치지 않을까.. 난 그럴것이다. MVC 패턴을 사용함으로써 하나의 코드베이스에서 모든 기능을 구현하는 ..
Session 저번엔 브라우저에 데이터가 저장되는 Cookie에 대한 개념을 위주로 정리했다면, 이번에는 Session에 관해서, 특히 Session기반 인증에 관해서 정리해보려고 한다. Session이란? 스택오버플로우에 나온 정의.. "Session" is the term used to refer to a user's time browsing a web site. It's meant to represent the time between their first arrival at a page in the site until the time they stop using the site. Session이란 용어는 유저가 웹사이트를 방문했을 때, 언급되는 용어이다. 유저가 웹사이트에 처음 방문해서 서비스 이용 후, 웹사이트..
Cookie 사이트 유저 인증 수단의 도구로 사용하는 cookie에 대한 개념을 정리하려고 한다. 쿠키에 대한 여러 자료를 봐도 명확히 "이거다!"라고 설명할 수 없어서, 글로 정리하면 명확하게 들어오지 않을까 싶어 정리하려고한다. 공식문서인 MDN의 문서를 참고해서 정리한다. 쿠키란? 웹 기술에서 사용하는 쿠키는, 주로 HTTP Cookie를 일컫는 말이다. 쿠키란 서버가 유저의 브라우저에 전송하는 작은 데이터 조각을 의미한다. 이 작은 데이터 조각은 서버에서 브라우저로 전송되면 브라우저에 저장 된다. 그리고 브라우저는 쿠기를 제공한 서버로 매번 여러 요청들을 보낼때마다, 이 쿠키를 같이 전송한다.이 쿠키를 매 요청마다 서버로 같이 전송하는 이유는, 요청들이 같은 브라우저에서 왔는지 판별하기 위해서다. 웹 사이트는..
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' 하다고 한다. 영어가 더 직관적이다..