728x90
반응형

전체 글 481

[Tibero] LISTAGG(DISTINCT 컬럼명, "") 오라클 호환 대응

상황오라클로 개발되어 있는 상태에서 데이터베이스 Vendor만 티베로로 변경하였을때 LISTAGG(DISTINCT ~ )와 같이 LISTAGG 함수 내에 DISTINCT 키워드를 사용할 경우 티베로에서는 오류가 발생한다.(지원하지 않는 문법) 티베로에서는 서브쿼리를 통해 전처리 DISTINCT 중복제거를 한 뒤, 해당 데이터를 기준으로 XMLAGG 함수를 활용해야한다. CREATE TABLE TEST_LISTAGG ( ID NUMBER, KEYWORD VARCHAR2(50));INSERT INTO TEST_LISTAGG VALUES (1, 'apple');INSERT INTO TEST_LISTAGG VALUES (1, 'banana');INSERT INTO TEST_LISTAGG VALUE..

카테고리 없음 2025.11.24

[Spring] CORS: Security 설정 없이 Filter를 통한 Allow

상황web.xml에 아래 코드와 같이 HttpSessionEventPublisher만 등록하여 Security의 보안 기능은 활성화 하지 않고,단순히 HttpSession(서블릿 세션)을 Spring의 ApplicationContext로 전파하는 용도로만 사용하고 있다.(Session의 LifeCycle(생성/소멸) 이벤트를 Spring 빈에서 감지) org.springframework.security.web.session.HttpSessionEventPublisherSecurityConfig 파일을 만든다고 해도 쉽게 CORS 설정을 할 수 없는 경우가 있다.이 경우 Filter를 통해 CORS 설정이 가능하다.CorsFilter 구현CORS 설정을 위한 Filter 클래스를 구현한다.@Compone..

SpringFramework 2025.11.24

Apache Tomcat 특정 버전 다운로드

Apache 공식 사이트에는 현재 최신 안정 버전만 메인 다운로드 페이지에 노출되고 있으며, 과거 버전 혹은 특정 버전은 Archive 저장소 형태로 제공되고 있다. 1. 공식 다운로드 페이지 접속https://tomcat.apache.org/ 2. 좌측 Download에서 원하는 Tomcat 메이저 버전을 선택 우측 Quick Navigation 버전 확인 후 원하는 버전인지 확인 3. 좌측 Download에서 Archives 선택4. 페이지에서 원하는 버전 선택https://archive.apache.org/dist/tomcat/ 원하는 메이저 버전에 해당하는 tomcat 디렉토리 선택원하는 마이너 혹은 패치버전에 해당하는 디렉토리 선택bin 디렉토리 선택 exe 확장자 파일 혹은 tar.gz 확장자..

카테고리 없음 2025.10.30

[MySQL/Oracle] TIMESTAMP 타입에 대한 소요 시간(정수) 계산 - 이슈트래킹

실무 사례운영 중인 시스템에서 배치 작업 실행 로그를 분석하다가, 시작 시간(start_time)과 종료 시간(end_time)을 이용해 총 소요 시간(초 단위)을 계산해야 하는 일이 있었다.MySQL의 경우 TIMESTAMPDIFF를 사용하여 간단하게 해결하였으나, 오라클의 경우 해당 함수 지원이 되지 않아 단순 숫자 연산으로 처리하였는데, 이 경우 날짜 차이 계산이 정확하지 않은 이슈가 있었다. 예시로 다음과 같은 테이블과 데이터를 준비한다.-- 샘플 테이블CREATE TABLE JOB_EXECUTION_LOG ( job_id INT, start_time TIMESTAMP, end_time TIMESTAMP);INSERT INTO JOB_EXECUTION_LOG..

DataBase 2025.08.16

[타입스크립트] React, Vue 등 FrontEnd에서 Domain 성격의 State를 Model(DTO) 클래스로 관리해보기

FrontEnd에서 Domain 성격의 State를 Model(DTO) 클래스로 관리하기 JavaScript에서 Runtime시에만 발생되는 오류에 대한 해결책으로 Compile시점에 오류를 미리 잡을 수 있도록 TypeScript 문법이 탄생했다. FrontEnd 뷰 템플릿을 사용하며 여러 의문이 들었다. FrontEnd  Framework인 VueJS나 ReactJS Library 에서는 왜 DTO를 따로 쓰지 않는것일까? TypeScript 뿐만 아니라 제대로 관리하려면 자바스크립트에서 최신으로 지원하는 클래스 문법도 사용해야 하는것 아닐까?자바스크립트에서 신버전에 클래스 문법을 괜히 추가해서 제공해주는것이 아닐텐데? 진짜 제대로 관리할거면, 타입스크립트 타입 뿐만 아니라 도메인 성격을 띄우는 Ob..

Typescript 2025.02.16

IntelliJ SonarQube plugin 전체 issue 탐색 및 파일 필터링 설정

A. IntellJ SonarQube for IDE 플러그인 설치  B. 프로젝트 내 전체 이슈 탐색 1. 상단 Report 탭 > 좌측 Analyze All Project Files 클릭2. Proceed 버튼 클릭    파일 필터링1. 상단 Report 탭 > 좌측 Configure SonarQube for IDE 클릭 2. 상단 탭 File Exclusions > 우측 중앙 + Add 버튼 클릭3. 확장자 등록을 통한 Exclude(제외) 적용 4. Exclude file 확장자 등록 후에도 필터링에 걸리지 않는 경우가 있는데, 이때는 Exclude file을 통해 탐색기로 부터 직접 파일을 선택하여 제외할 수 있다. 5. 전체 이슈 재 탐색  프로젝트 파일 수가 많을 경우 분석 시간이 3~5분 정..

IDE 도구/IntelliJ 2024.12.15

Lombok @Getter(Class Level) Ignore Stragegy - 오버라이드 된 메소드와 대소문자를 구분하지 않고 중복 비교

상황은 이러하다.User 클래스에 userName 이라는 이름의 private 인스턴스 멤버를 선언하고 해당 클래스 레벨에 @Getter를 적용하였다.(필드 레벨에는 이러한 현상이 발생하지 않는다.)또한 해당 User클래스는 Security에서 지원하는 UserDetails 인터페이스를 구현하였고 getUsername() 메소드를 오버라이딩 하였다.@Getter@Setterpublic class User implements UserDetails { private String userName; // 롬복의 @Getter에 의해 getUserName() 생성 @Override public String getUsername() { return this.userName; }}..

JAVA 2024.06.14

IntelliJ - Gradle기반 LiveReLoad 적용법

InteliJ에서 IntelliJ Build 기반 설정을 모두 해제한 상태로 Gradle Build 기반에 대한 LiveReload 적용법을 설명한다. 일반적으로 InjelliJ Build 기반의 LiveReload는 IDE자체 Setting을 몇개 추가함으로써 작동하므로, 크롬브라우저의 LiveReload 적용이 필요없다. 하지만 Gradle Build 기반의 LiveReload는 크롬의 LiveReload 플러그인에 의존하여 작동되기 때문에, IDE자체 Setting을 하더라도 해당 플러그인이 깔려있지 않다면 작동되지 않는다. Gradle Build 기반의 LiveReload 기능은 IntelliJ Build 기반 보다 반영속도가 훨씬 빠르다. [build.gradle] 의존성 추가 dependenc..

IDE 도구/IntelliJ 2024.04.04

Cloud Firestore 및 Storage - nosql CRUD 및 Securiy 설정

FireBase Collection Collection은 일반적인 관계형 데이터베이스의 테이블과 유사하다. Collection에 데이터를 저장하면 Documents 단위로 저장되는데, 이는 각 테이블에 저장된 Row(행)과 유사하다. Cloud Firestore 데이터베이스 생성 및 활성화 우선은 테스트 모드로 시작한 뒤 마지막에 Security Rule, API key 설정 진행할 예정이다.. (마지막까지 꼭 참고하길 바란다!) 아래와 같이 Firebase 콘솔에서 직접 추가/제거/수정이 가능하다 우리는 코드로 직접 추가/수정/제거를 할 예정이므로 위 과정은 생략한다. 다음은 첨부파일이다. 콘솔의 좌측 네비 빌드 메뉴에서 Storage를 선택하고 우측에서 [시작하기] 버튼을 클릭한다. 다음은 어플리케이..

카테고리 없음 2024.02.20