MySQL의 구조 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분한다. MYSQL 엔진 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러, SQL 파서 및 전처리기, 그리고 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룬다. 성능 향상을 위해 캐시나 버퍼 풀과 같은 보조 저장소 기능도 포함돼 있다. 스토리지 엔진 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어 오는 역할을 한다. 여러 가지 스토리지 엔진을 사용할 수 있다. CREATE TABLE test_table (col1 INT, col2 INT) ENGINE = INNODB 위와 같이 테이블을 생성하면 해당 테이블의 CRUD 작업은 InnoDB 스토리지 엔진이 처리한다. 핸들러 API..
조인이란 두 개 이상의 테이블을 하나의 집합으로 만드는 연산이다. SQL문에서 FROM 절에 두 개 이상의 테이블이 나열될 경우 조인이 수행된다. 조인 연산은 두 테이블 사이에서 수행된다. FROM 절에 A, B, C라는 세 개의 테이블이 존재하더라도 세 개의 테이블이 동시에 조인이 수행되는 것이 아니다. 세 개의 테이블 중에서 먼저 두 개의 테이블에 대해 조인이 수행된 후, 먼저 수행된 조인 결과와 나머지 테이블 사이에서 조인이 수행된다. 이러한 작업은 FROM 절에 나열된 모든 테이블을 조인할 때까지 반복한다. 테이블 또는 조인 결과를 이용하여 조인을 수행할 때 조인 단계별로 다른 조인 기법을 사용할 수 있다. 예를 들어, A와 B 테이블을 조인할 때는 NL Join 기법을 사용하고 해당 조인 결과와..
DTO Data Transfer Object(데이터 전송 객체)로서 계층간의 데이터 교환을 위해 사용되는 객체다. DTO는 로직을 가지지 않는 순수한 데이터 객체로 Getter/Setter 메서드만을 가진다. Setter 대신 생성자만 이용하면 불변 객체로 사용할 수 있다. public class UserSaveRequestDto { private String userEmail; private String userPassword; // Setter 대신 생성자를 사용하면 불변 객체로 사용할 수 있다. public UserSaveRequestDto(String userEmail, String userPassword) { this.userEmail = userEmail; this.userPassword = ..
이상현상(anormaly) 테이블 내의 데이터들이 불필요하게 중복되어 테이블을 조작할 때 발생되는 비합리적 현상이다. 이상현상 삽입 이상 (Insersion Anomaly) : 데이터를 삽입 시 불필요한 세부 정보를 입력해야 하는 현상 (null 값을 넣는 등) 삭제 이상 (Deletion Anomaly) : 데이터 삭제 시 원치 않는 다른 정보가 같이 삭제되는 현상 갱신 이상 (Update Anomaly) : 데이터를 갱신 시 특정 부분만 수정되어 중복된 값이 모순을 일으키는 현상 함수 종속성(FD, Functional Dependency) 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 관계를 함수 종속성이라고 한다. A->B로 표기하며 A를 B의 결정자(Determinant)라고 ..
RDB (Relation DataBase) 관계형 모델을 기반으로 하는 데이터 베이스를 의미한다. 이를 유지, 관리하기 위한 시스템을 RDBMS(Relation DataBase Management System)이라 한다. RDBMS의 목표 데이터 무결성을 높이는 것이다. 데이터 무결성은 아래 세 종류가 있다. 데이터 무결성에 대한 자세한 내용은 여기를 참고하기 바란다. 엔터티 무결성 참조 무결성 도메인 무결성 특징 상호 관련성을 가진 테이블 집합 테이블 사이의 관계를 외래 키로 표현 2차원 데이터(행과 열)로 표현 SQL을 사용해 질의 ACID 성질 스키마 변경이 어려움 수직적 확장이 쉽고 수평적 확장이 어려움 스키마 변경의 어려움 RDB는 테이블 사이에 서로 의존성이 있고 서로 맞물려있기에 데이터 타입..
로그를 남길 때는 System.out.prinln() 같은 메서드 대신에 로깅 라이브러리를 통해 로그를 출력한다. 이 글에서는 System.out를 쓰면 안 되는 이유와 로깅 라이브러리에 대해서 간략하게 정리했다. 혹시 잘못된 내용을 발견했다면 관련한 지적은 환영한당. System.out을 쓰면 안 되는 이유 성능 저하 PrintStream 클래스의 println 메소드는 synchronized 키워드를 사용한다. print 등 출력 기능을 하는 다른 메서드들도 내부를 살펴보면 synchronized 키워드를 사용하는 것을 확인할 수 있다. synchronized 키워드는 특정 객체에 lock을 걸어 해당 작업을 진행 중인 쓰레드 외에 다른 쓰레드는 해당 작업을 간섭하지 못하도록 막는다. 이를 동기화(s..
HTTP 상태 코드 HTTP 상태 코드는 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능으로 크게 다섯 가지 종류로 나뉜다. 1xx : 요청이 수신되어 처리 중 2xx : 요청 정상 처리 3xx : 요청을 완료하려면 추가 행동이 필요 4xx : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5xx : 서버 오류, 서버가 정상 요청 처리하지 못함 세부적인 상태 코드를 모르더라도 앞 글자만 보고 대략적인 메시지 의미를 파악할 수 있다. 2xx 성공 200 OK 요청이 정상 처리된 경우를 의미한다. 201 Created 요청이 성공하여 새로운 리소스가 생성된 경우다. 일반적으로 리소스를 새롭게 생성하는 POST나 PUT 요청을 하면 이 응답 코드를 받을 수 있다. 202 Ac..
웹 서비스 모델 웹 브라우저와 웹 서버 HTTP는 TCP 연결을 설정하고 이 연결을 사용해서 HTTP 메시지를 교환한다. 웹 서버(Web Server) 웹 페이지들의 저장소와 요청 처리 소프트웨어 웹 페이지 기본 객체(base object)와 참조 객체(object)들로 구성 기본 객체 : HTML file, 페이지 내의 다른 객체를 URL로 참조 참조 객체 : HTML file, JPEG image 등등 웹 객체 주소 : URL(Uniform Resource Locator) URL은 두 부분으로 구성된다. host name : 웹 서버 호스트의 이름 및 도메인 이름 path name : 내가 지정하고자 하는 웹페이지 파일의 경로 즉, URL은 host name과 path name이 결합된 형태이다. 웹..