자바스크립트의 비동기를 위한 방법 중 마지막인 async/await에 대해 간단하게 알아보려 한다. 실제적으로 코드를 작성하며 중요하게 작동하는 내용이라 그런지…다른 내용들보다는 조금 어렵게 다가온다. 계속해서 사용해 보면서 어떻게 비동기 작업을 구현하는 게 제일 효율적인지 알아갈 수 있으리라 믿는다. (아직은 부족함이 많은 정리로 남겠지만 지속적으로 업데이트하며 async/await를 글 하나로 정리할 수 있게끔 해보도록 하겠습니다..) ✏️ async와 await를 사용하면 프로미스를 더 편하게 사용가능하다. async function 앞에 async 키워드를 추가하면 두가지 효과가 있다. 함수는 언제나 Promise를 반환한다. promise가 아닌 값을 반환하더라도 이행상태의 promise로 값을..
프로미스(Promise) 프로미스는 콜백 패턴이 가진 단점들을 보완하며 비동기 처리 시점을 명확하게 표현할 수 있다는 장점을 가지고 탄생하였다.(콜백을 예측가능한 패턴으로 사용할 수 있게 한다) → Promise를 사용하면 비동기 작업들을 보다 쉽게 구현 및 관리할 수 있다(콜백함수에 대한 자세한 내용은 이곳에서 확인가능하다.) 프로미스는 자바스크립트 비동기 처리에 사용되는 객체이다. 비동기 처리 : 특정 코드의 실행이 완료될 때까지 기다리지 않고 다음 코드를 먼저 수행하는 자바스크립트의 특성 ES6에 도입 → 그럼 그전에는 비동기 처리를 어떻게? → 콜백함수로 비동기 처리를 할 수 있다. 그러나 익명함수로 콜백함수를 전달하는 과정이 반복되어 코드의 가독성이 떨어지고 콜백지옥 현상이 발생하는 문제 있음 ..
"자바스크립트는 멀티스레드가 아닌 싱글스레드를 사용하는 언어이다. 하지만 하나의 스레드에서 비동기적 실행을 통해 멀티스레드처럼 작동하는 것이다.” 비동기적 실행이 없는 자바스크립트는 팥 없는 붕어빵이며 탄산 없는 콜라와 같을 것이다. 자바스크립트를 보다 잘 이해하기 위해 비동기/동기가 무엇인지, 자바스크립트에서는 비동기를 구현하기 위해 어떤 기능들을 가지고 있는지 등에 대해 알아보려한다. 동기적(Synchronous) - ex) 영화매표소 현재 실행중인 작업이 종료될 때까지 다음에 실행될 태스크가 대기하는 방식 특징 코드가 처음부터 끝까지 순차적으로 실행 속도가 느리다 실행순서 보장 진행방향이 일방향이기에 코드에서 에러가 발생하면 어디인지 파악이 쉽다 비동기적(Asynchronous) - ex) 식당 현..
✏️ Node.js ➡️ 네트워크 서버 구축에 특화되어 있고, V8엔진은 기존의 인터프리터 언어인 자바스크립트를 컴파일 방식으로 처리해 빠른 속도로 작업을 수행할 수 있도록 합니다. 또한, Livub 라이브러리르 사용함으로 비동기 I/O 처리가 가능하게 해 Blocking 없이 동시 요청이 가능하다. 이전에 node.js에 대해 공부를 하고 정리를 하여 글을 올렸다. Node.js를 공부하다보니 node.js에서 필수적으로 알아야 할 것들이 적어도 2가지가 있다고 생각했다. 첫 번째는 V8엔진, 두 번째는 libuv 라이브러리였다. V8엔진이 어떻게 자바스크립트 코드를 해석하고 실행되는지 또한 정리를 했었고 이번에는 libuv라이브러리가 무엇인지, Node.js안에서 어떤 역할을 담당하고 있는것인지 알아..
v8은 자바스크립트 코드를 어떻게 해석하고 실행할까? 💡 V8엔진의 가장 큰 차이점은 JIT(Just In Time) 컴파일러다. → JIT 컴파일러 소스 코드를 가져와서 parser에게 넘긴다. parser는 코드를 분석한후 AST, 추상 구문 트리로 변환한다 그다음 AST를 자바스크립트를 바이트코드로 변환하는 인터프리터(ignition)로 넘긴다. 컴퓨터가 이해할 수 있는 바이크 코드로 변환이 되었기에 이 바이트 코드를 실행함으로 실제 코드가 작동이 된다. 프로파일러(profiler)라는 곳에서 일정기준이상 동일한 함수가 호출되면 최적화가 가능하다고 판단하고 해당 코드를 컴파일러(TurboFan)로 보내 최적화된 코드(Optimized Machine Code)로 컴파일한다. 그러다 사용이 덜 된다 싶..
"파이썬을 배우면 백엔드는 Django를 사용하고 Javascript를 배우면 백엔드는 node.js를 사용한다"라는 말이 어색하지는 않지만 틀린 말이다. 프로그래밍 언어를 위한 프레임워크가 딱 정해진 것이 절대 아니고 분명히 사용되는 이유가 있기 때문에 함께 이용되는 것임을 잊지 말자. 자신이 사용하고 있는 언어와 프레임워크, 런타임등을 왜 사용고 있는지 꼭!! 알고 사용할 수 있기를 바라며 자바스크립트를 배우며 node.js를 사용하는 입장에서 다시 한번 내가 왜 node.js를 사용하고 있는지 확인해보도록 하겠다. Node.js Node.js는 Chrome 브라우저의 V8Javascript 엔진을 탑재한 이벤트 기반의 Server Side 오픈소스 Javascript 런타임으로, 노드에 내장되어 있..
자바스크립트를 공부하다 보면 자바스크립트는 싱글스레드인지, 멀티스레드인지에 대해 알게 되고 고민하게 되는 시간이 있을 것이다. 그 시간을 위해 간단하게 사용되는 스레드와 프로세스 등의 개념을 간단히 살펴보려고 한다. 개념들의 정리 이후에 자바스크립트를 다시 한번 살펴보면 그 이해가 더 깊어질 것이라고 생각한다. 글의 순서로는 먼저 각각의 개념에 대해 살펴보고 이후에는 예시를 통해 역할들을 정리해보려한다. 예시까지 이해를 하고 나서 다시 한번 개념에 대해 읽어보는 것을 추천한다. 프로세스(Process)와 쓰레드(Thread)는 컴퓨터에서 동시에 실행될 수 있는 작업의 단위이다. 하지만 둘은 목적과 특징이 다르다. 프로그램(Program) 파일 시스템에 존재하는 실행파일 ➡️ .exe로 끝나는 파일을 프로..
백엔드 개발을 시작하고 나서 정말 자주 API라는 단어를 사용하고, 프로젝트를 하며 여러 API를 만들긴 만들었다. 하지만! API가 뭐야?라는 질문에 “어 그거 그 서버랑 연결해서.. 그 응답해주고.. 그 인터페이스…”라며 쉽사리 대답하지 못하는 나를 보고 다시 한번 API에 대해 천천히 살펴보게 되었다. 분명 나와 같은 고민을 하는 사람들이 아주 많을 것이라고 생각하고 조금이라도 이 글이 도움이 되었으면 한다 🙇 Application Programming Interface(API) 1️⃣ An application programming interface(API) is a way for two or more computer programs to communicate with each other. 2️⃣..
많은 사람들이 인증/인가의 방법으로 JWT를 사용하고 있다. 나 또한 JWT를 사용했지만, 내가 왜 JWT를 사용했을까?라는 생각을 깊게 해보지 못했던 것 같다. 이번 기회에 그 질문에 대해 깊게 생각해보고 정리를 해보려 한다. 💡 JWT(JSON Web Token) - 유저를 인증하고 식별하기 위한 토큰 기반 인증(Token based Authentication) 먼저 위의 질문에 대해 답을 하기 위해 차근차근히 단계를 밟으며 접근해보도록 하겠다. 보통 서버가 클라이언트 인증을 확인하는 방식으로 쿠키,세션,토큰 이렇게 3가지 방식이 있다고 한다. 토큰 기반 인증 방식인 JWT를 알기 위해 쿠키가 무엇인지, 세션은 또 무엇인지 알 필요가 있어보인다. 웹에서는 HTTP방식을 통해 서로 소통하고 데이터를 주..
4주간의 기업 인턴쉽을 통해 배우고 얻게 된 내용들을 스프린트 별로 나누어 정리해보았다. 그리고 해당 기업에서 사용하는 언어와 스킬들이 선택된 이유에 대해 언어의 특징들을 살펴보며 생각해보았다. Sprint1 : TypeScript & PostgreSQL 👉 TypeScript TypeScript는 2012년에 발표된 오픈 소스 프로그래밍 언어로, 대규모 JavaScript 애플리케이션 개발을 목적으로 Microsoft에 의해 개발 TypeScript는 웹브라우저에서 바로 해석될 수 없고 JavaScript로 변환되어야 웹 브라우저가 해석할 수 있다 → TS를 transpiler라고 부르고 이러한 언어를 Meta Language라고 부른다 장점 정적 타입을 지원 → 컴파일 단계에서 오류를 포착할 수 있다..