본문 바로가기
728x90
반응형

전체 글39

[H2] JPA User 엔티티, 테이블 drop 에러 상황 H2 DB를 사용하고 있고, Jpa를 이용해 User 엔티티를 만들어 애플리케이션을 실행했다. 에러가 발생했다. Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "drop table if exists [*]user"; expected "identifier"; SQL statement: 원인 나는 지금 H2 2.1.214 버전을 사용중인데 2.1.212 버전부터 user 키워드가 예약어로 지정되었기 때문이다. 해결 해결 방법은 3가지다. 1. @Table 사용하기 @Entity @Table(name = "users") public class User {...} 2. User 엔티티 이름 변경하기 @Ent.. 2023. 8. 20.
우왕좌왕 좌충우돌 Slow query 개선 경험기 안녕하세요. 우왕좌왕 좌충우돌 Slow query 개선 경험기를 공유해 보려고 합니다.혹시 잘못된 내용이 있다면 알려주세요. 피드백은 언제나 환영입니다 :)  큰일이다 어느 날 정산 모듈에 사용자가 몰리면서 전체 시스템에 영향을 준 일이 발생했습니다.문제의 쿼리는 정산 모듈에서 특정 기간, 특정 사용자의 누적 사용 금액을 조회하는 쿼리였습니다.정산 시 매번 조회되는 쿼리였기에 개선이 필요한 상황이었습니다.예제를 위해 Slow query를 필요한 부분만 추출해 보면 아래와 같습니다.SELECT SUM(B.AMOUNT) AS SUM_AMOUNTFROM TB_MST A , TB_DTL BWHERE A.ID = B.IDAND A.DATES BETWEEN '20230101' AND '20230831'AND B.. 2023. 8. 18.
java scheduler 중복 호출 이슈 해결하기 1. 문제 발견 회사에서 로그를 확인하던 중 자바 스케줄러가 중복 호출되고 있는 것을 발견했다. 매일 새벽, 정해진 시간에 인사정보를 최신화시켜 주는 프로시저이다. 이 외에도 많은 프로시저들이 자바 스케줄러에 의해 중복 호출되고 있던 것이다. 중복 호출이 되고 있었지만 사용하는 데 전혀 문제가 없었기 때문에 지금까지 아무렇지 않게 넘어갔던 것 같다. 물론, B2B 서비스였기 때문에 새벽에는 사용량이 없어서 문제 되지 않겠지만, 이슈를 발견한 이상 모른 체 넘어갈 수 없었다. 2. 원인 톰캣 공식 문서에 아래와 같은 내용이 적혀 있다. 💡 내용을 요약해 보면 다음과 같다. 1. 자동 배포를 true로 설정했을 때, docBase를 정의할 경우 appBase 외부에 있어야 한다. 2. 명시적으로 정의할 경.. 2023. 4. 2.
[DB지식] MyBatis 사용 시 <!CDATA[ ... ]]> 사용 이유? MyBatis 사용 시 쿼리문에 비교 연산자와 같이 부등호 처리가 필요할 때가 있다. 하지만 비교 연산자를 사용했을 경우 error를 발생시키는데 그 이유는 비교 연산자인지 괄호인지 구분하지 못하기 때문이다. SELECT * FORM EMPLOYEES WHERE SALARY > 100 위 예시처럼 비교 연산자를 사용했을 때 MyBatis는 괄호인지 비교 연산자인지 구분하지 못한다. 이런 경우에 CDATA를 사용하면 CDATA 안에 들어가는 문장을 문자열로 인식해 구분할 수 있도록 도와준다. 사용방법은 아래와 같다. 100 ]]> 2021. 11. 1.
[Java] 생성자란? 생성자란? 객체 생성 시 초기화해주는 역할을 담당한다. 간단한 예로, 스마트폰 전원(객체)을 켜면 제조사 로고(생성자)가 등장(호출)하는 것과 같다. 생성자 특징을 살펴보면 다음과 같다. 클래스명과 메서드명(생성자)이 동일해야 한다. 리턴 타입이 없다. 객체 생성 시 단 한 번만 호출된다. 생성자를 사용하는 방법은 크게 2가지가 있다. 메서드에 매개변수 없이 호출하는 방법 메서드에 매개변수를 받아 호출하는 방법 바로 예제를 살펴보도록 하자. public class ConstructorTest { public ConstructorTest() { System.out.println("Constructor 객체생성 !!"); } public static void main(String[] args) { Const.. 2021. 10. 31.
728x90
반응형