개발공부/SK Networks Family AI bootcamp 강의노트

[플레이데이터 SK네트웍스 Family AI캠프 10기] 2주차 회고

HyunJung_Jo 2025. 1. 17. 21:25

벌써 2주차이다. 파이썬 기초와 SQL 에 대해 배운 바, 이에 대해 정리하는 시간을 갖겠다. 내가 주로 잘 몰랐던 개념이나, 다시 상기하고 싶은 개념에 대해서 자세히 정리 및 실제 구현해보고, 이미 알았던 부분은 키워드만 적겠다.

 

1. 함수

  • 입출력 유무에 따른 함수의 경우의 수 4가지
  • 전역변수,지역변수 
  • 입력변수 디폴트값 설정 `def func(a=20):...`
  • 키워드 가변 파라미터 (*args tuple, **args dict) `def func(*args)`
  • 람다함수 :`lambda a,b: a+b`
  • closure : 내부함수 (함수 안의 함수)
  • call back : 함수를 입력인자로 전달
  • decorate: @decorator_func
# decoration
# 직접 짜본 코드
# 마나가 부족한 것을 알려주는 경고문구

def lack_of_mana(param_func):
    def wrapper(mana):
        if mana <=0:
            print('마나가 0입니다!!')
            return # 마나가 부족하면 함수 호출 중단
        param_func(mana)
    return wrapper

@lack_of_mana
def check_mana_capacity(mana):
    print(f'현재 마나는 {mana}입니다.')

mana=-10
check_mana_capacity(mana)

 

2. Iterator

- 대용량 데이터 처리시 효율적!!-

for문과 달리 한번에 하나의 요소만을 메모리에 유지하여 훨씬 효율적이며, 대용량 데이터 처리시 유용하다. 파이토치에서 많이 쓰인다.또한 지연 평가를 지원하는데, 계산 비용이 큰 작업 수행시 효율적이다.

# iteration
icecream = ['chocolate','vanilla','green tea']
iter_ic= iter(icecream)
for i in iter_ic:
    print(i)

next()로 이터레이터 결과값 도출시키다 index out of range되면 멈춤

class NumberIterator:
    def __init__(self, start, end):
        self.start = start
        self.end = end

    def __iter__(self):
        return self

    def __next__(self):
        if self.start > self.end:
            raise StopIteration
        else:
            num = self.start
            self.start += 1
            return num

# 숫자 이터레이터 사용 예제
my_iterator = NumberIterator(1, 5)
for num in my_iterator:
    print(num)

 

3. import

  • 외부 스크립트 1에서 함수 1을 만들어 스크립트2에서 함수1을 가져다 쓰는 방법

4. 깨알 팁 

  • annotation하는 법 : `def add(a:int, b:int): -> int ...` I/O type 힌트 주기
  • alias : import pandas as pd 
  • 테마 색상으로 데이터 타입 구별 (클래스,함수,변수,명령어 등)

5.class (상속)

# 아이스크림 클래스 기본속성: 차갑다, 부드럽다.
# 인스턴스 속성: 맛, 가격
class Icecream:
    temperature='cold'
    texture='soft'
    def __init__(self,flavor,price):
        self.flavor=flavor
        self.price = price
    def sell(self):
        print(f'{self.flavor}맛 아이스크림 가격은 {self.price}원입니다.')
    
choco_icecream = Icecream('choco',3000)
choco_icecream.sell()

class haagendazs(Icecream):
    def __init__(self, flavor, price,seller):
        super().__init__(flavor, price)
        self.seller = seller
    def describe_seller(self):
        print(f'{self.seller}에서 파는 아이스크림입니다.')

gs25_haagendazs = haagendazs('그린티',10000,'gs25')
gs25_haagendazs.sell() # sell() 함수 발동됨.
gs25_haagendazs.describe_seller()

6.private, public function

# 마나 사용
class Mana:
    def __init__(self,initial_mana=100):
        self.__mana = initial_mana
    def use_mana(self,amount):
        if self.__mana < amount:
            print('마나 부족해요.')
            self.__show_mana()
            return
        self.__mana -= amount
        self.__show_mana()

    def get_mana(self,amount):
        if self.__mana+amount > 100:
            print('마나 maximum 도달')
            self.__mana = 100
            self.__show_mana()
            return 
        self.__mana += amount
        self.__show_mana()

    def __show_mana(self):
        print(f'현재 마나양은 {self.__mana}입니다.')

athour_mana = Mana()
athour_mana.use_mana(10)
athour_mana.use_mana(30)
athour_mana.use_mana(50)
athour_mana.get_mana(30)
athour_mana.get_mana(100)
athour_mana.use_mana(110)

"""
현재 마나양은 90입니다.
현재 마나양은 60입니다.
현재 마나양은 10입니다.
현재 마나양은 40입니다.
마나 maximum 도달
현재 마나양은 100입니다.
마나 부족해요.
현재 마나양은 100입니다.
"""

7. magic method

__init__, __len__, __getitem__ , __call__ 함수들

 

8. 표준 라이브러리

  • collection.Counter() 클래스, dict를 상속받아 딕셔너리로 시퀀스형 데이터 값 갯수를 반환한다.
  • math.pi, e, log(), exp(), sqrt(),ceil(), floor(), pow()
  • td= datetime.now() -> td.year, td.month, day, hour, minute, second, microsecond,
  • td.date(), td.time(),td.weekday()
  • strftime (string format time): 날짜/시간 객체를 문자열로
  • strptime (string parse time) : 문자열을 날짜와 시간 객체로
  • timedelta 날짜나 시간에 대한 연산
  • dateutil 월 단위 연산가능
  • encode():str to byte /  decode() : byte to str 
드디어 파이썬이 끝났다. 아직도 많이 배워야할 것이 보인다. 나는 클래스까진 이해하고 왔는데, 데코레이터, 가변함수,상속, private, public 함수 등을 알 수 있어서 좋았던 시간이었다. 알려주신 공부법으로 직접적으로 내가 지지고 볶는 식으로 공부해보니 많이 배워지는 것을 느낀다.

9. RDB

  • 데이터 종류: 정형/반정형/비정형 , 요즘은 엄청나게 늘어나고 있는 비정형 데이터를 AI로 쉽게 다뤄지고 있음
  • DB 필요성: 실시간, 최신화, 공유, 내용참조, 논리적 독립성
  • DBMS: 디비버 app으로 dbms 접속하여 데이터 조회 및 조작 가능
  • RDB (관계형,schema) , NoSql (구조화 없음)

10. DB modeling

  • 업무파악 >
    설계 [개념 Data modeling (도식화) >
             논리 DM (데이터타입,관계도) >
             물리 DM (개체,인덱스 생성) ]
    > 구현
  • 실습했는데 이 부분은 따로 복습예정

11. DDL (Data Definition Language)

  • DB 생성, 수정, 삭제
  • create, alter, drop
  • 디비 생성,삭제는 중요한 문제이기에 신입이 DDL할 일은 별로 없다.
  • `create table mytable(id int unsigned auto_increment,...) 
    • auto_increment: 기존 id값보다 1이 큰 값을 id에 넣는 함수
    • unsigned: 양수 데이터만 쓰게 

12. DCL (Data Control Language,권한제어)

  • 계정 조회 `use mysql; select * from user;`
  • localhost: 외부 접속 불가 , %는 가능
  • 계정 생성: `create user 'test_id'@localhost identified by 'pw1234'`
  • 비번 변경: `set password for 'test_id'@localhost ='pw2345'`
  • 사용자 삭제 : drop user 'test_id'@localhost;
  • 계정 권한 주기 : `grant all previleges on DB_name.table_name to 'teset_id'@localhost`

13. DML (Data Manipulation Language)

  • 흔히 우리가 아는 select문이 여기에 해당함
  • select, insert, update, delete
  • `insert table (col1,col2) values(data1,data2)`
  • `select * from table where 1=1 and col1='test' ` => select문 쓸 때 where 1=1은 추가 조건 쉽게 관리 가능
  • `delete from table where 1=1 and name='test'` => delete 쓸 때 꼭 where 넣어주기, 안그러면 싹 사라
  • 줄 맞춰서 예쁘게 쓰는 연습!
  • `select * from DB where 1-1 order by col1` => 셀렉 쓸 땐 기준을 잡자
  • or  쓸 땐 괄호 항상 치기 (a or b)
SQL은 DDL,DCL,DML,TCL로 구성되어 있다. 이 중에 DDL은 테이블과 디비를 생성, 삭제,수정할 수 있으며 신입은 극히 하는 경우가 드물다. DCL은 권한 제어이며, DML은 데이터 조회, 삽입, 수정,삭제 등을 할 수 있다. 나는 흔히 실무에서 select문을 썼다. 그 외의 것은 별로 써본 적이 없다. 아무래도 신입이 디비를 직접적으로 만진다는 것엔 리스크가 따랐을 것이다. 이 기회에 디비를 SQL로 다루는 것에 대해 공부해 볼 수 있었고, 꿀팁도 배울 수 있었다. 

 


 

이상 2주차 공부 정리였다. 생각보다 정리해보니 참 많다. 언제 이렇게까지 시간이 흘렀나 싶고, 공부할 것이 천지라고 생각한다. 내가 겁없이 뛰어든 개발분야이니, 이제 마지막이라고 생각하면서 매진해보련다. 매일 공부하고, 익히고, 운동하면서 기나긴 백수기간을 벗어나고자 한다. 나 자신 화이팅!