190221 TIL 서버구현 (express)

» 1막, TIL (Today I Learned)

서버 구현

오늘은 백엔드가 어떤 일을 하는 지 알아보는 차원에서 서버 구현 수업을 했다.

웹프론트엔드-서버 (form전송, fetch 전송, 쿠키, 세션 등) 만들기

실무에서 협업 관계: 백엔드 — 프론트엔드 — (퍼블리셔) — 디자이너 (백엔드 경험 해보는 게 가장 좋음!)

서버란? 뭔가 요청을 받도록 떠 있는 프로그램… 요청을 계속 기다림 (떠있다 === 활성화되어있다)
서버로 날라가는 데이터(패킷)을 볼 수 있는 방법이 있다. (패킷을 가로챈다 like 해커) 그런걸 봐보는 것도 도움됨 
서버엔 IP, 포트, OS(리눅스, 우분투 등)가 있다...   
OS 위에서 동작하는 프로그램은 클라이언트 프로그램이라고 함 (브라우저)
윈도우에도 서버가 있음. 
서버 프로그램 종류: Tomcat (아파치), express (노드) 
파이선의 내장 서버 (simple http server)

브라우져에서 index.html 치면 무슨 일이 일어나나?

1) 메타 데이터가 담긴 header(메소드)가 패킷으로 만들어서 해당 URL로 날라감 (request 날렸으니까 response받을 때까지 소켓 열어두고 기다림)

2) DNS 에서 실제 IP로 변환해서 서버로 요청 들어감

3) Request 파악

4) Response 헤더 만듦

5) 브라우져가 response 받음

6) 브라우져가 content type (html? txt?) 파악, 본문 내용 파악, 클라이언트에 내용 저장해줌

7) 클라이언트가 파일 보여줌 (물리적인 파일이 클라이언트에 있는게 아니라, 실제 소스코드는 서버에 있는 것)

** 헤더 있는 이유? = 파싱을 빨리 하려고 = 그래서 맨 앞단에 있는 것

** web server (static한 내용 빨리 파악, 아파치) - application server (톰캣)

GET / POST

ID / PW 입력 받으면…

  • query string?을 이용해서 url에 GET 방식으로 보낼수도 있음 (but 보안에 취약) -> POST 이용
  • 서버는 인코딩된 url (파라미터 정보)을 분석
  • url은 고유한 자원
  • ID / PW를 데이터 베이스에 저장 (파일로 보관 or 메모리에 보관)
  • 쉽게 찾을 수 있게 query를 날림 (데이터베이스에 쿼리를 날린다~) <- 스프링 같은 프레임워크가 도와줌
  • DB 종류 ? mySQL, oracle, infomix??, 몽고DB,,,, (DB는 도서관 같은 것, 항목 별로… indexing..)
  • 네트워크 통신을 통해 어플리케이션 서버가 웹서버(클라이언트)에 자료 보냄
  • 위의 처리들을 비즈니스 로직이라고 함
  • ID / PW가 유효하다는 것이 확인되면 클라이언트에 response 준다. (response가 페이지를 줄 수도 있고, JSON을 줄 수도 있음. JSON에 “ok” text만 받아서 처리할 수도 있음)
  • 받은 response 값을 templating or 서버 렌더링을 함
  • 화면을 다시 그려쥼,,,

그래서 백엔드 개발자가 하는 것?

  • 요청 처리
  • 인증 처리
  • CRUD (Create(생성), Read(읽기), Update(갱신), Delete(삭제)) <— API 를 만든다
  • 성능 개선…
  • 응답 처리

  • 요청분석 -> 데이터관련처리 -> 응답처리: Controller(라우팅) -> Model -> View(랜더) (!프론트 MVC)
    • 요샌 View 작업 많이 안함. view 작업(HTML만드는 거). JSON으로 걍 보내는 경우가 많음

실습

https://nextstep.camp/courses/-Kv_wi0IhwxEsWCKPFSb/-LMAP932rt-yXSY0Kf0m/lessons/-LSikAhPhrJnTyQEbfxJ

  • express는 서버프레임워크 (!= 플랫폼)
  • 라이브러리 vs 프레임워크 (라이브러리는 재사용할 수 있는 함수들의 집합 / 프레임워크는 스켈레톤 환경, 프로그램의 구조를 잡아줌)
  • 라이브러리를 어디서 찾고 어떻게 써야할 지 잘 모르는데 NPM이 같은 환경에서 이런 문제 해결해줌
  • depricate
  • document root path(=doc root, PUBLIC) : 이 root를 기준으로 파일 내려 받음
  • request 날릴 때 세션ID(쿠키값)이 따라감~