Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- sk 쉴더스 루키즈
- 인프라 활용을 위한 파이썬
- 기술 특강 및 OT
- 모듈프로젝트
- Kali#Linux#KALI#LINUX#INSTALL#github#설치
- VMWARE#INSTALL#설치
- Case Study
- AI #취업
- 루키즈
- 애플리케이션 보안 기술
- 모의침투
- 시스템-네트워크 보안 기술
- 쉴더스
- Kali#Linux#Brute#Force#Attack#Test#DVWA#Hacking#Low#무차별#대입#공격#해킹
- 개인정보보호
- 클라우드기반 보안 시스템 구축/운영 실무
- 모듈 프로젝트
- kisa #보안관제
- DVWA#INSTALL#github#security#kali#linux
- CERT
- 클라우드 보안 기술
- 클라우드 보안 기반
- 클라우드 기반
- rocky linux#siem#project#threat detection#soc#onpremise#ids#python#csv#pipeline#kali linux#DVWA#security monitoring
- DVWA#Brute#Force#Attack#Test#Kali#Linux#Medium#Level#sleep
- Foxyproxy#install#setting#firefox
- #루키즈
- 보고서
- 29기
- sk shieldus
Archives
- Today
- Total
이것저것
[SK shieldus Rookies 29기] 4일차 본문
1️⃣ 파이썬의 역사와 개발 배경
파이썬은 1991년 귀도 반 로섬(Guido van Rossum)이 개인 시간에 개발한 프로그래밍 언어입니다.
📖 개발 배경
- ABC 언어에 영감을 받음
- "Monty Python's Flying Circus" TV 쇼에서 이름 따옴
- 목표: C보다 읽기 쉽고 간결하게 많은 작업을 수행할 수 있는 언어 개발
2️⃣ 파이썬이 널리 쓰이는 이유
✨ 주요 이유
- 다양한 분야: 웹 개발(Flask, Django), 데이터 과학(pandas), AI/딥러닝(TensorFlow)
- 직관적인 문법: 초보자도 쉽게 배우고 코드 가독성 높음
- 강력한 커뮤니티: 방대한 라이브러리와 지속적 지원
- 교육용 인기: 학교·대학에서 입문 프로그래밍 언어로 널리 채택
3️⃣ 파이썬 특징 및 장점
🚀 주요 특징
- 인터프리터 언어: 실행 시 코드 해석, 컴파일 필요 없음
- ** 동적 타이핑**: 변수 타입 미리 선언 불필요 → 빠른 개발 가능
- ** 객체 지향 지원**: 클래스, 상속, 인스턴스 활용 가능
- ** 확장성**: C/C++ 코드 연동 가능 (성능이 중요한 부분)
- ** 플랫폼 독립성**: 윈도우, 맥, 리눅스에서 동일하게 실행
4️⃣ 파이썬 2 vs 3 비교
📊 버전 비교 테이블
| 항목 | Python 2.x | Python 3.x |
|---|---|---|
| 문자열 | 기본 ASCII, 유니코드는 u"" 사용 |
기본 Unicode 처리 |
| print 문법 | 명령문 (괄호 없음) print "hi" |
함수 (괄호 필수) print("hi") |
| 나눗셈 연산 | /는 정수 나눗셈 |
/는 실수, //는 정수 나눗셈 |
| 비동기 처리 | 미지원 | async/await 지원 |
| 지원 상태 | 2020년 1월 종료 | 지속 지원, 계속 업데이트 |
💡 왜 Python 3.x를 써야 할까?
- ✔️ 새로운 기능과 버그 수정 지속적 추가
- ✔️ 보안 패치와 성능 최적화 포함
- ✔️ 최신 라이브러리는 모두 3.x 기준으로 개발
- 개인적으로 프로젝트를 진행할 때 async를 엄청 많이 쓴 기억이....
5️⃣ IT 보안에서 파이썬 활용
🔒 보안 분야별 활용
- ** 보안 자동화**: 정기적 보안 점검·업데이트 자동화
- ** 취약점 분석**: SQLMap 등 도구로 자동 스캔 및 진단
- ** 포렌식**: 로그 이상 행위 추출, 멀웨어 분석
- ** 네트워크 모니터링**: Nmap 기반 포트 스캔, 패킷 조작
- ** 보고서 자동화**: 크롤링·파싱 후 보고서 생성 및 자동 통보
6️⃣ 파이썬 기본 문법 💡
1️⃣ 변수와 데이터 타입
number = 10 # 정수 (int)
name = "Alice" # 문자열 (str)
is_valid = True # 불리언 (bool)
temperature = 36.5 # 부동소수점 (float)
print(number)
print(name)
print(is_valid)
print(temperature)
출력 결과:
10
Alice
True
36.52️⃣ 타입 확인 및 변환
# 타입 확인하기
print(type(number)) # <class 'int'>
print(type(name)) # <class 'str'>
print(type(is_valid)) # <class 'bool'>
# 타입 변환하기
text = str(100) # 정수를 문자열로
real_number = int("123") # 문자열을 정수로
float_from_int = float(10) # 정수를 실수로
float_from_string = float("3.14159") # 문자열을 실수로
3️⃣ 예외 처리 (try-except)[이것도 많이 사용한 기억이...]
try:
user_input = "100a"
number = int(user_input)
except ValueError:
print("❗ 입력이 정수로 변환될 수 없습니다.")
출력 결과:
❗ 입력이 정수로 변환될 수 없습니다.7️⃣ 변수 네이밍 규칙
✅ 올바른 규칙
- 문자, 숫자, 밑줄 포함 가능
- 숫자로 시작 불가
- 파이썬 예약어 사용 불가 (if, for, def 등)
👍 좋은 예 vs 👎 나쁜 예
# ✅ 좋은 예
username = "admin"
user_id = 1001
my_variable_name = "value"
# ❌ 나쁜 예
2nd_user = "bob" # 숫자로 시작
user-name = "alice" # 하이픈 사용 불가
if = "value" # 예약어 사용 불가
MyVariable = "hello" # 일반 변수는 카멜 케이스 피하기
8️⃣ 출력과 문자열 포맷팅 📝
기본 출력
print("파이썬 웰컴")
print('파이썬 "매우" 쉽습니다')
print("파이썬", "출력", "테스트")
이스케이프 코드 (Escape Codes)
| 코드 | 설명 | 예시 |
|---|---|---|
\n |
줄바꿈 | "Hello\nWorld" |
\t |
탭 | "Hello\tWorld" |
\\ |
백슬래시 | "c:\\path" |
\' |
작은따옴표 | "I\'m" |
\" |
큰따옴표 | "Say \"Hi\"" |
문자열 포맷팅 3가지 방식
📌 방식 1: % 연산자 (구식)
name = "atfield"
age = 100
print("내 이름은 %s입니다." % name)
print("내 이름은 %s이고 나이는 %d살입니다." % (name, age))
📌 방식 2: format() 메서드
name = "atfield"
age = 100
# 기본 사용
print("내 이름은 {}이고 나이는 {}살입니다.".format(name, age))
# 인덱스 사용
print("내 이름은 {1}이고 나이는 {0}살입니다.".format(age, name))
# 키워드 인자
print("내 이름은 {n}이고 나이는 {a}살입니다.".format(a=age, n=name))
📌 방식 3: f-string ⭐ (추천!)
name = "atfield"
age = 100
print(f"내 이름은 {name}이고 나이는 {age}살입니다.")
💡 팁: f-string이 가장 직관적이고 빠르므로 현대 파이썬 개발에서 권장됩니다!
사용자 입력 받기
name = input("이름을 입력하세요: ")
phone = input("번호를 입력하세요: ")
age = int(input("나이를 입력하세요: "))
print(f"{name}의 전화번호는 {phone}입니다.")
print(f"나이: {age}살")
print(type(name)) # <class 'str'>
print(type(age)) # <class 'int'>
9️⃣ 주요 데이터 구조: 리스트 🍎
리스트란?
파이썬에서 가장 자주 사용되는 데이터 구조입니다. 순서가 있고 원소는 인덱스(0부터 시작)로 접근합니다.
선언과 접근
fruits = ["사과", "바나나", "오렌지"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "안녕", 3.14, True]
print(fruits[0]) # 사과 (첫 번째)
print(fruits[1]) # 바나나 (두 번째)
print(fruits[2]) # 오렌지 (세 번째)
print(fruits[-1]) # 오렌지 (마지막)
리스트 반복문
fruits = ["사과", "바나나", "오렌지"]
# 방법 1: for in 반복
for fruit in fruits:
print(f"과일: {fruit}")
# 방법 2: 인덱스로 반복
for i in range(len(fruits)):
print(f"{i+1}번째 과일: {fruits[i]}")
# 방법 3: enumerate 사용 (권장)
for i, fruit in enumerate(fruits):
print(f"{i+1}번째 과일: {fruit}")
리스트 길이
fruits = ["사과", "바나나", "오렌지"]
print(len(fruits)) # 3
리스트 요소 수정
my_list = [10, 20, 30, 40, 50]
my_list[1] = 25 # 두 번째 요소 수정
my_list[4] = 100 # 다섯 번째 요소 수정
print(my_list) # [10, 25, 30, 40, 100]
리스트 결합
old_list = [5, 6, 7]
new_list = [1, 2, 3, 4]
result = old_list + new_list
print(result) # [5, 6, 7, 1, 2, 3, 4]
리스트 요소 추가 및 삭제
my_list = [10, 20, 30, 40, 50]
# 추가
my_list.append(60) # 끝에 60 추가
my_list.insert(1, 15) # 인덱스 1에 15 삽입
# 삭제
my_list.remove(20) # 값 20 삭제
del my_list[0] # 첫 번째 요소 삭제
popped = my_list.pop() # 마지막 요소 삭제 및 반환
print(my_list)
리스트 주요 메서드
| 메서드 | 설명 | 예시 |
|---|---|---|
append(x) |
끝에 x 추가 | lst.append(4) |
extend(iter) |
여러 값 추가 | lst.extend([4, 5]) |
insert(i, x) |
i 위치에 x 삽입 | lst.insert(2, 'a') |
remove(x) |
첫 x 제거 | lst.remove(3) |
pop([i]) |
i 위치 제거+반환 | lst.pop() |
clear() |
전체 삭제 | lst.clear() |
index(x) |
x의 인덱스 반환 | lst.index(2) |
count(x) |
x의 개수 반환 | lst.count(2) |
sort() |
정렬 | lst.sort() |
reverse() |
뒤집기 | lst.reverse() |
copy() |
복사 | new_lst = lst.copy() |
📊 실습: 학생 성적 처리
# 5명의 학생 성적을 입력받아 최대, 최소, 평균, 80점 이상 인원 계산
STUDENTS = 5
lst = []
for i in range(STUDENTS):
value = int(input(f"{i+1}번째 학생의 성적을 입력하세요: ")) #int로 감싸서 오류 방지
lst.append(value)
print(f"최대 점수: {max(lst)}")
print(f"최소 점수: {min(lst)}")
print(f"평균 점수: {sum(lst)/len(lst):.2f}")
count = sum([1 for score in lst if score >= 80])
print(f"80점 이상 학생 {count}명입니다.")
🔟 주요 데이터 구조: 딕셔너리
딕셔너리란?
키-값 쌍으로 데이터를 저장합니다. JSON과 유사하며, 빠른 검색과 수정에 최적화됩니다.
생성과 접근
person = {"name": "John", "age": 30, "city": "New York"}
print(person)
# 직접 접근 (키가 없으면 KeyError)
print(person["name"]) # John
print(person["age"]) # 30
# get() 메서드 (안전한 방법)
print(person.get("name", "없음")) # John
print(person.get("email", "없음")) # 없음
키-값 반복하기
person = {"name": "John", "age": 30, "city": "New York"}
# 모든 키
print(person.keys()) # dict_keys(['name', 'age', 'city'])
# 모든 값
print(person.values()) # dict_values(['John', 30, 'New York'])
# 모든 키-값 쌍
print(person.items()) # dict_items([('name', 'John'), ('age', 30), ...])
# 반복문으로 출력
for key, value in person.items():
print(f"{key}: {value}")
요소 추가, 수정, 삭제
person = {"name": "John", "age": 30}
# 추가
person["email"] = "john@example.com"
# 수정
person["age"] = 31
# 삭제
del person["email"]
removed_age = person.pop("age") # 값도 함께 반환
print(person)
딕셔너리 키 사용 가능 타입
| ✅ 사용 가능 | ❌ 사용 불가 |
|---|---|
| 문자열 (str) | 리스트 (list) |
| 숫자 (int, float) | 딕셔너리 (dict) |
| 튜플 (tuple) | 집합 (set) |
☕ 실습: 커피 주문 프로그램
menus = {"아메리카노": 4000, "카페라떼": 4500, "카푸치노": 5000}
order_list = []
total_price = 0
print("===== 메뉴 =====")
for menu, price in menus.items():
print(f"{menu}: {price}원")
print("\n주문을 시작합니다. (종료는 q 입력)\n")
while True:
selected_menu = input("주문할 메뉴를 입력하세요: ")
if selected_menu == "q":
print("✅ 주문을 완료합니다.\n")
break
price = menus.get(selected_menu)
if price:
order_list.append(selected_menu)
total_price += price
print(f"✔️ {selected_menu} {price}원이 추가되었습니다.\n")
else:
print(f"❌ {selected_menu}는 메뉴에 없습니다.\n")
print(f"📋 선택한 메뉴: {order_list}")
print(f"💰 총 금액: {total_price}원\n")
money = int(input("지불할 금액을 입력하세요: "))
change = money - total_price
if change >= 0:
print(f"✅ 결제 완료!")
print(f"거스름돈: {change}원")
else:
print(f"❌ 돈이 {abs(change)}원 부족합니다.")
1️⃣1️⃣ 파일과 디렉터리 제어
기본 함수들
import os
# 현재 작업 디렉터리 확인
current_dir = os.getcwd()
print(f"현재 디렉터리: {current_dir}")
# 파일인지 여부 확인
if os.path.isfile("example.txt"):
print("✅ example.txt는 파일입니다.")
else:
print("❌ example.txt는 파일이 아닙니다.")
# 디렉터리인지 여부 확인
if os.path.isdir("example_folder"):
print("✅ example_folder는 디렉터리입니다.")
else:
print("❌ example_folder는 디렉터리가 아닙니다.")
디렉터리 내용 조회
import os
# 현재 디렉터리 내용
entries = os.listdir(".")
print("현재 디렉터리 내용:")
for entry in entries:
print(f" - {entry}")
# 상위 디렉터리 내용
parent_entries = os.listdir("../")
print("\n상위 디렉터리 내용:")
for entry in parent_entries:
print(f" - {entry}")
디렉터리 재귀 탐색
import os
# 특정 디렉터리부터 모든 하위 디렉터리와 파일 탐색
start_path = "." # 현재 디렉터리부터 시작
for dirpath, dirnames, filenames in os.walk(start_path):
print(f"\n경로: {dirpath}")
print(f"하위 디렉터리: {dirnames}")
print(f"파일: {filenames}")
Raw String 사용법
import os
# Windows 경로를 다룰 때 r"" 사용
windows_path = r"C:\Users\YourName\Documents\file.txt"
linux_path = r"/home/user/documents/file.txt"
# 백슬래시를 그대로 사용 가능
print(windows_path) # C:\Users\YourName\Documents\file.txt
print(linux_path) # /home/user/documents/file.txt
파일 존재 확인 및 생성
import os
file_name = "test.txt"
if os.path.isfile(file_name):
print(f"{file_name} 파일이 존재합니다.")
else:
print(f"{file_name} 파일이 없습니다.")
dir_name = "my_folder"
if os.path.isdir(dir_name):
print(f"{dir_name} 디렉터리가 존재합니다.")
else:
print(f"{dir_name} 디렉터리가 없습니다.")
1️⃣2️⃣ 파이썬 라이브러리 설치
pip을 이용한 라이브러리 설치
# Python 버전 확인
python --version
# 단일 라이브러리 설치
pip install requests
pip install beautifulsoup4
pip install paramiko
# 여러 라이브러리 동시 설치
pip install requests beautifulsoup4 paramiko
# 특정 버전 설치
pip install requests==2.28.0
# 설치된 라이브러리 확인
pip list
📝 핵심 요약 ✅
오늘 강의에서 배운 것
- 🐍 파이썬의 역사, 버전 차이 (2 vs 3)
- 📊 기본 문법: 변수, 타입, 타입 변환
- 📋 리스트: 생성, 접근, 수정, 삭제, 주요 메서드
- 📚 딕셔너리: 키-값 관리, 반복, 응용
- 🔧 파일/디렉터리: os 모듈, 탐색, 체크
- 🔒 보안에서의 파이썬 활용
내일도 de gaja
'SK Shieldus Rookies 29' 카테고리의 다른 글
| [SK shieldus Rookies 29기] 6일차 (0) | 2025.12.04 |
|---|---|
| [SK shieldus Rookies 29기] 5일차 (0) | 2025.12.04 |
| [SK shieldus Rookies 29기] 3일차 (0) | 2025.12.04 |
| [SK shieldus Rookies 29기] 2일차 (0) | 2025.12.04 |
| [SK shieldus Rookies 29기] 1일차 (0) | 2025.12.04 |