누군가 서버를 리부팅 해도 되냐고 물어봐서 하라고 한 후 서비스를 올리는데 데이터베이스를 찾을 수 없다는 에러가 났다. 내 데이터베이스 명은 대문자인데 (예: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..
다중디비 설정은 간단한데 아주 중요한..부분이 있다. 이 부분을 놓치면...몇시간동안 뻘짓 할 수도 있으니...꼭 확인하기! 0️⃣ DB dependency - 오라클은 maven에서 정식으로 지원하지 않기 때문에 아래처럼 repository를 설정해줘야 드라이버를 다운받을 수 있다 - DB버전 : 오라클 11g , mariaDB 10.6 oracle ORACLE JDBC Repository http://www.datanucleus.org/downloads/maven2/ com.oracle.ojdbc ojdbc8 19.3.0.0 org.mariadb.jdbc mariadb-java-client 2.6.0 1️⃣ datasource 설정 classpath:/egovframework/egovProps/glo..
전자정부프레임워크에서 스케쥴러 사용이 필요해 1번방법으로 구현했다가, 스케쥴러 시간 설정을 설정파일로 빼달라는 요청이 있어서 2번 방법으로 다시 구현했다. 사실 이 요청은 시간을 Globals.properties로 빼달라는 것인것 같았지만.. 1번 방법에서 단순히 값을 가져와서 넣는건 "attribute value must be constant"오류가 났다. 뭔가 해결하는 방법이 있겠지만, 시간이 없어서 2번방식으로 했다! (단순히 static final을 붙여주는건 안됐다 ㅠㅠ) 1. @Scheduled 어노테이션 방식 어노테이션 방식은 아주 간단하다. 1️⃣ 설정파일 (context-scheduler.xml) 2️⃣ 스케쥴러로 실행 할 메서드 2-1. @Component 어노테이션으로 bean 등록 ..
springboot에서 jwt 토큰 생성 후 아래의 코드 처럼 header에 값을 넣어서 보내주는데, react에서 받을 수 없었다. @Override //attemptAuthentication가 실행이 된 후 인증이 정삳ㅇ적으로 된 경우 함수가 실행 -> jwt토큰 생성 후 사용자에게 리턴 protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException { System.out.println("로그인 인증이 완료 됌"); PrincipalDetail..
- Total
- Today
- Yesterday
- springboot
- 자바코테
- javascript
- java 코테
- 현대코테
- Docker
- 아파치카프카
- java
- softeer java
- Linux
- 자바
- softeer
- 도커
- Spring
- 톰캣
- 리액트
- react
- 오토에버코테
- Kubernetes
- 자바스크립트
- 스프링
- 쿠버네티스
- 코딩테스트
- 현대오토에버
- tomcat
- 현대
- 전자정부프레임워크
- centos
- mysql
- 코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |