Communications link failure 에러는 디비 연결이 끊어진 경우에 쿼리를 실행 한 경우 나는 에러이다. 아래와 같이 SELECT 1이라는 vaildation query를 실행하는데 이미 db connection이 꾾어졌기 때문에 validation query를 실행하는데 에러가 발생한 것이다. DB서버에서 연결을 끊어버리는 기준이 되는 시간과 관련 된 설정값은 wait_timeout이다. 아래의 명령어를 입력하면 wait_timeout이 몇초로 설정되어있는지 확인 가능하다.(기본값 : 28800초) 나는 개발서버에서 Communications link failure 가 자주 나타나서 (사실 validation query를 실행시키고 나서 컨넥션을 맺고 다음 쿼리를 실행시키기 때문에 무시..
누군가 서버를 리부팅 해도 되냐고 물어봐서 하라고 한 후 서비스를 올리는데 데이터베이스를 찾을 수 없다는 에러가 났다. 내 데이터베이스 명은 대문자인데 (예:TEST_DB) 에러는 소문자로 test_db를 찾을 수 없다는 것이다. 응...? 그래서 lower_case_table_names 설정을 확인했더니 value 값이 1로 되어있었다. linux는 value의 기본값이 0이다. show variables like 'lower_case_table_names' 여기서 내가 착각 한 것이 있는데, 0은 sensitive이고 1은 insensitive 이니 이 문제는 아니라고 생각했다. 왜냐하면 1은 대소문자를 구분하지 않으니 명령어 use TEST_DB; 를 입력하든 use test_db; 입력하든 데이터..
두 사람이 주고 받은 대화를 tb_tx와 tb_rx로 나누어서 저장한다. 두 테이블은 동일한 구조고, tx 한번, rx한번 순서대로 이야기를 한다. tb_tx와 tb_rx는 아래의 컬럼을 가지고 있다 id 한 대화의 아이디 talk_text 발화 내용 talk_seq 발화 순서 regist_date 등록일 만약 regist_date가 rx와 tx가 동일하다면 단순히 union all로 데이터를 합쳐서 order by regist_date로 하면 될 것이다. (union은 중복을 제거하기 때문에, 두 데이터의 중복이 확실히 없다면 union all을 쓰는게 성능면에서 좋다) 그런데 여기서 문제는 등록일이 동일하다는 것이다. why...왜 그렇게 되어있는지는 모른다.. 이럴 때 해결 방법을 알아보자. 우선,..
mybatis의 selectKey를 사용하면 insert나 update구문을 실행시키기 전이나(order="BEFORE"), 후에(order="AFTER") 원하는 특정 값을 받을 수 있다. 아래는 ID값을 1 증가 시킨 후 증가 된 아이디를 select 하는 구문이다. 여기서 주의 할 것은 parameterType이다. 실제로 쓰이는 값은 name하나이지만, nextId라는 값을 받기 위해서는 이 값을 받아 줄 수 있는 무언가가 필요하다. name 만 사용한다고 생각하여 parameterType을 String으로 쓰면 아래 에러를 볼 수 있다. "nested exception is org.apache.ibatis.executor.executorexception: no setter found for th..
아래와 같이 반복되는 값이 많으면, 우리는 변수를 사용하고 싶다. 현재 날짜가 세번이나 반복된다. SELECT CASE WHEN ((SELECT COUNT(*) FROM TB_INFO I WHERE I.REGIST_DATE > DATE_FORMAT(NOW(), '%Y%m%d')) = 0) THEN CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '-', '0001') ELSE CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '-', LPAD(NEXT_ID + 1, '4', '0')) END AS no FROM TB_KEY_GENERATE WHERE NAME = 'injeong'; mysql 변수 사용법은 간단하다. 아래처럼 사용하면 된다. @변수명:=값 SELECT A..
한 컬럼 값의 최댓값을 가져와서 +1을 해줘야 할 때 바로 생각해 낼 수 있는 방법은 아래와 같이 서브쿼리를 사용하는 방법이다. UPDATE tb_key_generate SET NEXT_ID = (SELECT NEXT_ID FROM tb_bot_key WHERE name = 'injeong') + 1 WHERE name = 'injeong'; 그러나 항상 서브쿼리는 성능이 안좋다는 이야기를 많이 들어서 변경 방법을 찾아보니 join으로 변경 할 수 있었다. (사실 이정도 쿼리는 성능상의 차이가 없다. 하지만 조인으로 변경 할 수 있는지를 아는것과 모르는것은 하늘과 땅차이라고 생각한다. ) UPDATE tb_key_generate t1 INNER JOIN tb_key_generate t2 ON t1.nam..
스프링부트 프레임워크에서 flyway 사용법은 간단하다. 그런데 나는 spring 설정 방법에 대해서 잘 알지 못하기 대부분의 설정이 xml로 되어있는 전자정부프레임워크에서 flyway를 사용하기 위해..개고생을 했다..거의 하루를 버렸다... 설정을 변경해주어야 할 파일은 두가지이다. 1. datasource 관련 설정파일 2. mybatis 관련 설정파일 우선 제일 먼저 flyway 라이브러리를 추가해주자. 1️⃣ flyway maven 추가 - springboot framework에서는 version을 명시하지 않아도 되었지만, 전자정부프레임워크에서는 버전 명시를 해주지 않으면 내가 사용하고 있는 mariadb 버전을 지원하지 않는다고 나온다.(공식 홈페이지에서는 분명 지원한다고 했는데😓 )그래서 ..
구문 JSON_REPLACE(json_doc, path, val[, path, val] ...) * json_doc : 컬럼명 * path : 변경할 값의 경로 * val : 변경할 값 사용예시 TB_ADDRESS 테이블의 ADDRESS_INFO 컬럼에 아래와 같은 JSON형태의 데이터가 담겨져있다. addressList의 첫번째 맵의 detail에 아무 값이 없는데, 이 값을 변경하고 싶다. UPDATE TB_ADDRESS SET ADDRESS_INFO = JSON_REPLACE(ADDRESS_INFO, '$.addressList[0].doroAddress.detail', '변경할 값') WHERE TOKEN =#{token} 그런데 아래에도 detail이 있고, 도로명주소와 지번주소의 차이이기 때문에..
- Total
- Today
- Yesterday
- 톰캣
- java 코테
- 자바스크립트
- Docker
- 현대오토에버
- Kubernetes
- mysql
- 전자정부프레임워크
- 코테
- 현대코테
- centos
- 도커
- Linux
- 현대
- 아파치카프카
- java
- 쿠버네티스
- 오토에버코테
- softeer java
- 자바
- 코딩테스트
- 스프링
- react
- Spring
- javascript
- 리액트
- springboot
- tomcat
- softeer
- 자바코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |