한줄요약:
보안을 위한 파이썬 - 파이썬 함수(메서드)의 정의, map/filter/sorted에 활용되는 람다 함수, 변수 스코프(LEGB), 외부 변수를 기억하는 클로저/데코레이터, 그리고 *args/**kwargs를 사용한 유연한 가변 인자 함수 구현 방법을 학습했습니다.
오늘 공부한 내용:
1. 📝 함수의 기본 및 장점
정의: def 함수이름([매개변수]): 구문으로 정의. OOP(객체 지향 프로그래밍)에서는 Method라고 표현함.
장점: 코드 재사용, 가독성 향상, 유지보수 및 디버깅 용이, 모듈화 (외부 파일 import).
반환: return 결과값 사용. 반환이 필요 없으면 생략 가능.
매개변수 전달 방식:
위치 인자 (Positional Argument): 전달 순서대로 매핑.
키워드 인자 (Keyword Argument): 매개변수=값 형태로 이름 지정하여 전달 (순서 무관).
기본 매개변수 (Default Parameter): name='guest'처럼 기본값 설정 가능.
2. 💡 람다 함수 (Lambda Function)
특징: 익명 함수(Anonymous). def 없이 한 줄로 정의.
구조: lambda 매개변수 : 실행문 (실행문 결과가 자동으로 반환됨).
활용: 주로 map(), filter(), sorted() 등의 key 인자에 간단한 함수를 즉석에서 정의하여 전달할 때 사용됨.
map(func, iterable): 열거형 요소에 func를 적용 후 결과를 반환.
filter(func, iterable): func의 결과가 참(True)인 요소만 필터링하여 반환.
보안 적용: makeUrl 함수에서 urllib.parse.quote()를 사용하여 URL 인코딩을 통해 **악성 문자열(XSS 취약점)**을 방지하는 실습 진행.
3. 🌐 변수의 스코프 (Scope) 및 생명 주기
LEGB 규칙: 변수를 찾는 순서.
Local (지역): 현재 함수 내부.
Enclosing (외부/둘러싼): 중첩 함수의 외부 함수.
Global (전역): 프로그램 전체.
Built-in (내장): 파이썬 내장 함수/키워드.
스코프 변경 키워드:
global: 함수 내부에서 전역 변수의 값을 변경할 때 사용.
nonlocal: 중첩 함수에서 **외부 함수(Enclosing)**의 변수 값을 변경할 때 사용.
4. 🔑 클로저 (Closure) 및 데코레이터 (Decorator)
클로저:
중첩 함수의 한 형태. 외부 함수가 종료된 후에도 내부 함수가 외부 함수의 변수를 기억하고 접근할 수 있는 기능.
핵심: 외부 변수의 상태를 유지하면서 전역 변수 사용을 피할 수 있음. (예: 카운터 함수 counter()).
데코레이터:
클로저 기반으로 구현되며, 함수를 감싸서 기능(공통 로직)을 추가하는 구문.
활용 예: 로깅, 권한 체크, 실행시간 측정 등.
5. 📦 가변 인자 함수 (Variable Length Arguments)
정의: 함수 호출 시 몇 개의 인자가 전달될지 모를 때 사용.
*args:
위치 인자를 튜플(tuple) 형태로 받음. (예: variableLenArgs(1, 2, 3))
**kwargs:
키워드 인자를 딕셔너리(dict) 형태로 받음. (예: variableLenArgsDict(name='jslim', age=30))
혼합 사용: subject, *args, **kwargs 순서로 정의 가능.
API 요청 생성 실습: **kwargs를 이용하여 URL의 쿼리 파라미터(?q=...&page=...)를 유연하게 생성하는 실습 진행. (보안 강화를 위해 화이트리스트와 urllib.parse.urlencode 적용).