Back-End/DB 6

PostgreSQL 자주 쓰는 명령어 요약

PostgreSQL CLI(psql)를 사용할 때 유용한 명령어들 정리:\l데이터베이스 목록 보기\c [DB명]해당 DB로 접속\dt현재 DB의 테이블 목록\du사용자 목록 확인\d [테이블명]테이블 상세 구조 보기\q종료SELECT * FROM [테이블명];테이블 조회 예시:\c chatdb -- chatdb로 접속\dt -- 테이블 목록 보기SELECT * FROM message; 참고: 오류 방지 팁SQL 명령어 끝에는 ; 꼭 붙이기사용자 생성 후 권한 주는 것도 GRANT ... TO ...; 형태로 마무리잘 안 될 땐 brew services restart postgresql로 재시작

Back-End/DB 2025.04.16

macOS에 PostgreSQL 설치

사이드 프로젝트에서 MySQL이나 오라클 대신 PostgreSQL을 써보고 싶었다.macOS 환경이라 설치는 Homebrew로 간단하게 해결했다.1. Homebrew 설치 여부 확인먼저 터미널에 아래 명령어를 입력해 brew가 설치되어 있는지 확인한다.brew --version설치되어 있지 않다면 공식 명령어를 복사해 실행한다:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2. PostgreSQL 설치터미널에서 다음 명령어를 실행한다:brew install postgresql설치가 끝나면 PostgreSQL 서비스를 자동 시작하도록 설정한다:brew services start pos..

Back-End/DB 2025.04.16

MyBatis Mapper 사용 팁

MyBatis Mapper를 처음 쓸 때 꼭 알아야 할 것들MyBatis는 SQL을 직접 작성할 수 있는 장점이 있는 SQL Mapper다.자유도가 높은 만큼, 처음 쓸 때 몇 가지 구조와 문법을 정확히 알고 시작하면 시행착오를 줄일 수 있다.이 글에서는 Mapper를 처음 도입할 때 알아두면 좋은 개념과 실무 팁을 정리했다.1. Mapper 구성요소MyBatis에서 기본적으로 구성해야 하는 건 다음 세 가지다.Mapper 인터페이스 (Java 파일)Mapper XML (SQL을 정의한 XML 파일)DTO 또는 VO (쿼리 결과를 매핑할 자바 객체)인터페이스의 메서드명과 XML의 등의 id 값은 반드시 일치해야 한다.2. XML 기본 구조Mapper XML은 루트 태그를 갖고 있고, namespace..

Back-End/DB 2025.04.08

비관적 락 vs 낙관적 락: 동시성 문제를 해결하는 두 가지 방법

🙋‍♂️ 들어가기 전에: 왜 "락(Lock)"이 필요할까?우리는 여러 사용자가 동시에 사용하는 서비스를 만들고 있어요.예를 들어, 같은 상품의 재고를 동시에 여러 명이 주문한다고 해볼게요. 이럴 때 누군가의 수정이 다른 사람의 수정에 덮어씌워져 버린다면? 데이터가 꼬이고, 실제로는 재고가 1개인데 2명이 주문에 성공하는 말도 안 되는 일이 생길 수 있어요.이걸 동시성 문제(concurrency issue)라고 해요.그래서 이런 문제를 방지하기 위해 락(Lock)이라는 개념이 등장합니다.락은 쉽게 말하면, "지금 내가 이 데이터를 사용 중이니, 다른 사람은 잠시만 기다려 주세요!" 라고 말하는 것과 같아요. 🔐 락의 두 가지 방식데이터를 안전하게 보호하는 락에는 대표적으로 두 가지가 있어요.비관적 락 ..

Back-End/DB 2025.03.23

JPA + Oracle DB에서 시퀀스 설정하는 방법

JPA + Oracle DB에서 시퀀스 설정하는 방법오라클 DB에서 시퀀스를 사용하는 방법에 대해 정리해본다. JPA에서는 @GeneratedValue(strategy = GenerationType.IDENTITY)를 사용할 수 없고, 대신 시퀀스를 직접 매핑해야 한다. 이 부분을 어떻게 처리할 수 있는지에 대해 하나씩 알아보자.  1️⃣ 오라클 시퀀스 생성하기먼저, 오라클에서 시퀀스를 만들어야 한다. SQL로 다음과 같이 시퀀스를 생성할 수 있다.CREATE SEQUENCE SEQ_USER START WITH 1 INCREMENT BY 1 NOCYCLE NOCACHE;START WITH 1: 시퀀스가 1부터 시작하도록 설정한다.INCREMENT BY 1: 시퀀스가 1씩 증가하도록 ..

Back-End/DB 2025.03.15

정규화 비정규화

정규화(Normalization)와 비정규화(Denormalization)는 데이터베이스 설계에서 데이터를 어떻게 구조화할지 결정하는 과정입니다. 두 개념은 서로 상반된 접근을 취합니다.정규화 (Normalization)정규화는 데이터베이스의 중복을 최소화하고, 데이터의 무결성을 유지하기 위해 데이터를 여러 개의 테이블로 분리하는 과정입니다. 정규화를 통해 데이터베이스는 더 효율적이고, 유지보수가 쉬워지며, 중복된 데이터를 피할 수 있습니다.정규화의 목표:중복 제거: 같은 정보가 여러 테이블에 중복되어 저장되는 것을 방지합니다.데이터 무결성 유지: 일관성 있는 데이터를 유지하여 업데이트, 삽입, 삭제 시 오류를 방지합니다.정규화는 여러 단계로 이루어지며, 각 단계에서 테이블을 분리하거나 관계를 설정하여 ..

Back-End/DB 2025.03.13