본문 바로가기

전체 글

(103)
mysql 쿼리 실행 계획 #2 이전 글에 이어 인덱스를 이용해 성능 튜닝을 해보자 쿼리에 앞서 show index 쿼리를 실행했을 때 출력되는 요소에 대해 이해해보자 Table: 인덱스가 생성된 테이블의 이름을 나타냅니다. Non_unique: 이 컬럼은 인덱스가 중복 허용 여부를 나타낸다. 만약 값이 0이면, 인덱스에 중복된 값이 없음을 나타낸다. 즉, 유니크 인덱스를 나타낸다. 반면 값이 1이면, 인덱스가 중복된 값을 가질 수 있음을 의미한다. Key_name: 인덱스의 이름을 나타낸다. "PRIMARY"는 기본 키를 의미한다. Seq_in_index: 복합 인덱스의 경우 각 컬럼이 인덱스 내에서 몇 번째 위치인지를 나타내는 순서 번호이다. Column_name: 인덱스에 포함된 컬럼의 이름을 나타낸다. Collation: 이 컬..
mysql 쿼리 실행 계획 #1 들어가며 앞전에 인덱스에 대해서 학습을 하였다. 인덱스를 잘 활용하면 성능이 개선되거나 잘못 활용하면 오히려 성능이 안좋아질 수 있다고 배웠는데, 얼마나 개선되고 얼마나 저하가 되는지 어떡하면 확인할 수 있을까? 쿼리 실행 계획 바로 쿼리 실행 계획을 통해 확인할 수 있는데, 쿼리 실행 계획이란 SQL문을 어떻게 데이터를 불러올 것인지에 관한 계획, 경로를 의미한다. 실습 위와 같은 구조의 스키마가 존재한다. 사원은 총 300024명이 존재한다. 다음의 쿼리문에 대한 실행 계획을 보자 컬럼은 (id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra)으로 구성되어 있다. 각 컬럼들을 해석..
자바 ORM 표준 JPA 프로그래밍 #2(영속성) 들어가며 JPA에서 제공하는 기능은 크게 엔티티와 테이블을 매핑하는 설계 부분과 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 엔티티 매니저는 엔티티를 저장하고, 수정, 삭제, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 이름 그대로 엔티티의 관리자의 역할을 한다. 개발자의 역할에서 보면 엔티티를 저장하는 가상의 데이터베이스로 보면 될 것 같다. 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저 팩토리는 이름 그대로 엔티티 매니저를 만드는 공장인데, 이 공장을 만드는 비용은 상당히 크다. 따라서 한 개만 만들어 애플리케이션 전체에서 공유하도록 설계되어 있다. 일반적으로 애플리케이션은 엔티티 매니저 팩토리를 한개만 생성한다. 엔티티 매니저 팩토리의 특징 위의 설명을 바탕으로 설계된 에티티 ..
자바 ORM 표준 JPA 프로그래밍 #1(JPA란) JPA의 기초이론과 핵심원리, 성능 최적화 까지 거의 JPA의 전부에 대해 자세히 알려주는 이 책을 읽으며 내용을 잊지 않기 위해 각 챕터를 정리하고자 한다. JPA의 등장 배경 기존의 JDBC API를 사용했을때의 반복적인 SQL(CRUD) 작성(SQL에 의존하여 개발) 객체 모델이 데이터 모델에 의존(데이터 모델을 설계 후 이에 맞추어 객체 모델을 설계 -> 객체 모델의 장점 포기) 위의 문제로 인해 객체와 데이터베이스 간의 다리 역할을 해주는 ORM 프레임워크의 등장 JPA는 자바 진영의 ORM 기술의 표준 * ORM(Object Relational Mapping): 객체와 관계형 데이터 베이스를 연결해주는 것을 의미 * JPA(Java Persistence API): JPA는 자바 ORM 기술에 ..
synchronous, asynchronous, blocking, non-blocking 동기, 비동기 그리고 블로킹, 논블로킹은 프로그램을 개발할 때 중요한 개념 중 하나이다. 기초 프로그래밍을 배우고 응용 파트인 병렬 프로그래밍을 익힐 때 나오는 개념이고 익히기 쉽지 않은 개념이기도 하다. 이번 기회에 개념을 확실히 잡아 나중에 힘든일을 겪지 않도록 하자. 동기와 비동기 개념과 블로킹과 논블로킹은 혼용하여 사용하는 경우가 있지만 엄연히 서로 다른 개념이다. 흔히 '동기' == '블로킹', '비동기' == '논블로킹'으로 헷갈리기도 합다. 하지만 실제로는 두 개념은 서로 크게 연관관계가 없는 별개의 개념이다. 동기/비동기는 작업을 수행하는 주체가 두 개 이상이어야 한다. 이 때 작업의 시간(시작, 종료 등)을 서로 맞춘다면 이를 동기라고 부르고, 서로 작업의 시간이 관계없다면 이를 비동기라..
자바의 Collection 자바에는 기본적으로 배열이라는 자료구조를 제공해 준다. 그치만 배열이 있음에도 불구하고 컬렉션을 사용하는 이유는 다음과 같다. 1. 일괄된 API : Collection의 일관된 API를 사용하여 Collection 밑에 있는 모든 클래스(ArrayList, Vector, LinkedList 등) Collection에서 상속받아 통일된 메서드를 사용하게 됩다. 2. 프로그래밍 노력 감소 : 객체 지향 프로그래밍의 추상화의 기본 개념이 성공적으로 구현되어있다. 3. 프로그램 속도 및 품질 향상 : 유용한 데이터 구조 및 알고리즘은 성능을 향상시킬 수 있다. Collection을 사용하면 자료구조에 대한 알고리즘의 구현을 생각할 필요없이 간단하게 Collection API를 사용하여 구현을 하면 됩다. 이렇..
if-else 문과 switch, enum 객체지향적인 계산기를 만드는것에 도전하였다. 이를 바탕으로 if-else문과 enum에 대해서 공부하고 객체지향적인 계산기를 만들어보자. 다음의 코드를 보자 public class Caculator { public static long calculate(char operator, long value1, long value2) { switch(operator): if (operator == '+') { return vaule1 + value2; } else if (operator == '-') { return value1 - value2; } else if (operator == '*') { return value1 * value2; } else if (operator == '/') { return val..
자바의 변수와 타입 자바의 데이터 타입에는 크게 기본형, 참조형 두가지의 타입이 존재한다. 이 두가지 타입의 특징을 공부해보자 기본형 타입(Primitive type) 타입 할당 메모리 기본값 범위 논리형 boolean 1byte false true, false 정수형 byte 1byte 0 - 2^7 ~ 2^7 - 1 short 2byte 0 -2^15 ~ 2^15 - 1 int 4byte 0 -2^31 ~ 2^31 - 1 long 8byte 0L -2^63 ~ 2^63 - 1 실수형 float 4byte 0.0F (3.4 X 10^38) ~ (3.4 X 10^38) 의 근사값 double 8byte 0.0 (1.7 X 10^308) ~ (1.7 X 10^308) 의 근사값 문자형 char 2byte '\u0000' 0 ..