MMeshOps
바이브코딩을 위한 완벽한 방어선: SQL과 PostgreSQL 기초
2예상 8입문

데이터 골라내기 기초

SQL의 가장 기본이 되는 SELECT와 WHERE 구문을 사용하여 방대한 데이터베이스에서 필요한 데이터만 효율적으로 조회하는 방법을 배웁니다.

관계형 데이터베이스가 무엇인지 이해했다면, 이제 데이터베이스와 직접 대화할 수 있는 전용 언어인 SQL(Structured Query Language)을 배울 차례입니다. 바이브코딩으로 코드를 짤 때 가장 많이 사용하게 될 명령어는 단연코 데이터를 읽어오는 작업입니다. 수백만 건의 데이터가 쌓인 창고에서 내가 원하는 정보만 콕 집어서 가져오는 가장 강력하고 기본적인 마법의 주문, `SELECT`와 `WHERE` 구문을 알아봅니다.

무엇을 가져올 것인가? `SELECT` 와 `FROM`

데이터베이스에게 질문을 던질 때, 문법의 구조는 사람의 언어와 매우 비슷하게 설계되어 있습니다. "가져와!(SELECT) 어디서?(FROM)"라는 순서입니다.

`users`라는 이름의 유저 테이블이 있다고 가정해 봅시다. 이 테이블 안에는 유저의 `id`, `name`, `email`, `age` 정보가 들어있습니다. 이 테이블에서 이름과 이메일만 보고 싶다면 다음과 같이 질문을 던집니다.

필요한 컬럼만 지정하여 가져오기

SELECT name, email
FROM users;

위 SQL 구문을 실행하면 데이터베이스는 `users` 테이블을 찾아가, 다른 정보는 무시하고 오직 `name`과 `email` 컬럼의 데이터만 뽑아서 리스트로 반환해 줍니다.

만약 유저가 가진 모든 정보를 다 보고 싶다면, 컬럼 이름을 하나하나 다 적는 대신 별표(`*`, 애스터리스크) 기호를 사용합니다. `SELECT * FROM users;` 라고 입력하면 테이블에 존재하는 모든 컬럼을 통째로 가져옵니다.

SELECT * (모두 가져오기)의 치명적 함정

오해 또는 실수

불필요한 데이터 전송

바로잡기

게시판 목록을 그릴 때는 제목과 작성자만 필요한데, SELECT * 를 쓰면 용량이 큰 '본문 내용'까지 전부 서버로 끌고 오게 되어 속도가 크게 느려집니다.

오해 또는 실수

AI 코드의 단골 실수

바로잡기

바이브코딩 AI는 귀찮아서 모든 조회 코드에 SELECT * 를 남발하는 경향이 있습니다. 성능 최적화를 위해 꼭 필요한 컬럼만 명시(SELECT title, author)하도록 AI에게 강제해야 합니다.

조건의 필터망: `WHERE`

`SELECT`가 세로줄(컬럼)을 골라내는 작업이라면, 가로줄(로우) 중에서 조건에 맞는 것들만 체에 걸러내는 필터 역할을 하는 것이 `WHERE` 구문입니다.

"유저 테이블의 이름과 이메일을 가져와!"라고만 하면 가입자가 10만 명일 때 10만 줄의 데이터가 전부 쏟아져 나옵니다. 우리는 "나이가 20살 이상인 유저만 가져와!"처럼 정확한 조건을 달아주어야 합니다.

SELECT name, email
FROM users
WHERE age >= 20;

`WHERE` 뒤에는 엑셀의 필터나 수학 시간의 부등호와 똑같은 논리 조건식이 들어갑니다. `=` (같다), `>` (크다), `<` (작다) 뿐만 아니라, 여러 조건을 동시에 만족해야 하는 `AND`, 둘 중 하나만 만족해도 되는 `OR`를 섞어서 매우 복잡한 질문을 던질 수 있습니다.

WHERE 조건의 다양한 응용

sql
```sql
SELECT name, email, point
FROM users
WHERE (age >= 20 AND age <= 30) 
  AND email LIKE '%@gmail.com';
```
  1. 1문자열 일치: WHERE name = '홍길동' (이름이 정확히 홍길동인 사람만 찾습니다. 문자는 홑따옴표로 감쌉니다.)
  2. 2다중 조건 (AND): WHERE age가 20 이상이고 point가 1000 이상인 VIP를 찾습니다.
  3. 3다중 조건 (OR): WHERE role = 'admin' OR role = 'manager' (관리자이거나 매니저인 직원을 모두 찾습니다.)
  4. 4패턴 검색 (LIKE): WHERE email LIKE '%@gmail.com' (가입한 이메일이 gmail.com으로 끝나는 모든 사람을 찾습니다.)

바이브코딩 AI에게 "20대 구글 메일 가입자 목록을 보여주는 화면을 만들어줘"라고 요청하면, AI는 백엔드 서버 어딘가에 위와 같이 생긴 SQL 문장을 만들어 데이터베이스로 전송하는 코드를 작성하게 됩니다.

결국 SQL의 가장 큰 힘은, 서버의 코드가 엑셀 필터 버튼을 누르듯 수작업으로 데이터를 거르는 것이 아니라, 데이터베이스 엔진 자체가 엄청난 속도로 수만 건의 데이터 중 조건에 맞는 몇 십 건만 정확히 골라서 서버에 던져준다는 점에 있습니다.

개념 퀴즈

퀴즈 답을 맞춰야 학습 완료가 됩니다.

가입자 테이블(users)에서, 현재 보유한 포인트(point)가 500점 이상이면서 동시에 이름(name)이 '김철수'인 사람의 이메일(email) 주소만 뽑아내려고 합니다. 가장 올바른 SQL 구문은 무엇인가요?

3줄 요약

  1. 1SQL에서 SELECT는 데이터베이스 표 안의 특정 세로줄(컬럼)을 선택하고, FROM은 어느 테이블에서 데이터를 가져올지 지정합니다.
  2. 2AI가 편리함을 위해 SELECT * (모두 가져오기)를 남발하면 서비스가 느려질 수 있으므로, 필요한 컬럼만 명시적으로 가져오도록 통제해야 합니다.
  3. 3WHERE 구문은 엑셀의 필터처럼 작동하며, AND, OR, LIKE 등의 조건을 조합하여 방대한 데이터 중에서 조건에 맞는 가로줄(로우)만 정확하게 걸러냅니다.