AI 데이터 엔지니어 과정

AI 교육을 위해 Python의 이론을 약 6시간 정도 들었습니다.
제가 생각한 수업은 코드를 우다다 작성하면서 이론을 배우는 것을 생각했지만 선생님께서는 전체적인 개요를 알려주셨습니다.
글로 Python을 배우게 되어 영광스럽고 Python의 이론을 작성해 보도록 하겠습니다.
AI 시대니까 Gemini에게 Python 이 뭔지 먼저 물어보겠습니다.
파이썬이 뭔가요?
파이썬(Python) 개요
파이썬은 1991년 귀도 반 로섬(Guido van Rossum)이 설계하고 발표한 범용, 고급(High-level) 프로그래밍 언어입니다.
주요 특징
- 인터프리터 언어: 소스 코드를 사전에 컴파일하지 않고, 인터프리터가 실행 시점에 코드를 한 줄씩 읽고 해석하여 실행합니다.
- 가독성과 간결성: 문법이 영어와 유사하여 직관적이며, 코드 블록을 중괄호({})가 아닌 들여쓰기(Indentation)로 구분하여 코드의 가독성을 강제합니다.
- 멀티 패러다임 지원: 객체 지향 프로그래밍, 절차적 프로그래밍, 함수형 프로그래밍 등 다양한 프로그래밍 패러다임을 모두 지원합니다.
- 방대한 표준 라이브러리: 기본적으로 제공되는 라이브러리와 패키지 관리자(pip)를 통해 설치할 수 있는 외부 생태계가 매우 넓습니다.
주요 활용 분야
- 데이터 과학 및 인공지능: 데이터 분석(Pandas), 수치 계산(NumPy), 머신러닝 및 딥러닝(TensorFlow, PyTorch) 분야의 표준 언어로 사용됩니다.
- 웹 개발: Django, Flask, FastAPI 등의 프레임워크를 활용하여 백엔드 웹 서버를 구축합니다.
- 업무 자동화: 시스템 관리, 웹 스크래핑(크롤링), 파일 처리 등 반복적인 작업을 자동화하는 스크립트 작성에 활용됩니다.
처음 프로그래밍 세계에 들어오는 사람은 위의 내용이 하나도 이해가 되지 않을 것입니다!
저 또한 다시 보니 이해가 안되는 것 혹은 공부했어도 까먹은 개념들이 있네요 ㅎㅎ
원래 저런 내용은 코드를 작성해보면서 이해하는 것이 가장 빠르니까 2일 차, 3일 차... n일차에 배워봅시다.
일단 우리가 해보면 좋은 것이 저기서 모르는 단어들을 잔뜩 notion이나 메모장에 남겨서 교육 시간에 배우지 못하면 그것은 따로 공부하면 좋을 것 같아요. (어차피 지금 파봤자 또 궁금 투성이니까 시원하게 다음에 보면 될 것 같아요. ㅎㅎ)
저는 4개 정도 적어보았습니다.
- 객체 지향 프로그래밍
- 절차적 프로그래밍
- 함수형 프로그래밍
- FastAPI
그리고 시원하게 넘어갑니다.
이제 수업시간에 배운 Python 의 큰 그림을 알아봅시다!
개요
목적
- 데이터 엔지니어 파트에서 주로 사용되는 언어
- AI 분야에서 가장 많이 사용되는 언어
- AI 모델 학습, LLM 활용, 데이터 ETL(추출, 처리, 적재), 데이터 엔지니어(DE)의 기본 주력 언어
- 데이터 분석가 : DA
- 데이터 엔지니어 : DE ← DA, DS, DevOps.... 에서 넘어오고 있다.
- 데이터 사이언티스트 : DS
개발 환경 구축
- 로컬 PC 기반
- OS 무관 (윈도우, 맥, 리눅스)
- 용도 : S/W, ETL 모듈, 분석/모델학습, AI 에이전틱 개발...
- 파이썬 설치
- 파이썬 공홈
- https://www.python.org/downloads/
- 다운로드 후 설치 (윈도우 path 설정 체크)
- 풀패키지 방식
- 아나콘다
- https://www.anaconda.com/download
- 필요한 모든 패키지 기본 제공
- GUI 모드, 써드파트 툴 연동, CLI 방식 지원
- 미니콘다
- 아나콘다 - GUI = CLI
- 경량
- ...
- 아나콘다
- 도커 기반
- OS에 직접 설치 X
- 도커(컨테이너 기반 가상환경) 위에서 컨테이너로 구성
- https://www.docker.com/
- 파이썬 공홈
- 클라우드(S/W등 빌려서 사용) 기반
- aws/azure/구글 클라우드
- 인프라/런타임 환경 등 제공
- 사용자 임대 후 사용 (돈 지불) → 반납 등
- 특정 상품을 임대(구매) → 환경을 구성해서 제공
- 인프라/런타임 환경 등 제공
- 사스 형식으로 제공
- 구글의 코랩
- ...
- 데이터센터 등 임대회사 존재
- 빅테크 등등 특정 기업 전용 임대
- aws/azure/구글 클라우드
타입
종류
- 정의
- 데이터를 표현하는 형식(담는, 참조하는)
- 수치 (온도, 집값, 센서값, 주가...)
- 최종적인 데이터 형태
- 문자열 →...(토큰화) → 수치화 (토큰)
- 문자열 (리뷰, 댓글, 평가, 문장, 프롬프트...)
- 종류
- 단일 데이터형
- 데이터 자체 형식, 본질적인 값
- 수치형
- 정수 (int)
- ..., -1,0,1,... : 값 간격 (step) 1 → 이산형, 순서형
- 부동소수 (float)
- ... 3.14... : 값 간격 (step) 무한대 → 연속형
- 복소수
- 정수 (int)
- 문자열(형) (str)
- "HELLO", '안녕', """...""", '''...''' → 자연어(텍스트) → 범주형 > 명목형 -NLP(자연어처리) > 문자열 → 수치화(토크나이저 도구) → 분절화 > 벡터화 > 사전화 > 패딩 > 임베딩
- 데이터 분석 → 피벗, 집계 등 타겟 데이터가 됨
- 불리언형 (bool)
- True/False : 1/0
- 바이너리, 이진
- 바이트형 (byte)
- 바이너리 데이터를 다룰 때
- 압축 데이터 등등
- 컬렉션 (데이터가 1개 이상 모여있음)
- 파이썬
- 문자열 (str)
- 단일 데이터형 연속 데이터형
- 읽기 전용(수정 x, immutable)
- 리스트 (list)
- 순서 존재 → 순서표기 : 인덱스 (고유값, 특정데이터를 특정하는 기준) → 정방향(0,1,2,...), 역방향(-1,-2,...)
- 리스트가 담고 있는 데이터는 인덱스를 통해서 접근할 수 있다.
- 딕셔너리 (dict)
- 순서 X(최신 버전에는 존재함, 순서가 중요하지 않음) → 데이터는 무엇으로 특정 → 키(key, 고유값), 키는 중복 X
- 특정 데이터는 키를 통해서 접근 가능 : 키는 통상 문자열을 사용
- 데이터는 중복 가능
- 데이터 포멧 중 JSON 호환
- dict → JSON : 직렬화(serialize), 데이터는 보내는 쪽
- JSON → dict : 역직렬화(deserialize), 데이터는 받는 쪽
- 튜플 (tuple)
- 순서 존재 → 리스트 대비 차이점 : 읽기 전용(read only) → 수정 X
- 단순하게 값을 묶을 때 사용
- 함수의 반환값이 1개 초과(>1) 일 때
- 가변인자
- ....
- 집합
- 중복 데이터 제거
- 문자열 (str)
- 넘파이
- 파이썬 패키지, 수학/과학용 라이브러리 (밑바닥 시리즈 기준 패키지)
- n차 배열 (ndarray)
- 기본 자료 구조
- 모든 데이터는 배열로 구성 후 처리 가능
- 행렬연산
- 배열의 모든 멤버는 동일 타입임
- 뒤에 나오는 모든 자료 구조의 베이스(통상)
- 판다스(소규모 데이터)/폴라스(중규모 데이터, 수백GB, 러스트기반 - 추후체크)/스파크(대규모 데이터, 분산구조, 테라급 - 추후체크)
- 데이트 분석용/EDA, 시각화, 피처엔지니어링, ETL, 데이터 전처리 등등
- 판(팬)다스
- 시리즈(Series)
- 1차원 데이터
- 데이터프레임 (DataFrame)
- 2차원 데이터
- 시리즈(Series)
- 딥러닝(텐서플로우, 파이토치, ... 딥러닝 엔진(프레임워크))
- 텐서 (tensor)
- 베이스는 넘파이의 배열
- 텐서 (tensor)
- 파이썬
-
- 기타
- 값이 없다 → 결측치(데이터 관점)
- 파이썬 : None
- 넘파이~ : NaN or null
- 값이 없다 → 결측치(데이터 관점)
- 기타
- 단일 데이터형
타입 계층 구조
- None
- 값이 없음
- 수치
- 정수 : 정수형, 블린형
- 실수 : 부동소수, 복소수
- 시퀀스
- 가변형 : list
- 불변형 : tuplem str, byte
- 집합
- set
- 매핑
- dict
흐름제어
- 목적
- 프로그래밍, 흐름 컨트롤 → 특정 목적 달성 (게임,.. S/W)
- 분류
- 조건문
- 키워드 : if, else, elif, end,,,
- 반복문
- 키워드
- while : 0 ~ 무한대
- for : 0 ~ 지정된 횟수 (유한대, n)
- 키워드
- 기타 컨트롤 키워드
- continue → 조건문으로 점프
- break → 반복문 탈출
- else → 반복문/예외처리문에서 정상처리되는 상황을 인지하는 키워드
- 조건문
- 조건식
- 결론 : 항상 반드시 bool값(True/False or 1/0)을 반환한다.
- 키워드
- 산술 : +, -, *, /, %, //, ... - 비교 : >, <, >=, <=, !=, ==, ... - 논리 : and, or, not, ... - ...
절차적 프로그래밍
- 타입, 변수, 흐름제어 등 이용하여 개발
- 목적
- 흐름 제어 연습
- 로직 구성 연습
- 파이썬 익숙하게 구성, 구현 연습
- 게임 간단하게 개발 (터미널기반, 머드게임)
함수
- 배경
- 절차적 프로그래밍을 통해서 코드의 장황함, 재사용성 한계등 확인 -> 개선 -> 새로운 개념 도입 필요 -> 함수, 클래스 등
- 목표
- 프로그램 효율적 작성, 관리 -> 생산성 향상 -> 재사용성 높임 => 기업 관점에서는 비용 절감 (기본 방식 관점, ai를 이용한 개발 이전)
- 향후 ai기반 에이전틱 개발 시 MD 파일을 구성하여 바이브 코딩 진행(하네스 엔지니어링 구성) -> 세부적인 스타일, 방법/식, 룰 등등 제약 시 참고
- 종류
- 내장함수
- 파이썬이 설치되어 있으면 바로 사용 가능함 (기본 라이브러리)
print('hello') - 외장함수(내장의 반대 개념으로 표현)
- 특정 패키지 설치 -> 패키지를 통해서 내부에 존재하는 함수를 접근
# . 도트 연산자 -> 출처를 표기 패키지명.함수()
- 특정 패키지 설치 -> 패키지를 통해서 내부에 존재하는 함수를 접근
- 사용자 정의 함수
- 개발자가 필요에 의해 생성
- 문법 이해
- 함수명, 매개변수(parameter)/인자(argument), 코드블록, 비즈니스로직, 반환값 처리, 타입힌트
- 고급함수
- 람다 (가장 빠름)
- 제너레이터 적용 -> 추후 체크
- 데코레이터 적용 -> 추후 체크
- 클로저, 내부함수, 등등
- 내장함수
함수 지향적 프로그래밍
- 절차적 코드 => 함수 지향적 코드 마이그레이션(혹은 코드 리펙토링)
- 특징
# 구성 -------------------- # 모듈가져오기 # 전역변수 # 함수 # 엔트리포인트 (진입로, 코드 시작점) if __name__ == '__main__': # 시작코드 작성됨
모듈 및 패키지
- 목적
- 모듈, 패키지 개념 없다면
- 모든 내용은 한 개의 *. py에 모두 기술해야 함.
- 코드가 길어질수록, 유지보수 힘듦, 협업 X, 여러 명 작업 곤란, 난이도 상승, 개발기간 늘어남...
- 모듈, 패키지 개념 없다면
- 해결
- 모드를 쪼개고, 기능별로 쪼개고, 재사용 가능하게 쪼개진 여러 코드에서 다 사용가능하게 등등 개념 필요 => 모듈화, 패키지, 모듈 가져오기
- 모듈화
- 기능별, 업무별,... 목적에 따라 별도 파일로 구성
- 구성
- 모듈 : *. py (파이썬 파일)
- 패키지 : 특정 디렉토리에 모듈들이 여러 개 모여 있는 형태 -> 기능별로 모듈을 모아둔다
- 예
- 수학/과학용 모듈 구성 패키지로 모으면 => 넘파이(numpy), 사이파이,..
- 데이터 분석/시각화,... 모듈 구성 패키지로 묶으면 => 팬더스(pandas)
- 예
- 모듈 가져오기
- import ~
from ~ import ~
예외 처리
- 목적
- s/w는 구동 시 셧다운 되면 안 됨.
- 버그 존재함
- 잠재적 버그 방어(예방) -> 상황 발생(장애) -> 로깅/예외처리 -> 셧다운 x -> 다음 단계 처리됨
- s/w는 구동 시 셧다운 되면 안 됨.
- 잠재적 에러 발생 요인
- I/O 를 사용하는 코드
- 데이터베이스 연동/쿼리수행..
- 파일 액세스
- 네트워크 통신 중
- ...
- I/O 를 사용하는 코드
- 스타일 2개
- 최대한 방어코드 디테일 작성 전략
- 코드 전개 -> 예외처리 방어하는 전략
- 예외처리문
# : 등장, 다음 라인 코드는 들여쓰기 등장 (코드블럭)
try:
~ 코드 (잠재적 오류 포함)
except:
~ 예외 처리코드
else:
~ 오류가 없으면 진입
finally:
~ 뒷정리 코드
파이썬 코딩 철학
The Zen of Python, by Tim Peters
Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than right now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
1. 명확함과 단순함 (Clarity & Simplicity)
2. 구조와 가독성 (Structure & Readability)
3. 예외 처리와 원칙 (Errors & Rules)
4. 일관성과 모호함 제거 (Consistency)
5. 실행력과 구조화
위의 내용들을 미리 공부해보고 싶으면 유튜브에 어마어마하게 많은 영상들이 있으니까 그것을 보고 미리 공부해 봐도 좋을 것 같아요.
저는 '나도 코딩'님의 파이썬 6시간 강의를 들으면서 살짝 맛을 봤습니다.
https://youtu.be/kWiCuklohdY?si=WaK5mKluamKh3wLp
이제 아마 내일부터는 진짜... 파이썬 코드를 작성하면서 기초를 배우지 않을까 싶습니다.
'코딩 개발 > Python' 카테고리의 다른 글
| Python - 문자열 처리 함수 (split(), join(), lower(), upper(), strip() 형제들, find(), index(), in, startwith, endswith, replace()) (0) | 2026.07.07 |
|---|---|
| Python - 데이터 추출 슬라이싱(Slicing) - 변수명[시작 인덱스 : 끝 인덱스 : step(간격, 기본값1, 생략가능) (0) | 2026.07.06 |
| Python - 문자열 추출(인덱싱) (0) | 2026.07.05 |
| Python - 단일 데이터형 (수치형) (0) | 2026.07.03 |
| Python - 주석, 변수, 상수, 리터럴, 네이밍 컨벤션 (3) | 2026.07.02 |