Contents

    미들웨어와 WAS 그리고 Web Server

    미들웨어 미들웨어는 양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어, 네트워크를 통해서 연결된 여러 개의 컴퓨터에 있는 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결해 주는 소프트웨어를 말한다. 3계층 클라이언트/서버 구조에서 미들웨어가 존재하며 일반적으로 웹 브라우저에서 데이터베이스로부터 데이터를 저장하거나 읽어올 수 있게 중간에 미들웨어가 존재하게 된다. 대표적으로 TP Monitor(Transaction Processing Monitor), WAS(Web Application Server) 등이 있다. 클라이언트 사이드의 비즈니스 로직을 최소로 줄이고 비즈니스 로직 자체를 클라이언트와 DBMS사이의 미들웨어 서버에서 동작하도록 함으로써 클라이언트는 입..

    자바의 자료구조 Collection Framework (2) - List

    Java의 Collection 구현체 중 List 인터페이스는 배열과 비슷한 형태의 자료구조이며 다양한 메소드들을 가지고 있다. List인터페이스를 구현한 자료형 중에는 대표적으로 ArrayList와 LinkedList가 존재하는데 오늘은 중점적으로 이 두 가지 List구현체들을 알아보고자 한다. 참고할 점은 두 구현체 모두 내부적으로 구현만 다를뿐 개발자가 실제 사용하는 메소드 사용법에는 큰 차이가 없다. 그러나 내부적으로 다른 구현으로 인해 각 상황마다 성능 차이가 생길 수 있기 때문에 두 구현체 중 어느 것을 선택할 지는 전적으로 개발자의 몫이다. 1. ArrayList ArrayList는 내부적으로 배열을 이용해 구현되어있다. 일반 배열과 동일하게 연속된 메모리 공간을 사용한다. 일반 배열과의 차..

    자바의 자료구조 Collection Framework (1) - Map

    자바를 매일 같이 사용하면서 매번 자연스럽게 가져다 쓰는 자료구조 중 하나가 바로 Map 자료 구조이다. Java는 JDK 1.2 이후 버전부터 Collection Framework를 추가했다. Collection Framwork의 추가로 편하게 사용할 수 있는 인터페이스 및 구현된 클래스들이 제공되게 되었으며 그 중 하나가 오늘 글을 쓰게된 Map이다. 1. Map의 개요 Map인터페이스는 키와 값을 하나의 쌍으로 묶어서 저장하는 컬랙션 클래스를 구현하는 데 사용된다. 키의 중복은 허용하지 않지만 다른 키를 가지는 같은 값은 허용된다. Java의 Map 인터페이스를 구현한 클래스로는 대표적으로 HashMap, LinkedHashMap, TreeMap 등이 있다. 2. HashMap Java의 HashM..

    빅오 표기법

    1. 빅오란? (O, big-O) 빅오(O, big-O)란 입력값이 무한대로 향할 때 함수의 상한을 설명하는 수학적 표기방법이다. 란다우 표기법이라고도 하며 점근 표기법의 일종으로 빅오는 점근적 실행시간을 표현하기 위해 사용한다. 점근적 실행 시간이란 입력값 n이 커질 때, 즉 입력 값이 무한대를 향할 때 실행 시간의 추이를 의미한다. 빅오(O)는 상한을 의미한다. 이외에도 하한을 표현하는 빅 오메가, 평균을 의미하는 빅세타 등이 있지만 상한으로 표현하는 표현법을 널리 사용한다. 컴퓨터 사이언스에서 빅오는 알고리즘의 성능을 표현하는 데 주로 사용하며 시간과 공간 복잡도를 표현할 수 있다. 알고리즘의 실제 성능을 표현하는 표기법이 아님을 기억해야한다. 2. 빅오의 예시 - O(1) 빅오에서 상수는 입력한 ..

    코딜리티 Lesson 1, Binary Gap - Java

    코딜리티 테스트를 볼 일이 생겨 Java로 첫 문제 연습을 해보았다. Binary Gap은 코딜리티의 Lesson 1번의 문제이다. 문제의 요는 10진수를 2진수로 변경해 가장 큰 1과 1사이의 갭을 구하는 문제이다. Java Integer 클래스 안에 toBinaryString 메소드를 이용해 한 번의 순회로 해결할 수 있게 코드를 짜보았다. // you can also use imports, for example: // import java.util.*; // you can write to stdout for debugging purposes, e.g. // System.out.println("this is a debug message"); class Solution { public int solut..

    쿼리튜닝 겉핥기 - 인덱스의 사용 (MySQL위주)

    MySQL 공식 도큐먼트의 설명에 의하면 SELECT절의 성능을 향상시키는 가장 좋은 방법은 하나 또는 하나 이상의 컬럼의 인덱스를 만들어 주는 것으로 언급하고있다. 그렇기 때문에 어떤 컬럼을 인덱스화 시키고 어느 구절에 인덱스 컬럼을 사용하는 것이 좋은지 잘 파악하고 사용하는 것이 중요할 것이다. 인덱스는 특정 Columns에 맞는 Rows 찾을 때 사용 된다. 만약 인덱스가 없다면 MySQL에선 첫 행 부터 쭉 읽으며 전체 테이블을 훑을 텐데, 이는 테이블이 커지면 커질 수록 그 비용이 증가하는 현상을 초래한다. 1. WHERE 절에서의 인덱스 사용 인덱스를 사용의 이유를 가장 손쉽게 깨달을 수 있는게 WHERE 절에 사용되는 Columns가 아닌가 싶다. 그러나 WHERE 절에 사용되는 컬럼을 무조..

    쿼리튜닝 겉핥기 - 인덱스란?

    지난 번 옵티마이저에 대해 알아본 것에 이어 이번엔 DBMS의 인덱스를 정리하고자 한다. 1. 인덱스(Index) 란? 인덱스는 DBMS에서 조회 성능을 높이기 위한 기술이다. 데이터베이스에서 인덱스는 조회 성능을 높이기 위해서뿐만아니라 유니크나 프라이머리 키 제약과 같은 제약 조건을 구현하기 위해서도 사용된다. 그렇기 때문에 인덱스에 대한 이해를 빼고선 데이터를 잘 다룰 수 없다. 2. 인덱스의 저장 구조 및 관리 인덱스 또한 데이터이므로 별도의 인덱스 페이지로 관리된다. 인덱스 페이지는 B-Tree로 관리된다. B-Tree는 따로 더 공부가 필요한 부분이라 자세한 사항은 나중을 기약하기로 하고, 간단하게만 보자면 B-Tree는 기본이 되는 루트 노드를 중심으로 노드들이 하위로 연결되어 있으며, 어떤 ..

    쿼리튜닝 겉핥기 - 개요, 옵티마이저

    회사에서 쿼리를 짜다보면서 쿼리의 성능이 떨어지는 걸 자주 경험하게 되었다. 그로 인해 자연스럽게 쿼리 튜닝에 대한 고민을 시작했고 조금씩이라도 쿼리 튜닝을 공부하기 시작했다. 그러나 쿼리 튜닝에 대해 계속 알아볼때마다 너무 깊고 무궁무진함을 느꼈고 이렇게 블로그에 글 몇 자로라도 정리의 필요성을 느껴 정리를 시작하게 되었다. 개인적인 공부를 위한 글이다보니 틀린 부분, 잘못 알고있는 부분이 있을 것이라 사료됩니다. 혹시나 이 글을 보시는 분들이 있으시다면 편하게 지적해주시면 감사하겠습니다. 1. 옵티마이저란? 쿼리 튜닝에 대해 알기 전에 먼저 선행 지식으로 갖춰야할 것 중 하나가 옵티마이저이다. 옵티마이저란 DBMS의 내부 엔진으로 SQL을 가장 효율적인 최적의 실행 방법을 결정하는 역할을 수행한다. ..