분류 전체보기
Maven 프로젝트를 Gradle로 변경
Maven 프로젝트를 Gradle로 변경해봤다. 멈저 PC에 cmd 창에서 gradle 명령어를 사용할 수 있도록 환경 변수를 편집해보자. 우선 시스템 환경변수에서 시스템 변수 편집에 들어가 Path를 수정하여 gradle\bin의 위치를 설정해준다. (gradle은 홈페이지에서 별도로 다운로드) 정상적으로 환경변수가 설정이 되면 cmd 창을 키고 gradle -v 명령어를 사용하면 다음과 같이 gradle 버전정보가 출력된다 그리고 maven 프로젝트 디렉토리에서 pom.xml이 존재하는 위치로 이동하여 다음 명령어를 사용하면 자동으로 build.gradle이 생성되면서 gradle 설정파일이 추가된다.1gradle init --type pomcs
Intellij에서 톰캣 설정
이클립스에서 톰캣 서버를 사용할 때 그 톰캣의 원래 config(server.xml)을 사용하지 않고 Extra Config를 사용한다. 인텔리제이를 처음 사용하면서 이 또한 그럴것 같아 찾아봤으나 인텔리제이의 경우 {TOMCAT_HOME}의 설정값을 참조 하고 있다. 그래서 Tomcat의 수정이 필요한 경우의 tomcat home에 위치해있는 conf/server.xml을 직적 수정해서 사용해야 톰캣 설정이 변경하다.
SELECT-LIST 컬럼 가공시 정렬연산 수행 확인 및 개선방법
인덱스가 Id, ch_date, ch_order 순으로 생성되어 있을 경우 MIN 값을 구해도 별도의 정렬연산을 수행하지 않는다. 수직적 탐색을 통해서 가장 왼쪽지점에서 보는 최소 값이 바로 구하고자 하는 값이기 때문이다. 1SELECT MIN(ch_date) FROM scott.SORT_TEST WHERE ID = ‘C’;csMAX의 경우도 마찬가지이다. MIN과 다른 점은 왼쪽에서 찾는게 아니라 가장 오른쪽에 있는 데이터를 찾는다는 점이다.1SELECT MAX(ch_date) FROM scott.SORT_TEST WHERE ID = ‘C’;cs 그래서 두 개의 실행계획을 살펴보면 인덱스 리프 블록의 왼쪽(MIN) 또는 오른쪽 (MAX)에서 레코드 하나(FIRST ROW)만 읽고 멈춘다.1SELECT ..
인덱스를 이용한 sort 연산 생략
인덱스 Range Scan이 가능하려면 가공하려는 컬럼의 데이터가 정렬되어 있어야 가능하다. 인덱스는 그렇기 때문에 정렬이 되어있다. 그래서 인덱스를 사용하는 이유가 있다. 테이블 생성1234create table sort_test (id char,ch_date date,ch_order varchar(10));cs 제약조건 추가1ALTER TABLE SCOTT.SORT_TEST ADD CONSTRAINT ODER_PRIMARY PRIMARY KEY (ID,CH_DATE,CH_ORDER);cs 데이터 실행계획PK를 기준으로 알아서 정렬이 되어있다. ( ID -> CH_DATE -> CH_ORDER 순서대로) 만약 별도로 order by를 sql에 지정한다고 해도 옵티마이저는 sort order by를 진행..
백준 알고리즘 4150번 피보나치 수 문제
저번에 공부한 BigInteger를 응용하여 알고리즘 문제를 풀어보자. 이번문제는 피포나치 수열을 해결하는 문제이다. 저번에 포스팅 했었던 피보나치 수열을 구하는 방법은 재귀와 DP 그리고 반복문이 있다. 이번 문제는 반복문을 사용하여 구해보자. 위에 문제를 보면 데이터의 결과 크기가 Long의 범위를 벗어난다. 그렇기 때문에 데이터를 담기위해서 BigInteger를 사용하였다. 생각보다 문제는 간단하나 여러가지 경우를 정리 할 수 있었서 좋았다. 1234567891011121314151617181920212223242526272829303132333435363738394041package test; import java.math.BigInteger;import java.util.ArrayList;imp..
Java의 거대 정수를 담을 수 있는 BigInteger
대학교 학창시절에 BigInteger만들기를 자료구조 시간에 C로 만들어 본적이 있다. 그리고 실질적으로 실무에서는 Long값을 벗어난 데이터를 담아서 사용해본적이 없어 자바의 BigInteger라는 객체가 존재하는지 몰랐다. 매주 진행하는 알고리즘 스터디에서 문제를 풀다가 Long값 이상의 데이터가 필요해서 찾다가 사용하게 되었다. 몇 가지 정리해보자. BigInteger 객체 생성 방법 팩토리 메서드와 기존 constant 객체로써 제공하는 방법으로 BigInteger객체를 만들 수 있다.12345678910// ConstantBigInteger zero = BigInteger.ZERO;BigInteger one = BigInteger.ONE;BigInteger ten = BigInteger.TEN;..
Mysql에서 각 유형별 상위 몇건 데이터 가져오는 방법
Mysql을 공부하면서 특정 컬럼을 그룹으로 나누고 그 그룹별로 상위 N건의 데이터를 출력하는 방법에 대해 알아보았다. MySQL은 Oracle의 그룹별로 시퀀스 번호를 할당하는 ROW_NUMBER()라는 기능이 제공되지 않아 상위 몇개의 데이터를 추출하기 위해서는 Mysql의 세션 변수를 사용하여 구현할 수 있다. 우선 두 개의 테이블이 존재한다고 가정해보자. 첫 번째 테이블은 사용자 정보를 담고 있는 user 테이블이고 두 번째 테이블은 사용자별 구매정보를 가지고 있는 purchase 테이블이 있다고 가정해보자. user 테이블 purchase 테이블 이 때 사용자 ID가 2보다 큰 사용자들을 대상으로 마지막 구매날짜가 최신인 상위 탑 7개를 추출하는 쿼리를 작성해보자. 결론부터 보여주면 다음과 같다..
[공유] 시간 복잡도와 공간복잡도 정리
시간복잡도와 공간복잡도 관련하여 많이 잊어먹어서 정리된 사이트를 공유합니다. https://joshuajangblog.wordpress.com/2016/09/21/time_complexity_big_o_in_easy_explanation/
Mysql @variables를 통해 변수 생성 및 대입 연산자 소개
mysql에서 사용자 정의변수로서 @variables를 사용할 수 있다. 예를 들면 다음과 같이 set 명령어를 통해 변수를 만들고 값을 부여한뒤, 해당 변수를 여러 부분에서 사용할 수 있다.12SET @a = 'test';SELECT @a;cs 해당 변수의 유효 범위는 데이터베이스와의 세션이 유효할때까지 사용이 가능하다. 그럼 변수의 데이터를 대입할때 사용하는 대입 연산자에 대해 알아보자. 대입 연산자설명=왼쪽 피연산자에 오른쪽 피연산자를 대입함. (SET 문이나 UPDATE 문의 SET 절에서만 대입연산자로 사용됨):=왼쪽 피연산자에 오른쪽 피연산자를 대입함. = 연산자는 Mysql에서 SET이나 UPDATE 문장에서 왼쪽연산자에 오른쪽 연산자를 대입하는 의미로 사용된다. 그 이외에 사용될 때는 비교..
재귀 문제점과 꼬리 재귀와의 함수 비교
재귀함수는 자기 자신을 호출하는 방식으로 다양하게 사용된다. 재귀함수에는 일반재귀와 꼬리 재귀가 있는데 나는 둘 다 사용해온것 같은데 정확한 명칭과 사용방법에 대해서는 제대로 알지 못하는 것 같아 정리하게 되었다. 코드도 짧고 간결한 장점이 있다. 하지만 결국에는 함수를 계속 호출하는 방식이기에 함수가 끝나고 돌아가야할 위치에 대해 스택에 기록된다. 계속 함수가 호출되어 스택 영역의 최대 이상의 크기를 넘어가게 되면 Stack over flow가 발생한다. 편리함을 찾다가 더 위험한 상황이 초래된다. 그리고 성능적으로도 문제가 있다. 피보나치 수열의 예시를 확인해보자.12345private static int factorial(int n) { if (n == 1) return n; return n * f..