픽셀 얼룩에서 HD까지: 레거시 자산과 AI 복원의 전투

발행: (2026년 1월 16일 오후 05:46 GMT+9)
10 min read
원문: Dev.to

Source: Dev.to

2023년 말 목요일 새벽 2시, 나는 한계에 부딪혔다. 나는 고객의 전자상거래 카탈로그를 레거시 Magento 1 환경에서 최신 헤드리스 스택으로 이전하는 작업을 담당하고 있었다. 백엔드 마이그레이션은 순조로웠다—Postgres는 정상이고, API 응답도 50 ms 이하였다. 하지만 프론트엔드는 형편없었다.

문제는 자산이었다. 고객은 원본 고해상도 사진을 몇 년 전 이미 잃어버렸다. 남아 있는 것은 4,000개의 제품 이미지뿐이었으며, 모두 400 × 400 px로 압축돼 있었고—여기서 핵심은—모든 이미지에 “SUMMER SALE 2019” 라는 텍스트 오버레이가 오른쪽 하단에 직접 새겨져 있었다.

내 첫 번째 직감은 “코드로 해결할 수 있겠지”였다. 나는 Jupyter 노트북을 열고 OpenCV를 이용해 텍스트를 마스킹하고 결손 픽셀을 인페인팅해 보려 했다. 똑똑하게 행동하고 있다고 생각했다.

import cv2
import numpy as np

img = cv2.imread('product_042.jpg')
result = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
cv2.imwrite('result_smudge.jpg', result)

그 결과는? 마치 누군가가 젖은 엄지손가락으로 제품을 문질러 놓은 듯했다. 질감이 사라졌고, 조명이 깨졌다. 순백 배경에서는 어느 정도 받아들일 수 있었지만, 질감이 있는 천이나 복잡한 그라디언트가 있는 경우는 사용할 수 없었다. 나는 알고리즘 기반 인페인팅(텔레아 또는 Navier‑Stokes)이 컨텍스트를 이해하지 못한다는 것을 깨달았다; 이들은 이웃 픽셀만을 이해한다는 것이었다.

나는 이미지의 구조를 이해하는 무언가가 필요했다. 나는 생성적 접근 방식이 필요했다.

생성 인페인팅으로의 전환

표준 컴퓨터 비전 라이브러리의 한계는 감산적이거나 조작적이라는 점입니다. 기존 데이터를 옮겨 놓는 방식이죠. 이 이미지들을 실제로 복구하려면, 텍스트 뒤에 원래 없던 데이터를 (좋은 의미에서) 환상처럼 만들어내야 했습니다.

이때 AI Text Removal 은 포토샵의 클론‑스탬프 도구나 cv2.inpaint 와 근본적으로 다릅니다. 픽셀을 복사하는 대신, 확산 모델은 이미지의 시맨틱 컨텍스트를 분석합니다. 텍스트가 체크무늬 셔츠 위에 있다면, AI는 단순히 빨간색으로 채우는 것이 아니라 격자선을 맞추어 체크무늬 패턴을 재구성합니다.

현대적인 AI 모델을 사용해 테스트 배치를 실행해 보았습니다. 차이는 밤과 낮처럼 뚜렷했습니다. AI는 “SUMMER SALE” 텍스트를 외부 객체 레이어로 인식했고, 이를 제거했을 때 흐릿함이 남지 않고 제품이 바닥에 드리운 그림자를 재구성했습니다.

트레이드‑오프: 100 % 완벽하지는 않았습니다. 전체 이미지 중 약 5 %—특히 복잡한 체인링 패턴이 있거나 사람 얼굴 위에 텍스트가 있는 경우—에서는 AI가 원본과 약간 다른 텍스처를 생성하기도 했습니다. 하지만 내 파이썬 스크립트가 만든 “스머지” 효과와 비교하면, 감수할 만한 교환이었습니다.

이 기능을 통합하는 개발자라면 이제 **“마스크 좌표”**를 고민하는 대신 **“의도”**를 생각해야 합니다. 단순히 지우는 것이 아니라 모델에게 Remove Elements from Photo 를 요청하고 ‘여기에 무엇이 있어야 할까’ 를 예측하도록 하는 것입니다.

해상도 위기 해결하기

텍스트를 제거한 뒤, 나는 악몽의 두 번째 절반인 400 × 400 해상도 문제에 직면했다. 최신 Retina 또는 4K 디스플레이에서는 이 이미지들이 픽셀 아트처럼 보였다. 텍스트가 없는 깔끔한 이미지조차도 여전히 흐릿했다.

과거에는 “업스케일링”이란 단순히 바이큐빅 보간법을 의미했으며—본질적으로 픽셀을 크게 만들고 가장자리를 부드럽게 하는 것이었다. 그 결과는 부드럽고 초점이 맞지 않은 모습이었다. 나는 원본 파일에 존재하지 않는 디테일을 주입해야 했다.

나는 GAN(생성적 적대 신경망)을 활용하는 Free photo quality improver를 사용했다. 여기서 중요한 기술적 차이점은 다음과 같다:

방법과정결과
바이큐빅 리샘플링주변 픽셀을 수학적으로 평균화.흐림, 새로운 디테일 없음. 텍스처가 평평해 보임.
AI 사진 품질 향상기수백만 개의 고/저해상도 쌍으로 학습된 딥러닝 모델.선명한 가장자리, 실제와 같은 텍스처(예: 피부 모공, 직물 조직) 환상 생성.

사진 품질 향상기는 단순히 이미지를 늘린 것이 아니라 “이건 가죽이구나”라고 인식하고 업스케일된 영역에 가죽 같은 노이즈 프로파일을 적용했다. 이는 초기 업스케일러에서 흔히 나타나는 “플라스틱” 같은 느낌을 방지했다.

“워크플로우” 아키텍처

이 작업들을 별개의 작업으로 처리하는 것이 비효율적이라는 것을 깨달았습니다. 가장 좋은 결과는 특정 파이프라인 순서에서 나왔습니다. 먼저 업스케일을 하면 텍스트 주변의 압축 아티팩트도 함께 확대되어 나중에 텍스트를 제거하기가 더 어려워집니다.

프로젝트를 구해낸 워크플로우

  1. Input – 원본 저품질 이미지.
  2. Clean – AI 텍스트 제거 단계를 먼저 실행합니다. 인공적인 샤프닝을 추가하기 전에 원시 픽셀에서 모델이 더 잘 작동합니다.
  3. Verify – 빠른 수동 확인(또는 API를 통한 신뢰도 점수 확인).
  4. Enhance – 정리된 이미지를 업스케일러에 전달하여 해상도를 4배로 높입니다.

배경이 완전히 복구 불가능한 몇몇 히어로 이미지의 경우, 저는 실제로 AI 이미지 생성기 앱을 사용해 완전히 새로운 스튜디오‑품질 배경을 만든 뒤 제품을 다시 합성했습니다. 치팅처럼 들릴 수 있지만, 실제 제작에서는 순수성보다 결과가 더 중요합니다.

Final Thoughts

나는 이 이미지들을 저장하기 위해 맞춤형 파이썬 파이프라인을 만들려고 삼 일 동안 애썼지만 실패했다. 전용 AI 워크플로우로 전환했고, 오후에 마이그레이션을 마쳤다.

자신만의 도구를 만드는 시기가 있고, 최첨단 기술이 단순 스크립트를 넘어섰다는 것을 인식해야 할 시기가 있다. 만약 형편없는 클라이언트 자산을 다루고 있다면, 픽셀을 수동으로 싸우지 마라. 현실을 재구성하는 기술은 이미 존재한다—그냥 올바른 순서대로 사용하면 된다.

Back to Blog

관련 글

더 보기 »

기술은 구원자가 아니라 촉진자다

왜 사고의 명확성이 사용하는 도구보다 더 중요한가? Technology는 종종 마법 스위치처럼 취급된다—켜기만 하면 모든 것이 개선된다. 새로운 software, ...

에이전틱 코딩에 입문하기

Copilot Agent와의 경험 나는 주로 GitHub Copilot을 사용해 인라인 편집과 PR 리뷰를 수행했으며, 대부분의 사고는 내 머리로 했습니다. 최근 나는 t...