# 1주차 (IT 동향이나 여러 얘기들)

첫 주에는 IT 동향이나 SI, SM 회사들에서 무얼 하는지, 조직도(PM, PL, AA, etc)는 어떻게 되어있는지를 화이트보드에 작성해가면서 설명을 해주심. 옛날(라떼는 말이야) 이야기로 가득찬 내용들이 많았음. Oracle이 나 때는... (중략) 오라클이 최근에 깡패같은 행동들을 많이해서 다른 DB로 이관하는 작업들이 많이 나타나고 있다고 하심.

# ANSI SQL

  • 각기 다른 SQL query문을 미국표준협회에서 표준화한 SQL
  • Query문이 DBMS의 제약을 받지 않는다.
  • 테이블 간의 JOIN 관계가 FROM에서 명시된다.
SELECT ui.name
FROM tb_order o, tb_userinfo ui
WHERE o.userId = ui.loginId

# Cross Browsing

HTML5가 나오면서 '태그 표준화'가 진행되었다. 이전에는 서로 호환이 안되는 태그들이 있었고 호환성이 들쭉날쭉 했었다. HTML5가 나오게 된 결정적인 이유는 스마트폰과 태블릿의 출현이라고 말씀하신다.

크로스 브라우징(Cross Browsing)에 대한 이야기를 해주셨는데 구글링을 해보다가 아래와 같은 내용들을 찾았다. 출처 (opens new window)

Cross Browsing이란 적어도 표준 웹기술을 채용하여 다른 기종 혹은 플랫폼에 따라 달리 구현되는 기술을 비슷하게 만듦과 동시에 어느 한쪽에 최적화되어 치우지지 않도록 공통 요소를 사용하여 웹 페이지를 제작하는 기법을 말하는 것이다. 또한, 지원할 수 없는 다른 웹 브라우저를 위한 장치를 구현하여 모든 웹 브라우저 사용자가 방문했을 때 정보로서의 소외감을 느끼지 않도록 하는 방법론적 가이드를 의미하는 것이다.

- 'CSS Browsing 가이드'

크로스 브라우징을 동일성이 아닌 '동등성'을 의미한다. 즉, 완전히 같은 것을 구현하기 보다는 보이는 정보와 모습이 최대한 달라지지 않도록 하는 기법이다.

# Protocol, HTTP

Protocol

  • 통신 규약
  • 보내고 받는 것을 해석하여 처리하는 것

HTTP

  • HyperText Transfer Protocol
  • Request: userAgent에서 기기와 브라우저를 구분
  • Response: 상태 코드, body에는 HTML과 JS 뿐임
  • JS는 inline complier여서 웹에 용이한 언어. (그때 그때 컴파일 한다.)
  • Connectionless: 서버에 연결하고, 요청 후 response를 받으면 연결을 끊는다.
    • 장점: 불특정 다수를 대상으로 하는 서비스에 적합히다.
    • 단점: 클라이언트의 이전 상태를 알 수 없다(stateless). 예를 들어 과거에 로그인을 성공했을지라도 로그 정보를 유지할 수 없다. => cookie를 이용해서 이 문제를 해결할 수 있다.
  • HTTP는 전송 프로토콜이고 URI(Uniform Resource Identifier)는 자원의 위치를 알려주기 위한 프로토콜이다. (UR'L' -> Locator)

HTTP 설명 블로그 (opens new window)

HTTP Structure - MDN (opens new window)

HTTP Status Code - MDN (opens new window)


자주 쓰이는 Status Code

  • 200 - OK, 서버가 요청을 제대로 처리함.
  • 301 - Moved Permanently, 해당 URI가 다른 주소로 바뀌었을 때.
  • 400 - Bad Request, request에 포함된 보내는 데이터가 잘못 보내어 졌을 때.
  • 401 - Unauthorized, 유저가 해당 요청을 진행하려면 로그인을 필요하다는 것을 나타내는 코드.
  • 403 - Forbidden, 서버가 요청을 거부 (권한이 없기 때문), 예를 들어 구독자만 볼 수 있는 데이터 요청했을 때.
  • 404 - Not Found, 요청한 자원(uri)이 서버에 존재하지 않음.
  • 500 - Internal Server Error, 서버가 처리 방법을 모르는 상황이 발생했습니다. 서버는 아직 처리 방법을 알 수 없습니다.
  • 505 - HTTP Version Not Supported, 요청에 사용된 HTTP 버전은 서버에서 지원되지 않습니다.

Web의 실행 순서는 서버에서 전달받은 HTML과 JS 중 HTML을 먼저 화면에 뿌려주고나서 JS를 한줄씩 실행하면서 화면에 뿌려준다.

# TCP/IP

TCP/IP에 대한 설명 블로그 - 카카오 기획자 (opens new window)

TCP/IP 는 패킷 통신 방식의 인터넷 프로토콜인 IP (인터넷 프로토콜)와 전송 조절 프로토콜인 TCP (전송 제어 프로토콜)로 이루어져 있다.

TCP는 IP 위에서 동작하는 프로토콜로 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다.

TCP는 IP 위에서 동작하는 프로토콜로 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다.

FTP ( File Transfer Protocol ) 킹무위키 (opens new window)

# WebServer

  1. 주소창에서 요청을 보내면 가장 먼저 웹서버로 들어간다.
  2. JSP를 받는다.

Apache. Nginx와 같은 것들이 WebServer이다.

# WAS(Web Application Server)

아래와 같은 것들을 포함한다.

  • Controller
  • Service
  • Dao
  • SQL

Apache Tomcat, JEUS와 같은 것들이 WAS이다.

# Signal Flow

# 1. Browser(Request)

서버에 요청

# 2. WebServer

요청받은 주소를 중계, 해석 후 WAS에 해석한 요청(주소)을 넘김

# 3. WAS

요청받은 것을 처리한다 (아래를 포함)

  • Java Class File
  • Xml
  • Controller
  • Service
  • Dao
  • SQL

결과를 가공하기 위해서 조회된 데이터(JSP)를 WebServer로 제공

# 4. WebServer(Response)

넘어온 데이터를 반복문을 통해 html, js로 가공 후 Browser로 보냄. 자바에선 jsp만 받는다.

# 5. Browser

그럼 두가지가 꼭 필요한 이유?

  1. 정적 컨텐츠 동적 컨텐츠에 따라 서버의 대응을 구분하여 부하를 줄일 수 있다.
    • 웹서버는 정적 콘텐츠 WAS는 동적콘텐츠를 담당한다.
  2. WAS가 없었다면 사용자의 요청을 모두 미리 만들어 놔야한다.
    • 요청이 많아지게되면 자원이 절대적으로 부족하다.
  3. 각자의 역할이 분명하기 때문에 효율성이 좋다.
    • 물리적으로 떨어져있기 때문에 보안이 강화됨.
    • 빠른 응답이 가능

# DNS Server

도메인 이름과 IP 주소를 서로 변환하는 역할을 한다.

# Gateway

내부(사설) IP들이 외부(공인)으로 나갈 때 쓰는 IP를 gateway라고 한다.

# SQL

Query 작성 순서 FROM > JOIN > WHERE > SELECT

# SubQuery

FROM절에 쓰는게 가장 BEST. 2순위는 WHERESELECT이다. GROUP BY, ORDER BY, HAVING에는 쓰지마라.

# MAX+1

보통 신규 글이나 새로운 데이터에 넘버링을 편하게 사용하기 위해 사용. 문제는 여러 유저가 '동시에' request를 보내면 transaction이 발생한다. 한 사람(관리자)이 사용한다면 문제가 안생김.

SELECT NVL(MAX([column_name])+1, 0)
FROM [table_name]

SEQUENCE를 사용하면 위의 문제를 피할 수 있다. waiting 기능이 있기 때문 but, ORACLE에만 있다. MySQL은 존재하지 않기에 시퀀스 기능을 하는 테이블을 따로 작성해야한다.

Sequence 참고 블로그 (opens new window)

# Optimizer / Plan / Hint

# Optimizer

사용자가 실행한 SQL을 해석하고 데이터를 추출하기 위한 실행계획(Plan)을 수립하는 프로세스 옵티마이저 설명 링크 (opens new window)

# Plan

SQL문의 액세스 경로를 확인하고 튜닝할 수 있도록 SQL문을 분석하고 해석하여 어떻게 실행 할 것인가에 대한 계획 DBMS가 쿼리문을 파싱해서 어떻게 값을 가져올지에 대한 계획 Mysql workbench 동작 플랜 (opens new window) Oracle 기준 Planing (opens new window)

# Hint

Plan이 실행 경로였다면 Hint는 실행 경로를 사용자가 직접 설정하는 것이다. 요즘엔 하드웨어가 좋아져서 많이 사용하고 있지는 않다. 만약 힌트에 오타가 있다면 그 문은 무시되고 넘어가게 된다. 오라클 힌트(hint)의 개념/사용법/자주쓰이는힌트 (opens new window) Hint를 인덱스에 활용하는 방법 (opens new window)

SQL문을 몇천줄까지 써야한다면 Plan과 Hint를 사용해 '튜닝'하는 것을 추천한다.


엑셀로 나눠준 1주차 내용목록이 있는데 화요일까지 뭔가 진행이 되게 느려지다가 수요일부터 엑셀에 작성된 내용을 설명해주지 않고 SQL 쿼리문을 연습하라고 하셨다.

결국 그 주 금요일까지 SQL만 각자 작성함. 1기 분들이 만든 프로젝트 페이지에 나타나는 데이터를 쿼리를 어떻게 작성하면 가져올 수 있을지 직접 작성하고 logger에서 확인하면서 연습하라고 하심.

Last Updated: 8/4/2021, 1:21:06 AM