전체 글
[WEB] REST API 기본
HTTP 클라이언트와 서버 사이에 이루어지는 요청 및 응답 프로토콜이다. URL을 통해 정보를 요청하면 요청한 정보를 다시 전달해준다. 주로 웹 환경에서 사용 되는 프로토콜로, IOT 등에는 적합하지 않다. API (Application Programming Interface) 다른 애플리케이션에서 사용할 수 있도록, 특정 환경의 기능을 제어할 수 있게 만든 인터페이스이다. 우리가 흔히 접하는 구글지도API 등은 구글지도의 기능을 다른 애플리케이션에서 제어할 수 있게 만든 인터페이스라고 쉽게 생각할 수 있다. REST API (Representational State Transfer) HTTP의 장점을 최대한 활용하기 위해 고안된 REST 아키텍쳐 스타일을 따르는 API이다. 클라이언트와 서버를 명확하게..
[React] 파일 경로를 깔끔하게 정리하기
프로젝트의 규모가 커지다보면 가장 먼저 드는 생각이 파일들의 효율적인 정리이다. 정리할 수 있는 유용하지만 간단한 방법을 알아보자. 부모 폴더가 같은 Components import { SignInModalBox } from "./SignPage/SignInModal"; import { SignUpModalBox } from "./SignPage/SignUpModal"; import { useTable } from "./Hooks/useTable"; import { useConfiguration } from "./Hooks/useConfiguration"; 이 처럼 부모 폴더가 같은 컴포넌트를 사용할 때, 컴포넌트 하나 당 import 구문이 한 줄씩 추가된다. 이를 정리하기 위해 index.js(ts)..
쓰로틀링(throttling)과 디바운싱(debouncing)
디바운싱(debouncing) 새로운 이벤트가 호출 되었을 때, timer가 동작 중이라면 제거하고 새롭게 추가하는 방식이다. 검색어를 검색 창에 입력할 때, 실시간으로 결과가 호출되게 하는 경우 모든 입력이 끝났을 경우에만 API를 호출하는 스킬이다. 네트워크 비용을 크게 절약하고 효율적으로 프로그램이 동작할 수 있다. let timer = null; inputText.onkeydonw = (event) => { if(timer) //이전에 이벤트가 발생했다면 clearTimeout(timer); //이전 이벤트를 지운다. if(event.target.value){ timer = setTimeout(() => { //추천 검색어 API 호출 }, 200); } } 쓰로틀링(throttling) 마지막 ..
[JavaScript] 비동기 처리
비동기 처리 프로그래밍 언어는 동기 적으로 동작한다. '동기적 처리'의 사전적 의미로는 '작업의 요청과 결과가 같은 시간에 발생한다'로 작업이 시작되면 작업이 끝날 때까지 해당 작업의 결과를 기다리는 것을 의미한다. 아래의 그림처럼 먼저 시작된 A가 반환된 이후 B가 실행되는 것이다. A의 수행이 오래 걸린다면 B의 시작도 늦어진다. 비동기적 처리 예를 들어 서버에서 데이터를 받아오는 등의 오래 걸리는 작업을 수행한다면 프로그램이 멈춘 것 처럼 보일 것이다. 비동기적 처리로 메인 스레드가 서버로부터 데이터를 받아올 때까지 기다리지 않고 먼저 함수를 반환하고 그 다음 작업을 수행한다. 서버에서 데이터가 수신되면 이를 처리하는 Callback이 비동기 환경에서 별도로 실행된다. //비동기로 동작하는 함수 ..
[JavaScript] This 포인터 이해하기
This 포인터 앞서 This 포인터가 포함된 실행 Context와 Scope에 대해 알아보았다. This로 특정 위치를 참조 할 수 있다. 클래스 내부를 참조할 때 this를 함께 사용함을 본적이 있을 것이다. 또, 일반 함수형과 화살표 함수의 큰 차이점이 바로 이 this 포인터이다. function myFunc(){ console.log("myFunc called"); } myFunc(); //함수 직접 호출 const o ={ name : 'Daniel', printName : function(){ console.log(this.name)} } o.printName(); //객체릐 메서드를 호출 function Person(name){ this.name = name this.printName = ..