본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 17. 14:14

42일 만에 백엔드 엔지니어의 기초를 완전히 이해하기 #5 - SQL 기초 (CRUD)

요약

백엔드 엔지니어의 기초를 다지기 위한 SQL 및 관계형 데이터베이스(RDB) 입문 가이드입니다. RDB의 기본 개념과 테이블 구조, 그리고 데이터 조작의 핵심인 CRUD 작업을 PostgreSQL 환경에서 실습하는 방법을 다룹니다.

핵심 포인트

  • 관계형 데이터베이스(RDB)의 기본 개념 및 테이블 구조 이해
  • SQL을 이용한 데이터의 생성, 조회, 수정, 삭제(CRUD) 실습
  • Docker 컨테이너 기반의 PostgreSQL 접속 및 조작 방법
  • HTTP 메서드와 SQL 조작 간의 대응 관계 파악

지난 회차(#4)에서는 Go에서 DB에 데이터를 저장하고 가져왔습니다. 다만 SQL에 대해서는 최소한으로만 다루었습니다. 이 기사부터는 데이터베이스 그 자체를 기초부터 배웁니다.

이 기사를 마치면 다음과 같은 것들을 할 수 있게 됩니다.

  • 리레이셔널 데이터베이스 (RDB)의 기본 개념을 설명할 수 있다
  • SQL로 데이터의 조회·추가·갱신·삭제 (CRUD)를 할 수 있다
  • psql로 DB를 직접 조작할 수 있다

DB는 백엔드의 심장부입니다. AI에게 SQL을 쓰게 하는 것뿐만 아니라, 스스로 읽고 쓰며 "무슨 일이 일어나고 있는지" 이해할 수 있게 되는 것을 목표로 합니다.

리레이셔널 데이터베이스 (RDB)는 데이터를 표 (테이블) 형태로 관리하는 데이터베이스입니다. PostgreSQL, MySQL, Oracle 등이 대표적인 예입니다.

지난번에 만든 users 테이블은 다음과 같은 표 형태입니다.

idnameage
1washi30
...

테이블 (Table) → 표 그 자체 (users)
컬럼 (Column, 열) → 세로 항목 (id, name, age)
레코드 (Record, 행) → 가로 한 줄의 데이터 (1, washi, 30)

Excel의 표를 상상하면 이해하기 쉽습니다. 차이점은 DB는 대량의 데이터를 고속으로 검색할 수 있고, 여러 사람이 동시에 액세스해도 안전하게 다룰 수 있다는 점입니다.

"리레이션 (Relation, 관계)"이 이름의 유래입니다. 여러 개의 테이블을 연관 지어 관리할 수 있습니다. 예를 들어 "사용자"와 "주문"을 별개의 테이블로 두고, "어떤 사용자가 어떤 주문을 했는지"를 연관 지을 수 있습니다. 이 연관 짓기는 #7의 JOIN에서 다룹니다.

DB를 조작하는 언어가 SQL입니다. 기본 조작은 4가지이며, 앞 글자를 따서 CRUD (크러드) 라고 부릅니다.

조작SQL의미
CreateINSERT데이터를 추가한다
...

지난 회차(#3)에서 배운 HTTP 메서드 (POST/GET/PUT/DELETE)와 대응하고 있다는 것을 눈치채셨을 겁니다. API의 메서드와 DB의 조작은 대체로 대응합니다.

지난번에 실행했던 PostgreSQL 컨테이너에 SQL을 직접 입력해 봅시다.

컨테이너가 멈춰 있는 경우

지난번에 docker stop으로 멈췄다면 docker start pg-practice로 재개할 수 있습니다. 삭제한 경우에는 지난 회차(#4 기사 상당)의 docker run 명령어로 다시 만들어 주세요.

컨테이너가 실행 중인지 확인합니다.

docker ps
# pg-practice 가 Up 상태라면 OK

컨테이너 안의 PostgreSQL에 접속합니다.

docker exec -it pg-practice psql -U postgres -d testdb

docker exec -it pg-practice → pg-practice 컨테이너 안에서 명령어를 실행 (-it는 대화형 모드)
psql → PostgreSQL의 대화형 도구
-U postgres → 사용자명 postgres로
-d testdb → testdb 데이터베이스에 접속

접속이 성공하면 testdb=# 라는 프롬프트로 바뀝니다. 여기서 SQL을 입력할 수 있습니다.

SELECT * FROM users;

users 테이블의 모든 데이터를 가져옵니다. *는 "모든 컬럼"을 의미합니다. 지난번에 만든 데이터가 표시될 것입니다.

특정 컬럼만 가져오기:

SELECT name, age FROM users;

SELECT 가져오고 싶은 컬럼 FROM 테이블명;이 기본 형태입니다.

SELECT * FROM users WHERE age >= 28;

age가 28 이상인 레코드만 가져옵니다. WHERE는 조건 지정입니다.

SELECT * FROM users WHERE name = 'washi';

이름이 washi인 레코드를 가져옵니다. 문자열은 싱글 쿼트(')로 감쌉니다.

주요 비교 연산자:

연산자의미
=같다
>= <=이상·이하
> <보다 크다·보다 작다
!= 또는 <>같지 않다
LIKE부분 일치 (LIKE 'wa%'는 wa로 시작하는 것)
INSERT INTO users (name, age) VALUES ('jiro', 22);

새로운 레코드를 추가합니다. idSERIAL (자동 채번)이므로 지정하지 않습니다.

INSERT INTO 테이블명 (컬럼) VALUES (값);이 기본 형태입니다.

UPDATE users SET age = 31 WHERE name = 'washi';

washi의 나이를 31로 업데이트합니다.

최우선 주의사항: WHERE를 잊으면 모든 레코드가 업데이트됩니다.

UPDATE users SET age = 0;
-- WHERE가 없으므로 모든 사람의 age가 0이 됩니다! 절대 해서는 안 될 행동

이것은 실무에서도 자주 발생하는 사고입니다. UPDATE와 DELETE를 입력할 때는 반드시 WHERE가 있는지 확인하는 습관을 들이세요.

DELETE FROM users WHERE name = 'jiro';

jiro 레코드를 삭제합니다. 이 또한 WHERE를 잊으면 전체 삭제되므로 주의해야 합니다.

\q

psql에 접속한 상태에서 다음을 순서대로 실행해 보세요.

-- 현재 데이터 확인
SELECT * FROM users;
-- 신규 추가
...

CRUD의 일련의 흐름을 체감할 수 있습니다.

  • 테이블, 컬럼, 레코드는 각각 무엇인가요?
  • CRUD의 4가지 조작과 대응하는 SQL을 답하세요.
  • SELECT * FROM users WHERE age >= 28;는 무엇을 하나요?
  • SQL에서 문자열을 지정할 때 무엇으로 감싸나요?
  • UPDATE나 DELETE에서 가장 주의해야 할 점은 무엇인가요?
  • LIKE 'wa%'는 어떤 조건인가요?
  • products 테이블에서 가격이 1000엔 이상인 상품의 모든 컬럼을 가져오는 SQL을 작성하세요.
  • products 테이블에 「name=Coffee, price=500」을 추가하는 SQL을 작성하세요.
  • washi라는 사용자의 age를 35로 업데이트하는 SQL을 작성하세요 (users 테이블, name으로 필터링).
  • taro라는 사용자를 삭제하는 SQL을 작성하세요.

1. 테이블은 표 그 자체. 컬럼은 세로 항목 (열). 레코드는 가로 한 줄의 데이터.

2. Create=INSERT (추가), Read=SELECT (조회), Update=UPDATE (수정), Delete=DELETE (삭제).

3. users 테이블에서 age가 28 이상인 레코드의 모든 컬럼을 조회한다.

4. 싱글 쿼트 (')로 감싼다.

5. WHERE를 잊지 않는 것. WHERE가 없으면 모든 레코드가 대상이 되어 버린다.

6. name이 「wa」로 시작하는 문자열 (전방 일치). %는 임의의 문자열을 나타내는 와일드카드 (Wildcard).

7.

SELECT * FROM products WHERE price >= 1000;

8.

INSERT INTO products (name, price) VALUES ('Coffee', 500);

9.

UPDATE users SET age = 35 WHERE name = 'washi';

10.

DELETE FROM users WHERE name = 'taro';

다음 회차: #6 테이블 설계와 정규화 (Normalization)

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0