실전 SQL 학습: LeetCode 챌린지와 PostgreSQL 설정
Source: Dev.to
LeetCode로 SQL 연습하기 (SQL 50 Challenge)
오늘은 부가 퀘스트로 LeetCode의 SQL 50 Challenge 중 SELECT 파트에 도전했습니다. 다음 문제들을 해결했습니다:
- 재활용 가능 및 저지방 제품
- 고객 추천인 찾기
- 큰 국가들
- 기사 조회수 I
- 잘못된 트윗
모두 난이도가 Easy로 표시돼 있었고, 재미있었지만 핵심은 각 질문이 실제로 무엇을 묻고 있는지를 이해하는 것이었습니다.
몇몇 문제를 여러 번 다시 풀었는데, 어려워서가 아니라 다음을 명확히 매핑하기 위해서였습니다:
- 문제 설명
- 필요한 SQL 로직
- 최종 쿼리
이를 통해 SQL은 문법을 외우는 것보다 질문을 쿼리로 변환하는 능력이 더 중요하다는 것을 다시 한 번 확인했습니다.
PostgreSQL 설치 및 도구 탐색
연습을 마친 뒤 PostgreSQL을 설치했으며, 다음과 같은 구성 요소가 함께 제공되었습니다:
- pgAdmin (GUI 클라이언트)
- psql / SQL Shell (터미널 기반 클라이언트)
제가 따라하고 있는 튜토리얼은 터미널 사용을 강조하고 있어, 대부분의 시간을 SQL 쉘에서 보냈습니다.
배운 기본 PostgreSQL 명령어
데이터베이스 생성 및 삭제
CREATE DATABASE db_name;
DROP DATABASE db_name;
테이블 삭제
DROP TABLE table_name;
PostgreSQL에서 테이블 만들기
CREATE TABLE table_name (
column_name datatype constraint
);
흔히 사용하는 제약조건
NULL– 빈 값을 허용NOT NULL– 빈 값을 허용하지 않음PRIMARY KEY– 각 레코드를 고유하게 식별
유용한 psql 터미널 명령어
\?→ 도움말 표시\c db_name→ 데이터베이스에 연결\l→ 서버에 존재하는 모든 데이터베이스 목록\d→ 모든 테이블 목록\d table_name→ 테이블 스키마(컬럼, 데이터 타입, 제약조건, 인덱스) 표시
이 명령어들을 사용하면 GUI에 의존하지 않고도 데이터베이스 탐색이 훨씬 수월해집니다.
PostgreSQL 데이터 타입 살펴보기
PostgreSQL은 다양한 데이터 타입을 지원합니다:
bigserial,serialuuiddate,time,timestampvarchar(n),textjson,xmlbooleanmoney
이러한 유연성은 실제 데이터를 모델링할 때 큰 도움이 됩니다.
첫 번째 테이블: users
전체 과정을 정리하기 위해 간단한 users 테이블을 만들었습니다:
id→bigserial,PRIMARY KEY,NOT NULLfirst_name→varchar(50),NOT NULLlast_name→varchar(50)gender→varchar(6)email→varchar(150)dob→date
CREATE TABLE users (
id bigserial PRIMARY KEY NOT NULL,
first_name varchar(50) NOT NULL,
last_name varchar(50),
gender varchar(6),
email varchar(150),
dob date
);
처음부터 테이블을 설계하면서 컬럼, 데이터 타입, 제약조건이 어떻게 서로 맞물리는지 체감할 수 있었습니다.
마무리 생각
오늘은 매우 실용적인 하루였습니다. LeetCode에서 SQL 문제를 풀면서 쿼리 사고력을 키웠고, PostgreSQL을 설치하고 테이블을 만들면서 모든 것이 실제처럼 느껴졌습니다. 이제 데이터베이스를 단순히 저장소가 아니라, 질문에 신뢰성 있게 답변하도록 설계된 시스템으로 바라보기 시작했습니다.
내일은 데이터를 삽입하고 의미 있게 조회하는 방법에 더 집중할 예정입니다.