본문 바로가기

728x90

개발/BACK

(71)
[RDB MariaDB] 자주 실수하는 쿼리 오류들 모음 통계 데이터 추출을 위한 쿼리를 작성하거나 기능 개발을 위한 동적쿼리를 작성하는 등 데이터베이스 쿼리문을 개발할 때는 집중력이 점점 흐려진다... 뻔히 보이는 오류임에도 뇌를 고생시키다보면 보이던 것도 보이지 않고, 알던 것도 모르게 된다. 해당 포스팅에서 집중력이 흐려질 때 볼 수 있는 쿼리 오류를 정리한다. 1. SQL 오류 (1054): Unknown column 'A.CODE' in 'field list' SELECT A.CODE, -- B.CODE 로 변경해야 함 A.ID, A.CODE_ID_NM FROM code A, code_detail B WHERE A.ID = B.ID; SELECT update_date-- 서브쿼리에서 조회하고 있지 않은 컬럼 FROM ( SELECT ID,name,is..
[JAVA] JAVA 8 구현 인터페이스 CompletableFuture를 통해 비동기 처리하기 백엔드 로직의 모든 부분을 동기 방식으로 처리하게 되면, 해당 결과가 도출될 때까지 무한정 대기해야한다. 심지어 처리한 로직 부분이 대규모 트래픽을 다루는 API라면 스레드 설정에 따라 Exception을 내뱉거나 스레드 락에 걸릴 수 있다. 위 이미지에서 보듯이, 동기적으로 데이터를 처리할 때는 1~4번의 스레드가 순차적으로 처리되며 작업이 종료되어야 다음 스레드의 처리 순서가 온다. 하지만, 요청된 결과를 받기 전에 다음 처리를 할 수 있는 비동기 처리를 통해 로직을 개선할 수 있다. JAVA 8 버전 이하에서는 [ Future ] 라는 내장 인터페이스를 통해 비동기 처리를 지원했는데, 해당 인터페이스를 이용해서 구현하려면 스레드의 맥스 타임아웃을 설정하거나 구현 인터페이스 내에서 Exception을..
[MariaDB] SQL 오류 (1242): Subquery returns more than 1 row 해당 오류는 이름 그대로 서브쿼리에서 두 건 이상의 레코드가 조회될 때, 해당 오류가 발생한다. 대부분의 경우에 SELECT 절 또는 WHERE 절에서 서브쿼리를 사용했을 때, 해당 오류가 발생한다. 보통은 쿼리를 분석하다보면 쉽게 찾을 수 있는데, IN 절이나 GROUP_CONCAT 함수처럼 여러 값이 입력될 수 있는 구문에서 발생하는 오류는 찾기 어려울 수 있다. 다음은 해당 오류가 발생되는 예제다. ▼1 SELECT절에서 발생되는 오류 SELECT ( SELECT X.ID FROM COM_STUDENT X WHERE X.GROUP = "MATH" AND X.USE='Y'---> ERROR 1242 ) , B.SUBJECT_NAME FROM COM_STUDENT A, COM_STUDENT_SUBJEC..
[Tableau] 데이터 분석 툴 연동 방법 [개발자 VER] 태블로(Tableau)는 데이터를 분석하여 좀 더 보기 쉽게 도와주는 데이터 시각화 툴이다. 개발자와 데이터 분석가 및 데이터 관련 마케터가 협업을 통해 데이터를 그래프나 원형등 사용자들이 좀 더 쉽고, 빠르게 데이터를 확인할 수 있는 시트를 만들 수 있고, 데이터베이스를 연동하여, 데이터를 업데이트하며 최신의 데이터를 유지하며 시각적으로 데이터를 볼 수 있다 자세한 내용은 공식 홈페이지를 통해 확인하면 된다 https://www.tableau.com/ Tableau: Business Intelligence and Analytics Software Tableau is visual analytics software for business intelligence. See and understand any d..
[Mysql] 실행계획 (Explain)에 따른 쿼리튜닝 방법 Explain Mysql에서 데이터를 조회해오는 시점에, 즉 내가 작성한 SQL문을 실행시키는 시점에 MySQL 내부에서 해당 쿼리문에 대한 예측값을 토대로 데이터를 어떤 경로로, 어떻게 불러오는 지에 대한 계획이다. 효율적인 데이터 탐색을 위해서는 내가 작성한 SQL문을 Explain을 통해 내가 의도한 대로 실행되는지, 어디서 리소스를 많이 먹고 있는지에 대한 상세 로그를 이해하고 있어야 한다고 생각한다. 사용법은 다음과 같은 구문처럼, SQL문 제일 앞단에 Explain을 붙여주면 된다. Explain SELECT * FROM user WHERE USER_NO > 20000 AND DATE_FORMAT(CREATE_DATE,'%Y%m%d') > '20221130' AND DATE_FORMAT(CRE..
[SpringFramework] 스프링 에러 Error occurred during initialization of boot layer 해결 방법 해당 오류는 JAVA 9 이상의 스프링 프레임워크 시스템에서 볼 수 있는 오류다 IDE에서 정한 규칙대로 프로젝트를 생성했을 때, module-info.java 라는 클래스 파일이 자동으로 생성되는데, 여기서 해당 오류가 발생한다. 오류를 해결하는 방법은 아주 쉽다, 그냥 module-info.java 파일을 삭제해주면 된다. 구글링해보면, selenium-server-standalone-3.141.59.jar 해당 파일을 classPath 아래에 위치 시켜주고, 자바 프로퍼티를 수정해주면 되는데 자바 모듈 시스템에 대해 궁금하다면 아래 링크를 보고 참조하면 된다. https://stackoverflow.com/questions/49520858/error-occurred-during-initializat..
[SpringFramework] Mybatis 문자 표기법 자동 변환 [ 스네이크 케이스 카멜 케이스 ] mybatis 환경에서 VO (value object)를 구현해서 서버 개발을 진행 할 때, 분명히 정상적으로 서비스가 실행되었고, 데이터베이스에 데이터가 존재하는데 리턴되는 데이터가 없다라고 할 때, 많은 케이스가 있지만 VO에 명시된 엔티티 네임과 쿼리에서 리턴하는 데이터 네임이 다를 경우가 있다 대부분 데이터 베이스 컬럼 명을 지정할 때, 네이밍 룰에 따라 대문자 및 스네이크 케이스를 사용해서 컬럼 네이밍을 진행한다. 그런데 ! VO에서 엔티티 네임을 카멜케이스로 명명했을 때, mybatis 설정을 통해 자동으로 스네이크 케이스를 자동 변환해서 사용할 수 있도록 설정하는 예제를 포스팅하려고 한다 1. 먼저 표기법을 변환할 config 파일을 생성해야 한다. 다음과 같이 파일을 생성하자 경로 설정은 ..
[SpringBoot] 스프링 부트 mybatis log4jdbc로 쿼리 출력하기 스프링 부트 mybatis 환경에서 메소드를 구현해서 실행 시켰을 때, 실행되는 로그를 출력하는 방법을 포스팅하려고 한다. 아래는 사용하려는 Log4jdbc-log4j2 드라이버에 대한 레퍼런스다. 제공하는 기능이 궁금하다면 아래 링크를 타고 읽어보자 https://log4jdbc.brunorozendo.com/ Log4jdbc-log4j2 This project was imported from https://code.google.com/archive/p/log4jdbc-log4j2/ Original License: Apache License 2.0 log4jdbc-log4j2 is a modification of log4jdbc to natively use Log4j 2 (or SLF4J as usua..

728x90