<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>KGG Studio</title>
	<atom:link href="https://blog.kggstudio.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.kggstudio.com</link>
	<description>개발자 테크 블로그</description>
	<lastBuildDate>Fri, 10 Apr 2026 21:12:59 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.kggstudio.com/wp-content/uploads/2025/05/cropped-K-1-32x32.png</url>
	<title>KGG Studio</title>
	<link>https://blog.kggstudio.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">244941309</site>	<item>
		<title>AI로 단편 영화 만들기 (1) &#8211; 스토리, 콘티, 캐릭터</title>
		<link>https://blog.kggstudio.com/making-a-movie-with-ai-1/</link>
					<comments>https://blog.kggstudio.com/making-a-movie-with-ai-1/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Fri, 10 Apr 2026 21:12:07 +0000</pubDate>
				<category><![CDATA[AI-Tools]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[AI Movie]]></category>
		<category><![CDATA[AI단편영화]]></category>
		<category><![CDATA[AI영화]]></category>
		<category><![CDATA[Hailuo]]></category>
		<category><![CDATA[Nano Banana]]></category>
		<category><![CDATA[나노바나나]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=406</guid>

					<description><![CDATA[1. 스토리 작성. 1-1. 베이스 스토리 작성 AI에게 대충 장르나 어떤느낌의 영화인지만 말하고 스토리 짜달라고하면 맘에드는게 없고 너무 흔한 그런 스토리가 나와서 직접 어느정도 스토리를 작성한 다음 이후 스토리를 완성시켜달라고 해보았다. 1-2. 나머지 스토리 AI 사용해 작성 한번에 맘에드는 스토리가 나와서 사용하기로 결정. AI의 답변: 작성해주신 전반부 스토리가 첫사랑의 풋풋함과 엇갈림을 아주 잘 보여주고 있습니다. ... <a title="AI로 단편 영화 만들기 (1) &#8211; 스토리, 콘티, 캐릭터" class="read-more" href="https://blog.kggstudio.com/making-a-movie-with-ai-1/" aria-label="AI로 단편 영화 만들기 (1) &#8211; 스토리, 콘티, 캐릭터에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">1. 스토리 작성.</h2>



<h3 class="wp-block-heading">1-1. 베이스 스토리 작성</h3>



<p>AI에게 대충 장르나 어떤느낌의 영화인지만 말하고 스토리 짜달라고하면 맘에드는게 없고 너무 흔한 그런 스토리가 나와서 직접 어느정도 스토리를 작성한 다음 이후 스토리를 완성시켜달라고 해보았다.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="383" data-attachment-id="407" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/image-67/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8.png" data-orig-size="1130,423" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-1024x383.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-1024x383.png" alt="" class="wp-image-407" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-1024x383.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-300x112.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-768x287.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8.png 1130w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">1-2. 나머지 스토리 AI 사용해 작성</h3>



<p><strong>한번에 맘에드는 스토리가 나와서 사용하기로 결정.</strong></p>



<p>AI의 답변:</p>



<p><br>작성해주신 전반부 스토리가 첫사랑의 풋풋함과 엇갈림을 아주 잘 보여주고 있습니다. 특히 처음에 조형물에서 찌질하게 다치며 시작된 로맨스가, 현실의 벽(부모님, 군대, 새로운 남자친구)에 부딪히며 차갑게 식어버린 남자의 태도로 이어지는 대비가 훌륭합니다.</p>



<p>요청하신&nbsp;<strong>&#8216;애절하고 눈물 없이는 볼 수 없는&#8217;</strong>&nbsp;후반부 스토리를 전개해 드립니다. 감정선을 극대화하기 위해 **&#8217;오해 &#8211; 절절한 진실의 발견 &#8211; 도피 &#8211; 뼈아픈 희생&#8217;**의 구조로 구성했습니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">[후반부 스토리 전개: 너를 지키기 위한 이별]</h3>



<h4 class="wp-block-heading">1. 차가운 재회, 그리고 폭발하는 감정</h4>



<p>복학 후, 남자(이하 남주)는 여자(이하 여주)를 철저히 투명인간 취급합니다. 여주는 새 남자친구의 권위적이고 통제적인 태도에 지쳐가던 중, 과거 자신에게 한없이 따뜻하고 자유로웠던 남주를 보며 매일 밤 남몰래 눈물을 흘립니다.<br>어느 날, 대학 축제(혹은 동문 모임)에서 세 사람이 마주칩니다. 새 남자친구는 남주의 초라한 행색(아르바이트를 하며 고학생으로 지냄)을 교묘하게 무시하며 모욕을 줍니다. 남주는 덤덤히 돌아서려 하지만, 참다못한 여주가 새 남자친구에게 소리를 지르며 남주를 감싸고 돕니다. 분노한 새 남자친구가 여주를 거칠게 끌고 가려 하자, 결국 남주가 참지 못하고 주먹을 날립니다. 이 사건으로 남주는 징계를 받을 위기에 처합니다.</p>



<h4 class="wp-block-heading">2. 밝혀지는 과거의 진실 (눈물의 1차 폭발)</h4>



<p>남주의 징계를 막기 위해 여주가 동분서주하던 중, 남주는 우연히 여주의 가장 친한 친구를 통해 **&#8217;그녀가 휴학하고 자신을 떠나야만 했던 진짜 이유&#8217;**를 듣게 됩니다.<br>과거, 여주의 부모님은 단순히 반대한 것이 아니었습니다. 남주가 평범하고 가난한 집안의 아들이라는 것을 알고,&nbsp;<strong>남주의 부모님이 운영하는 작은 식당의 상가 계약을 해지시키고 남주의 학자금 대출까지 막아버리겠다고 여주를 협박</strong>했던 것입니다. 여주는 남주의 인생을 망칠 수 없어서, 자신이 모든 죗값을 지고 부모님이 점지해 준 부자 남자친구의 &#8216;인형&#8217;으로 살기를 선택했던 것이었습니다.<br>모든 진실을 알게 된 남주는 비가 쏟아지는 밤, 여주의 집 앞으로 달려갑니다. 우산도 없이 비를 맞으며 서 있는 남주를 발견한 여주. 남주는 무너져 내리며 오열합니다.<br><em>&#8220;왜 말 안 했어&#8230; 나 하나 지키겠다고, 너는 그 지옥에서 어떻게 버텼어&#8230;!&#8221;</em><br>결국 두 사람은 빗속에서 서로를 끌어안고 참아왔던 감정을 터뜨립니다.</p>



<h4 class="wp-block-heading">3. 목숨 건 도피, 짧고도 눈부신 행복</h4>



<p>여주는 새 남자친구에게 이별을 통보하고 부모님과의 연을 끊은 채 집을 나옵니다. 두 사람은 아무도 모르는 바닷가 작은 마을로 도망칩니다. 돈은 없지만 과거 처음 만났을 때처럼 매일 웃고 떠들며, 세상에서 가장 행복한 며칠을 보냅니다. 남주는 공사장에서 막노동을 하면서도 여주에게 줄 싸구려 반지를 사며 행복해하고, 여주는 남주가 퇴근할 시간에 맞춰 된장찌개를 끓이며 영원한 사랑을 약속합니다. 하지만 이 행복은 폭풍 전야에 불과했습니다.</p>



<h4 class="wp-block-heading">4. 가혹한 현실과 마지막 선택 (절정)</h4>



<p>여주의 집안과 권력자인 새 남자친구가 가만히 있지 않았습니다. 새 남자친구는 남주를 절도 및 폭행으로 엮어 경찰에 고발하고, 남주의 가족들을 철저하게 파멸로 몰아넣기 시작합니다.<br>어느 날, 시장에 나갔던 여주는 낡은 텔레비전 뉴스를 통해 남주의 아버지가 억울한 누명을 쓰고 쓰러져 중환자실에 실려 갔다는 소식을 접합니다. 집으로 돌아온 여주는, 고된 노동으로 손이 다 까진 채 곤히 잠든 남주의 얼굴을 보며 무너져 내립니다.&nbsp;<strong>자신이 이 사람의 곁에 있는 한, 이 사람의 세상은 지옥이 될 것</strong>임을 깨닫습니다.<br>여주는 남주의 손에 자신이 샀던 싸구려 반지를 쥐여주고, 눈물로 편지를 남긴 채 새벽에 홀로 그 작은 집을 떠납니다.<br>편지 내용:&nbsp;<em>&#8220;네 덕분에 내 인생에 진짜 숨을 쉬어봤어. 하지만 난 가난이 무서워. 네가 다치는 건 더 무서워. 그러니까 우리, 이번 생에서는 여기서 끝내자.&#8221;</em></p>



<h4 class="wp-block-heading">5. 에필로그 (애절한 결말)</h4>



<p>시간이 흘러 7년 후.<br>남주는 독하게 공부하고 일하여 성공한 건축가(혹은 디자이너)가 되어 있습니다. 그는 자신의 첫 개인 전시회를 엽니다. 전시회장 한가운데에는&nbsp;<strong>과거 대학교 시절, 자신이 여주를 부르기 위해 올라갔던 &#8216;그 높은 조형물&#8217;을 본뜬 거대한 작품</strong>이 전시되어 있습니다.</p>



<p>오픈파티가 끝난 늦은 밤, 남주가 홀로 전시회장을 정리하고 있을 때 문이 열립니다. 고급스러운 옷을 입었지만, 어딘가 생기를 잃고 텅 빈 눈동자를 한 여주가 들어옵니다. (여주는 결국 새 남자친구와 애정 없는 쇼윈도 부부로 살아가고 있습니다.)<br>두 사람의 시선이 허공에서 부딪힙니다. 다가가지도, 인사를 건네지도 못합니다.<br>여주는 남주의 작품(조형물)을 가만히 올려다봅니다. 그녀의 시선 끝에, 작품 구석에 아주 작게 새겨진 글귀가 보입니다.<br><strong>[나의 첫 세상이자 마지막 숨이었던, 영원히 내려오지 못할 나의 그곳에게.]</strong></p>



<p>여주의 눈에서 소리 없이 굵은 눈물이 툭, 떨어집니다. 남주 역시 붉어진 눈시울로 억지로 눈물을 삼키며 옅은 미소를 지어 보입니다.<br>서로를 미치도록 사랑하지만, 서로를 지키기 위해 영원히 타인으로 살아야만 하는 두 사람. 닿을 수 없는 거리를 둔 채, 하염없이 서로를 바라보는 두 사람의 슬픈 미소를 끝으로 영화는 막을 내립니다.</p>



<h3 class="wp-block-heading">1-3. 최종 스토리</h3>



<p>스토리: 남녀가 대학교에서 입학후 같은 강의를 들으면 만나게됨. 남자는 여자가 맘에들어서 보자마자 전화번호를 알려달라고 하지만 여자는 당연히 거절함. 이 후로도 수차례 거절. 어느 날, 남자는 여자의 관심을 끌고싶어서 학교에있는 높은 조형물에 올라가서 수업을 마치고 나오는 여학생에 소리를 지르며 공개적으로 고백 여자는 무시하고 지나가려하지만, 남자는 여자를 쫒아가려고 높은 조형물에서 내려오다가 살짝 다침. 여자는 결국 창피함 반 또 자기때문에 남자가 다친것같아 미안한 마음도 들어서 어쩔수없이 전화번호를 줘버림. 남자는 뻔뻔하게도 &#8220;번호줬으니까 당연히 데이트 한번쯤은 해야하는거 아니냐&#8221;며 졸라서 데이트까지 하게됨. 여자는 공부밖에 모르는 모범생이었는데 남자는 다양한 취미가있고 재밌게 인생을 사는거같아서 관심을 갖게됨. 몇번에 데이트를하며 서로 애정이 깊어져갔음. 어느날 여자의 부모님이 둘이 데이트하는걸 목격하고 남자친구를 집으로 초대하라고하여 남자는 여자의 집을 방문하게됨. 여자의 부모님은 남자에대해 여러질문을하고 부모님에대해서도 물어봄. 식사중 내색은 하지않았지만 속으로는 남자가 맘에들지 않았던 여자의 부모님들. 결국 남자가 떠난뒤에, 여자는 부모님에게 당장 헤어지라고 말함. 여자 이를 거절하고 계속해서 몰래 만나려했지만 또다시 데이트장면을 들키게되고, 만난지 얼마안된 남자친구때문에 부모님의 강력한 요구를 거절할수없어서 휴학을 하게됨. 남자는 갑자기 연락이 끊긴 여자때문에 힘들어하던중 친구로부터 둘이 연인사이인것을 부모님이 반대해서 휴학한 사실을 알게됨. 결국 남자도 여자를 잊기 위해 군입대를 결정함. 군 제대 후, 학교를 복학했는데 여자에게는 이미 다른 남자친구가 있었고, 여자는 남자를 반가워하지만 남자는 다른남자와 함께있는 여자를보고 냉소적으로 인사만하고 지나감. 알고보니 여자의 새 남자친구는 부자인데다 공부도잘하고 여자의 부모님도 마음에들어하지만, 권위적인 태도때문에 여자는 습관처럼 만나고 있을뿐 엄청 사랑하는 상태는 아니었고, 그중 첫사랑을 다시만나니 마음이 흔들리기 시작함.</p>



<p>[후반부 스토리 전개: 너를 지키기 위한 이별]</p>



<ol class="wp-block-list">
<li>차가운 재회, 그리고 폭발하는 감정</li>
</ol>



<p>복학 후, 남자(이하 남주)는 여자(이하 여주)를 철저히 투명인간 취급합니다. 여주는 새 남자친구의 권위적이고 통제적인 태도에 지쳐가던 중, 과거 자신에게 한없이 따뜻하고 자유로웠던 남주를 보며 매일 밤 남몰래 눈물을 흘립니다.</p>



<p>어느 날, 대학 축제(혹은 동문 모임)에서 세 사람이 마주칩니다. 새 남자친구는 남주의 초라한 행색(아르바이트를 하며 고학생으로 지냄)을 교묘하게 무시하며 모욕을 줍니다. 남주는 덤덤히 돌아서려 하지만, 참다못한 여주가 새 남자친구에게 소리를 지르며 남주를 감싸고 돕니다. 분노한 새 남자친구가 여주를 거칠게 끌고 가려 하자, 결국 남주가 참지 못하고 주먹을 날립니다. 이 사건으로 남주는 징계를 받을 위기에 처합니다.</p>



<ol class="wp-block-list">
<li>밝혀지는 과거의 진실 (눈물의 1차 폭발)</li>
</ol>



<p>남주의 징계를 막기 위해 여주가 동분서주하던 중, 남주는 우연히 여주의 가장 친한 친구를 통해 **&#8217;그녀가 휴학하고 자신을 떠나야만 했던 진짜 이유&#8217;**를 듣게 됩니다.</p>



<p>과거, 여주의 부모님은 단순히 반대한 것이 아니었습니다. 남주가 평범하고 가난한 집안의 아들이라는 것을 알고, 남주의 부모님이 운영하는 작은 식당의 상가 계약을 해지시키고 남주의 학자금 대출까지 막아버리겠다고 여주를 협박했던 것입니다. 여주는 남주의 인생을 망칠 수 없어서, 자신이 모든 죗값을 지고 부모님이 점지해 준 부자 남자친구의 &#8216;인형&#8217;으로 살기를 선택했던 것이었습니다.</p>



<p>모든 진실을 알게 된 남주는 비가 쏟아지는 밤, 여주의 집 앞으로 달려갑니다. 우산도 없이 비를 맞으며 서 있는 남주를 발견한 여주. 남주는 무너져 내리며 오열합니다.</p>



<p>&#8220;왜 말 안 했어&#8230; 나 하나 지키겠다고, 너는 그 지옥에서 어떻게 버텼어&#8230;!&#8221;</p>



<p>결국 두 사람은 빗속에서 서로를 끌어안고 참아왔던 감정을 터뜨립니다.</p>



<ol class="wp-block-list">
<li>목숨 건 도피, 짧고도 눈부신 행복</li>
</ol>



<p>여주는 새 남자친구에게 이별을 통보하고 부모님과의 연을 끊은 채 집을 나옵니다. 두 사람은 아무도 모르는 바닷가 작은 마을로 도망칩니다. 돈은 없지만 과거 처음 만났을 때처럼 매일 웃고 떠들며, 세상에서 가장 행복한 며칠을 보냅니다. 남주는 공사장에서 막노동을 하면서도 여주에게 줄 싸구려 반지를 사며 행복해하고, 여주는 남주가 퇴근할 시간에 맞춰 된장찌개를 끓이며 영원한 사랑을 약속합니다. 하지만 이 행복은 폭풍 전야에 불과했습니다.</p>



<ol class="wp-block-list">
<li>가혹한 현실과 마지막 선택 (절정)</li>
</ol>



<p>여주의 집안과 권력자인 새 남자친구가 가만히 있지 않았습니다. 새 남자친구는 남주를 절도 및 폭행으로 엮어 경찰에 고발하고, 남주의 가족들을 철저하게 파멸로 몰아넣기 시작합니다.</p>



<p>어느 날, 시장에 나갔던 여주는 낡은 텔레비전 뉴스를 통해 남주의 아버지가 억울한 누명을 쓰고 쓰러져 중환자실에 실려 갔다는 소식을 접합니다. 집으로 돌아온 여주는, 고된 노동으로 손이 다 까진 채 곤히 잠든 남주의 얼굴을 보며 무너져 내립니다. 자신이 이 사람의 곁에 있는 한, 이 사람의 세상은 지옥이 될 것임을 깨닫습니다.</p>



<p>여주는 남주의 손에 자신이 샀던 싸구려 반지를 쥐여주고, 눈물로 편지를 남긴 채 새벽에 홀로 그 작은 집을 떠납니다.</p>



<p>편지 내용: &#8220;네 덕분에 내 인생에 진짜 숨을 쉬어봤어. 하지만 난 가난이 무서워. 네가 다치는 건 더 무서워. 그러니까 우리, 이번 생에서는 여기서 끝내자.&#8221;</p>



<ol class="wp-block-list">
<li>에필로그 (애절한 결말)</li>
</ol>



<p>시간이 흘러 7년 후.</p>



<p>남주는 독하게 공부하고 일하여 성공한 건축가(혹은 디자이너)가 되어 있습니다. 그는 자신의 첫 개인 전시회를 엽니다. 전시회장 한가운데에는 과거 대학교 시절, 자신이 여주를 부르기 위해 올라갔던 &#8216;그 높은 조형물&#8217;을 본뜬 거대한 작품이 전시되어 있습니다.</p>



<p>오픈파티가 끝난 늦은 밤, 남주가 홀로 전시회장을 정리하고 있을 때 문이 열립니다. 고급스러운 옷을 입었지만, 어딘가 생기를 잃고 텅 빈 눈동자를 한 여주가 들어옵니다. (여주는 결국 새 남자친구와 애정 없는 쇼윈도 부부로 살아가고 있습니다.)</p>



<p>두 사람의 시선이 허공에서 부딪힙니다. 다가가지도, 인사를 건네지도 못합니다.</p>



<p>여주는 남주의 작품(조형물)을 가만히 올려다봅니다. 그녀의 시선 끝에, 작품 구석에 아주 작게 새겨진 글귀가 보입니다.</p>



<p>[나의 첫 세상이자 마지막 숨이었던, 영원히 내려오지 못할 나의 그곳에게.]</p>



<p>여주의 눈에서 소리 없이 굵은 눈물이 툭, 떨어집니다. 남주 역시 붉어진 눈시울로 억지로 눈물을 삼키며 옅은 미소를 지어 보입니다.</p>



<p>서로를 미치도록 사랑하지만, 서로를 지키기 위해 영원히 타인으로 살아야만 하는 두 사람. 닿을 수 없는 거리를 둔 채, 하염없이 서로를 바라보는 두 사람의 슬픈 미소를 끝으로 영화는 막을 내립니다.</p>



<h2 class="wp-block-heading">2. 영상 제작용 콘티 작성</h2>



<h3 class="wp-block-heading">2-1. 콘티 제작 프롬프트</h3>



<p>영상 제작은 제 분야가 아니라 용어를 잘 모릅니다만 대충 궁금한 내용을 AI에게 부탁해봅니다.</p>



<p>위에 1-3의 스토리를 먼저 프롬프트에 넣고 아래를 명령해줍니다. (Gemini Pro 사용)</p>



<pre class="wp-block-code"><code>5분 분량의 영화 trailer를 만들려고해
프로세스: nano banana로 장면 하나하나 만든다음 이걸 이용해서, 사진과 사진 사이를 채우는방법으로 veo3.1모델로 동영상을 만들거임. (더좋은방법있으면 제안해줘, 확실한게아니면 그냥 제안하지마)
한씬은 짧으면 5~7초 길면 35초정도됨 (영상제작하면 한번에 8초인데 살짝식 잘라내면 7초정도나옴)
예고편에 나올 장면을 시간단위로쪼개서 알려줘. 장면의 장소는어디고 어떤 대사를 주고받는지 내래이션이 필요하다면 뭐라고 말하면 좋을지 영화 전체 내용은 알수없지만 대충 어떤느낌이구나는 알수있게 하려면 예고편을 어떻게 구성하는게 좋을까?</code></pre>



<h3 class="wp-block-heading">2-2. 콘티 결과물.</h3>



<p><br>제안해주신 AI 영상 제작 워크플로우(이미지 생성 후 Veo 3.1로 Image-to-Video 변환)는&nbsp;<strong>현재 AI 영화 제작에서 가장 일관성 높고 퀄리티를 보장하는 최적의 정석적인 방법</strong>입니다.</p>



<p>한 가지 팁을 드리자면, AI 영상은 입모양을 맞추는 립싱크(Lip-sync) 기술이 아직 완벽하지 않아 어색해질 수 있습니다. 따라서&nbsp;<strong>예고편은 등장인물들의 감정이 담긴 표정과 행동을 &#8216;슬로우 모션&#8217;이나 &#8216;시네마틱 룩&#8217;으로 보여주면서, 대사는 화면 밖에서 들리는 내레이션(Voice Over, VO) 형식으로 구성</strong>하는 것이 훨씬 고급스럽고 영화처럼 보입니다. (음성은 ElevenLabs 같은 AI 성우 툴을 추천합니다.)</p>



<p>5분이라는 시간은 예고편치고는 꽤 긴 &#8216;확장판(Extended) 트레일러&#8217; 분량이므로,<br><strong>[1막: 풋풋한 로맨스] -&gt; [2막: 균열과 이별] -&gt; [3막: 재회와 폭발] -&gt; [4막: 도피와 가혹한 현실] -&gt; [여운을 남기는 엔딩]</strong>&nbsp;순서로 감정을 천천히 끌어올리도록 장면을 쪼개어 구성했습니다. (스포일러를 방지하면서도 본편을 보고 싶게 만드는 데 집중했습니다.)</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3ac.png" alt="🎬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 영화 예고편 스토리보드 (5분 분량)</h3>



<h4 class="wp-block-heading"><strong>[도입부 &#8211; 0:00 ~ 1:00] 찬란했던 우리의 첫 세상 (장르: 청춘 로맨스)</strong></h4>



<p><em>음악: 밝고 경쾌하지만 어딘가 아련한 어쿠스틱 기타 선율</em></p>



<ul class="wp-block-list">
<li><strong>[0:00 &#8211; 0:08]</strong> 장소: 봄 햇살이 비치는 대학교 강의실.
<ul class="wp-block-list">
<li><strong>화면:</strong> 여주가 창가에 앉아 책을 넘기고 있고, 뒷자리에서 남주가 턱을 괸 채 여주를 넋을 잃고 바라본다.</li>



<li><strong>남주 내레이션(VO):</strong> &#8220;처음 본 순간 알았다. 내 세상의 중심이 저 애로 바뀌어버렸다는 걸.&#8221;</li>
</ul>
</li>



<li><strong>[0:08 &#8211; 0:15]</strong> 장소: 캠퍼스 벤치.
<ul class="wp-block-list">
<li><strong>화면:</strong> 남주가 여주 앞을 가로막고 핸드폰을 내밀지만, 여주는 차갑게 무시하고 지나간다. 남주가 머리를 긁적이며 허탈하게 웃는다.</li>
</ul>
</li>



<li><strong>[0:15 &#8211; 0:25]</strong> 장소: 캠퍼스 광장의 높은 조형물.
<ul class="wp-block-list">
<li><strong>화면:</strong> 남주가 조형물 위에서 위험하게 허우적거리다 아래로 툭 떨어진다. 놀란 여주가 눈을 크게 뜨고 입을 틀어막는다.</li>
</ul>
</li>



<li><strong>[0:25 &#8211; 0:35]</strong> 장소: 캠퍼스 벤치 (다시).
<ul class="wp-block-list">
<li><strong>화면:</strong> 팔에 촌스러운 붕대를 감은 남주가 뻔뻔한 표정으로 씩 웃으며 핸드폰을 내민다. 여주가 어이없다는 듯 작게 웃으며 번호를 찍어준다.</li>



<li><strong>여주 대사(오디오):</strong> &#8220;진짜 미련해. 알지?&#8221;</li>



<li><strong>남주 대사(오디오):</strong> &#8220;번호 줬으니까, 이번 주말에 데이트하는 거다?&#8221;</li>
</ul>
</li>



<li><strong>[0:35 &#8211; 1:00]</strong> 장소: 다양한 데이트 장소 (오락실, 벚꽃길, 한강 야경).
<ul class="wp-block-list">
<li><strong>화면:</strong> 공부만 하던 샌님 같은 여주가 남주의 손에 이끌려 활짝 웃으며 달린다. 두 사람이 아이스크림을 먹으며 서로를 사랑스럽게 바라본다. (행복한 몽타주)</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><strong>[2막 &#8211; 1:00 ~ 2:10] 현실의 벽, 그리고 엇갈림 (장르 전환: 멜로/드라마)</strong></h4>



<p><em>음악: 경쾌한 음악이 뚝 끊기고, 무겁고 차가운 피아노 단조 곡으로 전환</em></p>



<ul class="wp-block-list">
<li><strong>[1:00 &#8211; 1:10]</strong> 장소: 고급스럽고 숨막히는 분위기의 레스토랑 (여주 부모님과의 식사).
<ul class="wp-block-list">
<li><strong>화면:</strong> 위압적인 표정의 여주 부모님. 긴장한 채 억지웃음을 짓고 있는 남주. 고개를 푹 숙인 여주.</li>
</ul>
</li>



<li><strong>[1:10 &#8211; 1:20]</strong> 장소: 여주의 방 안 (밤).
<ul class="wp-block-list">
<li><strong>화면:</strong> 부모님 앞에서 무릎을 꿇고 울며 매달리는 여주.</li>
</ul>
</li>



<li><strong>[1:20 &#8211; 1:30]</strong> 장소: 텅 빈 버스 정류장.
<ul class="wp-block-list">
<li><strong>화면:</strong> 비가 내리는 밤. 남주가 홀로 앉아 여주에게 전화를 걸지만 연결되지 않는다. 남주의 핸드폰이 바닥으로 떨어진다.</li>
</ul>
</li>



<li><strong>[1:30 &#8211; 1:40]</strong> 장소: 군 훈련소 연병장.
<ul class="wp-block-list">
<li><strong>화면:</strong> 짧은 머리의 남주가 비를 맞으며 훈련을 받고 있다. 눈빛이 공허하고 차갑게 변해있다.</li>
</ul>
</li>



<li><strong>[1:40 &#8211; 1:55]</strong> 장소: 몇 년 후, 대학 복도.
<ul class="wp-block-list">
<li><strong>화면:</strong> 세련된 옷을 입은 여주가 지나가다 멈칫한다. 맞은편에서 작업복(아르바이트 복장)을 입은 남주가 걸어온다.</li>



<li><strong>여주 내레이션(VO):</strong> &#8220;다시 만나면, 단 한 번만이라도 안아보고 싶었는데&#8230;&#8221;</li>
</ul>
</li>



<li><strong>[1:55 &#8211; 2:10]</strong> 장소: 대학 복도 교차.
<ul class="wp-block-list">
<li><strong>화면:</strong> 남주가 여주를 본 체 만 체, 마치 투명인간처럼 차갑게 지나쳐버린다. 여주의 눈동자가 심하게 흔들린다. 화면 뒤로 새 남자친구가 나타나 여주의 어깨를 거칠게 쥔다.</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><strong>[3막 &#8211; 2:10 ~ 3:30] 폭발하는 진실과 목숨 건 도피 (절정부 1)</strong></h4>



<p><em>음악: 오케스트라 현악기가 합류하며 웅장하고 긴박하게 고조됨</em></p>



<ul class="wp-block-list">
<li><strong>[2:10 &#8211; 2:20]</strong> 장소: 동문 파티장.
<ul class="wp-block-list">
<li><strong>화면:</strong> 오만한 표정의 새 남자친구가 남주의 가슴팍을 툭툭 치며 비웃는다. 참다못한 여주가 새 남자친구를 밀친다. 새 남자친구가 여주의 뺨을 때리려(혹은 거칠게 끌고 가려) 하는 찰나, 남주의 주먹이 날아간다.</li>
</ul>
</li>



<li><strong>[2:20 &#8211; 2:35]</strong> 장소: 병원 혹은 낡은 식당 앞.
<ul class="wp-block-list">
<li><strong>화면:</strong> 남주가 누군가(여주의 친구)로부터 진실을 듣고 망연자실한 표정을 짓는다. 동공이 흔들리며 숨을 헐떡인다.</li>



<li><strong>남주 내레이션(VO):</strong> &#8220;왜 말 안 했어&#8230; 나 하나 살리겠다고, 너 혼자 무슨 지옥을 버틴 거야.&#8221;</li>
</ul>
</li>



<li><strong>[2:35 &#8211; 2:50]</strong> 장소: 여주의 집 앞 (폭우가 쏟아지는 밤).
<ul class="wp-block-list">
<li><strong>화면:</strong> 우산 없이 비를 맞고 서 있는 남주. 대문을 열고 나온 여주가 우산을 떨어뜨린다. 남주가 짐승처럼 울부짖으며 무너져 내리고, 여주가 달려가 그를 꽉 끌어안는다. (슬로우 모션)</li>
</ul>
</li>



<li><strong>[2:50 &#8211; 3:05]</strong> 장소: 인적 없는 바닷가 마을의 허름한 단칸방.
<ul class="wp-block-list">
<li><strong>화면:</strong> 두 사람이 손을 꼭 잡고 달린다. 비록 방은 좁고 초라하지만, 남주가 여주의 손가락에 싸구려 은반지를 끼워주며 세상을 다 가진 듯 웃는다.</li>
</ul>
</li>



<li><strong>[3:05 &#8211; 3:30]</strong>
<ul class="wp-block-list">
<li><strong>자막 등장:</strong> [우리의 사랑은] / [세상에서 가장 완벽한] / [죄였다]</li>



<li><strong>화면:</strong> 남주가 공사장에서 땀 흘리며 막노동을 하면서도 미소 짓는 모습 교차.</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><strong>[4막 &#8211; 3:30 ~ 4:30] 짓밟힌 세상, 그리고 가혹한 선택 (절정부 2)</strong></h4>



<p><em>음악: 거대한 북소리(쿵- 쿵-)와 함께 비극적인 사운드로 전환</em></p>



<ul class="wp-block-list">
<li><strong>[3:30 &#8211; 3:45]</strong> 장소: 어두운 사무실.
<ul class="wp-block-list">
<li><strong>화면:</strong> 새 남자친구가 분노에 차서 책상의 물건을 다 쓸어버린다. 서류(남주 아버지 식당 압류장 등)가 바닥에 흩뿌려진다.</li>
</ul>
</li>



<li><strong>[3:45 &#8211; 4:00]</strong> 장소: 바닷가 시장통 안 낡은 TV 앞.
<ul class="wp-block-list">
<li><strong>화면:</strong> 장바구니를 들고 있던 여주가 TV 뉴스를 보고 굳어버린다. 장바구니가 바닥에 떨어지며 토마토가 으깨진다.</li>



<li><strong>여주 내레이션(VO):</strong> &#8220;내가 네 곁에 있으면&#8230; 네 세상은 무너질 거야.&#8221;</li>
</ul>
</li>



<li><strong>[4:00 &#8211; 4:15]</strong> 장소: 밤, 단칸방 안.
<ul class="wp-block-list">
<li><strong>화면:</strong> 굳은살이 박인 남주의 거친 손. 여주가 소리 없이 오열하며, 남주의 손에 그가 사준 &#8216;싸구려 반지&#8217;를 쥐여준다.</li>
</ul>
</li>



<li><strong>[4:15 &#8211; 4:30]</strong> 장소: 새벽 안개 낀 터미널.
<ul class="wp-block-list">
<li><strong>화면:</strong> 홀로 첫차를 타고 떠나는 여주의 창밖을 보는 텅 빈 눈동자.</li>



<li><strong>여주 내레이션(VO):</strong> &#8220;그러니까 우리&#8230; 이번 생에서는 여기서 끝내자.&#8221;</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><strong>[5막 &#8211; 4:30 ~ 5:00] 에필로그: 영원히 내려오지 못할 곳</strong></h4>



<p><em>음악: 모든 악기가 멈추고, 아주 조용한 피아노 단일 음(딩- 딩-)과 빗소리만 남음</em></p>



<ul class="wp-block-list">
<li><strong>[4:30 &#8211; 4:40]</strong> 장소: 7년 후, 화려하고 넓은 갤러리 중앙.
<ul class="wp-block-list">
<li><strong>화면:</strong> 과거 캠퍼스의 &#8216;조형물&#8217;을 그대로 본뜬 거대한 조각상이 조명을 받고 있다. 슈트를 입은 남주(성공한 모습)가 그 앞에 서 있다.</li>
</ul>
</li>



<li><strong>[4:40 &#8211; 4:50]</strong> 장소: 갤러리 입구.
<ul class="wp-block-list">
<li><strong>화면:</strong> 화려하지만 생기 없는 표정의 여주가 들어선다. 조형물 앞에 선 남주와 멀리서 시선이 얽힌다. (서로 다가가지 못함)</li>
</ul>
</li>



<li><strong>[4:50 &#8211; 4:55]</strong>
<ul class="wp-block-list">
<li><strong>화면:</strong> 조형물 구석에 새겨진 글귀가 클로즈업된다.</li>



<li><strong>[나의 첫 세상이자 마지막 숨이었던, 영원히 내려오지 못할 나의 그곳에게.]</strong></li>
</ul>
</li>



<li><strong>[4:55 &#8211; 5:00]</strong>
<ul class="wp-block-list">
<li><strong>화면:</strong> 여주의 뺨 위로 소리 없이 떨어지는 굵은 눈물. 그리고 멀리서 이를 보며 억지로 입꼬리를 올려 희미하게 웃어 보이는 남주의 얼굴에서 화면 암전(Fade Out).</li>



<li><strong>타이틀 로고 등장</strong> (예: &#8220;너의 세상에서 숨을 쉬다&#8221; 혹은 정해두신 영화 제목)</li>



<li><strong>자막:</strong> 2025년 가을, 개봉.</li>
</ul>
</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 영상 제작 팁 (Veo 3.1 활용 시):</strong></p>



<ol class="wp-block-list">
<li>감정 씬(눈물, 오열, 재회)에서는 프롬프트에 cinematic lighting, ultra detailed eyes, slow motion, hyper-realistic, shallow depth of field 등을 넣으면 훨씬 극적인 연출이 가능합니다.</li>



<li>예고편 편집 시 장면 사이사이에 블랙 화면(Fade in/out)을 짧게 넣고, 거기에 숨소리나 심장 박동 소리를 넣으면 몰입감이 엄청나게 올라갑니다.</li>
</ol>



<h2 class="wp-block-heading">3. 등장인물 (캐릭터 생성)</h2>



<p>개인적으로 몇가지 AI를 사용해보니 <strong>Nano Banana 2</strong>가 가장 마음에 들더군요. <strong>Nano Banana Pro</strong>가 이미지 자체 디테일은 더 좋았지만 드라마틱한 차이는 아니었고, <strong>Banana 2</strong>가 <strong>한글깨짐</strong>없이 이미지가 잘 생성되는것 같았어요 (2026년 4월 기준)</p>



<p>ChatGPT에게 Nano Banana용 프롬프트를 사용해 대학생 새내기  남주 여주 프롬프트를 작성해달라고 요청. <br><br>아래 예시처럼 작성하는게 국룰인가봅니다. 시행착오를 줄이기위해 무작정 따라해줍니다.</p>



<pre class="wp-block-code"><code>&#91;고정 캐릭터 정의]
+
&#91;현재 상황/행동]
+
&#91;촬영 스타일]</code></pre>



<h3 class="wp-block-heading">3-1. 남주 프롬프트</h3>



<pre class="wp-block-code"><code>same person, a 19-year-old Korean male, sharp jawline, monolid eyes, short black hair with side part, slightly tanned skin, calm expression, 

standing in a campus of an University photorealistic,

50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="559" data-attachment-id="408" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-a-19-year-old-kor_499106318704984072/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;1b789bf206476a69b9041fe3493f09a8\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;1bf7718e7d5f7a7986f70b442cc6e043f7347f600845b0c6bdd7a70b01cbc2ea11445d9491dd35239ce303a46bd6224dd6bc32e071133c9065c33b1ec24e3729\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;173f2c515fa8de56b85eea62161032cd452c402c01cfc248c27d813057184ce8a1ac0106e405e421face604173f27fb90a800fd067eb85268b1be6f313448410\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;813ffb3eff9fb750f367a3cfd24194f49d319852ca68ad5d0303318871c5d911\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;1b789bf206476a69b9041fe3493f09a8\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;ea4094e4fd59e662f0c09f77d5652f5b44db26591ae9441f1944bc1ea25381bcbb603f5a840b6e943729653f350bada1c848a7eb5a7b9ef8128fc3e956684387\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;db19454a515da8a75e6c58ce4b3630c254e23dc963fc94fb3db3e8d1874511075dd896b43fc6ca526d9841c1ad390d6d008ef3891a30012dbf1e9a15822e0226\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;813ffb3eff9fb750f367a3cfd24194f49d319852ca68ad5d0303318871c5d911\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, a 19-year-old Kor_499106318704984072" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;1b789bf206476a69b9041fe3493f09a8&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;1bf7718e7d5f7a7986f70b442cc6e043f7347f600845b0c6bdd7a70b01cbc2ea11445d9491dd35239ce303a46bd6224dd6bc32e071133c9065c33b1ec24e3729\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;173f2c515fa8de56b85eea62161032cd452c402c01cfc248c27d813057184ce8a1ac0106e405e421face604173f27fb90a800fd067eb85268b1be6f313448410\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;813ffb3eff9fb750f367a3cfd24194f49d319852ca68ad5d0303318871c5d911\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;1b789bf206476a69b9041fe3493f09a8&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;ea4094e4fd59e662f0c09f77d5652f5b44db26591ae9441f1944bc1ea25381bcbb603f5a840b6e943729653f350bada1c848a7eb5a7b9ef8128fc3e956684387\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;db19454a515da8a75e6c58ce4b3630c254e23dc963fc94fb3db3e8d1874511075dd896b43fc6ca526d9841c1ad390d6d008ef3891a30012dbf1e9a15822e0226\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;813ffb3eff9fb750f367a3cfd24194f49d319852ca68ad5d0303318871c5d911\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-1024x559.jpg" alt="" class="wp-image-408" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072.jpg 1408w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">3-2. 여주 프롬프트</h3>



<pre class="wp-block-code"><code>same person, a 19-year-old Korean female, soft oval face, clear pale skin, long straight black hair with natural center part, gentle monolid eyes, small nose, natural lips, minimal makeup, calm and slightly warm expression, 

standing in a university campus, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" data-attachment-id="409" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_use-this-person-as-reference-_499111806595280903/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903.jpg" data-orig-size="1264,843" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;5c8248d596fba9baf8ce1d2dbcb425ac\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;622f65843f18d0215ae587a3e88995c82e20db6c51bf637f7a293d2932171b812747c5b3dfc62ae56acd62e6e2a6ee5506de069c77f1cc068c478e8bfecad767\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;f6b396f831b1d2c8e5a7a42aab9c9793ddacaa944d8cc4e2af8b07fcc3a9b4419826477b895d2f043898348e7f7fd4e60f67b7d82f5bc4bc1ac541ab5e895152\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;8770a7bc7b1d494db394b66b09691f035432735579634ebb705a12fa158c4fed\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;5c8248d596fba9baf8ce1d2dbcb425ac\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;43c1e56349f3638d95b2f1102b2ec507d33fedc33c66a35e7b8bed4505cc9ecb37a652de2b63ad7e5d2a4012f8498a85fae747bbd0ad35d1bdac0c85484a1755\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;563791b99b68efd1ff4a7c9b5a412e4ffe7a021f0c8e1ef805ada76d32299e490671d223558957172ebbdec39a6c6d6b8ba979bf60085e411607a4cfd7ca4590\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;8770a7bc7b1d494db394b66b09691f035432735579634ebb705a12fa158c4fed\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_use this person as reference, _499111806595280903" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;5c8248d596fba9baf8ce1d2dbcb425ac&amp;#8221;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;622f65843f18d0215ae587a3e88995c82e20db6c51bf637f7a293d2932171b812747c5b3dfc62ae56acd62e6e2a6ee5506de069c77f1cc068c478e8bfecad767\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;f6b396f831b1d2c8e5a7a42aab9c9793ddacaa944d8cc4e2af8b07fcc3a9b4419826477b895d2f043898348e7f7fd4e60f67b7d82f5bc4bc1ac541ab5e895152\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;8770a7bc7b1d494db394b66b09691f035432735579634ebb705a12fa158c4fed\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;5c8248d596fba9baf8ce1d2dbcb425ac&amp;#8221;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;43c1e56349f3638d95b2f1102b2ec507d33fedc33c66a35e7b8bed4505cc9ecb37a652de2b63ad7e5d2a4012f8498a85fae747bbd0ad35d1bdac0c85484a1755\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;563791b99b68efd1ff4a7c9b5a412e4ffe7a021f0c8e1ef805ada76d32299e490671d223558957172ebbdec39a6c6d6b8ba979bf60085e411607a4cfd7ca4590\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;8770a7bc7b1d494db394b66b09691f035432735579634ebb705a12fa158c4fed\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-1024x683.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-1024x683.jpg" alt="" class="wp-image-409" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-1024x683.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-300x200.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-768x512.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903.jpg 1264w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">3-3. 기타 프롬프트</h3>



<p>첫 이미지 생성 후 이 를 재사용할때, 이미지를 레퍼런스로 업로드후 아래처럼 작성하면 동일 인물 유지 됨.</p>



<pre class="wp-block-code"><code>use this person as reference, same face, same identity, 
now walking on the street at night, neon lights, cinematic</code></pre>



<h4 class="wp-block-heading">3-3-1. 촬영 스타일까지 고정</h4>



<pre class="wp-block-code"><code>same lighting style, same camera angle, same lens</code></pre>



<h3 class="wp-block-heading">3-4. 그 외 등장인물 들</h3>



<p>한 사람 한 사람 프롬프트 작성하는것도 시간이 오래걸리겠죠? 다시 GPT에게 프롬프트를 요청합니다.</p>



<pre class="wp-block-code"><code>다른 등장인물들에대해서 묘사를 할테니 니가 Nano Banana로 만들 프롬프트 작성해줘. 인물의 생김새는 내가 적어준걸가지고 너가 알아서 만들어 줘.

친구1: 19살 남자 대학생, 진지하고 준법정신이 강한친구. 무뚝뚝하지만 고지식하고 항상 바른말을 해주는 친구. 키가 큰 편.

친구2: 19살 남자 대학생, 장난끼가 많고 재밌어서 분위기 메이커 역할을 많이함. 때론 사고도 치지만, 친구가 힘들어하면 공감하고 위로를 잘해줌.

남자 주인공 엄마: 47세, 여자 주택가 근처에있는 작은 식당 주인. 인품 인상이 모두 좋음.

여자 주인공 엄마: 50세, 여자 사업가 남편을 둔 부자 사모님. 학력이 좋고, 다른사람을 깔보는 경향이 있음. 비싼 옷을 평소에 입고다님

여자 주인공 아빠: 53세, 남자 사업가. 엄하고 딸을 위해서 뭐든지 다해주지만 딸이 아무남자나 만나는걸 극도로 싫어함.

여자 주인공의 새 남자친구: 24세, 남자 대학교 졸업반이고, 성적이 우수하며 잘생김, 부모님이 부자라 비싼 외제차를 타고다님. 가부장적이고 사람보다 돈을 우선시함.

여자 주인공의 친구: 19살 여자 대학생, 그냥 평범함.</code></pre>



<h4 class="wp-block-heading">3-4-1. 남주 친구 1</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 19-year-old Korean male, tall height, long and straight posture, sharp rectangular face, defined jawline, short neatly trimmed black hair, thick straight eyebrows, monolid eyes, serious expression, no smile, clean and simple outfit, 

standing in a university campus, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="410" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499115659247984641/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;ab4ef8960f79f20c6a450518859d4439\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;d5f7d332a78a833047bb3a672dd5f1cb227a593ac25394125f60c4095d6718d387c59c11c98ebcc7a66e2d881ba55492852595c80d398ae9c8c355b5ffa5e2ff\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;7a0025e2ee87f4b99c56139ef456456d0942044c98b8a5841f39879dc952f4eebfa6c33011bd9c45d1f30479d86abc1e5acbf8b8b8fcc0f7cbf8a65320edfd8a\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;efe807836c64a304d5b608afa7c081860d89a9c86a786c8290217fb5253b8d89\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;ab4ef8960f79f20c6a450518859d4439\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;0e2a58abdf4db8437939d86c757f248849a9e640ee9a67f4605f7c004b56a397f7b5a34c60ed0a2d96bc4f302572ea325b86d5a74285509a0c683b4ddbecf342\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;f24279c1a5bcac61db2c15662d6b3fcd79bb537192313ab46f3195cc57122095645d37a950e08fe4c8c2e4b1cca002b0d3b5c752111997119a2c75784f3b1d8b\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;efe807836c64a304d5b608afa7c081860d89a9c86a786c8290217fb5253b8d89\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499115659247984641" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;ab4ef8960f79f20c6a450518859d4439&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;d5f7d332a78a833047bb3a672dd5f1cb227a593ac25394125f60c4095d6718d387c59c11c98ebcc7a66e2d881ba55492852595c80d398ae9c8c355b5ffa5e2ff\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;7a0025e2ee87f4b99c56139ef456456d0942044c98b8a5841f39879dc952f4eebfa6c33011bd9c45d1f30479d86abc1e5acbf8b8b8fcc0f7cbf8a65320edfd8a\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;efe807836c64a304d5b608afa7c081860d89a9c86a786c8290217fb5253b8d89\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;ab4ef8960f79f20c6a450518859d4439&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;0e2a58abdf4db8437939d86c757f248849a9e640ee9a67f4605f7c004b56a397f7b5a34c60ed0a2d96bc4f302572ea325b86d5a74285509a0c683b4ddbecf342\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;f24279c1a5bcac61db2c15662d6b3fcd79bb537192313ab46f3195cc57122095645d37a950e08fe4c8c2e4b1cca002b0d3b5c752111997119a2c75784f3b1d8b\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;efe807836c64a304d5b608afa7c081860d89a9c86a786c8290217fb5253b8d89\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-1024x559.jpg" alt="" class="wp-image-410" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-2. 남주 친구 2</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 19-year-old Korean male, average height, slightly messy short black hair, soft round face, expressive monolid eyes, playful smile, lively and energetic expression, casual outfit, 

standing in a university campus, laughing or joking, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="411" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499115923526889473/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473.png" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499115923526889473" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-1024x559.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-1024x559.png" alt="" class="wp-image-411" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-1024x559.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-300x164.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-768x419.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473.png 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-3 남주 엄마 (따뜻한 식당 사장)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 47-year-old Korean female, warm and kind face, slightly rounded features, short permed black hair, gentle eyes, soft smile, wearing simple and clean clothes, friendly and welcoming expression, 

standing inside a small local restaurant, 

photorealistic, 50mm lens, warm natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="412" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116301333020681/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;daa61d0276807dd671da6bfb26042c22f9438c4d0c7d3f68766257ea69976461a1b48b42e57a765d49d551bab98bd60db043a462601c12c2e14c7a3d30b75659\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;8293dcb7f18ed18aca3729a3b476bd8af6f4c1c7c68565ea08e9503546968567621fc148551218e57846b0d2d4604f3711397d9104cd9cb33211e44792541ef7\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;430da84f3680b31ff0a9e4e205f5e31285094cf336f470a21b84a27b6052833f\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;8a82c7ed331f939cbae053aea919cb3b9942b461d0bd9455f83fd9d8300e513e6f457c9577c8420585ce35d4ce8febdedad041988bc85ccb82ac77d8b33d76ea\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;3d4b2810ca22546327cf50895d8c715a8f488f63f5b0b3eb0fb1b8c6e82faf343f0e719796c3c82c353bacaa8ab76f9c5009b97189688ea08627e01abc7b5ef5\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;430da84f3680b31ff0a9e4e205f5e31285094cf336f470a21b84a27b6052833f\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116301333020681" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;daa61d0276807dd671da6bfb26042c22f9438c4d0c7d3f68766257ea69976461a1b48b42e57a765d49d551bab98bd60db043a462601c12c2e14c7a3d30b75659\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;8293dcb7f18ed18aca3729a3b476bd8af6f4c1c7c68565ea08e9503546968567621fc148551218e57846b0d2d4604f3711397d9104cd9cb33211e44792541ef7\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;430da84f3680b31ff0a9e4e205f5e31285094cf336f470a21b84a27b6052833f\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;8a82c7ed331f939cbae053aea919cb3b9942b461d0bd9455f83fd9d8300e513e6f457c9577c8420585ce35d4ce8febdedad041988bc85ccb82ac77d8b33d76ea\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;3d4b2810ca22546327cf50895d8c715a8f488f63f5b0b3eb0fb1b8c6e82faf343f0e719796c3c82c353bacaa8ab76f9c5009b97189688ea08627e01abc7b5ef5\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;430da84f3680b31ff0a9e4e205f5e31285094cf336f470a21b84a27b6052833f\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-1024x559.jpg" alt="" class="wp-image-412" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-4 여주 엄마 (부자 사모님, 차가움)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 50-year-old Korean female, elegant and sharp facial features, pale flawless skin, styled medium-length hair, cold and confident eyes, subtle but arrogant expression, wearing luxury designer clothes and accessories, 

standing in a high-end interior, 

photorealistic, 50mm lens, soft luxury lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="413" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116336485535752/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;01f33696a68d861a9a200ff7371e600caac131890c969ed9a4f2900c10b7a80a114f335ef7a987ce25c72daff6e6455834601a04d573097159a79661343a9ee1\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;b7163d90a232cbe2f0f675293255b1847e7a1174f24a81c0f66dc4bae8059808f22f273ade9041d1a49bb91970c788b9f9ae2780477cac9e6d8fc49772d509cb\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;94e0a0be85ea6ed0e68ea2c1e7d9028c5cf20996aa0d022d358963fc96488864\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;94cf459582a6c08d226157e9d77f2958e3f894b867c5cd940f3572dd8d66fd10377d5a299e5fcf734765f87df7ce107ca7e17ad22b65a44960d4e827e65c3c3f\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;669193e494a64668047cb79fcf59fa878f07e1924c8eba45a923f68b2c3329461e3e8b447de7e28406c9b5d4425c9408c4e537bac2b393c053cd35651f190420\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;94e0a0be85ea6ed0e68ea2c1e7d9028c5cf20996aa0d022d358963fc96488864\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116336485535752" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;01f33696a68d861a9a200ff7371e600caac131890c969ed9a4f2900c10b7a80a114f335ef7a987ce25c72daff6e6455834601a04d573097159a79661343a9ee1\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;b7163d90a232cbe2f0f675293255b1847e7a1174f24a81c0f66dc4bae8059808f22f273ade9041d1a49bb91970c788b9f9ae2780477cac9e6d8fc49772d509cb\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;94e0a0be85ea6ed0e68ea2c1e7d9028c5cf20996aa0d022d358963fc96488864\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;94cf459582a6c08d226157e9d77f2958e3f894b867c5cd940f3572dd8d66fd10377d5a299e5fcf734765f87df7ce107ca7e17ad22b65a44960d4e827e65c3c3f\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;669193e494a64668047cb79fcf59fa878f07e1924c8eba45a923f68b2c3329461e3e8b447de7e28406c9b5d4425c9408c4e537bac2b393c053cd35651f190420\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;94e0a0be85ea6ed0e68ea2c1e7d9028c5cf20996aa0d022d358963fc96488864\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-1024x559.jpg" alt="" class="wp-image-413" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>아래 사진은 실수로 여주 엄마 아빠 프롬프트를 둘 다 넣고 생성했는데 진짜 엄마 싱크로율 완전 똑같네요.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="414" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116362553069572/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;c6f3eeb4edfb3792858d70a9a10903df673cec52c7fca4c414781a7d3aba64ecee2b24831d29d65ebc38ee903d8dc489cf9bbbe303806830d06fd13dd81e48d4\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;a51d8b94f306212167ee6943257a765315bd20fb3a836a6c4aeeda4b4a5c9885f7fab7c046056104bb3d6a25effd65db343206aa54207e6434626b818f9571e0\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;826016a4257c5c509c971f7bc56d2046c05b8155075827acd7435c6b3d8b8fb5\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;2ed9bbbece06054dd70c5c721d8b7960697aae5943d1b2e9bc4aa9c3c33696afc8cee6d5f5d95db938b26efefc8ffce95214c4b8003b36d47b69c1fe7245be89\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;eee38f56ff0259a8e13717b363d015602913f0e192d3fe4a0a60962f5de06dbd0bac9ee485a87abc32d93a588bb68c46a9e984984b6bc292285c2e520180153d\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;826016a4257c5c509c971f7bc56d2046c05b8155075827acd7435c6b3d8b8fb5\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116362553069572" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;c6f3eeb4edfb3792858d70a9a10903df673cec52c7fca4c414781a7d3aba64ecee2b24831d29d65ebc38ee903d8dc489cf9bbbe303806830d06fd13dd81e48d4\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;a51d8b94f306212167ee6943257a765315bd20fb3a836a6c4aeeda4b4a5c9885f7fab7c046056104bb3d6a25effd65db343206aa54207e6434626b818f9571e0\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;826016a4257c5c509c971f7bc56d2046c05b8155075827acd7435c6b3d8b8fb5\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;2ed9bbbece06054dd70c5c721d8b7960697aae5943d1b2e9bc4aa9c3c33696afc8cee6d5f5d95db938b26efefc8ffce95214c4b8003b36d47b69c1fe7245be89\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;eee38f56ff0259a8e13717b363d015602913f0e192d3fe4a0a60962f5de06dbd0bac9ee485a87abc32d93a588bb68c46a9e984984b6bc292285c2e520180153d\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;826016a4257c5c509c971f7bc56d2046c05b8155075827acd7435c6b3d8b8fb5\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-1024x559.jpg" alt="" class="wp-image-414" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-5 여주 아빠 (엄격한 사업가)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 53-year-old Korean male, sharp and authoritative face, short neatly styled black hair with slight gray, strong jawline, intense eyes, serious expression, wearing a formal suit, 

standing in an office, 

photorealistic, 50mm lens, dramatic lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="417" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499118648532664323/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;f61396d0c390e4ffd7a0e65908f65f9e\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;561cf232c6183af8d43f781d6bc7337e496fcd8d252a14eda2c4ca0b0a593fd6dae0316dc0e462784310f2b4ca03101c39341706a13745b045c7c37ac6190c1b\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;5e1be7e1d063809a407d0cd20665335cff97121dc254e2c0a2aa62697f7ffdfb900a353c0ad5478b087bef6afcf4d7485af4f3cd3b623c813413e42d07b9e369\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;4924d802f8c9340cf3f7ea9379c7adbf1ae9b01d4163967fa44df163e9cccd0b\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;f61396d0c390e4ffd7a0e65908f65f9e\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;d70f9d08cfcea2882e08575f7e980a6134721c836d7985f8f5b41417661d9682c624e64b5eec1b256a4ebf43059f92c1ea92368479d90f0136fa548cf7189cc4\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;ae43b0aca64bc0908209b305939b9e4a2cd8a013450dc5d4218d75e17cf13cc59a9912578f2d860060037f4c2d44b0505a64c6f46b94250bbd4eda9f6972eded\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;4924d802f8c9340cf3f7ea9379c7adbf1ae9b01d4163967fa44df163e9cccd0b\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499118648532664323" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;f61396d0c390e4ffd7a0e65908f65f9e&amp;#8221;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;561cf232c6183af8d43f781d6bc7337e496fcd8d252a14eda2c4ca0b0a593fd6dae0316dc0e462784310f2b4ca03101c39341706a13745b045c7c37ac6190c1b\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;5e1be7e1d063809a407d0cd20665335cff97121dc254e2c0a2aa62697f7ffdfb900a353c0ad5478b087bef6afcf4d7485af4f3cd3b623c813413e42d07b9e369\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;4924d802f8c9340cf3f7ea9379c7adbf1ae9b01d4163967fa44df163e9cccd0b\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;f61396d0c390e4ffd7a0e65908f65f9e&amp;#8221;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;d70f9d08cfcea2882e08575f7e980a6134721c836d7985f8f5b41417661d9682c624e64b5eec1b256a4ebf43059f92c1ea92368479d90f0136fa548cf7189cc4\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;ae43b0aca64bc0908209b305939b9e4a2cd8a013450dc5d4218d75e17cf13cc59a9912578f2d860060037f4c2d44b0505a64c6f46b94250bbd4eda9f6972eded\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;4924d802f8c9340cf3f7ea9379c7adbf1ae9b01d4163967fa44df163e9cccd0b\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-1024x559.jpg" alt="" class="wp-image-417" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="418" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499117486387478529/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;32bedd0ae347c6cec322684d81cbb0cbc2a0d9d7f53f0d5b85ceec957c483efa4d93e8b9ee010bcbb40984afd6914e26128162c621555bdb38a30b11da4d3bff\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;61e695b5c8d73b6c7b48d6b74e424990e023f1e885af0595611b9af9f738e54c69b8057ccab677cb8f48e3bd795620740514f7491ddc8160623c2d2a1650a036\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;2a146868756972ba75527525da9087ceb07508d18fbc32715676c9496c06be1d\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;5000ddb8c38e2ac2216f28f74e3849f081393fe23d88a96967911ca38230599ad972080c889636a5b20060bbebdedbfa11e209069736d75689fc5206093a3745\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;29f5bb6abd1d9d375b1a156608a5636c2e32b627664182e3288b5f3bae3954c3e0e2290ce766a51d01c2a1982c51c8916805d17d8ae0a66d685d428e59aa672b\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;2a146868756972ba75527525da9087ceb07508d18fbc32715676c9496c06be1d\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499117486387478529" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;32bedd0ae347c6cec322684d81cbb0cbc2a0d9d7f53f0d5b85ceec957c483efa4d93e8b9ee010bcbb40984afd6914e26128162c621555bdb38a30b11da4d3bff\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;61e695b5c8d73b6c7b48d6b74e424990e023f1e885af0595611b9af9f738e54c69b8057ccab677cb8f48e3bd795620740514f7491ddc8160623c2d2a1650a036\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;2a146868756972ba75527525da9087ceb07508d18fbc32715676c9496c06be1d\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;5000ddb8c38e2ac2216f28f74e3849f081393fe23d88a96967911ca38230599ad972080c889636a5b20060bbebdedbfa11e209069736d75689fc5206093a3745\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;29f5bb6abd1d9d375b1a156608a5636c2e32b627664182e3288b5f3bae3954c3e0e2290ce766a51d01c2a1982c51c8916805d17d8ae0a66d685d428e59aa672b\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;2a146868756972ba75527525da9087ceb07508d18fbc32715676c9496c06be1d\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-1024x559.jpg" alt="" class="wp-image-418" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-6 여주 새 남자친구 (능력+외모+가부장)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 24-year-old Korean male, tall and well-built, handsome face with sharp features, clean styled hair, confident and slightly cold expression, wearing expensive fashionable clothes, luxury watch, 

standing next to a high-end foreign car, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="415" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116402193473542/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;ab832585c7f811d4393452b87bee908af5df1dc6ae0ee768ca8257dcca12a62f1319a40225e5714c18aeda6d327dca0f252021899fc581db29773bb5f39c5b43\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;201e25d16e2132f34b24f9e7cf30b2f71c8e77f9f3c54aebd0de4bfe3537cd97bc75b55fc1239be47e7b1a8fff6ab2df25a10d745c0e796a79bdd0d0110517b8\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;b0d99f7a5f79a772ecbc76c929069b5b85314774f00cc9b14a1cb95d9c59c12d\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;626e3fc79db193c693aadfbfae1f7ce3916d8d648b11b33a06b40248e4e7da31bd1e76e7ecb83d92e145374dc698c25fe82a5fd1f3d8e6e9b906e405924e9183\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;29eab461dd82d525536d17b0ddb0d7d1d8d01ca6383dc221da9e3044d64fe2a242b0314a4b420bc0c1c19515fea29936e803d5446911c49ea55be316d1eb34b9\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;b0d99f7a5f79a772ecbc76c929069b5b85314774f00cc9b14a1cb95d9c59c12d\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116402193473542" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;ab832585c7f811d4393452b87bee908af5df1dc6ae0ee768ca8257dcca12a62f1319a40225e5714c18aeda6d327dca0f252021899fc581db29773bb5f39c5b43\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;201e25d16e2132f34b24f9e7cf30b2f71c8e77f9f3c54aebd0de4bfe3537cd97bc75b55fc1239be47e7b1a8fff6ab2df25a10d745c0e796a79bdd0d0110517b8\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;b0d99f7a5f79a772ecbc76c929069b5b85314774f00cc9b14a1cb95d9c59c12d\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;626e3fc79db193c693aadfbfae1f7ce3916d8d648b11b33a06b40248e4e7da31bd1e76e7ecb83d92e145374dc698c25fe82a5fd1f3d8e6e9b906e405924e9183\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;29eab461dd82d525536d17b0ddb0d7d1d8d01ca6383dc221da9e3044d64fe2a242b0314a4b420bc0c1c19515fea29936e803d5446911c49ea55be316d1eb34b9\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;b0d99f7a5f79a772ecbc76c929069b5b85314774f00cc9b14a1cb95d9c59c12d\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-1024x559.jpg" alt="" class="wp-image-415" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-7 여주 친구 (평범)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 19-year-old Korean female, average appearance, soft natural face, medium-length black hair, minimal makeup, neutral and friendly expression, simple casual outfit, 

standing in a university campus, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="416" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116445625524227/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;f1cded1237bf2dbd42f6284b172428f481a84700b2f49851c54001f7271e9fd968846eaa81af3567a23fd79ea324e7e584f0b0a320792b6c46684c8dd980883c\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;f435807809e4cd317120d79e0165b82d964ec43ba49becefb25f3e8049c4277371c6a039b77038feffd04c7e9f2653ebeab28c925b003221a72bf1c8fa01e697\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;cdb3347a84a01468fa69f46af2fefffe6ece177f0ccd046a004821570be9a187\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;951619369e8f3bffaa15b9e1183b991e626dba48e7846cc12287534e7b4015625b605f192a5c89150bc66b84d278258ac7eb20eb204a56b311015bacccdcf28e\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;1c696488097bb3ee9fcebbf2bd1abde236043b819ca24265b96ee0e8e4a6d38cd54ba0f7d78732e8603dcd4da61b44249298d9fabeae457a0c918b30a9f131b8\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;cdb3347a84a01468fa69f46af2fefffe6ece177f0ccd046a004821570be9a187\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116445625524227" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;f1cded1237bf2dbd42f6284b172428f481a84700b2f49851c54001f7271e9fd968846eaa81af3567a23fd79ea324e7e584f0b0a320792b6c46684c8dd980883c\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;f435807809e4cd317120d79e0165b82d964ec43ba49becefb25f3e8049c4277371c6a039b77038feffd04c7e9f2653ebeab28c925b003221a72bf1c8fa01e697\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;cdb3347a84a01468fa69f46af2fefffe6ece177f0ccd046a004821570be9a187\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;951619369e8f3bffaa15b9e1183b991e626dba48e7846cc12287534e7b4015625b605f192a5c89150bc66b84d278258ac7eb20eb204a56b311015bacccdcf28e\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;1c696488097bb3ee9fcebbf2bd1abde236043b819ca24265b96ee0e8e4a6d38cd54ba0f7d78732e8603dcd4da61b44249298d9fabeae457a0c918b30a9f131b8\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;cdb3347a84a01468fa69f46af2fefffe6ece177f0ccd046a004821570be9a187\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-1024x559.jpg" alt="" class="wp-image-416" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/making-a-movie-with-ai-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">406</post-id>	</item>
		<item>
		<title>딥러닝(1) &#8211; 기초 개념</title>
		<link>https://blog.kggstudio.com/%eb%94%a5%eb%9f%ac%eb%8b%9d1-%ea%b8%b0%ec%b4%88-%ea%b0%9c%eb%85%90/</link>
					<comments>https://blog.kggstudio.com/%eb%94%a5%eb%9f%ac%eb%8b%9d1-%ea%b8%b0%ec%b4%88-%ea%b0%9c%eb%85%90/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Wed, 08 Apr 2026 06:16:37 +0000</pubDate>
				<category><![CDATA[Deep Learning]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[딥러닝]]></category>
		<category><![CDATA[딥러닝용어]]></category>
		<category><![CDATA[머신러닝용어]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=387</guid>

					<description><![CDATA[약 인공지능 / 강 인공지능 AI의 종류 딥러닝의 계층 모델 학습방법 지도학습(Supervised Learning) &#8211; 문제과 답(Label)을 알려주고, 유사성을 알아서 파악하라고(훈련) 한뒤 또 다른 문제를 주고 답을 예측하게하는것 비지도학습(Unsupervised Learning) &#8211; 문제만 주고 답을 알아서 찾으라는 형태. 준지도학습(Semi-Supervised Learning) &#8211; 학습데이터에 답이 있는것도 있고 없는것도 상당히 많이 존재할때 사용 강화학습(Reinforcement Learning) &#8211; 문제를 주고 먼저 풀게한뒤 ... <a title="딥러닝(1) &#8211; 기초 개념" class="read-more" href="https://blog.kggstudio.com/%eb%94%a5%eb%9f%ac%eb%8b%9d1-%ea%b8%b0%ec%b4%88-%ea%b0%9c%eb%85%90/" aria-label="딥러닝(1) &#8211; 기초 개념에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>약 인공지능 / 강 인공지능</p>



<h3 class="wp-block-heading">AI의 종류</h3>



<ul class="wp-block-list">
<li>규칙기반 AI &#8211; 미리 작성된 일련의 규칙이나 알고리즘에 의해 작동되는 AI</li>



<li>머신러닝 &#8211; <strong>데이터를 통해 모델을 학습</strong>시키고, 학습시킨 모델로 <strong>예측(Regression)</strong>이나 <strong>분류(Classification)</strong>를 수행. <strong>데이터의 양과 품질</strong>이 모델 성능에 중요한 영향을 미침. 주로 이미지 및 음성 인식, 자연어 처리, 데이터 기반 예측.</li>



<li>딥러닝 &#8211; <strong>인공 신경망</strong>을 활용하여 <strong>정보를 처리하고 전송하는 방식</strong>을 <strong>시뮬레이션</strong> 하도록 설계된 알고리즘. 주로 이미지 및 음성 인식, 자연어 처리, 자율적 의사결정 등이 있다.</li>
</ul>



<h4 class="wp-block-heading">딥러닝의 계층</h4>



<ul class="wp-block-list">
<li>입력층 (Input Layer): 현실에서 데이터 축적 > 데이터 불러오기 > 데이터 전처리</li>



<li>은닉층 (Hidden Layer):</li>



<li>출력층 (Output Layer): 모델이 예측한 결과를 보는순간</li>
</ul>



<h3 class="wp-block-heading">모델 학습방법</h3>



<p>지도학습(Supervised Learning) &#8211; 문제과 답(Label)을 알려주고, 유사성을 알아서 파악하라고(훈련) 한뒤 또 다른 문제를 주고 답을 예측하게하는것</p>



<ul class="wp-block-list">
<li>회귀(Regression) &#8211; 추세를 예측하는것. 그래프에있는 추세선을 Regression Line 이라고 함.</li>



<li>분류(Classification) &#8211; 말 그대로 분류하는것.</li>
</ul>



<p>비지도학습(Unsupervised Learning) &#8211; 문제만 주고 답을 알아서 찾으라는 형태. </p>



<ul class="wp-block-list">
<li>Clustering &#8211; 입력 데이터를 기준으로 비슷한 특징을 가진 데이터끼리 군집(Cluster)로 나누는 알고리즘. (=그룹화)</li>



<li>Dimension Reduction &#8211; 주요값을 분류하고 불필요한 정보 삭제</li>
</ul>



<p>준지도학습(Semi-Supervised Learning) &#8211; 학습데이터에 답이 있는것도 있고 없는것도 상당히 많이 존재할때 사용</p>



<ul class="wp-block-list">
<li><strong>예시:</strong> 수만 장의 흉부 X-ray 사진이 있을 때, 의사가 일일이 &#8220;이건 폐렴, 이건 정상&#8221;이라고 적어주는 데는 엄청난 시간과 비용이 듭니다.</li>



<li>이때 의사가 라벨링한 <strong>소량의 데이터</strong>와 라벨링되지 않은 <strong>대량의 데이터</strong>를 함께 학습시키면, 적은 비용으로도 지도학습에 가까운 성능을 낼 수 있습니다.</li>
</ul>



<p>강화학습(Reinforcement Learning) &#8211; 문제를 주고 먼저 풀게한뒤 잘했는지 못했는지 feedback 와 reward를 주면 이 feedback과 reward를 통해 학습 함.</p>



<h3 class="wp-block-heading">클러스터링(Clustering)</h3>



<ul class="wp-block-list">
<li>K-means: K개의 mean(평균, 중심) 값을 입력해서 K 갯수 만큼 분류하는 알로리즘. 어떤 중심점과 가까운지를 기준으로 클러스터링하다보니 복잡한 형태에서는 원하는 형태로 그룹화가 되지 않을수도있다.</li>



<li>DBSCAN (밀도 기반 군집화) &#8211; 데이터가 많이 몰려있는 부분을 선 고려하여 그룹화 시킴. 구체적으로 보면 임의의 점 P(Sample)을 기준으로 특정거리 (Epsilon) 내에 점이 M(Min samples) 개 이상이 있다면 하나의 군집으로 간주. 같은 클러스터내의 점P들을 e-이웃(Epsilon-neighborhood)라고 부르며 같은 cluster 안에 이웃이 M개 이상이면 <strong>핵심 샘플</strong> or <strong>핵심 지점</strong> 이라 부른다.</li>
</ul>



<div>
<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="382" data-attachment-id="388" data-permalink="https://blog.kggstudio.com/%eb%94%a5%eb%9f%ac%eb%8b%9d1-%ea%b8%b0%ec%b4%88-%ea%b0%9c%eb%85%90/image-63/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5.png" data-orig-size="1339,500" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-1024x382.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-1024x382.png" alt="" class="wp-image-388" style="aspect-ratio:2.680697018039023;width:1140px;height:auto" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-1024x382.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-300x112.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-768x287.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5.png 1339w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<p>Outlier Detection (이상치 탐지): 데이터가 일반적인 군집과는 너무 멀리 많이 떨어져서 고립되어있는경우 이를 이상치(outlier)라고 부른다.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="732" data-attachment-id="389" data-permalink="https://blog.kggstudio.com/%eb%94%a5%eb%9f%ac%eb%8b%9d1-%ea%b8%b0%ec%b4%88-%ea%b0%9c%eb%85%90/image-64/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6.png" data-orig-size="1042,745" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-1024x732.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-1024x732.png" alt="" class="wp-image-389" style="aspect-ratio:1.3989156189297074;width:613px;height:auto" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-1024x732.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-300x214.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-768x549.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6.png 1042w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Dimensional Reduction (차원 축소): 고차원 데이터를 저차원인 새로운 데이터로 변환하는것.</p>



<p>Discrete (이산형): 하나씩 셀 수 있는 형태</p>



<h3 class="wp-block-heading">현실에서 사용되는 Transformer의 Decoder 기반 모델</h3>



<p>Transformer를 공장으로 보면 Encoder와 Decoder는 공장안에있는 기계라고 보면 됨. Transformer는 이 기계들을 잘 조합하여 만든 <strong>전체 신경망 아키텍쳐</strong>.</p>



<ul class="wp-block-list">
<li>Transformer: 데이터 간의 관계를 한꺼번에 파악하는 어텐션(Attention) 매커니즘을 핵심으로 하는 신경망 구조</li>



<li>Encoder: 입력된 문장 전체를 읽고 그 의미와 문맥을 수치화된 정보(Vector)로 응축하는 <strong>[이해 도구]</strong></li>



<li>Decoder: 인코더가 만든 정보나 이미 생성했던 단어들을 바탕으로, 다음에 올 가장 적절한 단어를 하나씩 예측해 내뱉는 <strong>[생성 도구]</strong></li>



<li>etc 도구: Transformer에는 Positional Encoding, Feed-Forward Network (FFN), Residual Connectoin, Layer Normalization 등 도구가 더 있다.</li>
</ul>



<p>Attention Macanism (어텐션 매커니즘): 문장 속 단어끼리의 연관성(가중치)를 계산하는 수학적 원리로 <strong>엔진</strong> 역할을 중심으로,<br>Positional Encoding(<strong>번호표</strong>)로 순서를 정하고, FFN(<strong>가공기</strong>)로 의미를 분석하고 Residual &amp; Layer Norm(<strong>안전장치</strong>)로 전체 공정을 안정화 하는 구조로 되어있음.</p>



<p>GPT, LLaMa, PaLM, Gemini, Mistral 등.</p>



<figure class="wp-block-image is-resized"><img decoding="async" src="https://encrypted-tbn1.gstatic.com/licensed-image?q=tbn:ANd9GcQtABSnkZF9VnXIziqmNSA2GzqUnw5T1DevqJPst7taFYUFUSCC6sdoqoVRh3sNA15xEx76AO1bfHw8aRf0dJXxt5j5qw45glR0YSBRcVwnXGCnDf8" alt="" style="aspect-ratio:1.779344101811062;width:1040px;height:auto"/></figure>



<h3 class="wp-block-heading">언어모델 학습방법</h3>



<h4 class="wp-block-heading">Pre-train (사전학습) &#8211; &#8220;세상의 상식을 배우는 의무교육&#8221;</h4>



<p>모델이 아무것도 모르는 상태에서 인터넷에 있는 방대한 데이터를 통째로 읽으면 <strong>언어의 규칙과 상식</strong>을 배우는 단계.</p>



<ul class="wp-block-list">
<li>학습데이터: 위키, 뉴스, 블로그, 소스 코드 등 초대형 단어 뭉치 (Raw Text)</li>



<li>학습방법: <strong>다음에 올 단어 맞추기</strong> 무한 반복</li>



<li>결과: 문법을 깨우치고, &#8220;지구는 둥글다&#8221; 같은 상식을 갖게 되지만, 정작 &#8220;내 질문에 친절하게 대답해&#8221; 같은 특정 목적은 아직 모르는 상태.</li>
</ul>



<h4 class="wp-block-heading">Fine-tuning (미세 조정) &#8211; &#8220;특정 업무를 배우는 전공 연수&#8221;</h4>



<p>사전 학습이 끝난 모델을 가져와서 우리가 원하는 목적을위해 추가로 학습시키는 단계.</p>



<ul class="wp-block-list">
<li>학습데이터: <strong>질문-답변 쌍</strong>이나 <strong>요약문</strong>, <strong>번역문</strong> 처럼 사람이 정성스럽게 많은 소량의 고품질 데이터.</li>



<li>학습방법: <strong>모델에게 이제부터는 질문이 들어오면 이런식으로 대답해야 해</strong> 라고 가이드라인을 준다.</li>



<li>결과: 챗봇이 되거나 (ChatGPT), 법률 상담가, 코딩 도우미 등 전문적인 도구로 변신.</li>
</ul>



<h4 class="wp-block-heading">RLHF(Reinforcement Learning from Human Feedback) &#8211; 사람의 피드백으로 강화 학습</h4>



<p>ChatGPT를 완성시킨 가장 핵심이 되는 기법</p>



<h5 class="wp-block-heading">RLHF가 필요한 이유?</h5>



<ul class="wp-block-list">
<li>사전 학습이 끝난 모델은 지식은 많지만, 유해한 답변을 내놓을 수 있음.</li>



<li>세상에 모든 질문에 정답을 만드는것을 불가능.</li>



<li>인간의 판단(Feedback)을 수식화 하여 모델에게 전달하는 방법으로 해결</li>
</ul>



<h5 class="wp-block-heading">ChatGPT의 보상 모델 활용 방법</h5>



<ul class="wp-block-list">
<li><strong>작동 원리</strong>: 모델이 질문 하나에 4~5개의 답변을 생성 후, Ranking을 정함.</li>



<li><strong>학습</strong>: 이 순서 데이터를 바탕으로 <strong>보상 모델</strong> 학습 시킴. <strong>보상 모델</strong>은 인간이라면 이 답변에 몇접을 줄것인지 예측하는 인간대역.</li>



<li><strong>효과</strong>: 사람은 상당히 적은수의 샘플에만 순위를 매기면 됩니다. 보상 모델이 완성되면, 이후에는 수억개의 데이터에 대해 <strong>인간 대신 자동으로 보상을 계산</strong>해줍니다.</li>



<li><strong>스스로 학습</strong>: 이제 역으로 모델이 보상모델을 상대로 연습게임을 하면서 고득점을 획득하기위한 방법을 연구하면서, 가중치를 개선합니다.</li>
</ul>



<h3 class="wp-block-heading">Machine Learning Architecture Process (머신러닝 아키텍쳐)</h3>



<p>머신러닝은 아래의 플로우 차트 가집니다. 설명은 차트 아래에.</p>



<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">graph LR
    %% 1단계: 데이터 준비
    subgraph Step1 ["데이터 준비"]
        direction TB
        A1[데이터 수집] --> A2[데이터 정제]
        A2 --> A3[데이터 레이블링]
        A3 --> A4[데이터 분석 및 시각화]
    end

    %% 2단계: 모델링
    subgraph Step2 ["모델링"]
        direction TB
        B1[피쳐 엔지니어링] --> B2[모델 설계]
        B2 --> B3[모델 학습]
    end

    %% 3단계: 모델 평가
    subgraph Step3 ["모델 평가"]
        direction TB
        C1[모델 검증] --> C2[성능 개선]
    end

    %% 4단계: 모델 배포
    subgraph Step4 ["모델 배포"]
        direction TB
        D1[배치 인퍼런스] --> D2[온라인 인퍼런스]
        D2 --> D3[엣지 인퍼런스]
    end

    %% 단계 간 가로 연결
    Step1 --> Step2
    Step2 --> Step3
    Step3 --> Step4</pre></div>



<ul class="wp-block-list">
<li>데이터 준비: 학습 시킬 데이터를 만들고 모으는 과정</li>



<li>데이터 정제: 데이터 수집을 통해 확보한 데이터는 일관되지 않고 규칙적이지 않을 가능성이 높아 <strong>데이터 정제(Data Cleansing) 프로세스</strong>를 통해 누락된 데이터를 채우고 불필요한 데이터를 제거함</li>



<li>데이터 레이블링: 해당 데이터가 무엇을 뜻하는시 <strong>라벨</strong>을 달아주고 <strong>태그</strong>를 달아주는 과정. 이 정보를 통해 모델이 학습하므로 잘못된 정보가 있으면 모델 성능이 크게 떨어지게 된다.</li>



<li>데이터 분석 및 시각화: 다양한 값이나 그래프를 통해 <strong>이상치 식별</strong>, <strong>상관관계</strong> 및 <strong>편향</strong> 분석, <strong>가설 수립</strong> 및 변경, <strong>데이터 패턴</strong> 확인.</li>



<li>피쳐 엔지니어링: 특징 선택, 특징 샘플링, 특징 변환(문자열orObject를 숫자로), 특징추출, 특징구성(기존 특징을 활용해 새로운 특징을 생성하는 과정 예: 지출종류가 여러가지있으면 총 지출이라는 특징을 만들어줄수있다)</li>



<li>모델 설계:</li>
</ul>



<h3 class="wp-block-heading">MLOps</h3>



<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">flowchart TD
    %% 외부 컴포넌트 정의
    Repo[코드 저장소]
    Lake[데이터 레이크]
    Monitor[모니터링]
    Feature[피쳐 스토어]
    Analysis[데이터 분석]
    
    %% 7번 조건을 위한 투명한 중간 기착지 (Junction)
    J(( ))
    style J fill:transparent,stroke:transparent,color:transparent

    %% 중앙 ML 파이프라인 그룹 (세로 정렬)
    subgraph Pipeline [ML 파이프라인]
        direction TB
        D1[데이터 준비] --> D2[모델링] --> D3[모델 평가] --> D4[모델 배포]
    end

    %% 1. 상단: 코드 저장소 &lt;-> 그룹
    Repo &lt;--> Pipeline

    %% 2. 좌측: 데이터 레이크 -> (중간 지점) -> 그룹
    Lake --> Pipeline

    %% 3. 우측: 그룹 &lt;-> 모니터링
    Pipeline --> Monitor

    %% 4. 하단: 그룹 &lt;-> 피쳐 스토어
    Pipeline &lt;--> Feature

    %% 5. 모니터링 -> 데이터 분석
    Monitor --> Analysis

    %% 6. 피쳐 스토어 -> 데이터 분석
    Feature --> Analysis

    %% 7. 데이터 분석 아래쪽 -> 2번 화살표 중간(J)으로 연결
    Analysis --> Lake</pre></div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/%eb%94%a5%eb%9f%ac%eb%8b%9d1-%ea%b8%b0%ec%b4%88-%ea%b0%9c%eb%85%90/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">387</post-id>	</item>
		<item>
		<title>Rust(16) &#8211; Packages, Crates, and Modules</title>
		<link>https://blog.kggstudio.com/rust16-packages-crates-and-modules/</link>
					<comments>https://blog.kggstudio.com/rust16-packages-crates-and-modules/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Sun, 29 Mar 2026 23:20:06 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[pub]]></category>
		<category><![CDATA[use]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=364</guid>

					<description><![CDATA[Rust가 처음이 아닌사람들은 제목의 Packages Crates and Modules 가 각각 것인지 대충은 알것입니다. 프로그램을 만들때 재사용되는 코드들을 정리해서 만들어서 재사용 및 다른사람과 공유함으로써 전체적인 생산성 향상 및 커뮤니티 전체 발전을 위한 개념이라고 보면됩니다. 거창하게 말했지만, 그냥 재사용되는 코드, 가져다 쓸수있는 코드 정도로 이해하면 됩니다. Crates &#60; Packages Crate가 이 코드들의 최소단위 입니다. Rust에서 컴파일할때 컴파일러가 ... <a title="Rust(16) &#8211; Packages, Crates, and Modules" class="read-more" href="https://blog.kggstudio.com/rust16-packages-crates-and-modules/" aria-label="Rust(16) &#8211; Packages, Crates, and Modules에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>Rust가 처음이 아닌사람들은 제목의 Packages Crates and Modules 가 각각 것인지 대충은 알것입니다. 프로그램을 만들때 재사용되는 코드들을 정리해서 만들어서 재사용 및 다른사람과 공유함으로써 전체적인 생산성 향상 및 커뮤니티 전체 발전을 위한 개념이라고 보면됩니다. 거창하게 말했지만, 그냥 재사용되는 코드, 가져다 쓸수있는 코드 정도로 이해하면 됩니다.</p>



<h3 class="wp-block-heading">Crates &lt; Packages</h3>



<p>Crate가 이 코드들의 최소단위 입니다. Rust에서 컴파일할때 컴파일러가 한번에 보는 범위가 Crate 단위입니다.</p>



<h4 class="wp-block-heading">binary crate and library crate</h4>



<p>Binary crate는 실행가능한 형태로 컴파일되는것이고, Library crate는 실행이 불가능하고 작성시 main 함수가 존재하지 않죠. 우리가 난수생성을위해 사용했던 rand crate가 그런 예시입니다 소스코드에서 import하여 함수를 사용할수있었죠.</p>



<p>또 다른 예시로는 우리가 cargo new project-name 으로 프로젝트를 만들면 ./src/main.rs 파일이 생기는데 이것이 실행가능한 바이너리 crate입니다 안에는 main함수가 존재하죠. 또 루트디렉토리에 ./cargo.toml파일이있는데 이것이 패키지를 관리해주는 파일 입니다. 프로젝트를 만들면 기본적으로 crate 1개와 package 1개가 생성된다고 보시면됩니다.</p>



<p>프로젝트는 기본적으로 패키지를 갖고있다는걸 이해하셨을겁니다. 기본프로젝트에 ./src/lib.rs파일을 만들면 이 패키지는 binary crate와 library crate를 둘 다 가진 패키지가 됩니다. 또 패키지는<strong> ./src/bin 경로에 파일을 둠으로써 여러 binary crates</strong>를 가질수있는것을 기억하고 넘어가겠습니다.</p>



<h3 class="wp-block-heading">Control Scope and Privacy with Modules</h3>



<ul class="wp-block-list">
<li>use: path를 scope로 가져오는 키워드</li>



<li>pub: 아이템을 public화 시키는 키워드</li>



<li>as</li>



<li>external packages</li>



<li>glob operator</li>
</ul>



<h4 class="wp-block-heading">Start from the crate loot</h4>



<p>crate를 컴파일하면, 컴파일러는 먼저 src/main.rs 와 src/lib.rs파일을 먼저 확인합니다. 이를 root files 라고합니다.</p>



<h4 class="wp-block-heading">Declaring modules</h4>



<p>root 파일에서, 새로운 모듈을 선언할수 있습니다. 만약 mod garden; 구문이 있으면, 컴파일러는 해당모듈의 코드를 이구문이 있는곳에서 처리합니다</p>



<ul class="wp-block-list">
<li>src/garden.rs</li>



<li>src/garden/mod.rs</li>
</ul>



<h4 class="wp-block-heading">Declaring submodules</h4>



<p>submodule은 루트파일이 아닌 모듈내에서 사용하면됩니다 예를들어 위에서 언급했던 garden.rs파일에서 mod vegetables 구문을 작성하면 아래 경로를 확인합니다.</p>



<ul class="wp-block-list">
<li>src/garden/vegetables.rs</li>



<li>src/garden/vegetables/mod.rs</li>
</ul>



<h4 class="wp-block-heading">Private vs Public</h4>



<p>기본적으로 module은 private이 기본상태입니다. 사용자가 사용해야하는 함수나 변수에는 pub키워드로 명시가 되어야합니다. C++의 캡슐화개념이라고 이해하면됩니다. 모듈을 사용할때 사용자가 굳이 알필요없는 함수들은 숨겨서 생산성을 올립니다. 쓸필요가 없는 함수들이 다 공개되어있으면 헷갈리기 쉽고 잘못사용할 여지도 늘어납니다.</p>



<h4 class="wp-block-heading">use 키워드</h4>



<p>use키워드는 긴 scope를 생략할때 사용합니다. 예를들어, crate::garden::vegetables::Asparagus 경로처럼 깊은곳에 Asparagus가 있다고 존재하면, use crate::garden::vegetables::Asparagus; 구문을 작성해서 이후로는 Asparagus만 써도 이게 무엇인지 알수있고 사용할수 있습니다.</p>



<pre class="wp-block-code"><code>use crate::garden::vegetables::Asparagus;

pub mod garden;

fn main() {
    let plant = Asparagus {};
    println!("I'm growing {plant:?}!");
}</code></pre>



<h4 class="wp-block-heading">파일구조를 활용한 예시</h4>



<pre class="wp-block-code"><code>backyard
├── Cargo.lock
├── Cargo.toml
└── src
    ├── garden
    │   └── vegetables.rs
    ├── garden.rs
    └── main.rs</code></pre>



<p>위와같은 파일경로가있으면 우리 프로젝트 폴더인 backyard가 메인 crate이름이 됩니다.</p>



<p>경로는 뒷마당 > 가든 > 채소 순서입니다.</p>



<p>루트 crate 즉 backyard crate의 파일인 main.rs에 아래처럼 적습니다. Asparagus를 use 키워드를 사용해 직접 쓸수있도록 해주고, garden crate는 pub으로 불러옵니다</p>



<pre class="wp-block-code"><code>use crate::garden::vegetables::Asparagus;

pub mod garden;

fn main() {
    let plant = Asparagus {};
    println!("I'm growing {plant:?}!");
}</code></pre>



<p>./src/garden.rs 파일에서는 아래 구문을 작성하여 부모 crate (backyard) 에서 vegetable을 사용할수있게 공개합니다.</p>



<pre class="wp-block-code"><code>pub mod vegetables;</code></pre>



<p>./src/garden/vegetables.rs 파일에서는 아래처럼 Asparagus 구조체를 pub으로 선언하여 상위 crates에서 사용할수있게 공개합니다.</p>



<pre class="wp-block-code"><code>#&#91;derive(Debug)]
pub struct Asparagus {}</code></pre>



<p>기본적으로 private 상태이기때문에 곡 해줘야합니다. 멤버변수나 함수도 let fn 키워드 앞에 pub을 붙여서 공개시킬수 있습니다.</p>



<h4 class="wp-block-heading">mod</h4>



<p>위에 예시코드들에서 mod키워드를 사용하고있었는데요. mod는 모듈의 줄임말이고 C++에서의 네임스페이스와 비슷한기능을합니다.</p>



<p>차이점이라면 C++은 클래스차원에서 캡슐화가 존재했는데 Rust에서는 mod, struct, fn , 그리고 let 변수들까지 각각에 공개 비공개 설정을 할수있습니다.</p>



<pre class="wp-block-code"><code>mod front_of_house {
    pub mod hosting {
        pub fn add_to_waitlist() {}
    }
}

fn main() {
    front_of_house::hosting::add_to_waitlist();
}</code></pre>



<h3 class="wp-block-heading">Module path</h3>



<p>지금까지는 하위 crate에있는걸 루트나 상위에서 접근하는 방법을 알아봤는데, 하위에서도 상위로 갈수있습니다.</p>



<ul class="wp-block-list">
<li>crate:: 을사용하면 루트 crate에 접근이가능하고</li>



<li>super:: 은 현재 루트에서 한단계 위로 올라가는겁니다.</li>



<li>self::는 현재모듈인데 평상시엔 쓰지않지만 만약 다른모듈에 같은이름의 아이템이있으면 이걸로 구분이 가능합니다.</li>
</ul>



<h4 class="wp-block-heading">pub for structs and enums</h4>



<p>enum은 pub아니면 쓰기불편하기에 기본적으로 내부 값들이 public상태 하지만 enum 키워드앞에는 pub을 붙여줘야함</p>



<p>struct는 struct자체에만 pub을쓰면안되고 내부 멤버변수나 멤버함수들 모두 기본값이 private이라 pub을 붙여줘야함.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/rust16-packages-crates-and-modules/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">364</post-id>	</item>
		<item>
		<title>Rust(15) &#8211; if let &#038; let else</title>
		<link>https://blog.kggstudio.com/rust15-if-let/</link>
					<comments>https://blog.kggstudio.com/rust15-if-let/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Sat, 28 Mar 2026 23:42:02 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[if let]]></category>
		<category><![CDATA[rust if let]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=360</guid>

					<description><![CDATA[if let match는 enum형 전체를 커버해준다면, if let은 반대로 특정 조건일때만 실행이 되도록 하는 코드입니다. 아래 예제는 config_max 변수가 None이 아니라 Some의 변형이고 그안에 값이 있다면, 그값을 max에 대입해서 블럭안의 코드를 실행시켜라 라는뜻입니다. 즉 u8타입의 정수 3이 됩니다. if let 키워드도 일반 if문처럼 마지막에 else { } 구문을 추가하여 config_max의 다른값을 처리할수있습니다. (optional)]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">if let</h3>



<p>match는 enum형 전체를 커버해준다면, if let은 반대로 특정 조건일때만 실행이 되도록 하는 코드입니다.</p>



<p>아래 예제는 config_max 변수가 None이 아니라 Some의 변형이고 그안에 값이 있다면, 그값을 max에 대입해서 블럭안의 코드를 실행시켜라 라는뜻입니다. 즉 u8타입의 정수 3이 됩니다.</p>



<pre class="wp-block-code"><code>let config_max = Some(3u8);

if let Some(max) = config_max {
    println!("The maximum is configured to be {max}");
}</code></pre>



<p>if let 키워드도 일반 if문처럼 마지막에 else { } 구문을 추가하여 config_max의 다른값을 처리할수있습니다. (optional)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/rust15-if-let/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">360</post-id>	</item>
		<item>
		<title>Rust(14) &#8211; match</title>
		<link>https://blog.kggstudio.com/rust14-match/</link>
					<comments>https://blog.kggstudio.com/rust14-match/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Sat, 28 Mar 2026 23:27:29 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[Rust match]]></category>
		<category><![CDATA[Rust switch]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=357</guid>

					<description><![CDATA[다른언어의 switch 문을 대체하는 Rust 문법. 지난시간에 enum에 대해서 배웠는데, match를사용해 어떻게 분류하는지 알아봅니다. Rust는 이렇게 match를 사용할때 enum Coin의 모든 값을 다 cover 해야합니다. 하나라도 빼놓으면 에러가 나는데 컴파일러가 잡아주고, 어떤 값을 빼먹었는지도 친절하게 알려줍니다. Catch-All 패턴과 _ Placeholder enum &#8211; match 사용 시, 모든 케이스에대해 일일히 처리하고싶지 않은경우도 있습니다. 이럴때는 캐치올 패턴이나 _를 ... <a title="Rust(14) &#8211; match" class="read-more" href="https://blog.kggstudio.com/rust14-match/" aria-label="Rust(14) &#8211; match에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>다른언어의 switch 문을 대체하는 Rust 문법.</p>



<p>지난시간에 enum에 대해서 배웠는데, match를사용해 어떻게 분류하는지 알아봅니다.</p>



<pre class="wp-block-code"><code>enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn value_in_cents(coin: Coin) -> u8 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => 25,
    }
}</code></pre>



<p>Rust는 이렇게 match를 사용할때 enum Coin의 모든 값을 다 cover 해야합니다. 하나라도 빼놓으면 에러가 나는데 컴파일러가 잡아주고, 어떤 값을 빼먹었는지도 친절하게 알려줍니다.</p>



<h3 class="wp-block-heading">Catch-All 패턴과 _ Placeholder</h3>



<p>enum &#8211; match 사용 시, 모든 케이스에대해 일일히 처리하고싶지 않은경우도 있습니다. 이럴때는 캐치올 패턴이나 _를 사용해서 처리할수있는데요. 아래코드를 보며 이해해봅시다.</p>



<pre class="wp-block-code"><code>let dice_roll = 9;
    match dice_roll {
        3 => add_fancy_hat(),
        7 => remove_fancy_hat(),
        other => move_player(other),
    }

    fn add_fancy_hat() {}
    fn remove_fancy_hat() {}
    fn move_player(num_spaces: u8) {}</code></pre>



<p>위 코드에서는 3, 7 인경우 각 기능을 실행하고 그외의 숫자는 move_player 함수를 호출하면서 <strong>동시에 other값을 인수로</strong> 전달하는걸 볼수 있습니다. other은 Catch-All 키워드인데 이떄 이름은 사용자가 원하는대로 쓰면됩니다, other, others도 모두 사용가능하고 사용자가 원하는 이름으로 적으면됩니다 나머지값이라는 의미로 rest라고해도 되고 함수인자에 전달하는 값에 포인트를줘서 value라고해도됩니다.</p>



<p>또 다른 Catch-All 키워드로는 _ 언더스코어가 있는데 이것은 특별합니다. other 처럼 빼놓은 모든 fields를 커버해주지만 값은 사용하지않게됩니다. 아래처럼 그냥 특정함수를 실행할수도 있고, ()만 남겨서 아무것도 하지않을수도 있습니다.</p>



<pre class="wp-block-code"><code>match dice_roll {
    3 => add_fancy_hat(),
    7 => remove_fancy_hat(),
    _ => reroll(),
}

match dice_roll {
    3 => add_fancy_hat(),
    7 => remove_fancy_hat(),
    _ => (),
}

</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/rust14-match/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">357</post-id>	</item>
		<item>
		<title>Rust(13) Enum / Enumeration 열거형</title>
		<link>https://blog.kggstudio.com/rust13-enum/</link>
					<comments>https://blog.kggstudio.com/rust13-enum/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Sat, 28 Mar 2026 22:55:13 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[Enum]]></category>
		<category><![CDATA[Rust Enum]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=355</guid>

					<description><![CDATA[Rust의 enum은 매우 특별합니다. C++과 파이썬처럼 단순히 열거하고 0,1,2,3 순서대로 구분만하는것을 뛰어넘어 실제로 다양한 데이터를 저장할수있습니다. 다른언어와 차별점이 크기때문에 꼭 공부하고 넘어가야할 부분입니다. Enum 기본 기능 우선 기본기능이자 다른언어의 enum과 같은방식으로 사용할때 예시를 보겠습니다. 이렇게 선언해두면 이런식으로 변수에 저장할수있고 필요한경우 V4인지 V6인지 구분이 가능하며 실제 ip주소 구조체를 만들경우 아래처럼 사용될수있습니다. 매개변수에서 int나 String 대신 IpAddrKind ... <a title="Rust(13) Enum / Enumeration 열거형" class="read-more" href="https://blog.kggstudio.com/rust13-enum/" aria-label="Rust(13) Enum / Enumeration 열거형에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>Rust의 enum은 매우 특별합니다. C++과 파이썬처럼 단순히 열거하고 0,1,2,3 순서대로 구분만하는것을 뛰어넘어 실제로 다양한 데이터를 저장할수있습니다. 다른언어와 차별점이 크기때문에 꼭 공부하고 넘어가야할 부분입니다.</p>



<h3 class="wp-block-heading">Enum 기본 기능</h3>



<p>우선 기본기능이자 다른언어의 enum과 같은방식으로 사용할때 예시를 보겠습니다.</p>



<pre class="wp-block-code"><code>enum IpAddrKind {
    V4,
    V6,
}</code></pre>



<p>이렇게 선언해두면</p>



<pre class="wp-block-code"><code>let four = IpAddrKind::V4;
let six = IpAddrKind::V6;</code></pre>



<p>이런식으로 변수에 저장할수있고 필요한경우 V4인지 V6인지 구분이 가능하며 실제 ip주소 구조체를 만들경우 아래처럼 사용될수있습니다. 매개변수에서 int나 String 대신 IpAddrKind 자료형이 표시되기때문에 해당 매개변수가 어떤값을 갖는지 한눈에 볼수있고, 다른형태의 값은 받지않도록 제어가 가능해집니다. 이게 다른언어에서 사용하는 기본 enum 형태입니다.</p>



<pre class="wp-block-code"><code>enum IpAddrKind {
        V4,
        V6,
    }

    struct IpAddr {
        kind: IpAddrKind,
        address: String,
    }

    let home = IpAddr {
        kind: IpAddrKind::V4,
        address: String::from("127.0.0.1"),
    };

    let loopback = IpAddr {
        kind: IpAddrKind::V6,
        address: String::from("::1"),
    };</code></pre>



<h3 class="wp-block-heading">Enum 변수에 데이터 저장</h3>



<p>Rust에서는 같은 enum 타입에서도 내부의 값을 다르게 저장할 수 있습니다. 아래 두 개의 예시코드를 보고 데이터 저장방식을 이해해봅니다. 함수에서 IpAddr 타입의 매개변수를 받은경우, 내부 값 형태가 서로 다를수있습니다.</p>



<h4 class="wp-block-heading">같은 종류의 데이터 저장</h4>



<pre class="wp-block-code"><code>enum IpAddr {
    V4(String),
    V6(String),
}

let home = IpAddr::V4(String::from("127.0.0.1"));

let loopback = IpAddr::V6(String::from("::1"));</code></pre>



<h4 class="wp-block-heading">서로 다른 종류의 데이터 저장</h4>



<pre class="wp-block-code"><code>enum IpAddr {
    V4(u8, u8, u8, u8),
    V6(String),
}

let home = IpAddr::V4(127, 0, 0, 1);

let loopback = IpAddr::V6(String::from("::1"));</code></pre>



<h3 class="wp-block-heading">Enum + Struct 사용예시</h3>



<p>Enum에 서로다른 타입의 데이터를 보관할수 있으니, 구조체와 함께사용하면 더 강력해집니다. C++에서는 보통 class 객체의 상태나, 종류를 구분하기위해 enum을 많이 사용합니다. 물론 Rust에서도 그렇게 단순한용도로 사용할수도 있습니다. 아래는 enum 타입이 서로다른 데이터를 보관할수있는 점을 활용하여 만든 Message 예시입니다. 함수에서 Message를 매개변수로 받아서 여러기능을 한번에 처리할수있게 해줍니다. 먼저 아래 코드를 봅시다.</p>



<pre class="wp-block-code"><code>enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}</code></pre>



<p>Quit은 데이터를 저장하지않고, Move는 해당좌표로 이동하는 기능을 처리할수있습니다. String값을 저장할수도있고 튜플형태로 여러개의 값도 저장할수 있습니다.</p>



<pre class="wp-block-code"><code>struct QuitMessage; // unit struct
struct MoveMessage {
    x: i32,
    y: i32,
}
struct WriteMessage(String); // tuple struct
struct ChangeColorMessage(i32, i32, i32); // tuple struct</code></pre>



<p>자, 이제 Message를 함수 매개변수로 받아보면 어떻게 될까요? Rust의 enum 타입의 강력함이 느껴지시나요? Message 타입마다 보관중인 데이터 타입이 다르므로, C++에서 아래코드를 구현하려면 함수를 여러개로 구분하거나, 매개변수를 최대 Message타입갯수만큼 늘려서 골라써야하는 번거로움이 있는데, 이게 한번에 처리가 가능합니다.</p>



<p>어때요? 대단하지않나요? 물론 클래스 상속기능을 이용해서 Message 부모클래스를 두고 자식클래스를 여러개로 만든다음 추상화를이용해 함수 하나로 처리할수있지만, 결국 그런경우 자식클래스 메소드 여러개를 따로따로 구현해야하는 불편함은 여전히 남아 있습니다. </p>



<p>Rust를 공부하면서 와 이거 진짜 좋다 처음 느낀게 enum이라 극찬을 남기고 지나가봅니다.</p>



<pre class="wp-block-code"><code>fn process_message(msg: &amp;Message) {
    match msg {
        Message::Quit => {
            println!("프로그램을 종료합니다. &#x1f44b;");
        }
        // 참조로 받았기 때문에 x, y도 각각 i32의 참조인 &amp;i32가 됩니다.
        // 하지만 i32는 Copy 타입이라서 자동으로 값이 복사되어 쓰입니다.
        Message::Move { x, y } => {
            println!("좌표 이동: x={}, y={}", x, y);
        }
        // String은 Copy 타입이 아니므로, text는 &amp;String 타입이 됩니다.
        // 소유권을 가져오지 않고 문자열을 읽기만 합니다.
        Message::Write(text) => {
            println!("메시지 작성: {}", text);
        }
        Message::ChangeColor(r, g, b) => {
            println!("색상 변경: R={}, G={}, B={}", r, g, b);
        }
    }
}

fn main() {
    let m = Message::Write(String::from("안녕, 러스트!"));
    
    // m의 참조(&amp;m)를 전달합니다.
    process_message(&amp;m);
    
    // 참조로 전달했기 때문에 m의 소유권이 살아있어 여기서 또 사용할 수 있습니다!
    println!("아직 m을 사용할 수 있어요.");
}</code></pre>



<h3 class="wp-block-heading">The Option Enum &#8211; 값이 있을수도 혹은 없을수도</h3>



<p>구조체를 미리 만들어뒀는데 값이 중간에 생기는 경우도 존재합니다. 따라서 어떤값은 아직 null값일수있는데 Rust에서는 null이 없기때문에 Rust만의 방식으로 풀어낸 기능입니다. Rust에서 null이 없는 이유는 null값을 참조하다가 프로그램이 종료되는 버그가 다른프로그램에서는 많이 일어나는데, 이를 컴파일러단계에서 막기위해 새로운방식을 고안해 낸것입니다.</p>



<pre class="wp-block-code"><code>enum Option&lt;T> {
    None,
    Some(T),
}</code></pre>



<p>Option타입은 Rust에 기본적으로 정의되어있습니다. Optional한 매개변수를 작성할떄 효과적입니다. C/Java 등에서는 값이 없음을 알리기위해 아래처럼 -1이나 0값을 사용하기도하는데, 사용자가 이를 모르면 에러가 발생하기 쉽고, 어떤변수는 음수값을 사용할수도있어서 고정된값을 사용할수도 없습니다. 이런식의 설정값이 많으면 문서를 만들어 매번 찾아야하고 실수가 발생하기 쉽습니다.</p>



<pre class="wp-block-code"><code>struct Config {
    port: i32, // -1이면 "값이 없음"으로 간주하기로 약속
}

fn start_server(config: Config) {
    if config.port == -1 {
        println!("포트 설정이 없으므로 기본 8080을 사용합니다.");
    } else {
        println!("{}번 포트로 시작합니다.", config.port);
    }
}</code></pre>



<p>Rust에서도 이런식의 코드가 작동을 하지만 안좋은 패턴으로여겨집니다.</p>



<h4 class="wp-block-heading">Option&lt;T> 함수에 바로 사용</h4>



<pre class="wp-block-code"><code>fn whatis(test: &amp;Option&lt;String>) {
    match test { // &amp;를 붙여 참조로 매칭
        Some(s) => println!("{}", s),
        None => println!("None"),
    }
}

fn main() {
    let test = Some("Hello".to_string());
    whatis(&amp;test);
    whatis(&amp;None);
}</code></pre>



<h4 class="wp-block-heading">Option&lt;T> 구조체로 묶어서 사용</h4>



<pre class="wp-block-code"><code>struct UserProfile {
    username: String,
    age: Option&lt;u32>, // 나이는 모를 수도 있음 (None 가능)
}

fn print_profile(user: UserProfile) {
    println!("이름: {}", user.username);
    
    // age가 Option이므로 반드시 체크해야 함
    match user.age {
        Some(a) => println!("나이: {}", a),
        None => println!("나이: 알 수 없음"),
    }
}</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/rust13-enum/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">355</post-id>	</item>
		<item>
		<title>Rust(12) &#8211; Struct 구조체 ≈ class (다른언어)</title>
		<link>https://blog.kggstudio.com/rust12-struct/</link>
					<comments>https://blog.kggstudio.com/rust12-struct/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Sat, 28 Mar 2026 11:28:30 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[Rust class]]></category>
		<category><![CDATA[Rust Struct]]></category>
		<category><![CDATA[Rust 구조체]]></category>
		<category><![CDATA[Rust 클래스]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=352</guid>

					<description><![CDATA[C++은 구조체도 있고, 클래스도 따로있습니다. 요즘은 구조체도 멤버함수가있고 클래스의 은닉성만 갖고있지 않는걸로 알고있는데, Rust에서는 class가 따로 존재하지 않습니다. 먼저 C++과 Rust를 비교해보면 Rust는 아래 표와같이 C++기능을 대응하고있습니다. C++은 구조체와 클래스를 구분해놓고 클래스가 좀더 많은 기능을 지원하는 정도의 차이만 있습니다. Rust의 구조체는 C++의 구조체와 기본기능이 더 가깝다고 할수있지만 추가 키워드를 활용해 C++에서 할수있는 기능들을 대응하고있습니다. Rust ... <a title="Rust(12) &#8211; Struct 구조체 ≈ class (다른언어)" class="read-more" href="https://blog.kggstudio.com/rust12-struct/" aria-label="Rust(12) &#8211; Struct 구조체 ≈ class (다른언어)에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>C++은 구조체도 있고, 클래스도 따로있습니다. 요즘은 구조체도 멤버함수가있고 클래스의 은닉성만 갖고있지 않는걸로 알고있는데, Rust에서는 class가 따로 존재하지 않습니다.</p>



<p>먼저 C++과 Rust를 비교해보면 Rust는 아래 표와같이 C++기능을 대응하고있습니다.</p>



<p>C++은 구조체와 클래스를 구분해놓고 클래스가 좀더 많은 기능을 지원하는 정도의 차이만 있습니다. Rust의 구조체는 C++의 구조체와 기본기능이 더 가깝다고 할수있지만 추가 키워드를 활용해 C++에서 할수있는 기능들을 대응하고있습니다. Rust 공식문서에서는 상속구조대신 합성구조를 선택한이유가 메모리 절약을 위해서라고 합니다. 아마도 상속구조가 복잡해지면, 자식 클래스에서 안쓰능기능이나 멤버변수가 점점 늘어나는것을 지적하는거같네요. 참고로 파이썬유저가 있으시다면, 파이썬의 클래스는 C++과 더많이 닮아 있습니다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Rust</strong></td><td><strong>C++</strong></td></tr><tr><td>struct</td><td>struct</td></tr><tr><td>impl 구현</td><td>멤버함수 method, 생성자</td></tr><tr><td>trait 트레이트</td><td>추상화/다형성</td></tr><tr><td>composition 합성</td><td>상속</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Impl 구현</h4>



<p>아래는 User라는 구조체를 만들고 impl키워드를통해 생성자이자 멤버함수인 new()를 구현하고있습니다.</p>



<pre class="wp-block-code"><code>struct User {
    active: bool,
    username: String,
    email: String,
    sign_in_count: u64,
}

impl User {
    fn new(username: String, email: String) -> Self {
        Self {
            active: true,
            username,
            email,
            sign_in_count: 1,
        }
    }
}</code></pre>



<p>이렇게 구현하면 인스턴스를 생성할때 User::new()를 사용해 마치 C++의 클래스처럼 직관적으로 할 수 있어요.</p>



<pre class="wp-block-code"><code>let user2 = User::new(String::from("user2"), String::from("user2@example.com"));
println!("{}", user2.email);</code></pre>



<p>그리고 생성자 함수를 보신분은 눈치 채셨겠지만 그냥 생성자없이 초기화 할수도 있습니다. 다만, Rust에서는 멤버변수에 기본값을 정의할수없어서 기본값이 필요한 변수가 있다면 생성자를 만드는게 편합니다.</p>



<h4 class="wp-block-heading">생성자 없이 초기화</h4>



<pre class="wp-block-code"><code>let mut user1: User = User {
        active: true,
        username: String::from("someusername123"),
        email: String::from("someone@example.com"),
        sign_in_count: 1,
    };</code></pre>



<h4 class="wp-block-heading">멤버변수 재사용</h4>



<p>멤버변수 기본값을 지정하지 못하는대신 다른 장점도 있습니다. 아래처럼 ..키워드를 사용하면 명시한 변수를 제외한 나머지 변수들은 user1의 값을 복사합니다.</p>



<pre class="wp-block-code"><code>let user3 = User {
        email: String::from("another@example.com"),
        ..user1
    };</code></pre>



<p>명심해야할게 user1을 이렇게 넘기면 user1의 username값이 소유권이 user3로 넘어가서 더이상 쓸수 없게됩니다. user1 인스턴스와 기본적으로 복사되는 변수들은 그대로 남아 있습니다.</p>



<h3 class="wp-block-heading">traits</h3>



<h4 class="wp-block-heading">Debug trait</h4>



<p>rect1:? 사용하면 바로 print로 데이터를확인가능. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f615.png" alt="😕" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 대신 :#? 을 사용하면 한줄대신 여러줄로 이쁘게 보여줌.</p>



<pre class="wp-block-code"><code>#&#91;derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}

fn main() {
    let rect1 = Rectangle {
        width: 30,
        height: 50,
    };

    println!("rect1 is {rect1:?}");
}</code></pre>



<h3 class="wp-block-heading">method 멤버함수</h3>



<p>위에서 만든 Rectangle 구조체의 면적구하는 함수를 멤버함수로 만들어 보겠습니다.</p>



<pre class="wp-block-code"><code>#&#91;derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&amp;self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect1 = Rectangle {
        width: 30,
        height: 50,
    };

    println!(
        "The area of the rectangle is {} square pixels.",
        rect1.area()
    );
}</code></pre>



<h3 class="wp-block-heading">associated functions = 생성자</h3>



<p>이 생성자 메소드는 첫매개변수를 &amp;self로 하지 않아도 된다.</p>



<pre class="wp-block-code"><code>impl Rectangle {
    fn square(size: u32) -> Self {
        Self {
            width: size,
            height: size,
        }
    }
}</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/rust12-struct/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">352</post-id>	</item>
		<item>
		<title>OpenJarvis + Gemma 4.0 (추가)</title>
		<link>https://blog.kggstudio.com/open-jarvis/</link>
					<comments>https://blog.kggstudio.com/open-jarvis/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Thu, 26 Mar 2026 21:46:15 +0000</pubDate>
				<category><![CDATA[AI-Tools]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[OpenJarvis]]></category>
		<category><![CDATA[OpenJarvis 설치]]></category>
		<category><![CDATA[오픈자비스]]></category>
		<category><![CDATA[오픈자비스 설치]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=338</guid>

					<description><![CDATA[오픈자비스는 2026년 3월 옥스퍼드 대학교에서 배포한 오픈소스 AI비서입니다. 오픈자비스는 아래 주소에 소스코드가 공개되어있다. https://github.com/open-jarvis/OpenJarvis 비교를 위한 기타 AI비서 프로그램 목록 OpenJarvis 설치 OpenJarvis는 Rust를 사용해 만들어졌기때문에 운영체제 관련없이 설치하면되지만 먼저 Rust가 설치되어 있어야한다. rustup 필요 https://rustup.rs rustup이 설치가 되어있지 않다면 링크로가서 안내되있는대로 설치하면된다. uv 필요 (파이썬 패키지 관리자) uv 사용법 OpenJarvis 실행 만약 모델 선택이 ... <a title="OpenJarvis + Gemma 4.0 (추가)" class="read-more" href="https://blog.kggstudio.com/open-jarvis/" aria-label="OpenJarvis + Gemma 4.0 (추가)에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>오픈자비스는 2026년 3월 옥스퍼드 대학교에서 배포한 오픈소스 AI비서입니다. 오픈자비스는 아래 주소에 소스코드가 공개되어있다. </p>



<p><a href="https://github.com/open-jarvis/OpenJarvis">https://github.com/open-jarvis/OpenJarvis</a></p>



<div>
<h3 class="wp-block-heading">비교를 위한 기타 AI비서 프로그램 목록</h3>
</div>



<ul class="wp-block-list">
<li>OpenClaw (오픈소스 기반) &#8211; 2026년 1월 출시</li>



<li>CoWork (Anthropic) &#8211; 2026년 3월 출시</li>



<li>NVIDIA NemoClaw &#8211; 2026년 3월 출시</li>



<li>Project Jarvis (Google) &#8211; 2024년 12월 출시</li>
</ul>



<h3 class="wp-block-heading">OpenJarvis 설치</h3>



<p>OpenJarvis는 Rust를 사용해 만들어졌기때문에 운영체제 관련없이 설치하면되지만 먼저 Rust가 설치되어 있어야한다.</p>



<h4 class="wp-block-heading">rustup 필요</h4>



<pre class="wp-block-code"><code>#rustup이 설치되어있는지 확인하기
rustup --version</code></pre>



<p><a href="https://rustup.rs">https://rustup.rs</a> <br>rustup이 설치가 되어있지 않다면 링크로가서 안내되있는대로 설치하면된다.</p>



<h4 class="wp-block-heading">uv 필요 (파이썬 패키지 관리자)</h4>



<pre class="wp-block-code"><code>powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # uv 설치</code></pre>



<h4 class="wp-block-heading">uv 사용법</h4>



<pre class="wp-block-code"><code>uv python list               # 설치된 파이썬 목록 확인
uv run python --version  #현재 작업폴더에서 적용되고있는 파이썬 버전 확인

uv python install 3.14.3    # 파이썬 3.14.3버전 설치 

#3.14.3 버전을 프로젝트 전용으로 고정 (가장 중요)
uv python pin 3.14.3</code></pre>



<pre class="wp-block-code"><code>git clone https://github.com/open-jarvis/OpenJarvis.git 
cd OpenJarvis
uv sync                           # core framework 설치
uv sync --extra server             # + FastAPI server 설치

# Build the Rust extension (requires Rust: https://rustup.rs/)
uv run maturin develop -m rust/crates/openjarvis-python/Cargo.toml</code></pre>



<h4 class="wp-block-heading">OpenJarvis 실행</h4>



<pre class="wp-block-code"><code>uv run jarvis init

#이미 실행해서 config.toml이 있는경우에는
uv run jarvis init --force</code></pre>



<pre class="wp-block-code"><code>올라마 선택</code></pre>



<pre class="wp-block-code"><code>╭─────────── Getting Started ──────────────────
│ Next steps:                                                                                                          
│                                                                                                                      
│   1. Install and start Ollama:                                                                                       
│      curl -fsSL https://ollama.com/install.sh | sh                                                                   
│      ollama serve                                                                                                    
│                                                                                                                      
│   2. Pull a model:                                                                                                   
│      ollama pull qwen3.5:35b                                                                                         
│                                                                                                                      
│   3. Try it out:                                                                                                     
│      jarvis ask "Hello"                                                                                              
│                                                                                                                      
│   Run `jarvis doctor` to verify your setup.                                                                          
╰─────────────────────────────────────</code></pre>



<p>만약 모델 선택이 안될경우</p>



<pre class="wp-block-code"><code># Windows 경우 아래 경로에 설정파일이 있음 이걸 열고
C:\Users\__window__account__\.openjarvis\config.toml

&#91;llm]
model = "qwen3.5:9b"

&#91;llm]
model = "gemma4:e2b-it-q4_K_M"
num_ctx = 8192 

이렇게 원하는 모델을 적어주면 됨</code></pre>



<h4 class="wp-block-heading">올라마 설치 (Linux)</h4>



<pre class="wp-block-code"><code># 2. Start Ollama and pull a model
curl -fsSL https://ollama.com/install.sh | sh
ollama serve &amp;
ollama pull qwen3:8b</code></pre>



<h4 class="wp-block-heading">올라마 설치 (Windows)</h4>



<p><a href="https://ollama.com/download/windows">https://ollama.com/download/windows</a> 에서 윈도우용 다운로드 가능</p>



<pre class="wp-block-code"><code># 다운로드 설치 한번에 (글 작성 시 다운로드 용량 1.8gb)
irm https://ollama.com/install.ps1 | iex</code></pre>



<h4 class="wp-block-heading">PC 올라마에 설치된 목록 보기</h4>



<pre class="wp-block-code"><code> ollama list</code></pre>



<p>Qwen의 세부버전 확인 &#8211; 글 작성당시 github 페이지에서 qwen3버전을 언급해서 qwen3버전중에 알맞은버전을 실행</p>



<p><a href="https://ollama.com/library">https://ollama.com/library</a></p>



<p><a href="https://ollama.com/library/qwen3">https://ollama.com/library/qwen3</a> &lt;- 이 안에서 고르기 추천</p>



<pre class="wp-block-code"><code>ollama pull qwen3:14b          # 저는 14b 모델을 골랐습니다</code></pre>



<pre class="wp-block-code"><code>ollama rm qwen3:14b           # 14b 지울때</code></pre>



<pre class="wp-block-code"><code>ollama qwen3.5:27b             # 최신버전인 3.5:27b를 설치할때</code></pre>



<h3 class="wp-block-heading">Ollama 실행</h3>



<pre class="wp-block-code"><code>#이모델의 사이즈는 18GB context를 8k쓰면 20GB정도사용 (그래픽카드가 4090 이라서 VRAM=24GB 20기가는 AI에활용 4기가로 코딩이나 웹서핑)

ollama run gemma4:e2b-it-q4_K_M</code></pre>



<h3 class="wp-block-heading">Ollama 명령어</h3>



<p>참고로 gemma4는 최대 256k컨텍스트 메모리사이즈를 지원하며 gemini 무료버전은 현재 128k를배당해줍니다. 유료결제후 Pro모델을사용할때는 1M이상의 가변 context를 할당해줍니다. 하지만 로컬에서 사용할때 256k컨텍스트를 모두사용하려면 추가로 48GB의 VRAM이 필요합니다. Gemma4의 가장 큰 모델은 사이즈가 80GB이므로 128GB가 필요합니다. 즉 Gemma4최고사양을 사용하려면 128GB이상의 메모리가 필요하다는 이야기가 되니까 참고해주세요. (=128GB로하면 운영체제나 다른용도로 쓰이는것때문에 일부를 시스템메모리를 사용하게되면 상당히 느려져서 조금 성능을 낮추는게 유리함. VRAM이나 공유메모리가 132GB이상이면 무리없이 일반작업이 가능하고 150GB이상이면 AI를 돌리면서 게임을 해도 괜찮음.)</p>



<pre class="wp-block-code"><code>/show parameters

/set parameter num_ctx 8192 # context 8192로 사용량제한</code></pre>



<pre class="wp-block-code"><code>#
uv run jarvis serve --model gemma4:e2b-it-q4_K_M --port 9090</code></pre>



<h3 class="wp-block-heading">qwen3.5 모델 목록 참고</h3>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="803" height="512" data-attachment-id="339" data-permalink="https://blog.kggstudio.com/open-jarvis/image-52/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-26.png" data-orig-size="803,512" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-26.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-26.png" alt="" class="wp-image-339" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-26.png 803w, https://blog.kggstudio.com/wp-content/uploads/2026/03/image-26-300x191.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/03/image-26-768x490.png 768w" sizes="auto, (max-width: 803px) 100vw, 803px" /></figure>



<p>Gemma 4 목록</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="653" height="1024" data-attachment-id="394" data-permalink="https://blog.kggstudio.com/open-jarvis/image-65/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-32.png" data-orig-size="755,1184" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-32-653x1024.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-32-653x1024.png" alt="" class="wp-image-394" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-32-653x1024.png 653w, https://blog.kggstudio.com/wp-content/uploads/2026/03/image-32-191x300.png 191w, https://blog.kggstudio.com/wp-content/uploads/2026/03/image-32.png 755w" sizes="auto, (max-width: 653px) 100vw, 653px" /></figure>



<h3 class="wp-block-heading">OpenJarvis 사용</h3>



<pre class="wp-block-code"><code>#1회용 질문 실행
uv run jarvis ask "What is the capital of France?"</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/open-jarvis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">338</post-id>	</item>
		<item>
		<title>파이썬 예외처리 (C++과 차이점)</title>
		<link>https://blog.kggstudio.com/python-exception/</link>
					<comments>https://blog.kggstudio.com/python-exception/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Thu, 26 Mar 2026 04:17:11 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[python try]]></category>
		<category><![CDATA[파이썬 예외처리]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=334</guid>

					<description><![CDATA[파이썬에서 예외처리 방법에대해 정리해보고자 합니다. 제 메인 언어는 C++인데 파이썬은 C++과 다소 다른부분이 있어서 다른부분을 짚어보고, 파이썬 예외처리 제대로 사용하는방법을 알아보려 합니다. C++ 예외처리 C++ 에서는 아래코드처럼 try catch가 전부이고 문법구조가 간단하기때문에 사용법도 간단합니다. 물론 코드가 길어지는 단점은 있습니다. C++은 아래처럼 사용합니다. Python 예외처리 파이썬은 try: exception: 의 C++ 의 try, catch에 대응하는 기능인데, 이 ... <a title="파이썬 예외처리 (C++과 차이점)" class="read-more" href="https://blog.kggstudio.com/python-exception/" aria-label="파이썬 예외처리 (C++과 차이점)에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>파이썬에서 예외처리 방법에대해 정리해보고자 합니다. 제 메인 언어는 C++인데 파이썬은 C++과 다소 다른부분이 있어서 다른부분을 짚어보고, 파이썬 예외처리 제대로 사용하는방법을 알아보려 합니다.</p>



<h3 class="wp-block-heading">C++ 예외처리</h3>



<p>C++ 에서는 아래코드처럼 try catch가 전부이고 문법구조가 간단하기때문에 사용법도 간단합니다. 물론 코드가 길어지는 단점은 있습니다. C++은 아래처럼 사용합니다.</p>



<pre class="wp-block-code"><code>try {
    // 예외 가능성이 있는 코드 작성
    throw std::runtime_error("0으로 나눌 수 없습니다!")
} 
catch (... ) {
    // 예외처리
}</code></pre>



<h3 class="wp-block-heading">Python 예외처리</h3>



<pre class="wp-block-code"><code># 예외처리 try 구문 작동원리
try:
  print("1. 예외가 발생될 수 있다고 예상되는 코드")
  # raise exception()                      # &lt;- 임의로 에러 발생!!
except:
  print("2. 에러가 발생 하였습니다")
else:
  print("3. 에러가 없을 때 실행할 코드")  
finally:
  print("4. 에러 유무 관계없이 실행할 코드")</code></pre>



<p>파이썬은 try: exception: 의 C++ 의 try, catch에 대응하는 기능인데, 이 둘은 필수로 작성하고 else문과 finally문은 (optional)한 코드입니다. 하지만 구조가 이렇게 잡혀있는만큼 따르면 얻는 잇점도 있기때문에 그 부분을 알고 넘어가고자 합니다.</p>



<h4 class="wp-block-heading">try:</h4>



<p>try문은 파일 입출력이나 네트워크와 연결된 에러가 예상되는 코드를 작성해줍니다.</p>



<h4 class="wp-block-heading">except:</h4>



<p>except에서는 catch와 마찬가지로 에러가 발생한경우 디버깅용 또는 로그용 코드를 작성해도 좋고 에러 알림용 코드를 작성해도 좋습니다.</p>



<h4 class="wp-block-heading">else: (optional)</h4>



<p>이곳은 try문이 성공했을때 실행될 코드를 작성해줍니다. C++과 차이가있다면, C++에서는 try문에 파일 읽는 코드가 있다면, catch문 아래에 파일 객체를 담은 변수를 if문으로 체크해서 try가 성공한것을 확인하고 파일객체를 사용하거나 try가 실패한것을 확인하여 바로 파일을 닫는 등 코드를 작성해야합니다.</p>



<p>파이썬에서는 else: 키워드자체가 파일 읽어오기가 성공되었다는것을 보장해주므로 파일읽기 성공여부를 체크하지 않아도 됩니다. 물론 파일을 읽어온 데이터의 무결성검사는 여전히 해줄 필요가 있습니다.</p>



<h4 class="wp-block-heading">finally: (optional)</h4>



<p>이곳은 예외발생여부와 상관없이 try 예외처리 구문 마지막에 실행되는 코드인데요. try문에서 파일을 읽어왔다면 이곳에서 파일을 닫는 코드가 들어가면 좋습니다.</p>



<p>C++ 사용자라면 else문 finally문 없이 그냥 쓰면 되는거아니야 라고 생각될수도있는데, 예외가 발생할수있는 코드부분을 묶어주면 가독성에도 도움이되고 위에 else 부분에서 언급한것처럼 if문 사용을 줄이는데도 도움이 됩니다.</p>



<h3 class="wp-block-heading">Python 사용자 입장에서 예외처리 예시</h3>



<p>C++과 비교하면 파이썬 예외처리구문의 기능을 전부 다룰수없어서 순수 파이썬 사용자 입장에서도 예시를 한번 살펴보겠습니다.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="600" height="377" data-attachment-id="335" data-permalink="https://blog.kggstudio.com/python-exception/image-51/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-25.png" data-orig-size="600,377" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-25.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-25.png" alt="" class="wp-image-335" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/03/image-25.png 600w, https://blog.kggstudio.com/wp-content/uploads/2026/03/image-25-300x189.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>



<p>예시코드는 위 사진처럼 웹사이트에서 학점조회를 할경우 백엔드 데이터얻어오는 코드를 예시로 들었습니다. 아래의 코드 2번을 집중해서 봐주세요 설명은 아래서 이어 하겠습니다.</p>



<pre class="wp-block-code"><code>#&#91;코드 1]
scores = {"유원영": {"국어": 94, "영어": 91, "수학": 89},
          "설지민": {"국어": 88, "영어": 96, "수학": 90},
          "신윤아" :{"국어":86, "영어":88, "수학": 77},
          "장윤아": {"국어": 98, "영어": 76, "수학": 92}}

def score_analysis(data, name):
    print(f"&#91;{name} 성적 분석]")

    for 과목 in &#91;"국어", "영어", "수학"]:
      합계 = 0
      for i in data:
        합계 += data&#91;i]&#91;과목]
      학급평균 = 합계 / len(data)
      내점수= data&#91;name]&#91;과목]
      편차=내점수-학급평균
      print(f"{과목}:{내점수}점, 학급평균({학급평균}점, 편차= {편차:+})")
    print("\n")</code></pre>



<pre class="wp-block-code"><code>#&#91;코드 2]
def query_test_result(name):
  try:
    print("1. 성적표 데이터 불러오기를 시도합니다.\n")
    # f = open("~/work/workplace/파이썬/성적표.txt", "r")  # 파일 불러오기 or 데이터 베이스 쿼리
    
  except:
    print("2. 성적표 데이터 불러오기 중 알수 없는 오류 발생\n") # 로깅 및 디버깅 용
    print("&#91;시스템에러]: 잠시 후 다시 시도해 주세요.\n")        # 사용자에게 알림 용
  else:
    print("3. 성적표 데이터 불러오기 성공\n")                   # 로깅 및 디버깅 용
    print("&#91;조회성공]: 시험결과를 출력합니다\n")                # 사용자에게 알림 용
    #10/0  # &lt;- 에러발생 유발
    data = scores    # data = f.read()  # 또는 DB 쿼리
    score_analysis(data, name)

  finally:
    print("4. 파일을 닫습니다.\n")
    #f.close()  # &lt;- "Graceful Shutdown" (우아한 종료)

query_test_result("장윤아")</code></pre>



<p>try 에서는 예외가 발생할수있는 데이터베이스 쿼리나 파일입출력같은 코드가 들어가면 좋습니다. 예시에서는 파일 불러오는 코드가 있습니다.</p>



<p>except: 예외가 발생한경우 loggin debugging 용 메시지 출력과함께 사용자 알림 메시지 출력 or 전송 기능을 넣을수있습니다.</p>



<p>else: 파일 읽기가 성공한경우에만 실행되기때문에 또다른 점검없이 f.read()로 파일속 데이터를 읽어오는것을 볼수있습니다.</p>



<p>finally:에서는 f.close()로 파일을 닫는것을 알수있습니다.</p>



<h4 class="wp-block-heading">else는 왜 필요한가?</h4>



<ul class="wp-block-list">
<li>(예외처리 구문 밖은 안됨) 현재 예제코드에서는 파일읽기를 성공했다고 가정하고 f.read()를 사용하는데, 이를 try구문이 끝나고나서 사용할경우. 파일읽기가 실패한경우에도 f.read()를 호출해서 에러가 발생하게 됩니다.</li>



<li>(try: 구문에서는 안됨) try구문안에 f.read()가있으면 문제없이 모든게 잘 작동하면 상관없겠지만, f.read()를하다가 에러가 발생하게되거나 혹은 다른 코드 (예시에서는     score_analysis(data, name) 이부분에서) 에러가 나더라도 어디서 에러나는지 알수가 없습니다.</li>
</ul>



<h4 class="wp-block-heading">finally는 왜필요한가?</h4>



<ul class="wp-block-list">
<li>finally는 파일닫기처럼 try문에서 파일을 열었을때 꼭 수행되야하는 작업을 넣어줍니다.</li>



<li>try 구문 어딘가에서 return이나 break를 통해 try를 빠져나가는것을 시도하면 finally 문이 실행되는것을 보장해줍니다.</li>
</ul>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/python-exception/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">334</post-id>	</item>
		<item>
		<title>Rust(11) Loop 반복문</title>
		<link>https://blog.kggstudio.com/rust11-loop/</link>
					<comments>https://blog.kggstudio.com/rust11-loop/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 11:09:13 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[Rust for]]></category>
		<category><![CDATA[Rust loop]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=326</guid>

					<description><![CDATA[러스트의 반복문 특징 loop 라벨링 loop 반복문의겨우 아래 코드처럼 &#8216;를 사용해 라벨링이 가능하다. 라벨링을 사용해서 inner loop에서 outer loop를 break 한번에 빠져 나올수있다. while (조건식 필수) while 루프는 C++이나 JS등 다른언어와 크게 다르지않다. for (배열 순회) for 은 다음처럼 사용하면 배열의 아이템들을 한번씩 순회할수 있다. for + rev() rev()는 리버스의 줄임말로 배열 내 숫자를 1, ... <a title="Rust(11) Loop 반복문" class="read-more" href="https://blog.kggstudio.com/rust11-loop/" aria-label="Rust(11) Loop 반복문에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>러스트의 반복문 특징</p>



<h4 class="wp-block-heading">loop 라벨링</h4>



<p>loop 반복문의겨우 아래 코드처럼 &#8216;를 사용해 라벨링이 가능하다. 라벨링을 사용해서 inner loop에서 outer loop를 break 한번에 빠져 나올수있다.</p>



<pre class="wp-block-code"><code>fn main() {
    let mut count = 0;
    'counting_up: loop {
        println!("count = {count}");
        let mut remaining = 10;

        loop {
            println!("remaining = {remaining}");
            if remaining == 9 {
                break;
            }
            if count == 2 {
                break 'counting_up;    // &lt;---- 
            }
            remaining -= 1;
        }

        count += 1;
    }
    println!("End count = {count}");
}</code></pre>



<h4 class="wp-block-heading">while (조건식 필수)</h4>



<p>while 루프는 C++이나 JS등 다른언어와 크게 다르지않다.</p>



<pre class="wp-block-code"><code>fn main() {
    let mut number = 3;

    while number != 0 {
        println!("{number}!");

        number -= 1;
    }

    println!("LIFTOFF!!!");
}</code></pre>



<h4 class="wp-block-heading">for (배열 순회)</h4>



<p>for 은 다음처럼 사용하면 배열의 아이템들을 한번씩 순회할수 있다.</p>



<pre class="wp-block-code"><code>fn main() {
    let a = &#91;10, 20, 30, 40, 50];

    for element in a {
        println!("the value is: {element}");
    }
}</code></pre>



<h4 class="wp-block-heading">for + rev()</h4>



<p>rev()는 리버스의 줄임말로 배열 내 숫자를 1, 2, 3을 3, 2 ,1 순서로 number iterator에 넣어줌.</p>



<pre class="wp-block-code"><code>fn main() {
    for number in (1..4).rev() {
        println!("{number}!");
    }
    println!("LIFTOFF!!!");
}

// rev()를 쓰지않을때는 range에 ()가 없어야함
    for number in 1..4 {
        println!("{number}!");
    }</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/rust11-loop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">326</post-id>	</item>
	</channel>
</rss>
