본문 바로가기
이슈&뉴스/실시간 핫이슈

그놈은 흑염룡 드라마 총정리 | 줄거리 · 등장인물 · 원작 비교

by 개성김씨 2025. 2. 18.
반응형

1. 드라마 기본 정보

방송 기간: 2025년 2월 17일 ~ 3월 25일 (예정)
방송 시간: 매주 월·화요일 밤 8시 50분
채널: tvN
OTT: 티빙 (넷플릭스 미제공)
연출: 이수현 (이로운 사기, 낮과 밤)
극본: 김수연

           

2. 등장인물 & 인물관계도

백수정 (문가영)

용성백화점 기획팀장. 과거 온라인 게임에서 ‘딸기’라는 닉네임을 사용했던 유저. 현실에서 재회한 흑염룡(=반주연)이 중학생이었다는 사실에 충격을 받는다.

반주연 (최현욱)

용성백화점 전략기획본부 본부장. 게임 속 닉네임 ‘흑염룡’. 어린 시절 첫사랑이었던 수정에게 배신(?)당한 기억을 갖고 있다.

3. 1화 줄거리 요약

- 백수정, 동생이 게임에서 무시당하는 걸 보고 대신 힐러 역할을 맡게 됨
- ‘흑염룡’ 반주연과 게임 속에서 인연을 쌓으며 사랑에 빠짐
- 오프라인 정모에서 15살 중학생이었던 흑염룡을 보고 충격!
- 16년 후, 용성백화점에서 본부장과 팀장으로 재회

4. 원작 웹툰 vs 드라마 차이점

  • 원작: 게임 커뮤니티 중심, 중2병 설정 강조
  • 드라마: 재벌 3세 설정 추가, 직장 로맨스 강화

5. 다시보기 & 방영 일정

재방송: tvN 편성표 확인
다시보기: 티빙(TVING) 스트리밍 가능
다음 화 예고: 수정과 주연의 관계 변화, 김신원 & 서하진 서브 러브라인 전개

드라마 ‘그놈은 흑염룡’, 어떻게 보셨나요? 댓글로 의견을 남겨주세요!

이 글이 유용했다면 공유 & 공감 부탁드립니다!

 

반응형

setTimeout(function () { const dragSensitivity = 0.55; // 드래그 민감도 const clickTolerance = 0; // 클릭 간주 기준 (px), 0: 클릭 시 이동 안함. 클릭 시 이동하려면 1~3값 설정 고려. const dragRatioThreshold = 0.55; // 배너 너비 대비 드래그 비율, 배너 드래그 후 드롭 시. const newWindow = 1; // 1: 새 창, 0: 현재 창 const bannerConfigs = [ { selector: '.sliding-banner-300', width: 300, height: 300, id: '940041', trackingCode: 'AF2787934', // 본인의 추적 코드로 대체 subId: '', tsource: '', background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/600x600-back2.jpg', cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-30Ox25O-cover-left.png', arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrowbtn.png', dragDirection: 'left' }, { selector: '.sliding-banner-150', width: 320, height: 150, id: '940041', trackingCode: 'AF2787934', // 본인의 추적 코드로 대체 subId: '', tsource: '', background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/640x300-back2.jpg', cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-32Ox15O-cover-left.png', arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrowbtn.png', dragDirection: 'left' }, { selector: '.sliding-banner-250', width: 300, height: 250, id: '940041', trackingCode: 'AF2787934', // 본인의 추적 코드로 대체 subId: '', tsource: '', background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/600x500-back2.jpg', cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-30Ox25O-cover-left.png', arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrowbtn.png', dragDirection: 'left' }, { selector: '.sliding-banner-280', width: 336, height: 280, id: '940041', trackingCode: 'AF2787934', // 본인의 추적 코드로 대체 subId: '', tsource: '', background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/600x500-back3.jpg', cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-30Ox25O-cover-right.png', arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrow-right.png', dragDirection: 'right' } ]; const coupangLink = 'https://link.coupang.com/a/c2PToW'; // 본인의 간편 링크로 대체 📍 function openLink(link) { if (newWindow) { window.open(link, '_blank'); } else { history.replaceState(null, null, window.location.href); window.location.href = link; } } function generateIframeURL(config) { return `https://ads-partners.coupang.com/widgets.html?id=${config.id}&template=carousel&trackingCode=${config.trackingCode}&subId=${encodeURIComponent(config.subId || '')}&width=${config.width}&height=${config.height}&tsource=${encodeURIComponent(config.tsource || '')}`; } function createBanner(config) { const iframeURL = generateIframeURL(config); const wrapper = document.createElement('div'); wrapper.innerHTML = `
`; return wrapper; } // trigger event update function setupDragEvents(dragTarget, animatedBanner, threshold, link, direction) { let startX = 0, diffX = 0, triggered = false, isDragging = false; function getClientX(e) { return e.type.includes('touch') ? e.touches[0].clientX : e.clientX; } function triggerOnce() { if (triggered) return; triggered = true; animatedBanner.style.transform = 'translateX(0)'; animatedBanner.classList.add('active'); openLink(link); } function startDrag(e) { if (e.type.startsWith('mouse') && e.button !== 0) return; isDragging = true; startX = getClientX(e); diffX = 0; triggered = false; animatedBanner.classList.remove('active'); e.preventDefault(); } function onDrag(e) { if (!isDragging) return; const currentX = getClientX(e); diffX = currentX - startX; if ((direction === 'left' && diffX < 0) || (direction === 'right' && diffX > 0)) { animatedBanner.style.transform = `translateX(${diffX}px)`; if (Math.abs(diffX) > threshold) { triggerOnce(); } e.preventDefault(); } } function endDrag() { if (!isDragging) return; isDragging = false; const dragRatio = Math.abs(diffX) / dragTarget.offsetWidth; if (Math.abs(diffX) < clickTolerance || ( dragRatio >= dragRatioThreshold && ((direction === 'left' && diffX < 0) || (direction === 'right' && diffX > 0)) )) { triggerOnce(); } else { animatedBanner.style.transform = 'translateX(0)'; animatedBanner.classList.add('active'); } diffX = 0; } dragTarget.addEventListener('mousedown', startDrag); dragTarget.addEventListener('mousemove', onDrag); dragTarget.addEventListener('mouseup', endDrag); dragTarget.addEventListener('mouseleave', endDrag); dragTarget.addEventListener('touchstart', startDrag, { passive: false }); dragTarget.addEventListener('touchmove', onDrag, { passive: false }); dragTarget.addEventListener('touchend', endDrag); } // end bannerConfigs.forEach(config => { const targets = document.querySelectorAll(config.selector); if (targets.length === 0) return; targets.forEach(target => { target.innerHTML = ''; const banner = createBanner(config); target.appendChild(banner); const customBox = banner.querySelector('.customBox'); const animatedBanner = banner.querySelector('.customBanner'); const threshold = config.width * dragSensitivity; setupDragEvents(customBox, animatedBanner, threshold, coupangLink, config.dragDirection); }); }); }, 100);