[PostgreSQL] 두 테이블 비교 시 기준 테이블의 데이터를 모두 유지하는 방법
·
개발 (Development)/PostgreSQL
SQL을 사용하다 보면 두 개의 테이블을 비교하여 원하는 데이터를 조회해야 하는 경우가 자주 발생합니다. 이때 흔히 사용하는 방법이 WHERE a.column = b.column 조건을 통한 비교입니다. 하지만 이 방식은 교집합만 반환하기 때문에, 기준이 되는 테이블의 데이터 중 조건에 일치하지 않는 행은 결과에서 제외되는 문제가 있습니다.PostgreSQL에서도 이러한 문제를 해결하기 위해 사용할 수 있는 방법이 있습니다. 바로 LEFT JOIN 문법입니다.1. 단순 비교: INNER JOIN 또는 WHERE 절 사용SELECT a.*, b.*FROM a, bWHERE a.column = b.column;또는 PostgreSQL의 명시적 조인 방식으로 다음과 같이 쓸 수 있..
[PostgreSQL] 시퀀스 자동 증가 설정과 오류 해결 방법 정리
·
개발 (Development)/PostgreSQL
PostgreSQL에서 기본 키에 자동 증가 기능을 설정할 때는 시퀀스(Sequence) 를 활용합니다. 그러나 실무에서는 테이블을 사전에 정의한 뒤, 시퀀스를 나중에 따로 연결해야 하거나 SQL 파일로 배포 시 동적 값을 반영해야 할 수도 있습니다.이번 글에서는 다음과 같은 내용을 단계별로 정리합니다.특정 컬럼에 시퀀스가 적용되어 있는지 확인하고, 없을 경우 생성 및 연결하는 방법시퀀스 생성 시 발생할 수 있는 sequence must have same owner as table 오류 해결SQL 파일에 시작값을 반영하기 위한 자동화 방식1. 시퀀스 존재 확인 및 자동 증가 설정예를 들어 example_table이라는 테이블의 id 컬럼에 시퀀스가 연결되어 있지 않다면, 수동으로 생성하고 연동해줘야 합니..
[Java/Spring Boot] AWS 환경에서 DB 직접 접근이 어려운 경우: Java 애플리케이션에서 SQL 파일을 실행하여 데이터 삽입하기
·
개발 (Development)/Java
회사 프로젝트 중 AWS에 배포된 서비스 환경에서는 보안상의 이유로 데이터베이스에 직접 접근할 수 없었습니다. 운영 서버에서 PostgreSQL DB를 직접 수정하거나 삽입 쿼리를 실행하는 것이 제한되었고, SSH나 DB 툴 접속도 허용되지 않았습니다.이러한 제약을 해결하기 위해, Java 애플리케이션 내부에 SQL 파일을 포함시키고 애플리케이션 실행 시 이를 실행하도록 구성하는 방식을 선택했습니다. 과정 중 삽입 대상 데이터에 문자열로 포함된 세미콜론(;) 때문에 실행 오류가 발생하는 중요한 시행착오도 있었기에, 그 내용을 중심으로 아래와 같이 단계별로 정리합니다.1. Python으로 CSV 파일을 읽어 INSERT SQL 생성우선 삽입할 데이터는 CSV 형태로 정리되어 있었습니다. 이를 기반으로 Py..
[Java/Spring Boot] Spring Boot + MyBatis 환경에서 쿼리 조회용 API를 만들기 전에 꼭 고려해야 할 5가지
·
개발 (Development)/Java
회사 내부 시스템에서 데이터를 빠르게 조회하기 위한 목적으로 Spring Boot + MyBatis + PostgreSQL 기반 백엔드 앱에 간단한 쿼리 조회용 API를 추가하고자 했습니다.하지만 단순히 API를 만드는 것만으로 끝나지 않고, 실무에서는 몇 가지 중요한 점들을 반드시 고려해야 한다는 사실을 알게 되었습니다. 이 글에서는 조회용 API를 만들기 전 꼭 고민해야 할 사항들을 정리해봅니다.1. 보안 이슈가장 주의해야 할 부분입니다.조회 전용이라고 해도 다음과 같은 보안 취약점에 노출될 수 있습니다.SQL 인젝션 위험: 입력받은 쿼리를 그대로 실행하면 악의적인 요청이 DB를 손상시킬 수 있습니다.인증/인가 없이 데이터 노출: 내부용이라도 인증 없이 공개되면 사용자 정보, 로그 등 민감한 데이터가..
[PostgreSQL] 실전 활용 - 문자열 포함, 쉼표 구분 배열 매칭, JSON 배열 필터링
·
개발 (Development)/PostgreSQL
업무 중 PostgreSQL을 다루면서 특정 컬럼의 값이 다른 컬럼에 포함되는 경우를 추출하거나, 쉼표(,)로 구분된 문자열 배열에서 완전 일치 여부를 확인하거나, JSON 배열 안에서 특정 값을 필터링해야 할 일이 있었다. 각각 다른 상황이지만, 공통적으로 SQL을 조금만 다듬으면 깔끔하게 해결할 수 있었다. 정리해보면 다음과 같다.1. 문자열 포함 여부 비교 (col_a 값이 col_b 안에 포함되는 경우)예를 들어 col_a 컬럼은 'abc', col_b 컬럼은 'abcdf'처럼 저장되어 있을 때, col_a 컬럼 값이 col_b 컬럼 안에 포함되는지 비교하고 싶었다.PostgreSQL에서는 POSITION() 함수나 STRPOS() 함수를 이용하면 쉽게 해결할 수 있었다.SELECT *FROM e..