Archive

require와 import의 차이

|

CSR과 SSR의 차이

|

[펌] CSR과 SSR의 차이


요약 :

  1. 렌더링이란 웹 페이지 접속 시 그 페이지를 화면에 그려주는 것
  2. SSR(Server Side Rendering)이란 요청시마다 새로고침이 일어나며 서버에 새로운 페이지를 요청하는 방식
  3. 서버는 단지 JSON만 보내주며, html을 그리는 역할을 클라이언트측의 자바스크립트가 수행하는 것이 CSR(Client Side Rendering)
  4. SPA(Single Page Application)은 최초 한 번 페이지 전체를 로딩하여 바뀐 데이터만 변경하여 사용하는 웹 어플리케이션으로 요청시마다 서버로부터 리소스를 받아 해석하고 화면에 렌더링하여 SSR에 비해 성능이 뛰어나다.
  5. SSR은 View를 서버에서 렌더링하여 가져오기에 첫 로딩이 짧다.
  6. CSR은 HTML, JS 번들, 각종 리소스를 다운받은 후 브라우저에서 렌더링하기 때문에 초기 로딩 속도가 길다.
  7. 초기 로딩 이후에는 사용자의 행동에 따라 필요한 부분만 바꾸기 때문에 서버에서 렌더링하여 전체 페이지를 읽어들이는 SSR에 비해 빠른 인터렉션이 가능하다.
  8. CSR은 자바스크립트를 실행해 View를 렌더링하기 때문에 웹 크롤러 봇들이 CSR 페이지를 빈 페이지로 인식하여 SEO(검색엔진최적화)의 문제가 존재한다.
  9. SSR은 서버측의 세션에 사용자에 대한 정보를 관리하였으나 CSR은 쿠키에 관리하기 때문에 보안 문제가 있다.



참고 자료


클라이언트 사이드 렌더링 & 서버 사이드 렌더링

서버 사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR)

Typescript Day 09 - 제네릭

|

Typescript Day 09 - 제네릭


제네릭 타입

제네릭 타입은 인터페이스나 클래스, 함수, 타입 별칭 등에 사용할 수 있는 기능으로, 타입을 미리 지정하지 않고 다양한 타입에 대응하려 할 때 사용한다.

제네릭은 타입변수라고도 부른다. 타입 자체를 파라미터처럼 받아서 사용이 가능하다.

제네릭은 일반적으로 대문자로 적는것이 관례이다.

// 제네릭 인터페이스
interface IValue<T> {
    value: T
}

// 제네릭 함수
function sum<T>(arg: T): T {
    return arg
}

// 제네릭 타입 별칭
type IValue<T> = {
    value: T
}

// 제네릭 클래스
class Value<T> {
    constructor(public value: T){}
}


// 제네릭 사용 예시
function identity<T>(arg: T): T {
    return arg;
}

let output = identity<string>('hello world'); // hello world
let output = identity('hello world'); // 타입 추론도 가능하다


제네릭 타입 제약

제네릭 타입 제약은 타입 변수에 적용할 수 있는 타입의 범위를 한정하는 기능을 한다.

<최종타입 extends 타입1>(a: 최종타입){}

interface IValuable {
    length: number
}

const printValue = <T extends IValueable>(arg: T) => console.log(arg.length);

printValue(3); // Error: number는 length 프로퍼티가 없다
printValue({length: 10}); // 10


인덱스 타입 제약

타입 매개변수로 다른 타입 매개변수를 제한할 수 있다.

function getProperty<T, K extends keyof T>(obj: T, key: K) {
    return obj[key];
}

let x = { a: 1, b: 2, c: 3 };

getProperty(x, "a"); // 1
getProperty(x, "z"); // Error: 'z'가 해당되는 인수가 없다 



참고 자료


Do it 타입스크립트 프로그래밍

Typescript-Handbook

Task와 Microtask의 동작방식

|

[펌] Task와 Microtask의 동작방식


요약 :

  1. 이벤트 루프는 자바스크립트 엔진이 아닌 구동환경(브라우저, 노드)이 가지고 있는 장치이다. 이벤트 루프는 콜 스택과 태스크 큐를 감시하며 콜 스택이 비어있으면 태스크 큐의 태스크를 콜 스택에 넣어 실행시킨다.
  2. setTimeout, setInterval => 태스크 큐
  3. Promise => 마이크로태스크 큐
  4. 두 개의 큐 중 마이크로태스크 큐가 먼저 실행된다.



참고 자료


[JS] Task와 Microtask의 동작방식

자바스크립트와 이벤트 루프

HTML의 script 로드 시점과 async, defer 차이

|

[펌] HTML의 script 로드 시점과 async, defer 차이


요약 :

  1. HTML 렌더링 중 script 태그를 만나면 스크립트가 해석 및 실행되는 동안 문서의 파싱이 중단된다.
  2. async는 HTML 렌더링을 멈추지 않고 동시에 js 파일을 다운로드하고 다운이 완료되는대로 스크립트 실행
  3. defer는 HTML 렌더링을 멈추지 않고 동시에 js 파일을 다운로드하고 HTML 렌더링 종료 후 스크립트 실행



참고 자료


브라우저의 역할과 스트립트의 로드 시점

async, defer 알아보기