본문 바로가기

개발일지

Vue.js

[1] AJAX

JSON

  • JS의 Object와 유사한 형태
    • Object는 타입 Type
    • JSON은 문자열 String
  • JSON을 Object로 사용하기 위해서는 변환 작업이 필요

변환

  • object → JSON
    • JSON.stringify(object)
  • JSON → Object
    • JSON.parse(object)

AJAX

  • Asynchronous JavaScript and XML
  • 서버와 통신을 하기 위해 XMLHttpRequest 객체 활용
  • JSON, XML, HTML 그리고 일반 텍스트 형식 등을 포함한 다양한 포맷을 주고 받을 수 있음
  • 페이지 전체를 새로고침 하지 않고서도 수행되는 비동기성 (일부분만 업데이트 가능)

동작 방식

  • 동기 - 서버에 요청한 데이터가 도착할 때까지 클라이언트는 대기
  • 비동기 - 서버에 요청한 데이터가 도착할 때까지 클라이언트는 멈추지 않고 동작

순차적인 비동기 처리하기

  • Web API로 들어오는 순서는 중요하지 않고, 어떤 이벤트가 먼저 처리되느냐가 중요
  1. Async Callbacks
    1. 백그라운드에서 실행을 시작할 함수를 호출할 때 인자로 지정
    2. addEventListener의 두 번째 인자
  2. Promise-Style
    1. Modern Web APIs에서의 새로운 코드 스타일
    2. XMLHttpRequest 객체를 사용하는 구조보다 조금 더 현대적인 버전

XMLHttpRequest 객체

  • AJAX 요청을 생성하는 JS API
  • 서버와 상호작용하기 위해 사용
  • 전체 페이지의 새로고침 없이도 URL로부터 데이터를 받아올 수 있음
  • 사용자의 작업을 방해하지 않고 페이지의 일부를 업데이트 할 수 있음
  • AJAX 프로그래밍에 주로 사용
  • XML이라는 이름과는 다르게 모든 종류의 데이터를 받아오는데 사용 가능
  • http 이외의 프로토콜도 지원
  • 대부분의 브라우저에서 지원

메서드

  • open(”HTTP method”, “url”, sync/async)
    • 요청의 초기화 작업
    • 겟/포스트 지정
    • 서버 URL 지정
    • 동기/비동기 설정
  • send(content)
    • 겟 방식은 URL에 필요 정보를 추가하기 때문에 null 적용
    • 포스트 방식에서 파라미터 설정 처리

프로퍼티

  • onreadystatechange
    • 서버에서 응답이 도착했을 때 호출될 콜백함수 지정
    • 콜백함수는 상태가 변경될 때마다 호출
  • readyState
    • 0 UNSENT 객체 생성 후 open 메서드 호출 전
    • 1 OPENED open 메서드가 호출되고 send 호출 전
    • 2 HEADERS_RECEIVED send 메서드가 호출되었지만 서버 응답 전, 헤더와 상태 확인 가능
    • 3 LOADING 다운로드 중, 데이터의 일부가 전송된 상태
    • 4 DONE 모든 데이터 전송 완료
  • status
    • 200, 400, 500
  • responseText
    • 서버 응답 결과를 문자열로 받기
  • responseXML
    • 서버 응답 결과를 XML Document로 받기

AJAX 프로그래밍 순서

  1. 클라이언트 이벤트 발생
  2. XMLHttpRequest 객체 생성
  3. XMLHttpRequest 객체 콜백함수 설정
  4. XMLHttpRequest 객체를 통한 비동기화 요청
  5. 서버 응답 결과를 생성하여 클라이언트로 전송
  6. XMLHttpRequest 객체는 서버 결과를 처리할 콜백함수 호출
  7. 결과를 클라이언트 화면에 반영

Appendix-this

JS 함수에서의 this

  • JS 에서는 모든 함수에서 this 키워드를 사용할 수 있음
  • JS는 함수 호출 방식에 따라 this 바인딩되는 객체가 달라짐
  • 함수를 호출할 때 함수가 어떻게 호출되었는지에 따라 동적으로 결정됨
  • 전역 vs 함수

전역 문맥

  • 전역 객체는 모든 객체의 유일한 최상위 객체를 의미
  • console.log(this) //window

함수 문맥

  • 함수를 호출하는 방법에 의해 this가 결정됨
  1. 단순 호출 → 브라우저에서 호출시에는 window 의미
  2. 객체 안에서의 메서드 호출 → 객체 안에 정의된 메서드를 호출하면 해당 객체가 바인딩됨, 메서드 내부에서 this로 객체에 접근할 수 있음
  3. 중첩
    1. 일반 함수 → this가 메서드의 객체를 가리키지 못하고 전역 객체 window를 가리킴. 단순 호출 방식으로 사용되었기 때문에 window를 가리킴
    2. 화살표 함수
      1. 일반 함수와 달리 메서드의 객체를 가리킴
      2. 화살표 함수에서 this는 자기 자신을 포함하는 정적 범위를 가리킴
      3. 자동으로 한 단계 상위의 스코프의 컨텍스트를 바인딩
      4. 화살표 함수는 일반 함수와는 달리 본인만의 this를 갖지 않음

[2] WebStorage & ES6

Web Storage

  • key :value 로 값 저장
  • sessionStorage
    • 각각의 출처에 대해 독립적인 저장 공간을 페이지 세선이 유지되는 동안
    • 브라우저가 열려있는 동안 제공
    • 세선에 한정해, 즉 브라우저 또는 탭이 닫힐 때 까지만 데이터 저장
    • 데이터를 절대 서버로 전송하지 않음
    • 저장 공간이 쿠키보다 큼
  • localStorage
    • 브라우저를 닫았다 열어도 데이터가 남아있음
    • 유효기간 없이 데이터를 저장하고, JS를 사용하거나 브라우저 캐시 또는 로컬 저장 데이터를 지워야만 사라짐
    • 저장 공간이 쿠키, 세션과 비교했을 때 가장 큼

Storage

  • 속성 property
    • length : 객체에 저장된 데이터 항목의 수를 반환
  • 메서드 method
    • key(index) : index 번째의 키를 반환
    • getItem(key)
    • setItem(key, value)
    • removeItem(key) key를 저장소에서 제거
    • clear() 모든 키를 저장소에서 제거

ES6

  • ECMA-262 기술 규격에 정의된 표준화된 스크립트 프로그래밍 언어
  • JS 언어 등을 표준화하기 위해 만들어짐

화살표 함수

  • 함수를 심플하게 정의할 수 있도록 해줌
  • 작성순서
    • function 키워드 생략 가능
    • 함수의 매개변수가 오직 한 개라면 ()도 생략가능 (하지만 일관성을 위해 인자를 담는 괄호를 포함하는 것을 권장함)
    • 함수의 내용이 한 줄이라면 {}와 return 도 생략 가능
    • 인자가 없다면 () || _으로 표시 가능
  • 기본 파라미터
    • 함수 파라미터의 기본값을 지정할 수 있음
    • 변수와 함수 모두 가능
  • 나머지 파라미터
    • 여러 개의 파라미터 값을 배열로 전달받을 수 있음
    • 매개변수 앞에 세 개의 점ㅁ을 붙여서 사용 가능
    • 마지막에 , 붙이면 신텍스 에러 발생
    • 기본 파라미터와 함께 사용할 수 없음
    • 가변 파라미터는 항상 가장 마지막에 작성해야 함

구조분해할당

  • 배열, 객체의 값들을 추출하여 한 번에 여러 변수에 할당할 수 있음
  • 나머지, 배열, 객체 모두 할당 가능
  • 객체 속성 표기법 개선
    • shorthand properties
    • concise method

모듈

  • 독립성을 가진 재사용 가능한 코드 블록
  • 여러 개의 코드 블록을 각각의 파일로 분리한 후 필요한 모듈을 조합하여 사용 가능
  • import/export 구문을 이용하여 가져오거나 내보낼 수 있음

전개 연산자

  • 나머지 파라미터와 동일한 기호 … 사용
  • 배열이나 객체를 연산자와 함께 객체/배열 리터럴에서 사용하면 객체/ 배열 내의 값을 분해된 형태로 전달
  • 깊은 복사 수행 시 자주 사용

Promise

  • Web API로 들어오는 순서는 중요하지 않고, 어떤 이벤트가 먼저 처리되느냐가 중요 (실행 순서 불명확)
  1. Async Callbacks
    1. 백그라운드에서 실행을 시작할 함수를 호출할 때 인자로 지정
    2. addEventListener의 두 번째 인자
  2. Promise-Style
    1. Modern Web APIs에서의 새로운 코드 스타일
    2. XMLHttpRequest 객체를 사용하는 구조보다 조금 더 현대적인 버전

콜백이란?

  • 함수를 매개변수로 전달하며, 나중에 실행되도록 하는 것
  • 콜백이 중첩되면, 콜백 헬이 되어 해석하고 유지보수하지 힘든 코드가 될 우려 (스파게티 코드)

Promise Object

  • 비동기 작업을 마치 동기 작업처럼 값을 반환해서 사용 형태
  • 미래의 완료 또는 실패와 그 결과 값을 나타냄
  • 미래의 어떤 상황에 대한 약속

Promise Methods

  • .then(callback)
    • promise 객체를 리턴하고 두 개의 콜백 함수를 인수로 받음 (이행했을 때, 거부했을때)
    • 콜백 함수는 이전 작업의 성공 결과를 인자로 전달 받음
  • .catch(callback)
    • .then이 하나라도 실패하면(거부되면) 동작 (예외 처리 구문 유사)
    • 이전 작업의 실패로 인해 생성된 에러 객체는 캣치 블록 안에서 사용 가능
  • .finally(callback)
    • promise 객체 반환
    • 결과 상관없이 무조건 실행
  • 체이닝 가능

Fetch

fatch API

  • XMLHttpRequest보다 강력하고 유연한 조작이 가능
  • Promise를 지원하므로 콜백 패턴에서 자유로움
  • BOM브라우저 오브젝트 모델 객체 중의 하나
  • fetch() 메서드 사용
  • HTTP 응답을 나타내는 response 객체를 래핑한 promise 객체를 반환
  • fetch(resource, options)
    • resource : 리소스가 위치한 URL 지정
    • options : 옵션을 지정
      • method
      • headers
      • bosy
    • fetch 메서드는 promise 객체를 반환
  • fetch()가 반환하는 promise 객체
    • 성공시 then()을 이용해 처리
    • 실패시 catch()를 이용해 처리
  • response.text() : 텍스트 형태로 반환
  • response.json() : json 파싱하여 반환

Appendix - async & await

async & await

  • Promise 더욱 편하게 사용할 수 있는 문법
  • then 체이닝을 제거하고 비동기 코드를 동기 코드처럼 표현하는 방법

async

  • function 앞에 위치
  • 항상 Promise 반환

await

  • await 키워드를 만나면 promise가 처리될 때까지 기다림

[3] Introduction of Vue

Front-End Development

  • 웹 사이트와 웹 어플리케이션의 사용자 인터페이스UI와 사용자 경험 UX를 만들고 디자인하는 것
  • HTML, CSS, JS 등을 활용하여 사용자가 직접 상호작용하는 부분을 개발

Client-side Frameworks

  • 클라이언트 측에서 UI와 상호작용을 개발하기 위해 사용되는 JS 기반 프레임워크
    • 리액트, 뷰

Client-side Frameworks가 필요한 이유1

“웹에서 하는 일이 많아졌다”

단순히 무언가를 읽는 곳 → 무언가를 하는 곳

  • 사용자는 이제 웹에서 문서만을 읽는 것이 아닌 음악을 스트리밍 하고, 영화를 보고, 원거리에 있는 사람들과 텍스트 및 영상 채팅을 통해 즉시 통신하고 있음
  • 이처럼 현대적이고 복잡한 대화형 웹 사이트를 웹 어플리케이션이라 부름
  • JS 기반의 출현으로 매우 동적인 대화형 어플리케이션을 훨씬 더 쉽게 구축할 수 있게 됨

Client-side Frameworks가 필요한 이유2

“웹에서 하는 일이 많아졌다” → “다루는 데이터가 많아졌다”

  • 만약 친구가 이름을 변경했다면/
  • 친구 목록, 타임라인, 스토리 등 친구 이름이 출력되는 모든 곳이 함께 변경되어야 함
  • 앱의 기본 데이터를 안정적으로 추적하고, 업데이트 하는 도구가 필요
  • 어플리케이션의 상태를 변경할 때마다 일치하도록 UI를 업데이트해야 한다는 것

single Page App (SPA)

  1. 서버로부터 필요한 모든 정적 HTML을 처음에 한 번 가져옴
  2. 브라우저가 페이지를 로드하면 Vue 프레임 워크는 각 HTML 요소에 적절한 JS 코드를 실행
  • 웹 어플리케이션 초기 로딩 후 새로운 페이지 요청 없이 동적으로 화면을 갱신하며 사용자와 상호작용하는 웹어플리케이션
  • CRS 방식

Client-side Rendering (CRS)

  • 클라이언트에서 화면을 렌더링하는 방식
  1. 브라우저는 페이지에 필요한 최소한의 HTML 페이지와 JS를 다운로드
  2. JS를 사용하여 DOM을 업데이트하고 페이지를 렌더링

장점?

  1. 빠른 속도
    1. 페이지의 일부를 다시 렌더링할 수 있으므로 동일한 웹 사이트의 다른 페이지로 이동하는 것이 일반적으로 더 빠름
    2. 서버로 전송되는 데이터의 양을 최소화
  2. 사용자 경험
    1. 새로 고침이 발생하지 않아 네이티브 앱과 유사한 사용자 경험을 제공
  3. 프론트와 백의 명확한 분리
    1. 프론트는 UI 렌더링 및 사용자 상호 작용 처리를 담당
    2. 백은 데이터 및 API 제공을 담당
    3. 대규모 맵을 더 쉽게 개발하고 유지 관리 가능

단점?

  1. 초기 구동 속도가 느림
    1. 전체 페이지를 보기 전에 약간의 지연을 느낄 수 있음
  2. SEO(검색엔진최적화) 문제
    1. 페이지를 나중에 그려 나가는 것이기 때문에 검색에 잘 노출되지 않을 수 있음

Vue.js

  • 사용자 인터페이스를 구축하기 위한 프레임 워크

뷰를 학습하는 이유

  1. 쉬운 학습 곡선 및 간편한 문법
    1. 새로운 개발자도 빠르게 학습 가능
  2. 반응성 시스템
    1. 데이터 변경에 따라 자동으로 화면이 업데이트 되는 기능을 제공
  3. 모듈화 및 유연한 구조
    1. 어플리케이션을 컴포넌트 조각으로 나눌 수 있음
    2. 코드의 재사용성을 높이고 유지보수를 용이하게 함

뷰의 2가지 핵심 기능

  1. 선언적 렌더링
    1. HTML을 확장하는 템플릿 구문을 사용하여 HTML이 JS 데이터를 기반으로 어떻게 보이는지 설명할 수 있음
  2. 반응형
    1. JS 상태 변경사항을 자동으로 추적하고 변경사항이 발생할 때 DOM을 효율적으로 업데이트

Vue 사용하는 방법

  1. CDN
  2. NPM

ref 함수 reactive reference

  • 반응형 상태를 선언하는 함수
  • 인자를 받아 .value 속성이 있는 ref 객체로 래핑하여 반환
  • 선언된 변수의 값 변경 → 해당 값을 사용하는 템플릿에서 자동으로 업데이트
  • 인자는 어떠한 타입도 가능
  • 템플릿의 참조에 접근하려면 setup 함수에서 선언 및 반환 필요
  • 템플릿에서 접근할 때는 .value 작성 필요 없음

Appendix

주의사항

  • 템플릿에서의 unwrap은 ref가 최상위 속상인 경우에만 적용가능
  • object는 최상위 속성이지만 object.id는 그렇지 않음
  • 표현식을 평가할 때 object.id가 unwrap되지않고, ref 객체로 남아있기 때문
  • 이를 해결하기 위해서는 id를 최상위 속성으로 분해해야 함

왜 ref 여야 하는가?

  • 뷰는 템플릿에서 ref를 사용하고 나중에 ref의 값을 변경하면 자동으로 변경사항을 감지하고 그에 따른 dom을 업데이트 함 (의존성 추적 기반의 반응형 시스템)
  • 뷰는 렌더링 중에 사용된 모든 ref를 추적하며, 나중에 ref가 변경되면 이를 추적하는 구성요소에 대하여 다시 렌더링
  • JS에서는 일반 변수의 접근 또는 변형을 감지할 방법이 없기때문

SEO (Search Engine Optimization)

  • 검색 엔진 등에 내 서비스나 제품 등이 효율적으로 검색 엔진에 노출되도록 개선하는 과정을 일컫는 작업
  • 정보의 대상은 주로 HTML 에 작성된 내용
  • SPA 서비스도 검색 대상으로 넓히기 위해 JS 를 지원하는 방식으로 발전하는 중

CSR & SSR

  • 흑과 백이 아님
  • 내 서비스에 적합한 렌더링 방식을 적절하게 활용할 수 있어야 함

[4] Vue basic Syntax1

Template Syntax

Text Interpolation

  • 데이터 바인딩의 가장 기본적인 형태
  • 콧수염 구문 사용
  • msg 속성이 변경될 때마다 업데이트 됨

RAW HTML

  • v-html 사용

Attribute Bindings

  • 콧수염 구문은 HTML 속성 내에서 사용할 수 없기 때문에 v-bind 사용
  • HTML의 id 속성 값을 뷰의 dynamicId 속성과 동기화 되도록 함
  • 바인딩 값이 null이나 undefind인 경우 렌더링 요소가 제거됨

JS Expressions

  • 모든 바인딩 내에서 JS 표현식의 모든 기능을 지원
  • 뷰 템플릿 내에서 JS 표현식을 사용할 수 있는 위치
    • 콧수염 구문 내부
    • 모든 directive의 속성값
  • 각 바인딩에는 하나의 단일 표현식만 포함될 수 있음
  • 표현식은 값으로 평가할 수 있는 코드 조각 (return 뒤에 사용할 수 있는 코드)

Directive

  • v- 접두사가 있는 특수 속성

Dynamically data binding

v-bind

  • 하나 이상의 속성 또는 컴포넌트 데이터를 표현식에 동적으로 바인딩

Event Handling

  • DOM 요소에 이벤트 리스너를 연결 및 수신

Inline Handlers

  • 주로 간단한 상황에 사용

From Input Bindings

  • Inline Handler 사용하지 못할 때

Appendix

  • IME
    • 사용자가 입력 장치에서 기본적으로 사용할 수 없는 문자를 입력할 수 있도록 하는 운영체제 구성 프로그램
    • 일반적으로 키보드 키보다 자모가 더 많은 언어에서 아용해야 함

[1] AJAX

JSON

  • JS의 Object와 유사한 형태
    • Object는 타입 Type
    • JSON은 문자열 String
  • JSON을 Object로 사용하기 위해서는 변환 작업이 필요

변환

  • object → JSON
    • JSON.stringify(object)
  • JSON → Object
    • JSON.parse(object)

AJAX

  • Asynchronous JavaScript and XML
  • 서버와 통신을 하기 위해 XMLHttpRequest 객체 활용
  • JSON, XML, HTML 그리고 일반 텍스트 형식 등을 포함한 다양한 포맷을 주고 받을 수 있음
  • 페이지 전체를 새로고침 하지 않고서도 수행되는 비동기성 (일부분만 업데이트 가능)

동작 방식

  • 동기 - 서버에 요청한 데이터가 도착할 때까지 클라이언트는 대기
  • 비동기 - 서버에 요청한 데이터가 도착할 때까지 클라이언트는 멈추지 않고 동작

순차적인 비동기 처리하기

  • Web API로 들어오는 순서는 중요하지 않고, 어떤 이벤트가 먼저 처리되느냐가 중요
  1. Async Callbacks
    1. 백그라운드에서 실행을 시작할 함수를 호출할 때 인자로 지정
    2. addEventListener의 두 번째 인자
  2. Promise-Style
    1. Modern Web APIs에서의 새로운 코드 스타일
    2. XMLHttpRequest 객체를 사용하는 구조보다 조금 더 현대적인 버전

XMLHttpRequest 객체

  • AJAX 요청을 생성하는 JS API
  • 서버와 상호작용하기 위해 사용
  • 전체 페이지의 새로고침 없이도 URL로부터 데이터를 받아올 수 있음
  • 사용자의 작업을 방해하지 않고 페이지의 일부를 업데이트 할 수 있음
  • AJAX 프로그래밍에 주로 사용
  • XML이라는 이름과는 다르게 모든 종류의 데이터를 받아오는데 사용 가능
  • http 이외의 프로토콜도 지원
  • 대부분의 브라우저에서 지원

메서드

  • open(”HTTP method”, “url”, sync/async)
    • 요청의 초기화 작업
    • 겟/포스트 지정
    • 서버 URL 지정
    • 동기/비동기 설정
  • send(content)
    • 겟 방식은 URL에 필요 정보를 추가하기 때문에 null 적용
    • 포스트 방식에서 파라미터 설정 처리

프로퍼티

  • onreadystatechange
    • 서버에서 응답이 도착했을 때 호출될 콜백함수 지정
    • 콜백함수는 상태가 변경될 때마다 호출
  • readyState
    • 0 UNSENT 객체 생성 후 open 메서드 호출 전
    • 1 OPENED open 메서드가 호출되고 send 호출 전
    • 2 HEADERS_RECEIVED send 메서드가 호출되었지만 서버 응답 전, 헤더와 상태 확인 가능
    • 3 LOADING 다운로드 중, 데이터의 일부가 전송된 상태
    • 4 DONE 모든 데이터 전송 완료
  • status
    • 200, 400, 500
  • responseText
    • 서버 응답 결과를 문자열로 받기
  • responseXML
    • 서버 응답 결과를 XML Document로 받기

AJAX 프로그래밍 순서

  1. 클라이언트 이벤트 발생
  2. XMLHttpRequest 객체 생성
  3. XMLHttpRequest 객체 콜백함수 설정
  4. XMLHttpRequest 객체를 통한 비동기화 요청
  5. 서버 응답 결과를 생성하여 클라이언트로 전송
  6. XMLHttpRequest 객체는 서버 결과를 처리할 콜백함수 호출
  7. 결과를 클라이언트 화면에 반영

Appendix-this

JS 함수에서의 this

  • JS 에서는 모든 함수에서 this 키워드를 사용할 수 있음
  • JS는 함수 호출 방식에 따라 this 바인딩되는 객체가 달라짐
  • 함수를 호출할 때 함수가 어떻게 호출되었는지에 따라 동적으로 결정됨
  • 전역 vs 함수

전역 문맥

  • 전역 객체는 모든 객체의 유일한 최상위 객체를 의미
  • console.log(this) //window

함수 문맥

  • 함수를 호출하는 방법에 의해 this가 결정됨
  1. 단순 호출 → 브라우저에서 호출시에는 window 의미
  2. 객체 안에서의 메서드 호출 → 객체 안에 정의된 메서드를 호출하면 해당 객체가 바인딩됨, 메서드 내부에서 this로 객체에 접근할 수 있음
  3. 중첩
    1. 일반 함수 → this가 메서드의 객체를 가리키지 못하고 전역 객체 window를 가리킴. 단순 호출 방식으로 사용되었기 때문에 window를 가리킴
    2. 화살표 함수
      1. 일반 함수와 달리 메서드의 객체를 가리킴
      2. 화살표 함수에서 this는 자기 자신을 포함하는 정적 범위를 가리킴
      3. 자동으로 한 단계 상위의 스코프의 컨텍스트를 바인딩
      4. 화살표 함수는 일반 함수와는 달리 본인만의 this를 갖지 않음

[2] WebStorage & ES6

Web Storage

  • key :value 로 값 저장
  • sessionStorage
    • 각각의 출처에 대해 독립적인 저장 공간을 페이지 세선이 유지되는 동안
    • 브라우저가 열려있는 동안 제공
    • 세선에 한정해, 즉 브라우저 또는 탭이 닫힐 때 까지만 데이터 저장
    • 데이터를 절대 서버로 전송하지 않음
    • 저장 공간이 쿠키보다 큼
  • localStorage
    • 브라우저를 닫았다 열어도 데이터가 남아있음
    • 유효기간 없이 데이터를 저장하고, JS를 사용하거나 브라우저 캐시 또는 로컬 저장 데이터를 지워야만 사라짐
    • 저장 공간이 쿠키, 세션과 비교했을 때 가장 큼

Storage

  • 속성 property
    • length : 객체에 저장된 데이터 항목의 수를 반환
  • 메서드 method
    • key(index) : index 번째의 키를 반환
    • getItem(key)
    • setItem(key, value)
    • removeItem(key) key를 저장소에서 제거
    • clear() 모든 키를 저장소에서 제거

ES6

  • ECMA-262 기술 규격에 정의된 표준화된 스크립트 프로그래밍 언어
  • JS 언어 등을 표준화하기 위해 만들어짐

화살표 함수

  • 함수를 심플하게 정의할 수 있도록 해줌
  • 작성순서
    • function 키워드 생략 가능
    • 함수의 매개변수가 오직 한 개라면 ()도 생략가능 (하지만 일관성을 위해 인자를 담는 괄호를 포함하는 것을 권장함)
    • 함수의 내용이 한 줄이라면 {}와 return 도 생략 가능
    • 인자가 없다면 () || _으로 표시 가능
  • 기본 파라미터
    • 함수 파라미터의 기본값을 지정할 수 있음
    • 변수와 함수 모두 가능
  • 나머지 파라미터
    • 여러 개의 파라미터 값을 배열로 전달받을 수 있음
    • 매개변수 앞에 세 개의 점ㅁ을 붙여서 사용 가능
    • 마지막에 , 붙이면 신텍스 에러 발생
    • 기본 파라미터와 함께 사용할 수 없음
    • 가변 파라미터는 항상 가장 마지막에 작성해야 함

구조분해할당

  • 배열, 객체의 값들을 추출하여 한 번에 여러 변수에 할당할 수 있음
  • 나머지, 배열, 객체 모두 할당 가능
  • 객체 속성 표기법 개선
    • shorthand properties
    • concise method

모듈

  • 독립성을 가진 재사용 가능한 코드 블록
  • 여러 개의 코드 블록을 각각의 파일로 분리한 후 필요한 모듈을 조합하여 사용 가능
  • import/export 구문을 이용하여 가져오거나 내보낼 수 있음

전개 연산자

  • 나머지 파라미터와 동일한 기호 … 사용
  • 배열이나 객체를 연산자와 함께 객체/배열 리터럴에서 사용하면 객체/ 배열 내의 값을 분해된 형태로 전달
  • 깊은 복사 수행 시 자주 사용

Promise

  • Web API로 들어오는 순서는 중요하지 않고, 어떤 이벤트가 먼저 처리되느냐가 중요 (실행 순서 불명확)
  1. Async Callbacks
    1. 백그라운드에서 실행을 시작할 함수를 호출할 때 인자로 지정
    2. addEventListener의 두 번째 인자
  2. Promise-Style
    1. Modern Web APIs에서의 새로운 코드 스타일
    2. XMLHttpRequest 객체를 사용하는 구조보다 조금 더 현대적인 버전

콜백이란?

  • 함수를 매개변수로 전달하며, 나중에 실행되도록 하는 것
  • 콜백이 중첩되면, 콜백 헬이 되어 해석하고 유지보수하지 힘든 코드가 될 우려 (스파게티 코드)

Promise Object

  • 비동기 작업을 마치 동기 작업처럼 값을 반환해서 사용 형태
  • 미래의 완료 또는 실패와 그 결과 값을 나타냄
  • 미래의 어떤 상황에 대한 약속

Promise Methods

  • .then(callback)
    • promise 객체를 리턴하고 두 개의 콜백 함수를 인수로 받음 (이행했을 때, 거부했을때)
    • 콜백 함수는 이전 작업의 성공 결과를 인자로 전달 받음
  • .catch(callback)
    • .then이 하나라도 실패하면(거부되면) 동작 (예외 처리 구문 유사)
    • 이전 작업의 실패로 인해 생성된 에러 객체는 캣치 블록 안에서 사용 가능
  • .finally(callback)
    • promise 객체 반환
    • 결과 상관없이 무조건 실행
  • 체이닝 가능

Fetch

fatch API

  • XMLHttpRequest보다 강력하고 유연한 조작이 가능
  • Promise를 지원하므로 콜백 패턴에서 자유로움
  • BOM브라우저 오브젝트 모델 객체 중의 하나
  • fetch() 메서드 사용
  • HTTP 응답을 나타내는 response 객체를 래핑한 promise 객체를 반환
  • fetch(resource, options)
    • resource : 리소스가 위치한 URL 지정
    • options : 옵션을 지정
      • method
      • headers
      • bosy
    • fetch 메서드는 promise 객체를 반환
  • fetch()가 반환하는 promise 객체
    • 성공시 then()을 이용해 처리
    • 실패시 catch()를 이용해 처리
  • response.text() : 텍스트 형태로 반환
  • response.json() : json 파싱하여 반환

Appendix - async & await

async & await

  • Promise 더욱 편하게 사용할 수 있는 문법
  • then 체이닝을 제거하고 비동기 코드를 동기 코드처럼 표현하는 방법

async

  • function 앞에 위치
  • 항상 Promise 반환

await

  • await 키워드를 만나면 promise가 처리될 때까지 기다림

[3] Introduction of Vue

Front-End Development

  • 웹 사이트와 웹 어플리케이션의 사용자 인터페이스UI와 사용자 경험 UX를 만들고 디자인하는 것
  • HTML, CSS, JS 등을 활용하여 사용자가 직접 상호작용하는 부분을 개발

Client-side Frameworks

  • 클라이언트 측에서 UI와 상호작용을 개발하기 위해 사용되는 JS 기반 프레임워크
    • 리액트, 뷰

Client-side Frameworks가 필요한 이유1

“웹에서 하는 일이 많아졌다”

단순히 무언가를 읽는 곳 → 무언가를 하는 곳

  • 사용자는 이제 웹에서 문서만을 읽는 것이 아닌 음악을 스트리밍 하고, 영화를 보고, 원거리에 있는 사람들과 텍스트 및 영상 채팅을 통해 즉시 통신하고 있음
  • 이처럼 현대적이고 복잡한 대화형 웹 사이트를 웹 어플리케이션이라 부름
  • JS 기반의 출현으로 매우 동적인 대화형 어플리케이션을 훨씬 더 쉽게 구축할 수 있게 됨

Client-side Frameworks가 필요한 이유2

“웹에서 하는 일이 많아졌다” → “다루는 데이터가 많아졌다”

  • 만약 친구가 이름을 변경했다면/
  • 친구 목록, 타임라인, 스토리 등 친구 이름이 출력되는 모든 곳이 함께 변경되어야 함
  • 앱의 기본 데이터를 안정적으로 추적하고, 업데이트 하는 도구가 필요
  • 어플리케이션의 상태를 변경할 때마다 일치하도록 UI를 업데이트해야 한다는 것

single Page App (SPA)

  1. 서버로부터 필요한 모든 정적 HTML을 처음에 한 번 가져옴
  2. 브라우저가 페이지를 로드하면 Vue 프레임 워크는 각 HTML 요소에 적절한 JS 코드를 실행
  • 웹 어플리케이션 초기 로딩 후 새로운 페이지 요청 없이 동적으로 화면을 갱신하며 사용자와 상호작용하는 웹어플리케이션
  • CRS 방식

Client-side Rendering (CRS)

  • 클라이언트에서 화면을 렌더링하는 방식
  1. 브라우저는 페이지에 필요한 최소한의 HTML 페이지와 JS를 다운로드
  2. JS를 사용하여 DOM을 업데이트하고 페이지를 렌더링

장점?

  1. 빠른 속도
    1. 페이지의 일부를 다시 렌더링할 수 있으므로 동일한 웹 사이트의 다른 페이지로 이동하는 것이 일반적으로 더 빠름
    2. 서버로 전송되는 데이터의 양을 최소화
  2. 사용자 경험
    1. 새로 고침이 발생하지 않아 네이티브 앱과 유사한 사용자 경험을 제공
  3. 프론트와 백의 명확한 분리
    1. 프론트는 UI 렌더링 및 사용자 상호 작용 처리를 담당
    2. 백은 데이터 및 API 제공을 담당
    3. 대규모 맵을 더 쉽게 개발하고 유지 관리 가능

단점?

  1. 초기 구동 속도가 느림
    1. 전체 페이지를 보기 전에 약간의 지연을 느낄 수 있음
  2. SEO(검색엔진최적화) 문제
    1. 페이지를 나중에 그려 나가는 것이기 때문에 검색에 잘 노출되지 않을 수 있음

Vue.js

  • 사용자 인터페이스를 구축하기 위한 프레임 워크

뷰를 학습하는 이유

  1. 쉬운 학습 곡선 및 간편한 문법
    1. 새로운 개발자도 빠르게 학습 가능
  2. 반응성 시스템
    1. 데이터 변경에 따라 자동으로 화면이 업데이트 되는 기능을 제공
  3. 모듈화 및 유연한 구조
    1. 어플리케이션을 컴포넌트 조각으로 나눌 수 있음
    2. 코드의 재사용성을 높이고 유지보수를 용이하게 함

뷰의 2가지 핵심 기능

  1. 선언적 렌더링
    1. HTML을 확장하는 템플릿 구문을 사용하여 HTML이 JS 데이터를 기반으로 어떻게 보이는지 설명할 수 있음
  2. 반응형
    1. JS 상태 변경사항을 자동으로 추적하고 변경사항이 발생할 때 DOM을 효율적으로 업데이트

Vue 사용하는 방법

  1. CDN
  2. NPM

ref 함수 reactive reference

  • 반응형 상태를 선언하는 함수
  • 인자를 받아 .value 속성이 있는 ref 객체로 래핑하여 반환
  • 선언된 변수의 값 변경 → 해당 값을 사용하는 템플릿에서 자동으로 업데이트
  • 인자는 어떠한 타입도 가능
  • 템플릿의 참조에 접근하려면 setup 함수에서 선언 및 반환 필요
  • 템플릿에서 접근할 때는 .value 작성 필요 없음

Appendix

주의사항

  • 템플릿에서의 unwrap은 ref가 최상위 속상인 경우에만 적용가능
  • object는 최상위 속성이지만 object.id는 그렇지 않음
  • 표현식을 평가할 때 object.id가 unwrap되지않고, ref 객체로 남아있기 때문
  • 이를 해결하기 위해서는 id를 최상위 속성으로 분해해야 함

왜 ref 여야 하는가?

  • 뷰는 템플릿에서 ref를 사용하고 나중에 ref의 값을 변경하면 자동으로 변경사항을 감지하고 그에 따른 dom을 업데이트 함 (의존성 추적 기반의 반응형 시스템)
  • 뷰는 렌더링 중에 사용된 모든 ref를 추적하며, 나중에 ref가 변경되면 이를 추적하는 구성요소에 대하여 다시 렌더링
  • JS에서는 일반 변수의 접근 또는 변형을 감지할 방법이 없기때문

SEO (Search Engine Optimization)

  • 검색 엔진 등에 내 서비스나 제품 등이 효율적으로 검색 엔진에 노출되도록 개선하는 과정을 일컫는 작업
  • 정보의 대상은 주로 HTML 에 작성된 내용
  • SPA 서비스도 검색 대상으로 넓히기 위해 JS 를 지원하는 방식으로 발전하는 중

CSR & SSR

  • 흑과 백이 아님
  • 내 서비스에 적합한 렌더링 방식을 적절하게 활용할 수 있어야 함

[4] Vue basic Syntax1

Template Syntax

Text Interpolation

  • 데이터 바인딩의 가장 기본적인 형태
  • 콧수염 구문 사용
  • msg 속성이 변경될 때마다 업데이트 됨

RAW HTML

  • v-html 사용

Attribute Bindings

  • 콧수염 구문은 HTML 속성 내에서 사용할 수 없기 때문에 v-bind 사용
  • HTML의 id 속성 값을 뷰의 dynamicId 속성과 동기화 되도록 함
  • 바인딩 값이 null이나 undefind인 경우 렌더링 요소가 제거됨

JS Expressions

  • 모든 바인딩 내에서 JS 표현식의 모든 기능을 지원
  • 뷰 템플릿 내에서 JS 표현식을 사용할 수 있는 위치
    • 콧수염 구문 내부
    • 모든 directive의 속성값
  • 각 바인딩에는 하나의 단일 표현식만 포함될 수 있음
  • 표현식은 값으로 평가할 수 있는 코드 조각 (return 뒤에 사용할 수 있는 코드)

Directive

  • v- 접두사가 있는 특수 속성

Dynamically data binding

v-bind

  • 하나 이상의 속성 또는 컴포넌트 데이터를 표현식에 동적으로 바인딩

Event Handling

  • DOM 요소에 이벤트 리스너를 연결 및 수신

Inline Handlers

  • 주로 간단한 상황에 사용

From Input Bindings

  • Inline Handler 사용하지 못할 때

Appendix

  • IME
    • 사용자가 입력 장치에서 기본적으로 사용할 수 없는 문자를 입력할 수 있도록 하는 운영체제 구성 프로그램
    • 일반적으로 키보드 키보다 자모가 더 많은 언어에서 아용해야 함

'개발일지' 카테고리의 다른 글

Api 명세서 작성하기  (0) 2024.11.13
흐름도 플로우 차트 draw.io  (1) 2024.11.12
[DB] ERD Cloud  (3) 2024.11.11
[Vue.js] 환경설정  (1) 2024.11.07
[STS4] macOS JAVAEE 설치 및 tomcat server 환경 설정  (1) 2024.10.13