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

­강지윤·2025년 3월 31일
post-thumbnail

👣 AI부트캠프를 시작하게 된 이유

올해 2월에 대학원을 졸업하고, 앞으로의 진로에 대한 고민이 많아지는 시기를 보내고 있었다. 졸업 후에 바로 취업을 해야할까, 혹은 어떤 분야로 가는 것이 나에게 맞을까 등등 다양한 고민이 있었다. 사실 긴 기간을 공부하다보니, 이제는 회사에 들어가서 실무경험을 쌓는 것도 나쁘지 않겠다는 생각도 있었다.

그렇지만 결론적으로 AI부트캠프를 선택하게 된 것은 대학원 논문이 가장 큰 계기가 되었다. 논문의 내용을 짧게 이야기 하면, 생성형 AI를 활용해서 학습자 데이터 기반 맞춤형 수업 설계를 지원하는 내용인데, chatGPT가 세상에 나오지 않았더라면 나의 논문도 존재할 수 없을 정도로 생성형 AI가 너무나 중요한 화두 속에 있었다.

이처럼, 현 시대를 살아가면서 어느 분야에 속해있든지 기술적인 발전에 따라 본질은 변하지 않더라도, 그 속성과 방식은 계속해서 변해간다. 특히 오늘날에는 그 발전의 속도가 모든 사람이 체감할 수 있을 정도로 빠르다. 그 중심에는 생성형 인공지능이 자리매김하고 있으며, 각자가 속한 분야에서 더욱 성장하기 위해서는 그 발전의 흐름을 읽을 수 있는 사람이 되어야 한다.

📚회고 구성 목차

1️⃣ LEARN
1) 지난 일주일 동안 가장 인상 깊었던 배움
2) 그 배움까지 다가가는데 어떤 어려움이 있었는지

2️⃣FINDINGS & FEELINGS
:그 과정에서 나는 무엇을 깨달았고, 어떤 감정/생각이 들었는지?

3️⃣ RESULT
: 결과적으로, 현재 나의 상태는?

4️⃣ HOW TO SOLVE
: 이 상태에서 다음 일주일을 더 잘 보내려면 어떻게 해야 할까?

1️⃣ LEARN

  1. 지난 일주일동안 가장 인상 깊었던 배움

첫 주는 파이썬에 대한 강의가 진행되었다. 파이썬을 아주 잠깐 대학원 수업 때 사용한 적이 있지만, 사실상 이렇게 하나하나 문법을 배운 것은 처음이었다. 그래서, 사실 인상 깊었던 부분이라고 하면…전체 다라고 해도 될 것 같다..

💡 그 중에서도 가장 인상적인 부분을 정리하자면… (아주 사소할 수 있음)

1. Dictionary 생성 함수, 조회 및 변경
2. 난수 (random.randint)
3. 컴프리헨션 문법

1. Dictionary 생성 함수, 조회 및 변경

1-1. 함수를 쓰면 보다 쉽고 빠르게 생성할 수 있는 것

d3= dict(이름="홍길동", 나이=30, 주소="서울시 금천구", 취미=["게임", "야구"])
d3

{'이름': '홍길동', '나이': 30, '주소': '서울시 금천구', '취미': ['게임', '야구']}

1-2. 변경하거나 추가하고 싶을 때 똑같이 쓰면 되는 것

#조회
d3["나이"]
#변경(그냥 추가하면 됨)
d3['전화번호']= "01"

{'이름': '홍길동',
 '나이': 30,
 '주소': {'시': '서울시', '구': '금천구'},
 '취미': ['게임', '야구'],
 '전화번호': '01'}

2. 난수(random.randint) : 그냥 랜덤하게 나와서 신기하다..

import random
random.randint(10, 20)  # 시작(10) ~ 끝(20) 범위 안에 있는 임의의 정수(난수-random값)를 반환.

3. 컴프리헨션

코드를 간편하게 작성할 수 있도록 만들어서 유용하게 쓸 수 있을 것 같다. 처음에는 v 안에 또 v 가 있고, 그 뒤에 if 구문을 바로 붙인다고 생각하면 뭔가 복잡해 보이지만 시간이 지날수록 익숙해졌다.

#컴프리헨션 사용 안했을 때
result = []
for v in l:
    if v % 2 == 0:
        result.append(v)
result # mapping 을 컴프리헨션 문법으로 구현
l = [1, 2, 3, 4, 5, 6]

# filtering을 컴프리헨션 문법으로 구현
result4 = [v*10 for v in l if v % 2 == 0]
result4

4. local 변수 & global 변수

처음에는 global 변수라고 해서, 엄청나게 대단한 특성을 가진 변수라고 생각했는데, 코드 예시를 보니 왜 그렇게 표현했는지 단번에 알 수 있었다. 말 그대로 global 변수는 함수 밖에서 선언한 것이고, local 변수는 함수 안에서 선언된 것이라, 함부로 global 변수는 변경하지 않게 된다.

g_var =10 #global 변수 : 함수 밖에서 선언
def func():
    local_var = 100 #local 변수 :함수 안에서 선언
    g_var = "안녕하세요." #local 변수로 선언 

    print(local_var)
    print(g_var)

만약 변경하고 싶다면!

g_var =10 #global 변수 : 함수 밖에서 선언
def func():
    local_var = 100 #local 변수 :함수 안에서 선언
    global g_var #gloabl 변수 자체를 변경하고 싶다면, 앞에 먼저 global변수를 바꿀 것임을 명시해야함. 
    g_var = "안녕하세요." #local 변수로 선언 

    print(local_var)
    print(g_var)

> 2) 그 배움까지 다가가는데 어떤 어려움이 있었는지
>

자료 구조와 제어문까지는 강사님께서도 차근차근 자세하게 설명해주시기도 하고, 이해하는데 큰 무리는 없었는데 벌써 목요일에 난관에 봉착했다..

어려움 1. 함수에는 헷갈리는 용어가 너무 많다!

예를 들면, Parameter와 Argument는 어떤 차이가 있는가! 그래서, 한번 구글링을 해보았다.

💡Parameter(매개변수) vs. Argument(전달인자)

  • 파라미터는 함수 정의에서 정의된 변수다; 파이썬 오피셜 문서에서는 '함수 정의에서 함수가 받을 수 있는 인자를 지정하는 이름 붙은 엔티티'라고 한다.
  • 아규먼트는 함수를 호출할 때 실제로 함수에 전달되는 이다.
  • 그러니까 아규먼트를 넣어서 함수를 호출하면 아규먼트의 값을 파라미터(매개변수)에 할당한다라고 생각해도 좋겠다.

출처 : [파이썬] Parameter 와 Argument 의 차이가 뭐예요?]

또 다른 예시로는,,

💡함수(function) vs. 메소드(Method)

  • 함수의 기본 구조: 함수명()
  • 메소드의 기본 구조: object.method_name()
  • 함수는 함수 이름을 통해 사용할 수 있다.
  • 함수 예) print(), type(), str(), int(), bool(),
  • 함수의 값을 변수에 대입할 수 있다. 👉🏻 output = function_name(input)
  • 메소드는 object(객체)와 연관되어 사용된다. → 사용하고자 하는 대상이 . 으로 연결되어있어야함
  • str,float,list와 같은 자료형은 모두 객체이므로 이러한 자료형과 연관되어 사용되는 것은 메소드로 볼 수 있다.
  • 메소드 예) .split() , .append() 등

출처: [[Python] 함수와 메소드의 차이점]

어려움 2. 객체지향..그 자체..

우리나라 말은 왜 이렇게 사람을 주눅들게 어려운 단어를 쓸까.. 객체지향이라고 하니까 마치 엄청 대단한 말 같지만 사실상 파이썬이라는 프로그램이 객체지향 그 자체를 말해준다.

"Python에서 모든 것은 객체(Object)이다. 그리고 대부분 객체는 속성(attributes)과 메서드(methods)를 갖는다."

파이썬에서 bool, 정수, 실수, 문자열, 배열, 딕셔너리, 함수, 모듈, 프로그램 등 모든 것은 객체이다.

참조  [Everything is an Object]

그러니까 이제 객체가 나오면,,,쫄지 않고 그냥 내가 보고 있는 것이 객체인가보다 생각하기로 했다.

즉, 객체지향 프로그래밍이란

Data와 Data를 처리하는 함수를 분리하지 않고 하나로 묶어 모듈로 개발하는 방식이다.

그래서 어떤 값들과 어떤 함수를 묶을 것인지를 class로 정의한다. 그리고 그 class로부터 객체(instance) 를 생성(instantiate)해서 사용한다는 점!

2️⃣FINDINGS & FEELINGS

: 그 과정에서 나는 무엇을 깨달았고, 어떤 감정/생각이 들었는지?

깨달은 점 1. 복습을 해야한다!

우선, 깨달은 점은 복습을 정말 열심히 해야겠다는 생각이 들었다. 수업시간에 설명해주신 부분이 이해가 되더라도 사실상 내 머릿 속에 남아있는게 없다면, 적용하는게 불가능하다. 주말이 지났다고, 바로 휘발 되어버리는 자랑스러운(?) 나의 뇌를 다시금 인지하게 되면서 결국엔 계속해서 복습하고 문제도 여러번 풀어봐야 할 것 같다.

깨달은 점 2. 아직까지 이 코드가 왜 필요한지 이해하지 못한다.

아무래도 코딩을 직접해보면서 이 코드를 쓰면 유용하겠다는 경험이 필요한데, 아직 그런 경험이 부족하다보니 사실상 이런 코드가 있구나하고 잘 기억해두는 것을 넘어서 어떻게 응용할 수 있을까하는 생각도 필요하다. 이제 점점 더 어려운 코드와 개념들을 배워나갈텐데, 지금까지 배운 코드들을 잘 써먹기 위해서는 “응용력”이 필요하다.

3️⃣ RESULT

: 결과적으로, 현재 나의 상태는?

그래서 나의 상태를 한마디로 표현하자면.. 큰일났다!!

더 열심히 공부해야겠다는 생각만 든다.. 사실 회고록을 쓰기 전까지는 약간의 회피를 하고 있었던 것 같은데, 회고록을 쓰면서 정리해둔 노션을 보면서 아직도 갈길이 너무나 멀다는 것을 직감하게 되었다.

4️⃣ HOW TO SOLVE

: 이 상태에서 다음 일주일을 더 잘 보내려면 어떻게 해야 할까?

하지만, 여기에 들어오면서 다짐한 것이 있다!

바로 “이 배움을 즐기자"는 것이다.

코딩은 나에게 원래도 어렵고, 계속해서 어려울 예정인데 이걸 너무 심각하게 생각했다가는 스트레스를 너무나 받을 것 같았다. 그래서, 오히려 이 어려움을 즐기기로 마음 먹었다.

다음으로는 실질적 실천방안이라고 한다면,

📚실질적 실천방안

1️⃣ 첫 번째, 수업 시간에 매우 집중하기!

→너무 당연한 이야기일 수도 있지만, 비전공자인 나에게 수업은 너무나 귀하고 새로움 그 자체이기 때문에 하나도 놓칠 수 없다.

2️⃣ 두 번째, 어려워하는 부분이 있다면, 꼭 표시해두기!

→ 복습할 때 참고하는 용도 (어디가 어려웠는지 까먹을 때가 많다!)

3️⃣세 번째, 키워드 기반으로 정리하기!

→ 개념이 방대할 때는 그 개념이 어떻게 파생되었는지 마인드맵이나 키워드로 정리해보는 시간이 필요하다. 이건 어떤 공부를 할때나 다 유용하게 썼던 방법인데 이번주엔 각 개념들 사이에 어떤 연결점이 있는지, 혹은 코드 구성이 어떻게 되는지 한눈에 볼 수 있는 정리해보고자 한다.

profile
Proverbs 2:20

1개의 댓글

comment-user-thumbnail
2025년 4월 2일

와 저도 Python 배우고 싶어졌어요:D

답글 달기