98. 고급 용어 보강
이 부록은 고급편에 등장한 고급 수준의 기술 용어를 한자리에 모아 풀이합니다. 본문 첫 등장 자리에서 이미 설명했지만, 헷갈릴 때 빠르게 찾아볼 수 있도록 정리했습니다.
📌 초급편의 98 기초 용어 사전(범용 용어)과 중급편의 98 중급 용어 보강(OOP·이터레이션 등)도 함께 참고하세요. 이 사전은 그 위층, 고급 개념을 다룹니다.
🔤 정규표현식과 텍스트
| 용어 | 한 줄 풀이 | 처음 등장 |
|---|---|---|
| 정규표현식(정규식) | 문자열 패턴을 기호로 표현하는 작은 언어. | 21장 |
| 메타문자 | \d·.·* 등 특수한 의미를 가진 문자. | 21장 |
| 문자 클래스 | [abc]·\d처럼 "어떤 종류의 문자"를 나타내는 표현. | 21장 |
| 수량자 | *·+·{n}처럼 반복 횟수를 지정하는 기호. | 21장 |
| 앵커 | ^·$처럼 위치(시작·끝)를 지정하는 기호. | 21장 |
| 그룹 | 괄호 ( )로 패턴 일부를 묶어 따로 추출하는 것. | 21장 |
| 탐욕/게으름 | 수량자가 최대한 많이(탐욕)/최소한만(게으름, ?) 매칭. | 21장 |
| raw 문자열 | r"...". 백슬래시를 그대로 전달하는 문자열. | 21장 |
📝 로깅
| 용어 | 한 줄 풀이 | 처음 등장 |
|---|---|---|
| 로깅(logging) | 중요도·시간을 붙여 체계적으로 기록하는 방식. | 22장 |
| 로그 레벨 | DEBUG<INFO<WARNING<ERROR<CRITICAL의 5단계 중요도. | 22장 |
| 핸들러(handler) | 로그를 어디로 보낼지 정하는 것(화면·파일). | 22장 |
| 포매터(formatter) | 로그를 어떤 형식으로 출력할지 정하는 것. | 22장 |
| 로거(logger) | 로그를 만드는 주체 객체(getLogger). | 22장 |
⏰ 시간
| 용어 | 한 줄 풀이 | 처음 등장 |
|---|---|---|
| timedelta | 두 시점 사이의 간격(기간)을 나타내는 객체. | 23장 |
| strftime / strptime | 날짜→문자열(만들기) / 문자열→날짜(파싱). | 23장 |
| 타임존(timezone) | 지역별 시간대. zoneinfo로 다룸. | 23장 |
| UTC | 협정 세계시. 시간대 계산의 기준점. | 23장 |
| perf_counter | 가장 정밀한 경과 시간 측정 함수. | 23장 |
⚡ 동시성
| 용어 | 한 줄 풀이 | 처음 등장 |
|---|---|---|
| 동시성(concurrency) | 여러 작업을 겹쳐 처리해 전체 시간을 줄이는 것. | 24장 |
| I/O 바운드 | 입출력 대기가 병목인 작업(네트워크·파일). | 24장 |
| CPU 바운드 | 계산 자체가 병목인 작업. | 24장 |
| 스레드(thread) | 한 프로그램 내 여러 실행 흐름. 메모리 공유. | 24장 |
| 프로세스(process) | 독립된 실행 단위. 메모리 분리. 진짜 병렬. | 24장 |
| GIL | 한 번에 한 스레드만 Python 코드를 실행하게 하는 잠금. | 24장 |
| 경쟁 상태(race condition) | 여러 스레드가 공유 데이터를 동시에 바꿔 생기는 오류. | 24장 |
| async/비동기 | 한 흐름에서 작업을 전환하며 겹쳐 실행하는 방식. | 25장 |
| 코루틴(coroutine) | async def로 만든, 멈췄다 재개 가능한 함수. | 25장 |
| await | 비동기 작업이 끝나길 기다리는 키워드(이때 양보). | 25장 |
| gather | 여러 코루틴을 동시 실행하는 함수. | 25장 |
| 이벤트 루프 | 비동기 작업들을 전환하며 돌리는 실행 엔진. | 25장 |
🌲 자료구조와 알고리즘
| 용어 | 한 줄 풀이 | 처음 등장 |
|---|---|---|
| 시간 복잡도 / Big-O | 데이터가 커질 때 시간이 늘어나는 패턴. O(n) 등. | 26장 |
| 스택(stack) | LIFO(후입선출). 마지막에 넣은 걸 먼저 꺼냄. | 26장 |
| 큐(queue) | FIFO(선입선출). 먼저 넣은 걸 먼저 꺼냄. | 26장 |
| deque | 양끝에서 O(1)로 넣고 빼는 양방향 큐. | 26장 |
| 이진 탐색(binary search) | 정렬된 데이터에서 절반씩 버리며 찾기. O(log n). | 26장 |
| 트리(tree) | 가지치며 뻗는 계층 자료구조. | 27장 |
| 노드/루트/리프 | 트리의 점 / 맨 위 / 끝(자식 없는) 노드. | 27장 |
| 이진 트리 | 자식이 최대 2개인 트리. | 27장 |
| BST | 이진 탐색 트리. 왼쪽<자기≤오른쪽 규칙. | 27장 |
| 순회(traversal) | 트리의 모든 노드를 방문(전위·중위·후위). | 27장 |
| 재귀(recursion) | 함수가 자기 자신을 부르는 것. | 27장 |
| defaultdict | 없는 키를 자동으로 기본값으로 만드는 딕셔너리. | 28장 |
| @dataclass | 데이터 담는 클래스의 __init__을 자동 생성하는 데코레이터. | 28장 |
⚠️ 고급 단골 실수 모음
| 실수 | 올바른 방법 |
|---|---|
| 정규식을 raw 문자열 없이 작성 | 항상 r"..."로 |
re.search 결과 바로 .group() | if m:으로 None 확인 먼저 |
| 정규식으로 완벽한 이메일 검증 시도 | 대략 검사만, 과욕 금지 |
print로 디버깅 후 배포 | 로깅 + 레벨 설정으로 |
except에서 logging.error | logging.exception(트레이스백 포함) |
| 날짜를 문자열로 직접 계산 | datetime + timedelta에 맡기기 |
| CPU 작업을 스레드로 병렬화 | GIL 때문에 무의미. 프로세스 사용 |
코루틴을 await 없이 호출 | await/gather/run 필요 |
async 안에서 time.sleep | await asyncio.sleep 사용 |
큐를 리스트 pop(0)로 | deque.popleft (O(1)) |
| 잦은 포함 확인을 리스트로 | 세트로 (O(n)→O(1)) |
| 정렬된 값을 BST에 순서대로 삽입 | 한쪽으로 기욺(O(n)). 균형 트리·dict 사용 |
🏠 목차로 돌아가기 | ▶️ 99. 고급 치트시트와 다음 단계