-- 엔진별 용량 확인 SELECT ENGINE , COUNT(1) AS 'TABLES' , CONCAT(ROUND(SUM(TABLE_ROWS) / (1024 * 1024), 2), 'M') AS 'TABLE_ROWS_SIZE' , CONCAT(ROUND(SUM(DATA_LENGTH) / (1024 * 1024 * 1024), 2), 'G') AS 'DATA_SIZE' , CONCAT(ROUND(SUM(INDEX_LENGTH) / (1024 * 1024 * 1024), 2), 'G') AS 'IDX_SIZE' , CONCAT(ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / (1024 * 1024 * 1024), 2), 'G') AS 'TOTAL_SIZE' , ROUND(SUM(IN..
[데이터베이스/SQL] - [SQL] DBMS 종류에 따른 페이징 쿼리(분할 쿼리) [SQL] DBMS 종류에 따른 페이징 쿼리(분할 쿼리) TEMP 테이블 DBMS 종류에 따른 분할 쿼리 방식은 조금씩 다르다. 페이징을 하거나, 데이터를 끊어 읽을 때 사용된다. Oracle 변수 처리 시 start, end로 데이터를 제한하여 분할하면 된다. ex) WHERE TOTAL.RNU reference-m1.tistory.com 지난 포스팅에 DBMS 종류별 페이징을 소개 한적이 있었다. 목록성 화면에서 페이징이 있는 경우 많이 사용하는 방법이다. 오늘은 위에 소개한 쿼리를 Mybatis를 활용하여 공통적으로 적용하는 방법이다. 아래의 예시는 MySQL로 작성되었다. CommonMapper.xml SELECT..
Swagger를 잘 사용하다가 추후 JWT 인증 방식을 적용하면 Token 정보가 없어 401 Unauthorized 에러가 난다. 단순히 Controller 메소드에서 JWT Token을 받는 방법이 있지만, 모든 메소드에 추가하는 건 코드의 양과 가독성이 나빠져서 정말 비효율적인 코딩이 된다. 또한 Interceptor에서 JWT 인증에 대한 검사를 한다면 위에 언급한 방법은 무용지물이 된다. 인증 설정 Swagger 2.9.2부터 Authorize를 지원한다. Swagger Configuration 설정을 통해 Swagger GUI에서 간단하게 인증을 등록할 수 있다. Authorize 버튼을 눌러보면 Swagger Configuration에서 설정한 정보를 바탕으로 값을 셋팅을 할 수 있다. 설정..
쿼리를 사용하다 보면 WHERE 1=1을 종종 사용할 때가 있다. 처음 접하시는 분들은 정확한 의미를 모르고 사용하기도 한다. 근데 사용하다 보면 의문이 든다. 왜 써야 하는가? 1=1의 의미는 단순히 항상 참이다. 보통은 SQL Client에서 데이터를 뽑기 위해 쿼리 문을 작성할 때 WHERE 절에 1=1로 조건을 걸고 이후 AND 조건을 자유자재로 넣고 빼기 위해서 사용한다. SELECT * FROM USER_BAS WHERE 1=1 AND DEL_YN = 'N' -- AND USE_YN = 'Y' AND USER_ID = 'U000000001'; 쿼리문 작성 이후 Mybatis로 옮길 때는 WHERE 1=1은 의미가 없기 때문에 빼고 작성해야 한다. 고정적인 필수 선행 조건이 있다면 WHERE 절..
MySQL에 제공하는 시간을 반환하는 함수에는 SYSDATE(), NOW() 두 가지 있다. 종종 오라클에서 제공하는 SYSDATE와 같은 기능으로 생각하고 SYSDATE()를 사용하는 분도 있다. 하지만 이 두 가지 함수에는 차이가 있다. 둘 다 현재 날짜 값을 가지고 오지만, 현재라는 기준이 다르다. 이 차이는 쿼리의 실행계획에 상당한 영향을 미칠 정도로 영향력이 있다. 아래 예제에서 확인해보자. SELECT NOW() AS NOW_START , SLEEP(1) , NOW() AS NOW_END , SYSDATE() AS SYSDATE_START , SLEEP(1) , SYSDATE() AS SYSDATE_END; NOW()와 SYSDATE() 차이를 확인하기 위해 쿼리문 SLEEP()을 주어보았다...
웹서버를 구축한다면 도메인과 해당 웹서버를 연결하는 과정을 해야 한다. 웹 특성상 검색엔진을 통해 크롤링된 주소로 사용자들이 접속하기 때문이다. 또는 이미 구축된 웹서버의 사이트 개편을 위해 다른 사이트로 연결해야 할 때도 있을 것이다. 사이트 개변의 경우의 리다이렉션은 프런트엔드에서도 구현이 가능하지만 검색엔진에게 변경되었다는 정보를 전달해주는것이 중요하다. HTTP 상태코드(301/302)를 반환해 검색에게 변경된 정보를 알려줘야 한다. 아래 HTTP 상태코드에 대한 포스팅을 참고하자. [서버운영/Linux & NetWork] - HTTP 상태코드 정리 HTTP 상태코드 정리 HTTP 통신은 개발자라면 그림자처럼 붙어 다니는 기본적인 항목이다. 어떤 분야의 개발자든 필수라고 생각된다. 프런트엔드, 백..
MENU_BAS라는 테이블에 MENU_ID, UPR_MENU_ID의 관계를 가지고 하위에서 상위까지 데이터를 조회하는 방법이다. WHTH RECURSIVE를 통해 데이터를 조회하는 점을 기억하자. WITH RECURSIVE MENU (MENU_ID, UPR_MENU_ID, MENU_NM, MENU_URL) AS ( SELECT MENU_ID , UPR_MENU_ID , MENU_NM , MENU_URL FROM MENU_BAS WHERE MENU_ID = #{menuId} AND DEL_YN = 'N' UNION ALL SELECT R.MENU_ID , R.UPR_MENU_ID , R.MENU_NM , R.MENU_URL FROM MENU_BAS R INNER JOIN MENU ON R.MENU_ID =..
프로젝트를 설정, pom.xml을 수정한적이 없는데 갑자기 빌드가 안되면서 아래와 같은 에러가 발생한다. Failed to transfer file: http://repo.maven.apache.org/maven2/.pom Return code is: 501 , ReasonPhrase:HTTPS Required. 2020년 1월 15일부로 maven central repository의 http 지원이 중단되서 나타난 증상이다. 단순히 repository 주소를 http에서 https로 변경하면된다. pom.xml central maven repo central maven repo https https://repo.maven.apache.org/maven2
1. pom.xml 에서 packging을 war를 변경하고 tomcat을 provided로 설정한다. war org.springframework.boot spring-boot-starter-tomcat provided 2. SpringBootServletInitializer를 상속받아 코드에서 서블릿을 초기화하는 코드를 추가해야한다. import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; public class ServletInitializer extends SpringBootServletInit..
- 회고
- Maven
- 프로그래머
- 경력관리
- Collection
- 자바스크립트
- 리눅스 명령어
- Eclipse
- 리액트 16
- 이직
- effective java
- 성능분석
- 정렬 알고리즘
- Linux 명령어
- Java
- 제주도 여행
- React
- sort algorithm
- 오라클
- 프로그래머스
- SQL
- 리액트
- Tomcat
- javascript
- 제주도 3박4일 일정
- 개발환경
- 오라클 내장 함수
- 소프트웨어공학
- spring
- 자바
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |