K-뷰티, 새로운 도약의 기로에 설까?

K-뷰티, 새로운 도약의 기로에 서다

최근 K-뷰티 산업이 다시 한 번 주목받고 있습니다. 투자자로서 산업을 들여다보면서 느끼는 점은, 이 산업이 단순한 유행이 아니라 진지한 구조적 전환의 시기를 맞이하고 있다는 것입니다. 과거엔 중국 의존도가 높았지만, 지금은 미국, 일본, 유럽, 중동, 동남아시아 등으로 수출 시장이 빠르게 확장되고 있으며, 기술력 중심의 브랜드와 ODM 기업의 역할이 그 어느 때보다도 중요해지고 있습니다.

이러한 변화는 단순한 수출 대상국의 분산을 넘어, 제품의 본질과 소비자 인식의 패러다임 전환을 동반하고 있습니다. 소비자들은 이제 브랜드 이미지보다 성분, 효능, 안전성, 지속가능성 등 보다 구체적이고 과학적인 기준에 따라 화장품을 선택합니다. 이로 인해 뷰티 산업은 점차 헬스케어와 웰니스 산업의 경계에 다가가고 있으며, 이는 K-뷰티 기업들에게 도전이자 기회가 되고 있습니다.


🌍 중국 중심에서 벗어난 K-뷰티의 확장 전략

불과 몇 년 전만 해도 K-뷰티의 대부분은 중국 시장에 의존하고 있었습니다. 하지만 2017년 사드(THAAD) 사태 이후 중국 정부의 규제와 비공식적인 불매 분위기, 그리고 현지 로컬 브랜드의 급성장으로 인해 중국 시장의 성장세가 둔화되었습니다. 이에 대응하여 국내 화장품 기업들은 전략적으로 수출 시장을 다변화하기 시작했고, 이 전략은 점차 가시적인 성과를 내고 있습니다.

2024년 기준, 미국은 한국 화장품의 최대 수출국으로 부상했으며, 일본, 유럽, 중동, 동남아 등에서도 점유율이 꾸준히 증가하고 있습니다. 이 흐름은 단순한 지역 분산이 아니라, 글로벌 소비자의 니즈에 적응하는 전략 전환이라고 볼 수 있습니다. 특히 미국 소비자들은 성분과 효능에 민감하고, 일본은 기능성과 심플함을, 유럽은 지속가능성과 친환경을, 중동은 고급화와 할랄 인증을 중요시하는 만큼, 지역별 소비 특성을 정밀하게 반영한 제품 기획이 요구되고 있습니다.

또한, 유통 방식도 함께 변화하고 있습니다. 과거에는 백화점 중심의 유통이 지배적이었다면, 현재는 아마존, 큐텐, 틱톡, 올리브영 등 디지털 플랫폼 기반의 유통이 핵심 채널로 자리 잡았습니다. 이는 신생 브랜드와 중소기업에게도 글로벌 확장 기회를 제공하고 있으며, 소비자와의 직접 소통(D2C, Direct to Consumer)을 통해 충성도 높은 고객층을 확보할 수 있게 해줍니다.

📌 수출 비중 변화 요약

수출 대상2016년 비중 (%)2024년 비중 (%)변화 요인
중화권7034지정학 리스크, 로컬 브랜드 부상, 판로 다변화 필요성
미국-18.7디지털 유통 확장, 성분 기반 소비 문화, 더마 브랜드 인기
일본-9.5K-컬처 인기, 1020 여성 중심 소비 확대
유럽--친환경 원료, 지속가능한 패키징 요구 증가
동남아--K-팝/드라마 기반 한류 확산, SNS 유통 효과

🔬 브랜드에서 기술 중심으로: 산업의 주도권 이동

K-뷰티는 이제 단순히 ‘예쁘게 보이게 만드는 브랜드’가 아니라, ‘과학적으로 효능이 입증된 기술력’이 중심이 되는 산업으로 바뀌고 있습니다. 이는 소비자들의 뷰티에 대한 인식이 건강과 웰빙 중심으로 이동하면서 나타나는 현상이며, 국내외 기업들은 이에 대응하기 위해 적극적으로 연구개발(R&D)을 강화하고 있습니다.

뿐만 아니라, 피부과학 기반의 더마 코스메틱 브랜드가 급부상하고 있고, PDRN, 마이크로바이옴, 레티놀, 펩타이드 등 특정 성분 중심의 구매 트렌드가 강화되면서 ‘기능 중심 스킨케어’ 시장이 전체 시장의 중심으로 이동하고 있습니다. K-뷰티는 이러한 흐름을 가장 잘 반영하는 산업군 중 하나로 평가받고 있으며, 전 세계 소비자들에게 과학 기반 화장품이라는 인식을 심어주고 있습니다.


📊 투자자로서 바라본 K-뷰티 기업들

산업을 공부하면서, 관련 기업들을 투자 관점에서 바라보는 것도 흥미로운 접근입니다. 화장품 산업은 전통적인 경기민감 소비재로 여겨졌지만, 최근에는 디바이스, 바이오, 헬스케어 요소가 결합되며 투자 테마로도 새롭게 조명받고 있습니다.

📈 핵심 기업 비교 요약표

기업명시가총액2024년 매출 성장률영업이익률해외 매출 비중특징 및 투자 포인트
아모레퍼시픽약 8.0조 원+5.9%5.8%44%턴어라운드 기대, 북미 매출 확대, 브랜드 리뉴얼 진행 중
에이피알약 5.9조 원+38.0%17.0%55%디바이스 + 화장품 생태계, D2C 기반 글로벌 확장 중
LG생활건강약 5.0조 원---럭셔리 중심, 리뉴얼 초기 단계, 중국 리스크 여전
코스맥스비공개+21.9%8.1%46%인디 브랜드 성장 기반, ODM 생태계 주도, 글로벌 공장 확대

특히 에이피알과 같은 기술 중심 기업은 하드웨어+소모품 모델을 도입하며 고객 생애 가치를 극대화하고 있고, 코스맥스는 화장품 산업에서 ‘TSMC 같은 역할’을 하고 있다는 평가도 있습니다. 한편, LG생활건강과 아모레퍼시픽은 여전히 중국과 면세점 비중이 높지만, 구조조정을 통해 새로운 성장의 계기를 찾고 있습니다.


🔭 K-뷰티의 미래를 낙관하는 이유

  1. 수출 시장의 실질적 다변화가 가시화되고 있으며, 글로벌 브랜드로의 전환이 빠르게 진행 중입니다.
  2. 디지털 중심의 유통 구조는 진입장벽을 낮추고, 브랜드가 직접 소비자와 소통하며 정체성을 강화할 수 있는 환경을 제공합니다.
  3. 기술 중심 트렌드에 대응하는 국내 기업들의 R&D 경쟁력은 글로벌 시장에서도 높은 평가를 받고 있으며, 더마 코스메틱과 뷰티 디바이스의 융합이 새로운 표준이 되어가고 있습니다.
  4. ESG, 클린뷰티, 지속가능성에 대한 투자 확대는 중장기적으로 K-뷰티가 글로벌 시장에서 생존하고 성장할 수 있는 기반이 됩니다.

투자자로서 바라볼 때, K-뷰티 산업은 현재 두 번째 황금기를 향한 출발점에 서 있으며, 산업 구조의 혁신과 글로벌 전략의 성과가 본격적으로 나타나고 있는 시기입니다. 향후 2~3년간 이 산업의 흐름을 주의 깊게 관찰하는 것은 산업 분석뿐 아니라 향후 진로 설정, 커리어 전략 수립에도 매우 유의미한 경험이 될 것입니다.

📚 참고자료 및 인사이트 확장

보다 생생한 인사이트를 원한다면 다음 콘텐츠들을 참고해보세요. 뷰티 산업 종사자 및 애널리스트들의 실제 시각과 산업 구조에 대한 깊이 있는 설명을 들을 수 있습니다.

뷰티 초고수가 들려주는 한국 화장품 산업 이야기 | 뷰티 1부

브랜드가 강자가 아닌 이유? 뷰티 2부

프랑스 명품도 눌러버린 한국 화장품, 폭발적으로 성장 중 | 슈퍼맨 이주호

의외로 잘 모르는 한국 화장품의 글로벌 성공 비결 | 박종대 위원

중국이 K-뷰티 당장 쫓아오지 못하는 이유 | 시그나이트 파트너스 이새봄 수석

TIGER 화장품 ETF 분석

📊 TIGER 화장품 ETF 구성 종목 (2025년 7월 기준)

순위종목명비중
1에이피알10.56%
2LG생활건강10.40%
3아모레퍼시픽10.28%
4달바글로벌9.70%
5파마리서치9.60%
6한국콜마9.43%
7실리콘투9.43%
8코스맥스9.41%
9브이티6.71%
10코스메카코리아3.66%

수익율 비교

PYTHON
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from curl_cffi import requests
import yfinance as yf

# —————————————————————————————————————————————
# 1. 글로벌 지수 데이터 조회
# —————————————————————————————————————————————
def fetch_market_data(tickers, start_date, end_date, session):
    """
    yfinance를 이용해 글로벌 지수(종가) 데이터를 내려받습니다.
    :param tickers: 조회할 심볼 리스트 (예: ['^GSPC', '^KS11'])
    :param start_date: 조회 시작일 (YYYY-MM-DD)
    :param end_date: 조회 종료일 (YYYY-MM-DD)
    :param session: curl_cffi requests 세션
    :return: 날짜 인덱스에 맞춰진 DataFrame (columns=['S&P500','KOSPI'])
    """
    raw = yf.download(
        tickers,
        start=start_date,
        end=end_date,
        session=session,
        repair=True
    )['Close']
    raw.columns = ['S&P500', 'KOSPI']
    # 인덱스를 열로 올리고 이름 변경
    df = raw.reset_index().rename(columns={'index': 'Date'})
    return df

# —————————————————————————————————————————————
# 2. 로컬 엑셀 데이터 로드 및 전처리
# —————————————————————————————————————————————
def load_and_preprocess_excel(path, sheet, header_row=5):
    """
    out.xlsx의 PRICE_DATA 시트를 읽어온 뒤,
    필요한 열만 남기고 날짜/숫자 타입으로 변환합니다.
    :param path: 엑셀 파일 경로
    :param sheet: 시트 이름
    :param header_row: 실제 데이터 헤더가 시작되는 행(0-based)
    :return: 전처리된 DataFrame (columns=['구분','시장가격','기초지수'])
    """
    df = pd.read_excel(path, sheet_name=sheet, header=header_row)
    # 비어 있는 열 제거
    df = df.dropna(axis=1, how='all')
    # 핵심 열 선택
    df = df[['구분', '시장가격', '기초지수(WISE 화장품)']]
    # 타입 변환
    df['구분'] = pd.to_datetime(df['구분'])
    df['시장가격'] = pd.to_numeric(df['시장가격'], errors='coerce')
    df['기초지수(WISE 화장품)'] = pd.to_numeric(df['기초지수(WISE 화장품)'], errors='coerce')
    # 2023-01-01 이후 데이터만 필터
    df = df[df['구분'] >= '2023-01-01'].copy()
    # ETF close 컬럼 이름 정리
    df.rename(columns={'기초지수(WISE 화장품)': 'tiger화장품'}, inplace=True)
    # 인덱스를 날짜로 설정
    df.set_index('구분', inplace=True)
    return df

# —————————————————————————————————————————————
# 3. 데이터 병합 및 결측치 처리
# —————————————————————————————————————————————
def merge_and_fill(etf_df, market_df):
    """
    ETF 데이터와 글로벌 지수 데이터를 날짜 기준으로 병합,
    선형 보간 및 전후 평균(fill) 방식으로 결측치를 채웁니다.
    :param etf_df: ETF DataFrame (index=날짜)
    :param market_df: 지수 DataFrame (컬럼에 Date, S&P500, KOSPI)
    :return: 병합 및 결측치 처리된 DataFrame
    """
    market_df = market_df.copy()
    market_df['Date'] = pd.to_datetime(market_df['Date'])
    market_df.set_index('Date', inplace=True)

    # 병합
    df = etf_df.merge(
        market_df[['S&P500', 'KOSPI']],
        left_index=True, right_index=True,
        how='left'
    )

    # 1) 선형 보간
    df[['S&P500','KOSPI']] = df[['S&P500','KOSPI']].interpolate(method='linear')

    # 2) 전후 평균(fill) 방식 보완
    for col in ['S&P500','KOSPI']:
        df[col] = df[col].fillna((df[col].ffill() + df[col].bfill())/2)

    return df

# —————————————————————————————————————————————
# 4. 지표 계산 (상대수익률 및 이동평균)
# —————————————————————————————————————————————
def calculate_indicators(df):
    """
    누적 상대수익률과 5일 이동평균을 계산해 컬럼으로 추가합니다.
    :param df: 병합된 DataFrame
    :return: 지표 컬럼이 추가된 DataFrame
    """
    # 기준일 대비 누적 수익률
    df['tiger화장품_상대'] = df['tiger화장품'] / df['tiger화장품'].iloc[0]
    df['S&P500_상대'] = df['S&P500'] / df['S&P500'].iloc[0]
    df['KOSPI_상대']   = df['KOSPI'] / df['KOSPI'].iloc[0]

    # 5일 단순 이동평균
    for col in ['tiger화장품','S&P500','KOSPI']:
        df[f'{col}_SMA'] = df[col].rolling(window=5).mean()

    return df

# —————————————————————————————————————————————
# 5. 차트 그리기 & 저장
# —————————————————————————————————————————————
def plot_and_save(df, output_path, font_path):
    """
    한글 폰트 설정 후, 종가 추이와 누적 수익률 비교 차트를
    상/하단 서브플롯으로 생성하고 PNG로 저장합니다.
    :param df: 지표가 포함된 DataFrame (index=날짜)
    :param output_path: 저장할 파일 경로 (예: 'tiger_kbeauty.png')
    :param font_path: 시스템의 한글 폰트 파일 경로
    """
    # 한글 폰트 설정
    prop = fm.FontProperties(fname=font_path)
    plt.rcParams['font.family'] = prop.get_name()
    plt.rcParams['axes.unicode_minus'] = False

    fig, (ax1, ax2) = plt.subplots(
        2, 1, figsize=(12, 8), sharex=True
    )

    # 상단: 종가 추이
    ax1.plot(df.index, df['tiger화장품'], label='TIGER K-뷰티 ETF Close')
    ax1.plot(df.index, df['S&P500'], label='S&P 500 Close')
    ax1.plot(df.index, df['KOSPI'], label='KOSPI Close')
    ax1.set_ylabel('종가')
    ax1.set_title('2023년 이후 지수 및 ETF 종가 추이')
    ax1.legend()
    ax1.grid(True)

    # 하단: 누적 수익률
    ax2.plot(df.index, df['tiger화장품_상대'], label='ETF 누적 수익률')
    ax2.plot(df.index, df['S&P500_상대'], label='S&P500 누적 수익률')
    ax2.plot(df.index, df['KOSPI_상대'], label='KOSPI 누적 수익률')
    ax2.set_ylabel('누적 수익률')
    ax2.set_title('2023년 이후 상대 누적 수익률 비교')
    ax2.legend()
    ax2.grid(True)

    plt.xlabel('날짜')
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.savefig(output_path, dpi=400)
    plt.close(fig)


# —————————————————————————————————————————————
# 6. 실행부
# —————————————————————————————————————————————
def main():
    # 파라미터 설정
    start_date = "2023-01-02"
    end_date   = "2025-07-20"
    tickers    = ['^GSPC', '^KS11']
    excel_path = "out.xlsx"
    sheet_name = 'PRICE_DATA'
    font_path  = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf' # matplotlib에서 한글 깨짐 방지
    output_png = 'tiger_kbeauty_comparison.png'

    # 세션 생성 (Chrome User-Agent 모방)
    session = requests.Session(impersonate="chrome") # yfinace에서 too many request error가 뜰시 해결하는 용도 

    # 1) 글로벌 지수 조회
    market_df = fetch_market_data(tickers, start_date, end_date, session)

    # 2) 로컬 엑셀 데이터 로드 및 전처리
    etf_df = load_and_preprocess_excel(excel_path, sheet_name) # ks.228790는 yfinace에서 조회 불가, https://www.tigeretf.com/ko/product/search/detail/index.do?ksdFund=KR7228790002에서 다운 로드 가능 ㅇ
    # 3) 데이터 병합 및 결측치 처리
    merged_df = merge_and_fill(etf_df, market_df)

    # 4) 지표 계산
    result_df = calculate_indicators(merged_df)

    # 5) 차트 그리기 및 저장
    plot_and_save(result_df, output_png, font_path)


if __name__ == "__main__":
    main()
클릭하여 더 보기

라이선스

저작자: Jaehun Ryu

링크: https://jaehun.me/posts/k-%EB%B7%B0%ED%8B%B0-%EC%83%88%EB%A1%9C%EC%9A%B4-%EB%8F%84%EC%95%BD%EC%9D%98-%EA%B8%B0%EB%A1%9C%EC%97%90-%EC%84%A4%EA%B9%8C/

라이선스: CC BY 4.0

이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 출처를 밝히면 상업적 목적을 포함해 자유롭게 이용 가능합니다.

댓글

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키