ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 📕 [SERVER] #1 Javascript, NodeJS
    Study/Server 2022. 3. 6. 17:47

     


    SOPT 29th SERVER파트 세미나 자료를 보며 혼자 공부한 것을 정리한 내용입니다.

    📌 1-01 : Overview 

     1. 클라이언트와 서버의 관계 

    • 클라이언트
      • 네트워크를 통해 요청을 보내는 주체 (서버가 다른 서버에게 요청하면, 서버도 클라이언트가 된다)
      • 네트워크를 통해 서비스를 사용하는 사용자
      • 서버 
        • 네트워크를 통해 클라 측에 서비스 자원, 정보를 제공 (data, file)

     2. 실제로 하는 것들 

    • 비즈니스 로직 설계, 데이터베이스 설계, Firebase & AWS RDS 배포

     3. 요약 

    • Web, iOS, Android --- 네트워크 --- NodeJs --- Firebase, AWS RDS

     4. Firebase & AWSRDS 

    • Firebase :
    • AWSRDS :

    📌 1-02 : Javascript

     1. JavaScipt 엔진 

    • Internet Explorer, Firefox, Chrome (웹페이지 만들 때 보통 쓰는 언어)

     2. ECMAScript 

    • ECMA International (비영리 단체)에서 만든 표준화된 프로그래밍 언어
    • 왜? 자바스크립트를 표준화하기 위해 만든 언어
    • ES6(ES2015) 이후 ES2015+ : class, let, const, arrow function, promise 생김

     3. JavaScipt 특징 

    • 스크립트 언어(=인터프리터 언어) : 코드를 한 줄씩 번역하고 실행
    • 타입 명시 X, 프로토 타입 기반의 객체 지향 언어
    • 프로토 타입 기반 :

     4. 변수 

      var let  const
    범위 Function Block Block
    변수 재선언 0 x x
    변수 값 재할당 0 0 x
    초기화 값 필요 x x 0
    • 재선언은 var만 가능 -> 하면 Syntax Error
    • const만 재할당 불가능 -> 하면 Type Error
    • const는 꼭 초기화 해주어야함 

     5. Function Scope 

    • 유효범위가 함수 범위 내 -> 함수 밖으로 나가지 못함
    • 전역함수 외부에서 생성한 변수는 전역(global)변수
    • 전역변수 -> 블록과  관계없이 접근 가능

     6. Block Scope 

    • 중괄호 '{', '}' 사이가 유효범위 (if, while, for, function)
    • 블록 안에서 선언된 값을 블록 밖에서 접근 불가능
    • 함수 스코프 대신 사용하여 호이스팅 같은 문제를 해결

     7. Hoisting 

    • 자바스크립트는 선언만 함수의 최상위로 끌어올림 (hoist)
    • var 변수와 함수 선언식으로 선언된 함수는 호이스팅 대상
    • 안 일어나게 주의 (코드 가독성과 유지보수를 위헤)
    • 함수와 변수는 가급적 코드 상단부에서 선언하기 (호이스팅으로 인한 스코프 꼬임 현상 방지)
    • let, const 사용하기
    • 선언과 할당 분리 :  var x = 'var';   ->   var=x;    x='var'; 

     8. 자료형 

    • 원시타입(Primitive)과 객체타입(Object)으로 나눌 수 있다.
    • 원시타입 : Number, String, Boolean, Null, Undefined, Symbol
      • Number : 정수, 실수 구분X, 모든 수는 64 bit 실수로 표현됨
      • Boolean : true 또는 false
      • String : 문자열, "와 '를 동일하게 취급. 백틱 문자열로 Template literal (+ 연산자를 사용하지 않아도 간단한 방법으로 새로운 문자열을 삽입할 수 있는 기능)
      • Symbol : 유일, 변경불가한 식별자 만들고 싶을 때 사용
      • Undefined : '타입'이 정해지지 않음을 의미(초기화되지 않은 변수, 선언하지 않은 값)
      • Null : '값'이 정해지지 않음을 의미, Object 타입
    • 객체타입 : Object
      • Object : 자바스크립트의 기본타입, { } 로 감싸진 형태, property의 정렬되지 않은 집합
      • Array : 배열 요소 타입 고정 X (자료형 달라도 됨). 인덱스 연속적인 필요 X (특정 인덱스 요소 비어있어도 됨)
      • Function : 하나의 고유한 목적의 작업을 수행하도록 설계된 독립적인 블록, '일급 객체'로 변수나 데이터 구조에 담을 수 있고 파라미터에 전달 가능하고 반환값으로 사용 가능하다.
        • 함수 선언식 : 호이스팅 영향 받음
        • 함수 표현식 : 호이스팅 영향 X, 함수를 변수에 할당 (일급 객체)
        • 화살표 함수 : 간결하며, 변수 하나면 소괄호 생략 가능, return 생략 가능
     // Template literal 
     console.log(`1 + 1 = ${1 + 1}`); // "1 + 1 = 2"

     9. Property 

    • {key:value} 형태, 함수일 경우 method라고 함

     10. JSON(Javascript Object Notation)  

    • 객체표현식, 프로퍼티의 정렬되지 않은 집합, 경량의 데이터 교환형식, 클라와 통신 시 사용
    • JSON 객체, JSON 배열

     11. 연산자 

    • 사칙연산 : +, -, *, /
    • 나머지 : %
    • 증감연산자 : ++, --
    • 비교연산자 : ==, != (값 비교)   ===, !==(값과 타입 비교)
    • 논리연산자 : &&(AND), ||(OR)
    • typeof(A) : A의 타입 반환

     


    📌 1-03 : NodeJS

     1. NodeJS 

    • 서버X, 프레임워크X, 프로그래밍 언어X
    • Javascript를 해석하는 응용 프로그램인 Web Browser인 크롬의 V8로 빌드된 Javascript를 실행할 수 있는 런타임 환경
    • 브라우저 밖에서 Javascript를 굴릴 수 있게 만들어주는 환경

     2. Non-Blocking I/O 

    • 파일 쓰기 요청을 할 때, 제어권을 획득하고 동시에 반환하여, I/O가 진행되는 동안 멈추지 않고 다음 작업 수행
    • Blocking은 파일 쓰기 완료일 때, 제어권을 반환하여 그 때까지 작업이 중단된 채 대기

     3. Single Thread 

    • 프로세스 : 운영체제에서 할당되는 작업의 단위, 프로세스 간 자원(메모리) 공유X
    • 쓰레드 : 프로세스 내에서 실행되는 흐름의 단위, 부모 프로세스의 자원 공유 가능
    • 노드 실행 -> 프로세스 한 개 실행 -> 여러개의 쓰레드 생성 -> 제어가능한 쓰레드는 단 하나 (자바스크립트 실행하는 쓰레드) : Event Loop

     4. Event-driven 

    • 이벤트 발생 시 미리 지정해둔 작업을 수행하는 방식 ('어떤 일' 발생 -> '이 동작'을 실행) 을 미리 지정
    • CALL STACK : 실행되는 함수들이 스택구조로 쌓이는 곳 (실행 : PUSH, 리턴 : POP)
    • BACKGROUND : 로직이 실행되는 공간
    • CALLBACK FUNCTION : 어떤 이벤트 발생 또는 특정 시스템 도달 시 시스템에서 호출, 다른 함수의 인자로 사용
      콜백 함수 : 백그라운드 -> 콜백 큐 -> 콜 스택
    • CALLBACK QUEUE : 이벤트 발생 후 콜백 함수들이 기다리는 공간
    • EVENTLOOP : 콜백 큐의 콜백 함수를 콜 스택에 전달 (콜 스택이 비어있을 때만 옮김)

    📌 아이패드 필기 원본

     

    📌 코딩

     

    GitHub - jumining/SERVER_STUDY: 겨울방학 서버 공부하기

    겨울방학 서버 공부하기. Contribute to jumining/SERVER_STUDY development by creating an account on GitHub.

    github.com