본문 바로가기

분류 전체보기

(212)
[HTTP 완벽 가이드] HTTP 메시지 메시지의 흐름 HTTP 메시지는 HTTP 어플리케이션 간에 주고 받은 데이터의 블록들이다. 메시지가 서버로 이동하는 것을 인바운드라고 하고 서버에서 처리가 끝난 후 아웃바운드로 다시 클라이언트로 복귀한다. 모든 메시지는 다운스트림으로 흐른다. 메신지의 발송자는 수신자의 업스트림이 된다. 메시지의 구성 메시지는 시작줄, 헤더, 본문 으로 구성 헤더와 본문 사이는 줄바꿈(CRLF)으로 구분한다. 위 응답 메시지를 보면 시작줄에서 HTTP 버전을 표기하고 상태값과 메시지 OK를 표시 헤더에 본문에 있는 내용의 타입과 길이를 알려주고 본문 내용이 나온다. 메시지의 문법 요청 메시지 형식 응답 메시지 형식 HTTP 메서드 GET, POST, PUT, HEAD 등등 요청 URL 완전한 URL 또는 경로 HTTP 버..
[HTTP 완벽 가이드] URL 과 리소스 URL 절대 URL http://www.google.com/test.html 상대 URL ./test.html schem 사용할 프로토콜 호스트와 포트 호스트에는 호스트명 또는 IP 주소, 포트는 항상 필요하지만 생략도 가능 HTTP는 80 HTTPS 443 경로 리소스의 경로 쿼리 검색 질의로 많이 사용한다. & 로 구분 프래그먼트 서버로 전달하지 않는 값으로 브라우저 내부에서 사용하는 문맥 안전하지 않는 문자 URL에서는 특정 목적으로 사용하는 값과 안전하지 않은 값들이 있다. : 문자는 스킴 뒤에 오고 ?는 쿼리는 나는 값 처럼 이런 문자들은 URL안에서 다른 용도로 사용할 수 없다. ://:@:/;?# 문자들 제외하고는 대부분 안전하지 않은 문자로 분류된다. 서비스의 안전성을 위해 항상 안전한 값..
[HTTP 완벽 가이드] HTTP 개관 클라이언트와 서버 HTTP 프로토콜로 요청, 응답을 받는 두 주체를 HTTP 클라이언트와 HTTP 서버라 한다. 리소스 웹 리소스란 웹에서 제공되는 모든 컨텐츠를 뜻한다. 정적 파일로는 html, ms docs , jpeg, avi 등이 있고 동적 리로스로는 사용자가 누구인지 어떤 정보를 요청하는지 등으로 다른 컨텐츠를 생성할 수 있다. MIME (Multipurpose Internet Mail Extensions) 원래는 이메일간 데이터 타입을 지정하기 위해 사용했지만, 사용성이 좋아 HTTP 에서도 채택 되었다. 웹 서버는 모든 HTTP 객체에 MIME 타입을 붙이고 브라우저에서는 MIME 타입을 받아들일 수 있는지 확인한다. text/html -> (primary object type)/(speci..
[Real Mysql] 프로그램 연동 JDBC JDBC 는 어플리케이션과 데이터베이스를 연결하는 인터페이스 부분이다. Connector/J - MySQL 의 JDBC 이름 JDBC URL MySQL 서버의 정보를 표준 포맷으로 조합한 문자열 ex) jdbc:mysql://서버IP:포트/db네임 Statement JDBC를 사용하는 어플리케이션에서 SQL과 DDL 문장을 실행하는데 필요한 객체 PreParedStatement 쿼리 분석이나 최적화 작업을 처음 한번만 수행해서 별도로 저장을 해놓고, 그 뒤 저장된 분석 결과를 재사용 하는 방식 SQL 문장 자체가 네트워크로 전송되지 않고 바인딩할 변수값만 전달 JDBC 가 데이터를 가져오는 방식 클라이언트 커서 방식 MySQL에서 정보를 모두 받아 JDBC가 가지고 있고, JDBC 를 사용하는 측에서 일..
[Real Mysql] 파티션 파티션이란 파티션이란 사용자는 하나의 테이블로 읽고 쓰지만 MySQL 서버 입장에서 데이터를 별도의 테이블로 분리해서 저장을 하는것 파티션은 하나의 서버에서 테이블을 분산하는것이지, 원격 서버로 분산 시키는 건 아니다. 파티션 사용 이유 한 테이블이 너무 커서 인덱스 크기가 메모리보다 훨씬 크거나 데이터 특성상 삭제 작업이 필요한 경우 단일 INSERT 와 SELECT 의 빠른 처리 insert 작업처럼 레코드의 변경이 발생하면 인덱스의 변경을 위한 작업이 발생하게 되고 이때 index 크기가 너무 크다면 부하가 생길 수 있다. 파티션을 사용하면 index 에 크기도 작아지게 되서 성능 향상을 할 수 있다. 데이터의 물리적인 저장소 분리 파티션을 통해 파일의 크기를 조절하거나 각 파티션별 저장될 위치를 ..
[Real mysql] 쿼리 작성 및 최적화 쿼리들이 어떻게 처리가 되는지를 알아보자 SELECT select 는 여러 테이블을 조합해서 빠르게 가져와야 하기 때문에 여러 테이블을 어떻게 읽을 것인지 많은 주의를 기울여야 한다. 인덱스를 적절히 사용하면 order by 나 group by 가 있어도 해당 실행 순서가 skip 되기도 한다. GROUP BY group by 절에 명시한 컬럼과 인덱스 컬럼 순서와 위치 모두 동일해야 한다. 인덱스 순서와 위치가 중요 예를들어 컬럼이 col1, col2, col3, col4 가 있다면 group by col2, col1 group by col1, col3 group by col1, col2, col3, col4, col5 등 처럼 순서가 맞지 않고 특정 컬럼이 빠져있다면 인덱스를 타지 않는다. 대신 gr..
[Real Mysql] 실행계획 - 쿼리 동작 방식 MySQL 엔진에서 처리하는데 시간이 오래 걸리는 작업의 원리를 알아두자 풀 테이블 스캔 인덱스를 사용하지 않고 테이블의 데이터를 처음부터 끝까지 읽어 요청된 작업을 처리한다. 풀테이블 스캔을 하는 경우 - 레코드 수가 너무 작아서 인덱스 보다 풀테이블 스캔을 하는게 빠른 경우 - WHERE 절이나 ON 절에 인덱스를 이용할 수 있는 조건이 없을때 - 인덱스 레인지가 가능하더라도 옵티마이저가 판단하기에 너무 많은 수의 건수인 경우 ORDER BY 정렬을 크게 - 인덱스를 이용하는 방법 - FileSort 라는 별도 처리 방법 을 이용하는 방법이 있ㅎ다. 인덱스를 사용하지 않는다면 실행계획 extra컬럼에 Using filesort 가 표시된다. - 소트 버퍼 정렬을 수행하기 위해 별도로 할당받은 메모리 ..
[Real Mysql] 실행 계획 DBMS 에서 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장되어 있는지 통계정보를 참조하며, 이런 기본 데이터를 비교해서 최적의 실행 계획을 수립하는 작업이 필요한데 이걸 옵티마이저가 담당한다. explain 명령어로 실행 계획을 확인 할 수 있다. 옵티마이저 쿼리가 실행되는 과정을 크게 3가지로 나눌 수 있는데 1. 사용자로부터 요청된 SQL 문장을 잘라서 MySQL 서버가 이해 할 수 있는 수준으로 분리 2. 정보를 확인해서 어떤 테이블로부터 어떤 인덱스를 이용해 테이블을 읽을지 선택 3. 두번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해서 스토리지 엔진으로부터 데이터를 가져온다. 여기서 두번째 단계를 옵티마이저가 처리한다. 옵티마이저 종류 - 규칙 기반 최적..