thumbnail

멋쟁이사자처럼 그로스 마케팅 부트캠프 1기 수강 후기

멋쟁이사자처럼 그로스 마케팅 부트캠프 1기 수강후기

멋쟁이사자처럼 오늘 공부 후기 챌린지 - 그로스 마케팅 편

이런 고민을 하고 있다면, 지금 이 순간에도 멋쟁이사자처럼에서 그로스 마케팅 과정을 수강하며 자신만의 속도로 성장 중인 수강생들을 주목해보세요.


배우고 잊어버리는 건 누구나 겪는 일이에요. 하지만 멋쟁이사자처럼 부트캠프는 단순히 배우는 것에 그치지 않고, 배운 내용을 내 것으로 만드는 방법까지 고민하고 있어요. 그렇다면, 배운 것을 가장 효과적으로 습득하는 방법은 무엇일까요? 바로 기록하고 정리하는 것이죠. 배운 내용을 정리하고 기록하면, 기억은 오래 남고 실전에서도 활용할 수 있으니까요!

멋쟁이사자처럼 부트캠프는 수강생들이 배운 내용을 정리하고 공유할 수 있도록 TIL (Today I Learned) 블로그 챌린지를 진행하고 있어요. 그래서 오늘, 강사님과 멘토님에게 배운 내용을 체계적으로 기록하며 성장하고 있는 수강생의 이야기를 가져왔어요. 작고 사소해 보일지라도 배운 내용을 정리하고, 기록하면서 성장한 이들의 소중한 경험을 지금 확인해 보세요.


학습 목표

  • Python 기본 문법 이해

  • Python 제어문(조건문) 실습

  • Python 데이터 구조 실습

  • Python 함수, 클래스, 모듈과 패키지 실습

1. Python Grammer

1) Variable

Plaintext
# 정수형 변수
integer_var = 100
print(type(integer_var))  # 출력: <class 'int'>

# 실수형 변수
float_var = 25.4
print(type(float_var))  # 출력: <class 'float'>

# 문자열 변수
string_var = "Python"
print(type(string_var))  # 출력: <class 'str'>

# 불리언 변수
bool_var = True
print(type(bool_var))  # 출력: <class 'bool'>

 

2) Builit in Data type

Plaintext
# Numeric
int_num = 42 #정수
float_num = 3.14 #실수
complex_num = 1 + 2j #복소수

# Sequence
string_val = "Python is fun" #문자열
list_val = [1, 2, 3, 4, 5] #리스트 (순서o 변경o)
tuple_val = (1, 2, 3, 4, 5) #튜플 (순서o 변경x)

# Set
set_val = {1, 2, 3, 4, 5} #세트 (순서x 중복x)
set_val.add(6)

# Mapping
dict_val = {"name": "Alice", "age": 30} #딕셔너리 (key-value)

# Boolean
is_open = True #True or False
is_closed = False

# None
none_val = None

 

2. Conditional Statements

 

예제 2: 짝수와 홀수 판별

Plaintext
number = 7

if number % 2 == 0: # %: 나머지 //: 몫
    print(f"{number}는 짝수입니다.") # f-string: 문자열 안에 {변수} 삽입
else:
    print(f"{number}는 홀수입니다.")

 

#5. ROAS (광고 수익률) 분석

Plaintext
# 변수 설정
ad_spend = 800000  # 광고비 (원)
revenue = 4000000  # 광고를 통해 발생한 매출 (원)

# ROAS 계산 및 평가
if ad_spend > 0:
    roas = (revenue / ad_spend) * 100
    print(f"ROAS: {roas:.2f}%") # 2f: 소수점 둘째 자리까지 출력

    if roas >= 400:
        print("ROAS가 우수합니다. 광고 전략을 유지하세요.")
    elif 200 <= roas < 400:
        print("ROAS가 평균 수준입니다. 개선할 여지가 있습니다.")
    else:
        print("ROAS가 낮습니다. 광고 전략을 조정하세요.")
else:
    print("광고비가 0원이므로 ROAS를 계산할 수 없습니다.")

 

3. Python Data Structure

1) List [ ]

  • 리스트 생성 및 요소 접근

Plaintext
# 리스트 생성
campaigns = ["봄맞이 할인", "여름 세일", "가을 이벤트", "겨울 프로모션"]

# 리스트 인덱스 사용
print(campaigns[0])  # '봄맞이 할인'
print(campaigns[-1]) # '겨울 프로모션' (음수 인덱스는 뒤에서부터)

 

  • 리스트 요소 수정 및 추가

Plaintext
# 리스트 요소 변경
campaigns[1] = "여름 할인"
print(campaigns)  # ['봄맞이 할인', '여름 할인', '가을 이벤트', '겨울 프로모션']

# 리스트에 새로운 요소 추가 .append
campaigns.append("봄 시즌 프로모션")
print(campaigns)  # ['봄맞이 할인', '여름 할인', '가을 이벤트', '겨울 프로모션', '봄 시즌 프로모션']

 

  • 리스트 삭제

Plaintext
# 특정 요소 삭제
del campaigns[2]  # '가을 이벤트' 삭제
print(campaigns)  # ['봄맞이 할인', '여름 할인', '겨울 프로모션', '봄 시즌 프로모션']

# 리스트 전체 삭제 .clear
campaigns.clear()
print(campaigns)  # []

 

  • 리스트 for 반복문

Plaintext
# 리스트의 각 요소 출력
for campaign in campaigns:
    print(f"캠페인: {campaign}")

 

  • 리스트 슬라이싱

Plaintext
# 리스트 일부 가져오기
print(campaigns[1:3])  # 인덱스 1부터 3 이전까지의 요소 가져오기 => ['여름 할인', '겨울 프로모션']

 

2) Tuple ( )

Plaintext
# 튜플 생성
marketing_channels = ("Google Ads", "Facebook Ads", "Email Marketing")

# 요소 접근
print(marketing_channels[0])  # 'Google Ads'
print(marketing_channels[-1]) # 'Email Marketing'

# 튜플은 수정할 수 없음
marketing_channels[0] = "TikTok Ads"  # TypeError

 

  • 딕셔너리 생성 및 요소 접근

Plaintext
# 딕셔너리 생성
campaign_performance = {
    "봄맞이 할인": {"CTR": 0.12, "CR": 0.05},
    "여름 세일": {"CTR": 0.15, "CR": 0.07},
    "가을 이벤트": {"CTR": 0.08, "CR": 0.03}
}

# 특정 키의 값 조회
print(campaign_performance["봄맞이 할인"])  # {'CTR': 0.12, 'CR': 0.05}
print(campaign_performance["봄맞이 할인"]["CTR"])  # 출력: 0.12

 

  • 딕셔너리 요소 추가 및 수정

Plaintext
# 새로운 캠페인 데이터 추가
campaign_performance["겨울 프로모션"] = {"CTR": 0.10, "CR": 0.06}

# 기존 캠페인 데이터 수정
campaign_performance["봄맞이 할인"]["CTR"] = 0.13

 

  • 딕셔너리 for 반복문

Plaintext
for campaign, metrics in campaign_performance.items():
    print(f"{campaign}: 클릭률 {metrics['CTR']}, 전환율 {metrics['CR']}")

# 봄맞이 할인: 클릭률 0.12, 전환율 0.05
# 여름 세일: 클릭률 0.15, 전환율 0.07
# 가을 이벤트: 클릭률 0.08, 전환율 0.03

 

4) Set { }

Plaintext
# 집합 생성
active_users = {"user1", "user2", "user3"}
new_users = {"user2", "user3", "user4", "user5"}

# 합집합 (Union) |
all_users = active_users | new_users  # {'user1', 'user2', 'user3', 'user4', 'user5'}

# 교집합 (Intersection) &
common_users = active_users & new_users  # {'user2', 'user3'}

 

4. Loops

1) for 반복문

: 시퀀스의 각 항목에 대한 반복

Plaintext
# 리스트/튜플의 각 항목 출력
fruits = ["apple", "banana", "cherry"]

for fruit in fruits:
    print(fruit) # apple banana cherry
    
# 범위의 숫자 반복
for i in range(5):
	print(i) # 0 1 2 3 4
    
# 문자열의 각 문자 출력
word = "Python"
for letter in word:
    print(letter) # p y t h o n

# 딕셔너리의 키와 값 출력
student_scores = {"Sumi": 85, "Charls": 92, "Charlie": 78}
for student, score in student_scores.items():
    print(f"{student}: {score}")

 

2) while 반복문

: 조건문이 true일 동안 코드 반복

Plaintext
# 숫자 세기
count = 0
while count < 5:
    print(count)
    count += 1 # 0 1 2 3 4
    
# 사용자 입력에 따른 반복
response = ""
while response != "exit":
    response = input("종료하려면 'exit'를 입력하세요: ")
    print(f"당신의 입력: {response}")

 

3) 반복문 제어 키워드

  • break : 종료

  • continue : 건너뛰기

  • else : break로 종료되지 않았을 경우 = 반복문이 끝까지 정상 실행됨

예제 4: 피보나치 수열

Plaintext
a, b = 0, 1
while a < 100:
    print(a, end=' ') # end = '' : 한 줄로 출력 = print()
    a, b = b, a + b
print() # 0 1 1 2 3 5 8 13 21 34 55 89

 

예제 6: 중첩 반복문을 사용한 별 모양 출력

Plaintext
# 바깥쪽 반복문: 0부터 4까지 반복
for i in range(5):
    # 안쪽 반복문: 현재 i 값 + 1 만큼 '*' 출력
    for j in range(i + 1):
        print('*', end='')  # '*'를 출력하고 줄바꿈 없이 유지
    print()  # 안쪽 루프 종료 후 줄바꿈하여 다음 줄로 이동
# *
# **
# ***
# ****
# *****

 

예제 7: 반복문 in 리스트

Plaintext
numbers = [1, 2, 3, 4, 5]

squares = [n ** 2 for n in numbers]

print(squares) # [1, 4, 9, 16, 25]

 

예제 11: 무한 루프

Plaintext
# while True: 문에서 True는 항상 참(1)으로 평가되므로 루프가 계속 실행됨
while True:
    name = input("이름을 입력하세요 (종료하려면 'exit' 입력): ")

    if name == "exit":
        break

    print(f"안녕하세요, {name}!")

 

예제 15: 거꾸로 숫자 세기

Plaintext
for i in range(10, 0, -1): #10은 시작 값, 0은 종료 값(포함x), -1은 감소하는 간격
    print(i, end=' ')  # 10 9 8 7 6 5 4 3 2 1

 

5. Functions

Plaintext
def add(a, b): # a, b : 매개변수
    return a + b #결과를 반환하여 저장

result = add(3, 5) # 3, 5 : 인수
print(result)  # 출력: 8

 

Plaintext
def greet(name="Guest"): # name의 기본값 지정
    print(f"안녕하세요, {name}님!")

greet()       # 출력: 안녕하세요, Guest님!
# 기본값이 없으면 생략되거나 None
greet("Charls")  # 출력: 안녕하세요, Charls님!

 

* 가변 매개변수

Plaintext
# * : 인수 다수 받기
def add_all(*args): #모든 인수를 튜플 args에 저장
    total = 0
    for num in args:
        total += num
    return total

result = add_all(1, 2, 3, 4, 5)
print(result)  # 출력: 15

 

** 키워드 가변 매개변수

Plaintext
# ** : 키워드 인수(key:value) 받기
def print_kwargs(**kwargs): # 인수를 딕셔너리 kwargs에 저장
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_kwargs(name="Sumi", age=25, city="Seoul")

 

  • 람다 함수

Plaintext
add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

 

이때 add는 함수가 아니다!

람다 함수는 lamda 키워드를 사용해 정의된 함수, 즉 이름이 없는 함수.

위 예제의 경우 람다 함수를 변수 add에 할당하여 add를 함수처럼 동작할 수 있는 역할을 부여.

 

  • 재귀 함수

Plaintext
def factorial(n):
    if n == 1:
        return 1 # 종료 조건 필수
    else:
        return n * factorial(n - 1) # 함수 안에 자기 자신 포함

print(factorial(5))  # 출력: 120

 

6. Class

Plaintext
 class Person:
    def __init__(self, name, age):
# __init__ : 클래스 초기 속성 설정 메소드
# self : 인스턴스를 가리키는 참조 변수 (꼭 self여야 되는 건 아니지만 관습)
        self.name = name # 클래스의 name 속성에 __init__의 매개변수 name을 저장하겠다!
        self.age = age

    def greet(self):
        print(f"안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}살입니다.")

# 인스턴스(객체) 생성
person1 = Person("Sumi", 30) # __init__ 메서드에 인수 전달
person2 = Person("Charls", 25)

# 인스턴스 변수 접근
print(person1.name, person2.age) # Sumi 30

# 메서드 호출
person1.greet()  # 출력: 안녕하세요, 제 이름은 Sumi이고, 나이는 30살입니다.
person2.greet()  # 출력: 안녕하세요, 제 이름은 Charls이고, 나이는 25살입니다.

 

  • 부모 클래스와 서브 클래스

Plaintext
class Animal: # 기본 클래스
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Cat(Animal): # 서브 클래스1
    def speak(self):
        return f"{self.name}가 야옹합니다."

class Dog(Animal): # 서브 클래스2
    def speak(self):
        return f"{self.name}가 멍멍합니다."

 

 

  • 클래스 메서드와 정적 메서드

Plaintext
  class MyClass:
    class_variable = "클래스 변수"

    def __init__(self, value):
        self.instance_variable = value

    @classmethod
    def class_method(cls):
        return cls.class_variable

    @staticmethod # cls, self와 독립적인 메서드
    def static_method():
        return "정적 메서드"

# 클래스 메서드 호출
print(MyClass.class_method())  # 출력: 클래스 변수

# 정적 메서드 호출
print(MyClass.static_method())  # 출력: 정적 메서드

 

 

  • 데이터 캡슐화 (Private Variable)

Plaintext
class EncapsulatedClass:
    def __init__(self, value):
        self.__hidden_variable = value  # __(언더바 두 개): 프라이빗 변수

    def get_hidden_variable(self): # get_: 프라이빗 변수 값을 가져옴
        return self.__hidden_variable

    def set_hidden_variable(self, value): #set_: 프라이빗 변수 값을 변경함
        self.__hidden_variable = value

# 인스턴스 생성
obj = EncapsulatedClass(10)

# 프라이빗 변수 접근
print(obj.get_hidden_variable())  # 출력: 10
obj.set_hidden_variable(20)
print(obj.get_hidden_variable())  # 출력: 20

# 직접 접근하면?
print(obj.__hidden_variable) # Error

 

7. Module & Package

Plaintext
# my_class.py 파일을 import
from my_class import MyClass # MyClass는 my_class.py 파일 속 클래스 이름

 

  • To Do list

  • 로또 번호 발생기

  • 궁합 계산


공부는 배울 때 끝나는 게 아니라, 되새기고 활용할 때 완성돼요. 그런 의미에서 오늘 소개한 이야기는 단순한 후기가 아니라, 학습을 더 효과적으로 만들고 나만의 것으로 만드는 과정이었을 거예요. 여러분도 배운 내용을 정리하고, 더 오래 기억하는 습관을 만들어 보세요. 작은 차이가 결국 큰 결과를 만들 테니까요!

내가 배운 것을 글로 정리하는 것이 처음에는 어렵게 느껴질 수도 있지만 멋쟁이사자처럼과 함께 꾸준히 기록하다 보면 스스로 변화하고 있다는 걸 깨닫게 될 거예요. 자! 이제 여러분 차례에요. 언제나 여러분의 곁에는 멋쟁이사자처럼이 있으니 고민하지 말고 배움을 기록하고, 성장의 발자취를 남겨보세요!

홈 : 멋사 부트캠프

멋쟁이사자처럼의 13년 교육 노하우로 IT 취업의 꿈을 현실로!

홈 : 멋사 부트캠프