DB11 운영 DB 대용량 로그 테이블 정리기 — 백업부터 DROP까지 1. 배경운영 환경에서 장기간 누적된 영상 재생 로그용 테이블의 용량이 약 800GB에 달해 DB 성능 저하 및 디스크 용량 부족 이슈가 발생했다.단순 SELECT COUNT(*) 도 수 분 이상 걸림pg_dump 전체 백업 불가 (EC2 디스크 용량 한계)실제 서비스 로직에서는 더 이상 사용하지 않음 (API 주석 처리 완료)이에 따라 “백업 + 데이터 정리 + DROP” 단계로 접근한 실무 고민 및 절차를 정리해본다.본 글에서는 프로젝트명을 ProjectA, 스키마명을 main, 테이블명을 ad_log_records로 가정한다.2. 현황 요약구분항목현황운영 DBmain.ad_log_records799GB (약 6.9억 행)개발 S3사용량3GB운영 S3사용량3.3GB개발 EC2디스크 용량30GB (사용.. 2025. 11. 5. JPA | MyBatis | JDBC JPA (Java Persistence API)자바에서 객체와 관계형 데이터베이스를 매핑하는 표준 API엔티티 클래스를 통해 데이터를 객체로 관리하고, 객체 상태에 따라 자동으로 DB와 연동됨주로 Hibernate와 함께 사용됨JPA는 규격(specification)이고, Hibernate는 그 구현체(implementation)Hibernate는 JPA를 구현하면서, JPA가 정의한 기능을 지원하고, 그 외에도 Hibernate만의 고유 기능을 추가로 제공함@Entitypublic class User { @Id private Long id; private String name; // getter, setter}JPQL (Java Persistence Query Language)JP.. 2025. 3. 1. [Data Modeling] PK, UK, FK Primary Key (PK) / Unique Key (UK) Primary Key (PK) Unique Key 정의 테이블의 각 레코드 구별값 테이블 내에서 항상 유일해야 하는 값 제약조건 각 테이블의 식별자 역할 각 컬럼에 입력되는 데이터가 유일하다는 것을 보장 특징 * 각 테이블 당 하나만 설정 가능(기본키), 반드시 하나의 컬럼으로만 구성되는 것은 X * 중복 허용 X * 데이터 유일성 보장돼야 함 * Unique Index (고유 인덱스) 자동 생성 * NOT NULL + Unique 제약조건 결합 * 각 테이블 내에서 여러 개 지정 가능 * 중복 허용 X * Unique Index (고유 인덱스) 자동 생성 * NULL 허용 Foreign Key (FK) Foreign Key (FK) 정의 외.. 2022. 3. 26. [MySQL] 윈도우 부팅 시 자동 실행 설정 서비스 실행 MySQL 시작유형 확인 MySQL 속성 설정 1. 시작유형 * 자동 : 윈도우 실행 시 자동으로 서버가 서비스 형태로 실행됨 * 수동 : 윈도우 실행 시 MySQL 서버 자동 실행을 막으려면 수동으로 변경 (이 경우, "시작" 버튼 클릭 후 MySQL 서버 실행) 2. 서비스 상태 * MySQL 미작동 시 : 해당 서비스가 "실행 중"인지 확인 * 중지 : 서버 정지시키기 출처 : https://zoosso.tistory.com/331 2022. 2. 15. [MySQL] NOT IN(): 특정 값 제외하고 SELECT NOT IN() 특정 값을 제외하고 데이터 조회(SELECT) -- NOT IN() 문법 NOT IN('제외할 값1','제외할 값2', ... etc.) SELECT * FROM TABLE_NAME WHERE COLUMN_NAME NOT IN ('제외할 값1','제외할 값2'); -- 예제 SELECT * FROM MEMBER WHERE MEMBER_TYPE NOT IN ('A','B'); -- 결과 -- MEMBER_TYPE이 A, B가 아닌 MEMBER 값들이 조회됨 2022. 2. 15. [MySQL] SUBSTRING_INDEX(): 원하는 구분자 기준 문자열 자르기 SUBSTRING_INDEX() 원하는 구분자 기준으로 문자열 자르는 함수 -- SUBSTRING_INDEX() 문법 SUBSTRING_INDEX(문자열, 구분자, 구분자 인덱스) -- 예제1 SELECT SUBSTRING_INDEX('120.0.0.1', '.', 3) AS SUB_IP FROM TABLE_NAME; -- 결과1 120.0.0 -- 예제2 SELECT SUBSTRING_INDEX('120.0.0.1', '.', -1) AS SUB_IP FROM TABLE_NAME; -- 결과2 1 -- 예제3 SELECT SUBSTRING_INDEX('120.0.0.1', '.', -3) AS SUB_IP FROM TABLE_NAME; -- 결과3 0.0.1 2022. 2. 14. [MySQL] 날짜 / 시간 / 통계 조회 날짜 / 시간 표현 #현재 시간(기본) : 2022-01-01 12:00:00 SELECT NOW(); #날짜 ONLY : 2022-01-01 SELECT DATE(NOW()); #시간 ONLY : 12:00:00 SELECT TIME(NOW()); #년도 ONLY : 2022 SELECT YEAR(NOW()); #월 ONLY : 1 SELECT MONTH(NOW()); #날짜 포맷 지정 : 2022/01/01 SELECT DATE_FORMAT(NOW(), '%Y/%m/%d'); #시간 포맷 지정 : 12 00 00 SELECT DATE_FORMAT(NOW(), '%H %i %s); 날짜 더하기 / 빼기 DATE_ADD DATE_SUB DATE_ADD(기준 날짜, INTERVAL) DATE_SUB(기준 .. 2022. 1. 11. [MySQL] DATE_FORMAT(): 날짜, 시간 표기법 DATE_FORMAT()을 활용해 datetime 타입인 데이터의 형식을 바꿔보자 datetime 타입 데이터의 기본 형식 datetime 2022-01-06 22:00:00 SQL SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') AS DATE FROM DUAL; -- NOW(): 현재 시간 결과 DATE 2022-01-06 참고 자료 Specifier Description %a Abbreviated weekday name (Sun..Sat) %b Abbreviated month name (Jan..Dec) %c Month, numeric (0..12) %D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …) %d Day of .. 2022. 1. 6. [MySQL] 조건 범위 설정 후 삭제 SQL DELETE FROM TABLE_NAME WHERE 50 < COLUMN_NAME AND COLUMN_NAME < 100; 가독성 위해 작은 수 < 값 < 큰 수 로 조건절 배치함 2022. 1. 3. 이전 1 2 다음