15._빅데이터_정보철학_AI프로그램만들기(5)_(4-3)_1
2026년 10월 8일 공유
-뭐야. 안녕하세요 빅데이터 정보철합 AI 프로그램 만들기 다섯 번째 시간입니다. 지난 시간까지 우리는 소프트웨어 개발 생명주기와 다양한 AI 개발 도구들을 살펴보았습니다. 오늘은 그 가운데 데이터를 다루는 가장 기본적이면서도 핵심적인 도구인 SQL을 살펴보겠습니다. 이번 모듈의 목표는 SQL이 무엇인지 간략히 설명할 수 있는 것입니다. 오늘은 먼저 SQL이 무엇이고 관계형 데이터베이스가 어떻게 구조화되는지를 살펴보고 데이터를 조회하고 집계하는 핵심 명령어들을 살펴본 뒤 실제 쿼리 실습 사례를 통해 이를 익히고
마지막으로 SQL과 NoSQL 그리고 Neo4j를 비교하면서 데이터베이스가 가진 정보 철학적 의미까지 살펴보겠습니다. 먼저 SQL이 무엇인지 살펴보겠습니다. SQL Structured Query Language는 구조화된 지뢰 언어로서 관계형 데이터베이스, RDBMS에 저장된 데이터를 관리하기 위한 세계 표준 언어입니다. 유명한 RDBMS로는 MySQL, Oracle, HostgreSQL이 있습니다. 엑셀과 SQL을 비교해보겠습니다. 엑셀은 게임의 작은 데이터를 관리하는 데 적합하며, 보통 몇천행 수준입니다. 반면 SQL은 수백만 명의 많은 데이터를 동시에 안전하게 관리할 수 있으며, 대규모 서비스의 핵심 기술입니다. 즉, 우리가 흔히 사용하는 엑셀의'홍과 열'이라는 개념을 훨씬 더 크고 안전한 규모로 확장한 것이
바로 관계형 데이터베이스라고 이해하시면 좋겠습니다. 이제 관계형 데이터베이스, RDBMS의 구조를 살펴보겠습니다. 첫째, 테이블, 테이블입니다. 데이터를 표 형태로 저장합니다. 행, 로우, 즉 레코드는 개별 데이터를 나타내고 열, 컬럼, 즉 필드는 속성이나 종류를 나타냅니다. 테이블들 간의 관계로 전체가 구조화됩니다. 둘째, 스키마, 스키마입니다. 데이터베이스 전체의 구조와 제약 조건을 정의한 설계도입니다. 데이터 형식, 테이블 간의 관계, 제약 조건을 명시합니다. 셋째, 무결성 제약입니다. 프라이머리키, 즉 기본키는 각 행을 유일하게 식별하며 중고기나 너를 허용하지 않습니다. 포링키, 즉 외래키는 다른 테이블의 기본키를 참조하여 테이블 간의 관계를 연결합니다.
이제 주요 데이터 타입을 살펴보겠습니다. 정수형은 int, integer, bigint와 같은 키워드를 사용하며 나이, 학번, 금액 등에 사용됩니다. 실수형은 decimal, float와 같은 키워드를 사용하며 학점, 위치, 자표 등에 사용됩니다. 고정 길이 문자형은 Character N을 사용하며 성별과 같이 M 또는 F처럼 길이가 일정한 데이터에 사용됩니다. 가변 길이 문자형은 Bar Character N을 사용하며 이름, 주소, 이메일과 같이 길이가 일정하지 않은 데이터에 사용됩니다. 날짜와 시간형은 Date, Date Time을 사용하며 생년월일이나 주문일시에 사용됩니다. 대용량 텍스트형은 텍스트를 사용하며 게시글 내용이나 설명에 사용됩니다. 이제 데이터를 조회하는 Select와 Where를 살펴보겠습니다.
셀렉트는 원하는 데이터를 조회하는 기본 명령어입니다. 모든 열을 조회할 때는 셀렉트 별표 from students와 같이 작성하면 전체 데이터를 조회할 수 있습니다. 조건을 걸어 필터링할 때는 select name gpa from students where gpa가 3.5보다 크고 and major가 컴퓨터공학인 경우와 같이 작성하면 학점 3.5 초과이면서 전공이 컴퓨터공학인 학생만 조회됩니다. 패턴 매칭을 할 때는 셀렉트 별표 from students where name이 김으로 시작하는 경우 like 김 %와 같이 작성하면 이름이 김으로 시작하는 학생들이 조회됩니다. 이제 집계와 그룹과 그룹 by와 having을 살펴보겠습니다 그룹 by는 흑정열을 기준으로 데이터를 그룹화하며
count, abg, sum, max, min과 같은 집계함수와 함께 사용됩니다 having은 그룹 by로 그룹화된 결과에 조건을 적용합니다 where는 행을 필터링하지만 having은 그룹을 필터링한다는 점이 다릅니다 예를 들어 select major count, belp, as, student, num abg gpa, from, students, group by, major, having, abg gpa가 3.0 이상이라고 작성하면 전공별 학생수와 평균 학점을 조회하면서 평균 학점이 3.0 이상인 전공만 출력하게 됩니다 집계 함수를 정리하면 count 대표는 행의 개수, abg는 평균, sum은 합계, max는 최대값, min은 최솟값입니다.
이제 테이블을 결합하는 join을 살펴보겠습니다. join이란 서로 다른 테이블의 데이터를 하나로 합치는 작업입니다. foring키를 통해 테이블 간의 관계를 활용합니다. 예를 들어 students 즉 학생 테이블에서 inNormons 즉 수강 테이블을 거쳐 courses 즉 과목 테이블까지 세 테이블을 연결할 수 있습니다. 조인의 유형은 다음과 같습니다. 이너 조인은 두 테이블 대의 데이터가 있는 경우만 가져옵니다. 레프트 조인은 왼쪽 테이블 전체와 오른쪽 테이블에서 일치하는 데이터를 가져옵니다. 라이트 조인은 오른쪽 테이블 전체와 왼쪽 테이블에서 일치하는 데이터를 가져옵니다. 풀 아우터 조인은 양쪽 테이블의 데이터를 모두 가져옵니다. 이제 실습을 위한 테이블 구조를 살펴보겠습니다.
첫째, 스튜던츠, 즉 학생 테이블입니다. 스튜던트 아이디는 기본 키이고, 네임, 즉 이름, 네이저, 즉 전공, GPA, 즉 합점, 조인 이어, 즉 입학 연도와 같은 여를 가집니다. 예를 들어 김철수 컴퓨터공학 3.8과 같은 데이터가 들어갈 수 있습니다. 둘째, 코시즈, 즉 과목 테이블입니다. 코스 아이디는 기본 키이고, 코스 네임, 즉 과목명, 프로페서, 즉 교수와 같은 여를 가집니다. 예를 들어 101번 데이터베이스 강 교수, 102번 알고리즘 이 교수와 같은 데이터가 들어갈 수 있습니다. 셋째, 인놀 먼츠, 즉 수강 테이블입니다. 인돌 아이디는 기본 키이고, 스튜던트 아이디와 코스 아이디는 각각 외래 키이며, 그레이드, 즉 성적이라는 열을 가집니다.
이 테이블은 스튜던츠와 코시즈를 연결하는 중간 테이블로서 한 학생이 여러 과목을 듣고, 한 과목을 여러 학생이 듣는 다데다 관계를 해결하는 역할을 합니다. 이제 첫 번째 쿼리 실습 조건 필터링을 살펴보겠습니다. 문제는 2023년 입학생 중 학점 3.5 이상인 학생의 이름과 학점을 조회하는 것입니다. 쿼리는 다음과 같습니다. Select name, GPA from students where, join year가 2023이고, and GPA가 3.5 이상인 경우입니다. 이를 하나씩 풀어보면 Select Name GPA는 출력 결과로 이름과 학점 열만 선택한다는 뜻입니다. From Students는 대상이 되는 테이블이 Students라는 뜻입니다. Where Join Year가 2023은 입학 연도가 2023년인 행만 필터링한다는 뜻입니다.
And GPA가 3.5 이상은 추가 조건으로 학점이 3.5 이상인 행만 필터링한다는 뜻입니다. 이제 두 번째 쿼리 실습 Group By와 Order By를 살펴보겠습니다. 문제는 각 전공별로 학생 수를 계산하고 많은 순서대로 정렬하는 것입니다. 쿼리는 다음과 같습니다. Select Major Count as Total Count from Students Group By Major Order By Total Count Desk입니다. 이를 하나씩 풀어보면 Group By Major는 전공을 기준으로 데이터를 묶는다는 뜻입니다. Count 별표는 그룹별 행의 개수를 세어 Total Count로 명명한다는 뜻입니다. Order By Total Count Desk는 학생 수 기준으로 내림차순, 즉 데스크로 정렬한다는 뜻입니다.
As Total Count는 집계 결과의 별칭, 즉 alias를 부여한다는 뜻입니다. 이제 세 번째 쿼리 실습 3개 테이블 조인을 살펴보겠습니다. 문제는 김철수 학생이 수강하는 과목명과 담당 교수를 조회하는 것입니다. 쿼리는 다음과 같습니다. Select c.coce name c.professor from students as join in all months e on s.student id가 2.student id와 같은 경우 join courses c on 2.coce id가 c.coce id와 같은 경우 where s.name이 김철수인 경우입니다. 이를 하나씩 풀어보면 students에서 in all months로는 학번 즉 student id로 학생과 수강 테이블을 연결한다는 뜻입니다.
인롤먼치에서 코시지로는 과목코드 즉 코스 아이디로 수강과 과목 테이블을 연결한다는 뜻입니다 Where s.name의 김철수는 최종 결과에서 김철수의 데이터만 필터링한다는 뜻입니다. 즉, 스튜던치에서 인롤 먼치를 거쳐 코시즈까지 세 테이블이 순서대로 연결되는 것입니다. 이제 네 번째 쿼리 실습, 서브 쿼리를 살펴보겠습니다. 문제는 전공별 평균 학점이 전체 학생 평균보다 높은 전공을 찾는 것입니다. 쿼리는 다음과 같습니다. Select major, AVG GPA as major AVG from students group by major having AVG GPA가 전체 학생의 AVG GPA를 구하는 서브 쿼리보다 큰 경우입니다. 이를 하나씩 풀어보면,
바로 안에 Select AVG GPA from students는 서브 쿼리로서 먼저 실행되어 전체 평균을 계산합니다. Group by major는 전공별로 그룹화한다는 뜻입니다. Having AVG GPA가 전체 평균보다 큰 경우는, 그룹 평균이 전체 평균보다 높은 전공만 선택한다는 뜻입니다. 서브 쿼리의 장점은 복잡한 조건을 단계적으로 표현할 수 있다는 것입니다. 이제 SQL의 핵심 명령어를 정리해보겠습니다. SELECT는 데이터 조에 사용되며 SELECT name GPA from student 와 같이 사용합니다 WARE는 조건 필터링에 사용되며 WARE GPA가 3.5보다 크고 MAJOR가 CS인 경우와 같이 사용합니다 GROUP BY는 GROUP BY에 사용되며 GROUP BY MAJOR와 같이 사용합니다
HADING은 GROUP 조건에 사용되며 HADING AVG GPA가 3.0 이상과 같이 사용합니다 JOIN은 Cable 결합에 사용되며 JOIN COUSES ON 2. COUS ID가 C. COUS ID와 같은 경우와 같이 사용합니다 OrderBy는 병렬에 사용되며 OrderByGPAdesk와 같이 사용합니다. Like는 패턴 매칭에 사용되며 WhereName이 긴 %와 같이 사용합니다. 이제 SQL 실습 도구들을 살펴보겠습니다. SQLite Online은 별도의 설정 없이 즉시 실행할 수 있어서 가장 빠르고 직관적인 환경입니다. www.db-pid.com에서 사용할 수 있습니다. DBpid은 MySQL, PostgreSQL 등 다양한 DB 엔진을 선택할 수 있어서 멀티디비 환경 테스트에 적합합니다.
W3Schools SQL은 이론과 실습이 통합된 환경으로 SQL 튜토리얼과 퀴즈를 제공하여 초보자에게 적합합니다 DB번은 현업 개발자들이 사용하는 도구로서 컴퓨터에 설치하는 무료 소프트웨어이며 실제 DB에 연결할 수 있습니다 이제 SQL의 Insert, Update, Delete를 살펴보겠습니다 Insert Into는 새 데이터를 추가하는 기능으로 Insert Into Student Name, Major, GPA Values, E0, Design, 4.2와 같이 사용합니다 업데이트는 기존 데이터를 수정하는 기능으로 업데이트_students_set gpa가 4.5, where_name이 김철수인 경우와 같이 사용합니다. 딜리트는 데이터를 삭제하는 기능으로
delete_from_students_where gpa가 2.0보다 작은 경우와 같이 사용합니다. 크리에이트 테이블은 새 테이블을 생성하는 기능으로 student_id를 int_primary키로, name을 bar_character_50으로 정의하는 것과 같이 사용합니다. 드롭테이블은 테이블을 삭제하는 기능으로 drop_table_if_exist_students와 같이 사용합니다. 이제 SQL의 인덱스와 최적화를 살펴보겠습니다. 인덱스, 인덱스란 데이터베이스 조회 속도를 높이기 위한 자료 구조입니다. 책의 세균처럼 원하는 데이터를 빠르게 찾을 수 있게 해줍니다. 예를 들어, Create Index, idx, gpa, on, students, gpa라고 작성하면 gpa를 기반으로 한 조회 속도가 향상됩니다. 성능 최적화를 위한 팁은 다음과 같습니다.
Select, 별표는 피하고, 필요한 열만 선택합니다. Where, 절에는 인덱스가 걸린 열을 사용하여 속도를 향상시킵니다. join의 순서는 작은 테이블을 먼저 배치합니다. explain 키워드로 query의 실행 계획을 확인할 수 있습니다. 이제 SQL과 no SQL을 비교해보겠습니다. 구조 측면에서 SQL, 즉 관계형은 정형화된 테이블, 행, 열 로 이루어지지만 no SQL, 즉 비관계형은 유연한 문서, 키, 값, 그래프로 이루어집니다. 스키마 측면에서 SQL은 고정 스키마로 사전 정의가 필수이지만 no SQL은 동적 스키마로 유연하게 변경할 수 있습니다. 확장성 측면에서 SQL은 수직적 확장 즉 서버 업그레이드 방식이지만
No SQL은 수평적 확장 즉 서버 추가 방식입니다 ACID 측면에서 SQL은 강력한 트랜잭션을 보장하지만 No SQL은 일부 베이스 원칙을 적용합니다 사용 예시로 SQL은 금융, ERP, 인사 시스템에 사용되고 No SQL은 소셜미디어, IoT, 채팅에 사용됩니다 대표 제품으로 SQL은 MySQL, Oracle, PostgreSQL이 있고 No SQL은 MongoDB, Redis, Neo4j가 있습니다 이제 SQL 핵심을 정리해보겠습니다. 기본 구조는 셀렉트 열 이름, 프롬 테이블, 웨어 조건, 그룹 바이 그룹, 해빈 그룹 조건, 오더 바이 정렬입니다. 핵심 개념으로 프라이머리 키는 행의 유일한 식결자로서 중복과 너를
허용하지 않으며 포링 키는 다른 테이블을 참조하여 관계를 표현합니다. 조인 유형으로 이너 조인은 교집합, 레프트 조인은 왼쪽 전체, 라이트 조인은 오른쪽 전체, 툴 아우터는 전체 합집합입니다. 실습 도구로는 SQLite Online, DBP들, W3Schools, DBBerが 있으며 브라우저에서 즉시 실습할 수 있습니다 이제 오늘 내용을 정리하고 다음 단계를 살펴보겠습니다 SQL은 관계형 데이터베이스의 표준 지뢰어로서 모든 데이터 분석의 기본입니다 Select, Where, Group By, Having, Join, Order By라는 6가지 핵심 명령어를 마스터하는 것이 중요합니다 Primary Key 즉 유일식별자와 Foreign Key 즉 관계 연결은 테이블 설계의 핵심 개념입니다
SQLite Online이나 W3Schools를 통해 즉시 온라인으로 실습할 수 있습니다 이번 모듈의 목표를 달성하기 위한 질문을 스스로 해봅시다. SQL을 간단히 설명하시오. 그리고 SQL의 중요 명령어들을 나열하시오. 오늘은 관계형 데이터베이스의 구조, 셀렉트부터 조인, 서브커리에 이르는 핵심 명령어들, 그리고 SQL과 노SQL, Neo4j의 비교를 통해 데이터베이스가 단순한 저장공간이 아니라 세상을 구조화하는 방식이라는 것까지 살펴보았습니다. 다음 시간에는 그래프 데이터베이스인 Neo4j를 다루어보겠습니다. 감사합니다.