본문 바로가기

전체 게시글376

[MySQL] 처리 대기(SLEEP)와 벤치마크(BENCHMARK) SLEEP(): 일부로 쿼리의 실행을 멈추는 함수SLEEP() 함수는 프로그래밍 언어나 쉡 스크립트 언에서 제공하는 sleep 기능을 수행한다. SQL의 개발이나 디버깅 용도로 잠깐 대기하거나 일부로 쿼리의 실행을 오랜시간 유지하고자 할 때 상당히 유용한 함수이다. 해당 함수는 대기할 시간을 초 단위로 인자를 받으며, 특별히 어떠한 처리를 하거나 반환 값을 넘겨주지 않는다. 단지 지정한 시간만큼 대기할뿐이다.SELECT SLEEP(1.5) FROM {테이블명} 추가적으로, 레코드이 건수만큼 SLEEP() 함수를 호출하기 때문에 조회되는 레코드가 총 10건이라고 하면, 결국 전체적으로 15초 동안 쿼리를 실행하는 셈이 된다. BENCHMARK(): 간단한 함수의 성능 테스트를 하는 함수디버깅이나 간단한 함.. 2023. 4. 11.
[MySQL] CASE WHEN과 서브쿼리를 활용한 쿼리 최적화 CASE WHEN 이란? CASE WHEN은 함수가 아닌 SQL 구문이다. 프로그래밍 언에서 제공하는 SWTICH 구문과 같은 역할을 한다. CASE로 시작하고 END로 끝나야 하며, WHEN ... THEN ... 은 필요한 만큼 반복해서 사용할 수 있다. CASE WHEN 조건 THEN '반환 값' WHEN 조건 THEN '반환 값' ELSE 'WHEN 조건에 해당 안되는 경우 반환 값' END 동등 연산자(=)로 비교할 수 있을 때 비교하고자 하는 컬럼이나 표현식을 CASE와 WHEN 키워드 사이에 두고, 비교 기준값을 WHEN 뒤에 입력해서 사용하는 방식이다. CASE WHEN 구문에서 한 가지 중요한 사실은 CASE WHEN 절이 일치하는 경우에만 THEN 이하의 표현식이 실행된다는 점이다. C.. 2023. 4. 11.
[MySQL] BETWEEN 연산자를 활용한 쿼리 최적화 BETWEEN 연산자 BETWEEN 연산자는 "크거나 같다"와 "작거나 같다"라는 두 개의 연산자를 하나로 합친 연산자다. 다른 비교 조건과 결합해 하나의 인덱스를 사용할 때 주의해야 할 점이 있다. 아래 동등 비교 연산자와 BETWEEN 연산자를 이용해 부서 번호와 사원 번호로 dept_emp 테이블을 조회하는 다음 쿼리를 한번 생각해보자. SELECT * FROM dept_emp WHERE dept_no = 'd003' AND emp_no = 100001; SELECT * FROM dept_emp WHERE dept_no BETWEEN 'd003' AND 'd005' AND emp_no = 100001; dept_emp 테이블에는 (dept_no, emp_no) 컬럼으로 구성된 프라이머리 키가 존재한.. 2023. 4. 11.
[Java] 왜 DI(Dependency Injection)가 필요한가? 의존관계(Dependency)에 대해서 DI에 대해 이야기 하기 전에 먼저 의존관계에 대해서 알아봐야한다. 객체에게 의존관계란 무엇인가? 어느 순간 의존관계가 발생하는가? 의존관계란 객체 혼자 모든 일을 처리하기 힘들기 때문에 내가 해야 할 작업을 다른 객체에게 위임하면서 발생한다. 즉, 내가 가지고 있는 책임과 역할을 다른 객체에 위임하는 순간 발생하는 것이다. 예를 들면, Service 클래스와 DAO(Repository) 클래스가 있다고 가정해보자. Service 클래스에서 하나의 기능을 구현하기 위해 DAO 클래스에게 데이터베이스 접근 로직을 위임하고 있다. 이때, Service 클래스는 작업(기능구현)을 완료하기 위해 DAO 클래스에게 의존하고 있다면, 이는 의존관계를 가지고 있는 것이다. DI.. 2023. 4. 10.
[MySQL] LIKE 연산자를 활용한 쿼리 최적화 LIKE 연산자는 인덱스를 이용해 질의할 수 있다. DBMS에서는 단순한 문자열 패턴 비교 연산자로 LIKE 연산자를 REGEXP 연산자보다 더 많이 사용한다. REGEXP 연산자는 인덱스를 전혀 사용하지 못한다는 단점이 있지만, LIKE 연산자는 인덱스를 이용해 처리할 수 있다. LIKE 연산자는 정규 표현식을 검사하는 것이 아니라, 어떤 상수 문자열이 있는지 없는지 정도를 판단하는 연산자다. LIKE 연산자는 와일드카드 문자인(&, _) 가 검색어의 뒤쪽에 있다면 인덱스 레인지 스캔으로 사용할 수 있지만, 와일드카드가 검색어의 앞쪽에 있다면 인덱스 레인지 스캔을 사용할 수 없으므로 주의해서 사용해야 한다. B-Tree 인덱스를 이용한 검색은 100% 일치 또는 값의 앞부분(Left-most part).. 2023. 4. 7.
[Linux] 쉘 스크립트를 활용한 배포 자동화 해당 학습을 통해 단순히 톰캣 서버에 소스코드를 배포하는 경험에서 한발 더 나아가 수동으로 배포하던 작업을 쉘 스크립트를 활용해 배포를 자동화하는 과정까지 진행한다. 톰캣 서버 설치 Tomcat 8.0.x 버전을 다운로드 https://tomcat.apache.org/ 톰캣의 기본 포트는 8080이며, 포트 변경은 TOMCAT_HOME/conf/server.xml 파일에서 설정 변경 TOMCAT_HOME/bin/startup.sh 를 실행해 서버 시작 후 서버 정상 실행 확인 접속이 되지 않을 경우 톰캣 서버의 포트에 대한 방화벽 해제를 확인 # 1. 일반 사용자 권한에서 방화벽 해제가 불가함으로, ROOT 사용자로 변경 후 방화벽을 제거할 것 su - # 1-1 비밀번호 설정이 안되있을 경우 아래 명령.. 2023. 4. 7.