반응형

JWT 인증에서 Access Token 자동 갱신 구현 (Axios 기반)

JWT 기반 인증을 사용할 때 Access Token은 일반적으로 짧은 만료 시간을 가집니다. 이는 보안을 강화하기 위한 전략이지만, 토큰이 만료될 때마다 사용자가 다시 로그인해야 한다면 UX는 매우 나빠지겠죠. 이를 해결하기 위해 Refresh Token을 이용한 자동 갱신 방식이 널리 사용됩니다.

이 글에서는 프론트엔드에서 Access Token이 만료되었을 때, 자동으로 /auth/refresh 엔드포인트를 호출해 토큰을 갱신하고 요청을 재시도하는 구현 방법을 설명합니다.

✅ 사용 기술: Axios + JWT + HttpOnly 쿠키 기반 인증


🎯 구현 목표

  1. API 요청 도중 Access Token이 만료되면 자동으로 /auth/refresh 호출
  2. 새 Access Token을 발급받고, 기존 실패한 요청을 재시도
  3. Refresh Token은 HttpOnly 쿠키에 저장되어 자동 포함됨
  4. Refresh 실패 시 로그아웃 처리

🔧 Axios 인스턴스 생성 및 인터셉터 설정

import axios from 'axios';

const api = axios.create({
  baseURL: 'https://your-api.com',
  withCredentials: true, // 쿠키 포함 필수 설정
});

let isRefreshing = false;
let failedQueue: any[] = [];

const processQueue = (error: any, token: string | null = null) => {
  failedQueue.forEach(prom => {
    if (error) prom.reject(error);
    else prom.resolve(token);
  });
  failedQueue = [];
};

api.interceptors.response.use(
  res => res,
  async err => {
    const originalRequest = err.config;

    if (err.response?.status === 401 && !originalRequest._retry) {
      if (isRefreshing) {
        return new Promise((resolve, reject) => {
          failedQueue.push({ resolve, reject });
        }).then(() => api(originalRequest));
      }

      originalRequest._retry = true;
      isRefreshing = true;

      try {
        await api.post('/auth/refresh'); // Refresh Token은 쿠키에 자동 포함됨
        processQueue(null);
        return api(originalRequest); // 실패한 요청 재시도
      } catch (refreshError) {
        processQueue(refreshError, null);
        window.location.href = '/login'; // 리프레시 실패 시 로그아웃 처리
        return Promise.reject(refreshError);
      } finally {
        isRefreshing = false;
      }
    }

    return Promise.reject(err);
  }
);

export default api;

🔁 흐름 정리

  1. 유저가 API 요청을 보냄
  2. 서버가 Access Token 만료로 401 Unauthorized 응답
  3. Axios 인터셉터가 이를 감지하고 /auth/refresh 호출
  4. Refresh Token은 HttpOnly 쿠키에 자동 포함됨
  5. 새 Access Token이 발급되면 원래 요청을 재시도
  6. Refresh 실패 시 로그인 페이지로 이동

✅ 보안 고려 사항

항목설명

withCredentials: true 쿠키를 요청에 포함하려면 반드시 설정
HttpOnly 쿠키 JS에서 토큰 접근 불가 → XSS 방어
SameSite=Strict 또는 Lax CSRF 방어용 쿠키 설정
Refresh Token 저장 위치 반드시 쿠키 (localStorage 금지)
Refresh 실패 시 처리 로그아웃 처리 or 알림 후 로그인 페이지 이동

🧠 마무리

Axios 인터셉터를 활용하면 토큰 갱신 로직을 모든 요청에 일관되게 적용할 수 있어, 보안과 UX 모두를 만족시키는 인증 흐름을 만들 수 있습니다.

'컴퓨터 > JWT' 카테고리의 다른 글

쿠키(Cookie) 옵션 완벽 정리  (0) 2025.05.19
반응형

🔐 쿠키(Cookie) 옵션 완벽 정리: HttpOnly, Secure, SameSite의 모든 것

웹 개발에서 인증과 보안을 고민할 때 가장 먼저 마주치는 개념 중 하나가 바로 **쿠키(Cookie)**입니다. 하지만 쿠키 설정 시 등장하는 HttpOnly, Secure, SameSite 옵션이 정확히 뭘 의미하고, 어떤 보안 이슈를 막아주는지 확실하게 아는 사람은 많지 않습니다.

이 글에서는 실무에서 꼭 알아야 할 쿠키 옵션들의 기능, 보안 목적, 사용 예시를 정리해드릴게요.


🍪 쿠키란?

쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터 조각입니다.

  • 서버가 Set-Cookie 헤더로 값을 내려주면,
  • 브라우저는 쿠키를 저장하고,
  • 이후 같은 도메인 요청마다 자동으로 쿠키를 전송합니다.

대표적인 활용 예:

  • 로그인 상태 유지 (세션 ID / JWT)
  • 장바구니 상태 저장
  • 사용자 설정 기억 (언어, 테마 등)

✅ 주요 쿠키 옵션 정리

옵션명설명방어하는 보안 위협
HttpOnly JS에서 쿠키 접근 불가 XSS (스크립트 탈취)
Secure HTTPS 연결에서만 전송 패킷 도청, MITM
SameSite 외부 요청 시 쿠키 전송 여부 제어 CSRF (요청 위조)
Path 특정 경로에만 쿠키 전송 제한된 범위 적용
Domain 서브도메인 공유 여부 도메인 스코프 설정
Max-Age / Expires 만료 시간 설정 자동 삭제
SameParty 제3자 쿠키 제한 회피 (실험적) Chrome Privacy Sandbox 대응
 

🔐 HttpOnly: JavaScript 접근 차단

Set-Cookie: token=abc123; HttpOnly
  • ✅ 쿠키를 JavaScript에서 document.cookie로 접근 불가
  • ✅ XSS 공격 시에도 쿠키를 훔칠 수 없음
  • ❌ JS로 토큰을 꺼내서 Authorization 헤더로 직접 보내야 하는 경우 사용 불가

💡 실무 팁: 인증 관련 쿠키(세션 ID, Access Token)는 반드시 HttpOnly 설정!


🔒 Secure: HTTPS에서만 전송

Set-Cookie: token=abc123; Secure
  • ✅ HTTPS 연결일 때만 서버로 쿠키 전송
  • ❌ HTTP 요청에는 전송되지 않음 (MITM 방지)
  • 📌 Secure이 없는 쿠키는 평문 HTTP 요청에 노출될 수 있음

💡 실무 팁: Secure 쿠키를 쓰려면 HTTPS 환경이 기본 전제입니다. 운영환경이라면 무조건 사용하세요.


🛡️ SameSite: CSRF 방어의 핵심

Set-Cookie: token=abc123; SameSite=Strict
값설명
Strict 다른 사이트에서 유입된 요청은 모두 쿠키 차단 (가장 안전)
Lax GET이나 a 링크, form 전송 등은 허용 / JS fetch 등은 차단
None 모든 외부 요청에 허용 (단, Secure 필수)
 

💡 실무 팁: 인증 관련 쿠키에는 보통 SameSite=Strict 또는 Lax를 설정합니다. None은 제3자 쿠키 용도로만 사용하세요.


📁 Path, Domain: 적용 범위 제어

Set-Cookie: theme=dark; Path=/settings
  • Path=/settings: /settings 이하에서만 전송
  • Domain=example.com: sub.example.com에서도 공유 가능

💡 실무 팁: 보안성 향상을 위해 불필요하게 넓은 범위는 피하세요.


⏰ Max-Age, Expires: 쿠키 수명

Set-Cookie: token=abc123; Max-Age=900
  • Max-Age=900: 900초(15분) 후 만료
  • Expires=Wed, 21 Oct 2025 07:28:00 GMT: 지정된 날짜/시간에 만료

설정이 없으면 세션 쿠키가 되어 브라우저 종료 시 삭제됩니다.


✅ 실무 예시: 로그인 쿠키 설정

Set-Cookie: access_token=eyJ...; HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age=900
  • 🔐 JS 접근 불가 (HttpOnly)
  • 🔒 HTTPS 환경에서만 전송 (Secure)
  • 🛡️ CSRF 방지 (SameSite=Strict)
  • ⏰ 15분 후 자동 만료 (Max-Age)

🧠 마무리 요약

옵션설명권장 여부
HttpOnly JS 접근 차단 ✅ 항상 사용
Secure HTTPS에서만 전송 ✅ 운영환경 필수
SameSite 외부 요청 제한 ✅ CSRF 방어
Max-Age 유효 기간 설정 ✅ 필요시 사용
 

💬 마치며

쿠키는 단순한 저장소가 아니라, 보안 설정 하나로도 전체 서비스의 안정성을 좌우할 수 있는 민감한 요소입니다. 특히 인증과 세션 처리에 쿠키를 사용하는 경우에는 HttpOnly, Secure, SameSite는 사실상 필수 옵션이라고 생각하셔야 합니다.

보안은 구현보다 구성입니다.
조금만 신경 쓰면 더 안전한 서비스를 만들 수 있어요.

'컴퓨터 > JWT' 카테고리의 다른 글

JWT 인증에서 Access Token 자동 갱신 구현 (Axios 기반)  (0) 2025.05.19
반응형

Gmail SMTP 사용 방법

이 글에서는 Gmail 계정을 이용해 SMTP로 메일을 발송하는 방법을 상세히 정리합니다.
Spring Boot, Node.js 등 어떤 환경에서도 적용할 수 있도록 준비했습니다.


✅ Gmail SMTP란?

Gmail SMTP 서버를 사용하면, Gmail 계정을 통해 외부 애플리케이션에서 이메일을 전송할 수 있습니다.
개인 프로젝트부터 상용 서비스 초기 테스트까지 다양하게 활용할 수 있습니다.


✅ Gmail SMTP 사용 준비 단계

1. Gmail 계정 준비

  • 메일 발송에 사용할 Gmail 계정을 준비합니다.
  • 기존 계정을 사용해도 무방합니다.


2. 2단계 인증(2FA) 활성화

Gmail은 보안 강화를 위해, 2단계 인증을 필수로 요구합니다.

2단계 인증이 켜져 있어야 "앱 비밀번호"를 생성할 수 있습니다.


3. 앱 비밀번호(App Password) 생성

Gmail에서는 일반 비밀번호로 SMTP 로그인할 수 없습니다.
앱 비밀번호(App Password) 를 발급받아야 합니다.

  • Google 계정 보안 설정 → 앱 비밀번호 메뉴로 이동합니다.
  • "앱 선택" → 메일, "디바이스 선택" → 기타 → 원하는 이름 입력 후 생성합니다.
  • 생성된 16자리 비밀번호를 복사합니다.

⚡ 이 앱 비밀번호를 SMTP 로그인 비밀번호로 사용합니다.


✅ Gmail SMTP 서버 설정 정보

항목값
SMTP 서버 주소 smtp.gmail.com
포트 (TLS) 587
포트 (SSL) 465
사용자 이름 Gmail 이메일 주소
비밀번호 발급받은 앱 비밀번호
인증 필요 여부 YES

✅ 예제 코드

Spring Boot (application.yml)

spring:
  mail:
    host: smtp.gmail.com
    port: 587
    username: your-email@gmail.com
    password: your-app-password
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
spring: mail: host: smtp.gmail.com port: 587 username: your-email@gmail.com password: your-app-password properties: mail: smtp: auth: true starttls: enable: true
  • TLS(587포트)를 사용하며, 인증과 StartTLS를 활성화합니다.

Node.js (Nodemailer)

import nodemailer from 'nodemailer';

const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'your-email@gmail.com',
    pass: 'your-app-password',
  },
});

await transporter.sendMail({
  from: 'your-email@gmail.com',
  to: 'receiver@example.com',
  subject: '테스트 메일',
  text: '이메일 본문입니다.',
});

✅ SMTP 서버 테스트 방법

  1. redis-server처럼, redis-cli와 유사하게 별도의 서버 구동 없이 바로 사용할 수 있습니다.
  2. smtp.gmail.com을 통해 메일 발송을 시도하면 정상 작동합니다.

✅ 주의 사항

  • 앱 비밀번호를 발급하지 않고 일반 비밀번호로 접속하면 에러가 발생합니다. (예: 535-5.7.8 Authentication Error)
  • 일반 Gmail 계정은 하루 약 500건 정도의 발송 제한이 있습니다.
  • 기업용 Google Workspace 계정은 별도 SMTP 서버 설정이 필요할 수 있습니다.
  • 너무 많은 발송 시 스팸 처리될 수 있으니 테스트용 외에는 주의해야 합니다.

✅ 한눈에 요약

절차설명
Gmail 계정 준비 메일 발송용 Gmail
2단계 인증 설정 Google 보안 페이지에서 활성화
앱 비밀번호 발급 메일용 앱 비밀번호 생성
SMTP 서버 설정 smtp.gmail.com, 포트 587/465, 인증 필요
메일 발송 발급받은 앱 비밀번호 사용

🎯 마치며

Gmail SMTP를 활용하면 별도의 SMTP 서버를 구축하지 않고도
빠르게 메일 발송 기능을 구현할 수 있습니다.

다만,

  • 테스트용 / 소규모 프로젝트에는 충분히 유용하지만,
  • 대규모 서비스에서는 Sendgrid, Mailgun, Brevo 같은 별도 SMTP 서비스 도입을 고려하는 것이 좋습니다.

이 글을 참고하여 여러분의 프로젝트에 메일 발송 기능을 쉽고 빠르게 추가해보세요!


📌 참고 링크


반응형

⏳ 애니리뷰 | 도쿄 리벤저스 – 타임리프 속 학생 느와르

최근 정주행한 애니메이션 <도쿄 리벤저스>,
24부작으로 구성되어 있고, 19세 이상 관람가 등급을 받은 작품입니다.
타임리프와 학생 느와르라는 다소 독특한 장르 조합이 눈길을 끌었는데요,
시청 후 느낀 점들을 정리해 보았습니다.


👦 평범한 프리터, 과거로 되돌아가다

주인공은 일본에서 흔히 말하는 프리터족으로,
특별할 것 없이 살아가던 중 한 사건을 계기로 12년 전으로 타임슬립하게 됩니다.
타임리프라는 장르가 주는 특유의 몰입감과 긴장감이 초반에는 꽤 잘 살아 있었고,
2000년대 초반 일본의 분위기를 담아낸 배경 연출도 인상 깊었어요.
특히 항아리핏 교복 바지 같은 디테일한 연출은 시대감을 잘 살린 요소였죠.


🥊 폭력성과 청불 등급

학생들 간의 폭력 묘사가 상당히 빈번하고 직접적이기 때문에
19금 청불 등급을 받은 것으로 보입니다.
다만, 이 폭력성이 단순히 자극적인 요소로만 작용하는 것이 아니라
캐릭터 간의 갈등, 서사의 핵심 장치로 사용되긴 했지만
중학생 시절을 배경으로 하기에 몰입에도 방해가 되는 건 사실이었습니다.
'굳이 중학생일 필요가 있었을까?'라는 생각이 계속 들더군요.


🌀 흥미롭지만 답답한 전개

**<나만이 없는 거리>**가 떠오를 만큼 타임리프 설정은 흥미롭지만,
시간을 되돌리는 전개가 반복될수록 다소 개연성이 어긋나는 느낌이나
답답한 진행 방식이 눈에 띄기 시작합니다.

특히 주인공이 겪는 감정의 흐름이나 행동이 설득력을 잃는 순간들이 있어
몰입이 끊기는 경험도 했고요.
타임리프의 구조를 유지하기 위해 억지스러운 사건이 추가되는 듯한 인상도 지울 수 없었습니다.


🧩 캐릭터와 서사, 집중할 여지를 주다

그럼에도 불구하고, 각 캐릭터에 집중할 수 있는 시간과 여유를 준 구성은 좋았습니다.
인물 간의 감정선, 관계의 변화, 배경 이야기들이 자연스럽게 이어지며
서사를 쌓아가는 과정은 인상 깊었어요.


📝 총평

✔ 타임리프와 느와르의 흥미로운 조합
✔ 2000년대 일본 감성을 잘 살린 연출
✔ 캐릭터 중심의 서사와 몰입감 있는 초반 전개
✔ 그러나 반복적인 타임슬립 구조와 개연성의 한계
✔ 폭력성을 중심으로 한 전개에 거부감이 들 수도 있음


**<도쿄 리벤저스>**는 흥미로운 소재와 감성적인 연출로 분명 끌리는 작품이지만,
모든 시청자에게 완벽하게 와닿을 만한 작품은 아니었습니다.
타임리프 장르를 좋아하거나, 느와르적 감정선에 집중하고 싶은 분들께 추천드립니다.

내 평점: ★☆☆ (2/5)


반응형

자바스크립트의 새로운 가능성

프론트엔드 개발을 하면서 "자바스크립트는 브라우저에서만 동작하는 언어"라고 생각하신 적 있으신가요? Node.js는 그 생각을 완전히 뒤바꿔놓았습니다. 이 글에서는 Node.js가 무엇인지, 어떤 특징을 가지고 있으며 어디에 주로 사용되는지 자세히 소개드릴게요.


✅ Node.js란?

Node.jsChrome의 V8 JavaScript 엔진을 기반으로 만들어진 서버 사이드 JavaScript 런타임입니다. 쉽게 말해, 자바스크립트를 브라우저가 아닌 서버 환경에서도 실행할 수 있게 해주는 플랫폼입니다.


🔧 Node.js의 주요 특징

1. 이벤트 기반(Event-driven) 구조

Node.js는 이벤트 루프를 기반으로 작동합니다. 요청이 들어오면 이벤트 큐에 등록하고, 완료되면 콜백 함수를 호출하는 방식입니다.

2. 논블로킹(Non-blocking) I/O

파일 읽기나 데이터베이스 조회 같은 I/O 작업을 기다리지 않고, 다른 작업을 먼저 처리할 수 있어 빠른 응답성을 자랑합니다.

3. 싱글 스레드 구조

Node.js는 단일 스레드로 동작하지만, 비동기 이벤트 처리 덕분에 높은 동시성 처리 능력을 가집니다.

4. NPM(Node Package Manager)

수많은 오픈소스 모듈을 쉽게 설치할 수 있는 패키지 관리자입니다. Express, Socket.IO, Mongoose 등 다양한 라이브러리를 활용할 수 있습니다.


💼 Node.js의 대표적인 사용 사례

분야활용 예시
웹 서버 REST API, SSR
실시간 애플리케이션 채팅 서버, 게임 서버
백엔드 시스템 인증, 파일 업로드, 데이터 가공
CLI 도구 제작 Node 기반 자동화 스크립트

🧠 왜 Node.js를 사용할까요?

  • 자바스크립트 하나로 프론트와 백엔드를 모두 개발할 수 있어 생산성이 높습니다.
  • 가볍고 빠르며, 실시간 기능 구현에 강력한 장점을 가집니다.
  • 대규모 커뮤니티와 NPM 덕분에 다양한 라이브러리와 플러그인을 활용할 수 있습니다.

🖼 Node.js 개념 요약

아래 Node.js의 구조와 특징을 한눈에 확인해보세요👇


마무리

Node.js는 단순히 '서버에서도 자바스크립트를 실행한다'는 것을 넘어서, 현대 웹 개발의 큰 축으로 자리 잡았습니다. 실시간 처리와 높은 성능이 필요한 프로젝트를 계획하고 있다면, Node.js는 훌륭한 선택이 될 수 있습니다!

궁금한 점이 있으시면 댓글로 남겨주세요 😊


반응형

📉 요동치는 미국 증시, 비관론과 낙관론 사이에서 혼조세 지속

최근 뉴욕 타임즈 보도에 따르면, 미국 주식시장이 투자자들의 비관적인 전망 속에서 혼조세를 보이고 있습니다.
3월 들어 주요 지수는 모두 하락세를 보였으며, 특히 기술주 중심의 나스닥 지수 하락폭이 가장 두드러졌습니다.


📊 3월 주요 지수 하락률

  • 다우존스 산업평균지수: -5.15%
  • S&P 500 지수: -6.3%
  • 나스닥 지수: -8.1%

🔻 하락 배경: 정책 불확실성과 관세 리스크

이번 하락세의 주된 요인은 트럼프 전 대통령의 정책 불확실성관세 강행으로 인한 시장 불안감으로 분석되고 있습니다.

에버코어 ISI의 시장전략가 줄리언 이매뉴얼

"소비자들과 기업 CEO들의 경제 비관이 코로나19 팬데믹 당시 수준까지 높아졌다"
고 전하며, 투자심리가 상당히 위축된 상황임을 시사했습니다.


📈 낙관론도 존재… "과도한 비관, 매수 기회일 수 있다"

그럼에도 불구하고 일부 전문가들은 현재 시장 펀더멘털은 여전히 견조하다는 입장을 보이고 있습니다.

  • 줄리언 이매뉴얼:
  • "현재의 비관론은 다소 과도하며, 오히려 조정기를 통한 매수 기회로 볼 수 있다"
  • 데이터트렉 공동 창업자 니컬러스 컬러즈:
  • "지금은 시장을 지켜보며 버틸 시점이다"
    고 조언했습니다.

📰 개별 종목 소식: NYT 주가 소폭 상승

한편, **뉴욕 타임즈 컴퍼니(NYT)**의 주가는
3월 28일 기준 전일 대비 0.02% 상승한 48.99달러를 기록했습니다.

작은 상승폭이지만, 전반적인 하락세와 대비되는 흐름으로 주목할 만한 부분입니다.


✅ 정리: 지금은 신중한 투자 시점

현재 미국 주식시장은
비관론과 낙관론이 혼재된 상황 속에서 높은 변동성을 보이고 있습니다.

지금 같은 시기에는 단기적인 흐름에 휘둘리기보다,
신중한 접근과 장기적인 투자 전략이 필요해 보입니다.


반응형

📺 드라마 폭싹 속았수다 후기 – 따뜻한 시대극, 오랜만에 만난 진심

주변에서 다들 추천하길래, 뒤늦게 폭싹 속았수다를 보기 시작했습니다. 요즘 드라마는 대체로 전개가 빠르고, 선과 악의 대립이나 인물 간 갈등을 중심으로 흘러가는데요. 이 드라마 역시 갈등과 해소의 리듬이 빠른 편임에도 불구하고, 시간의 흐름과 함께 서사를 자연스럽게 풀어내는 방식이 인상 깊었습니다.

빠른 이야기 전개 덕분에 몰입감은 상당했지만, 그만큼 감정 소모도 커서 다소 피로감이 느껴지기도 했어요. 하지만 이 드라마의 갈등은 단순한 악역과의 싸움이 아닌, 그 시대가 가진 구조적 불합리와 맞서는 사람들의 이야기라 더 와닿았던 것 같습니다.

극복의 과정을 담담하게 따라가다 보면, 어느새 주인공의 삶을 응원하게 되더라고요. 그렇게 우리는 그 시대 속 평범한 사람들의 이야기에 빠져들게 됩니다.

폭싹 속았수다는 마치 응답하라 시리즈처럼 정겨운 사람들, 익숙한 풍경, 우리 가족의 모습을 떠오르게 합니다.
그래서인지 단순한 드라마 이상의 감동을 주고, 요즘처럼 각박한 세상에 잠시나마 숨을 고르게 해주는 듯한 느낌이었어요.


🕰️ 과거와 현재, 그리고 한국의 정서

이 드라마는 과거와 현대를 넘나들며 대비되는 시대상공통된 감정을 보여줍니다. 특히 1960~1990년대를 배경으로 한 장면들은 당시의 의식, 생활상, 갈등 등을 사실적으로 그려내고 있죠.

그 시대를 살았던 분들에게는 향수를, 젊은 세대에게는 과거의 삶을 이해할 수 있는 기회를 주는 점에서, 문화적 의미도 꽤 깊은 작품이라고 느껴졌어요.


🎭 캐릭터와 감정선의 진심

주인공의 유년 시절부터 성장을 따라가며 이야기를 풀어가는 서사는 굉장히 밀도 있게 느껴졌습니다.
특히 아이유 배우가 시대를 넘나들며 어머니와 딸, 두 인물을 동시에 연기하는 설정은 다소 호불호가 있을 수 있지만, 삶의 대물림과 감정의 연속성을 표현하는 데 중요한 장치였다고 생각해요.

자식을 향한 부모의 사랑, 미숙한 젊은 날의 사랑, 현실의 차가움 속에서 피어나는 따뜻함까지… 우리 모두가 한 번쯤 겪어봤을 이야기들이 드라마 속에서 다시 살아났습니다.


🌸 사람을 향한 드라마

이토록 따뜻한 드라마는 정말 오랜만인 것 같습니다.
사람을 미워하고, 받은 상처를 또 다른 사람에게 전가하는 일이 일상이 되어버린 세상에서, 이 드라마는 마치 봄 햇살처럼 사람의 온기를 전해주는 작품이었어요.

누군가의 엄마, 누군가의 딸, 누군가의 친구인 '우리 모두'의 이야기를 담아낸 폭싹 속았수다.
요즘처럼 힘든 날들 속에서, 이 드라마가 여러분에게도 작은 위로가 되었으면 합니다.


💌 오늘도 소중한 당신이, 누군가에게 행복이길 바랍니다.


반응형

🎮 웹툰 리뷰 | 배드엔딩 메이커 – 가상현실 게임 속 진짜 이야기가 시작된다

요즘 웹툰들 사이에서도 독특한 매력을 가진 작품, 배드엔딩 메이커를 소개합니다.
첫 화부터 확실한 몰입감을 선사하며, 가상현실 게임 제작자 디렉터가 주인공으로 등장하는 이 작품은 기존 게임 판타지 장르와는 조금 다른 방향으로 이야기를 전개해요.


🧩 첫 화부터 드러나는 제목의 의미

최근 라이트노벨풍의 긴 제목이 대세인 와중에,
**"배드엔딩 메이커"**라는 간결하고 강렬한 제목은 오히려 더 눈에 띕니다.
첫 화를 읽자마자 이 제목이 왜 붙었는지 바로 납득할 수 있는 전개 또한 인상 깊었고요.
회사의 대표가 일부러 게임 내 버그를 만들고, 주인공에게 그 책임을 뒤집어씌우는 장면에서부터
이야기의 긴장감이 단숨에 올라갑니다.


🧠 게임 디렉터가 주인공이라는 신선한 설정

달빛 조각사, 열렙용사 이후로 오랜만에 몰입된 게임 판타지였어요.
하지만 이 작품이 특별한 이유는 주인공이 단순한 플레이어가 아닌 게임 디렉터라는 점!
게임 설계자라는 특성을 잘 살려서 기존 웹툰과 차별점을 확실히 보여주고 있고,
게임 시스템에 대한 고증도 꽤 디테일하게 잘 되어 있어서 현실감도 느껴졌습니다.
작가가 상당히 많은 부분을 준비해온 느낌이었어요.


🖼 그림체와 전개는?

요즘 웹툰들과 유사한 스타일의 깔끔하고 정제된 그림체
각 장면의 디테일도 꽤 좋아서 전체적인 퀄리티는 높은 편입니다.
다만, 이야기의 전개 속도가 빠르지도 느리지도 않게 흘러가는 반면,
자극적인 갈등 요소나 극적인 전개는 다소 적은 편이라
일부 독자에게는 밋밋하게 느껴질 수도 있을 것 같아요.


📝 총평

✔ 독특한 설정과 탄탄한 게임 고증
✔ 자극적이지 않아 편안하게 볼 수 있는 전개
✔ 그림체와 몰입감 모두 준수한 편
✔ 킬링타임용으로 딱 좋은 웹툰


게임 세계관을 좋아하고, 자극보다는 설정과 흐름을 즐기는 독자분들께 추천드리고 싶은 웹툰입니다.
웹툰 '배드엔딩 메이커', 관심 있으시다면 첫 화부터 꼭 읽어보시길!

내 평점: ★☆☆ (2/5)


 

+ Recent posts