DB 25

Elasticsearch > analyzer

📌 1. settings / analysis / analyzer 개념🔍 1-1. settings란?인덱스의 구성 설정을 정의하는 영역이다.샤드 수, 리플리카 수, 분석기(analyzer) 설정 등이 포함된다.🔍 1-2. analysis란?텍스트 분석기 관련 설정 전부를 담는다.내부 구성:analyzertokenizerfilterchar_filter 🔍 1-3. analyzer란?텍스트를 쿼리 시 또는 색인 시 “어떻게 쪼개고(normalizing) 처리할지”를 정의하는 도구이다.최소 구성 요소:tokenizer (필수)filter (선택)char_filter (선택)📌 2. analyzer는 필수인가?analyzer를 반드시 설정해야 하는 것은 아니며, 기본 분석기만으로도 충분한 경우가 많다.항..

개인 식별 정보 암호화 방법

비밀번호를 암호화하는 것은 당연하지만 다른 개인 식별 정보에 대해서는 어떻게 보호해야할 지 깊이 생각해 본 적이 없는 것 같다!!개인정보 유출 시 피싱/사칭 등 범죄에 이용될 가능성이 있기 때문에 보호가 필요하다.주로 DB, 로그 등을 통해 외부로 유출 되거나 또는 내부자 위험도 있다. 암호화 해두면 유출되더라도 바로 식별 불가능하기 때문에 암호화가 필수다!! 📌 개인 식별 정보 보호 방법 정리개인 식별 정보는 검색이나 화면에 일부 노출이 필요한 경우도 있다!! 그렇기 때문에 복호화가 가능한 암호화를 이용해야한다.조회 성능을 위해 해시/마스킹/토큰화 방법을 같이 이용한다. 대상이메일휴대폰 번호주소사번 / 고객번호💫 비밀번호는 예외 처리 (검색 대상 아님)비밀번호는 조회·조건 검색이 필요하지 않으므로 ..

CTE(Common Table Expression)란?

📌 1. CTE(Common Table Expression)란?SQL에서 임시 결과 집합을 이름 붙여 재사용할 수 있는 쿼리 ✔️ 장점쿼리를 읽기 쉽게 구조화 가능중복 쿼리 제거 → 유지보수 용이재귀 쿼리 구현 가능 (계층형/트리 구조)📌2. CTE 문법WITH cte_name AS ( SELECT column1, column2 FROM table_name WHERE condition)SELECT *FROM cte_name; ✔️ 설명WITH 뒤에 CTE 이름(cte_name) 지정괄호 안에 SELECT 문마지막에는 CTE를 사용하는 쿼리 필요📌 3. 여러 CTE 연결WITHcte1 AS ( SELECT 1 AS val),cte2 AS ( SELECT val+1 AS ..

DB/데이터 관리 2025.11.29

[MySQL] 문자 인코딩 변경 (에러 처리)

### Cause: java.sql.SQLSyntaxErrorException: (conn=23478) Incorrect string value: '\xEC\xA0\x9C\xEB\xAA\xA9...' for column bbs.post.title at row 1 ; bad SQL grammar []] with root cause ❓ 원인SQLSyntaxErrorException: Incorrect string value 에러는 문자 인코딩 문제 때문에 발생!!즉, title 컬럼에 한글(또는 특수 문자)이 제대로 저장되지 않는 문제다. 🛠 해결 방법📌 1. 인코딩 확인✅ 서버 전체 기본 인코딩 확인SHOW VARIABLES LIKE 'character%'; ✅ 데이터베이스 인코딩 확인SELECT sc..

DB/RDBMS 2025.11.08

Elasticsearch란?

📌 1. Elasticsearch란?Elasticsearch는 분산 검색 및 분석 엔진으로, 대규모 데이터를 빠르게 검색하고 분석하는 데 최적화된 시스템!!검색, 로그 수집, 데이터 분석 등의 용도로 사용된다. ✅ 1-1. Elasticsearch의 주요 개념인덱스(Index)데이터를 검색하기 위해 구성된 기본적인 저장 단위. 각 인덱스는 문서(document)의 집합으로 구성, 이 문서들은 JSON 형식으로 저장된다.샤드(Shard)와 레플리카(Replica)Elasticsearch는 데이터를 샤드(shard)로 나누어 여러 서버에 분산 저장, 이를 레플리카(replica)로 복제하여 고가용성을 보장한다.검색 및 분석사용자는 검색 쿼리를 통해 데이터를 빠르게 찾고, 분석할 수 있다.  전체 텍스트 검..

DB/데이터 관리 2025.04.10

조회 속도 개선 (쿼리최적화)

🎯 문제쪽지함 기능 개발 후 쪽지 목록을 조회 할 때 데이터가 적을 땐 문제를 느끼지 못 했는데, 10만건 이상 데이터 삽입 후 테스트 했을 때 조회 속도가 느려졌다. 조회 속도를 개선해보자!! 😊전체 조회 개선, 검색 개선 -> 페이징 개선 으로 진행함.급하면 결론만 보기!!📌 화면 (보낸 쪽지 목록)✔ 페이지 진입 시 최신순으로 조회.✔ 검색(필터)조건에 따라 조회.✔ 페이지 이동 시 한 페이지 개수 설정만큼 가져옴. 📌 속도 측정 방법✅ 애플리케이션 개발자 도구 네트워크 응답을 측정조회 개수, 검색 조건을 설정할 수 있는데, 조회 개수 10개 고정하고 전체 조회와 수신자(받은 사람) 검색 시간을 측정했다.내가 보낸 쪽지 10만건 + 다른 쪽지 x내가 보낸 쪽지 20만건 + 다른 쪽지 10만건..

DB/RDBMS 2025.04.06

[MariaDB] 외래키 생성/삭제 방법

1. foreign key 추가1-1. 테이블과 동시에 생성 예제이름 자동 생성CREATE TABLE comments( comment_id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, post_id INT NOT NULL, -- ... FOREIGN KEY(post_id) REFERENCES post(post_id)) 1-2. 테이블이 이미 있을 때 외래키 추가 예제ALTER TABLE commentsADD CONSTRAINT fk_post_idFOREIGN KEY (post_id) REFERENCES posts(post_id)ON DELETE CASCADE; 1-3. 외래키 삭제 옵션외래키 추가시 삭제 옵션을 지정할 수 있다.- ON DELETE CASCADE부..

DB/RDBMS 2024.11.30

JDBC / SQL Mapper / ORM (JPA, Hibernate, MyBatis)

📌 JDBC / SQL Mapper / ORM (JPA, Hibernate, MyBatis) 정리📌 1. 개요JDBC, SQL Mapper, ORM은 모두 Java 애플리케이션과 데이터베이스 간의 상호작용을 위한 기술이다. 차이는 “SQL을 얼마나 직접 작성하느냐”, “객체-테이블 매핑 수준이 어느 정도인가”에 따라 구분된다.구분추상화 수준SQL 작성매핑 자동화대표 기술JDBC낮음✅ 직접 작성❌ 없음JDBC APISQL Mapper중간✅ 직접 작성✅ 결과 매핑 지원MyBatisORM높음❌ 자동 생성 (필요 시 직접 가능)✅ 완전 자동 매핑JPA, Hibernate📌 2. JDBC (Java Database Connectivity)🔍 개념Java에서 DB에 직접 SQL을 작성해 실행하는 표준 API..

DB/데이터 관리 2024.09.25

쿼리 실행 속도 확인

1. SQL 실행 계획 확인MySQL에서는 `EXPLAIN` 키워드를 사용하여 쿼리의 실행 계획을 확인할 수 있다.쿼리가 실행될 때 데이터베이스가 어떤 인덱스를 사용하고, 각 단계에서 얼마나 많은 행을 처리할지를 보여준다.EXPLAIN {QUERY}; 이 명령을 실행하면, 테이블 스캔 방식, 사용된 인덱스, 처리된 행 수 등의 정보를 포함한 실행 계획이 출력됨.2. 실제 실행 시간 측정쿼리의 실제 실행 시간을 측정하려면, SQL 콘솔 또는 프로그래밍 언어에서 직접 쿼리를 실행하고 SHOW PROFILE를 사용하여 시간을 측정할 수 있다.SET profiling = 1; -- 프로파일링 활성화-- 쿼리 실행{QUERY};SHOW PROFILES; -- 모든 실행된 쿼리의 프로파일 목록을 보여줌SHOW ..

DB/RDBMS 2024.05.30

서브 쿼리 ORDER BY

문제 ORDER BY에서 ORA-00907: 누락된 우괄호라는 에러가 발생!! 검색 결과 아래와 같은 글을 찾았습니다. 서브쿼리에서는 ORDER BY 를 사용하지 못한다. ORDER BY는 SELECT 절에서 오직 한 개만 올 수 있기 때문에 메인쿼리 마지막 문장에 위치해야 한다. 그런데 LIMIT 1과 함께 사용해도 여전히 에러가 발생했습니다. 수정 방법 예시) - 테이블 생성 -- Table: Students CREATE TABLE Students ( StudentID INT PRIMARY KEY, StudentName VARCHAR(50) ); -- Table: Grades CREATE TABLE Grades ( GradeID INT PRIMARY KEY, StudentID INT, ExamDate..

DB/RDBMS 2023.10.23