<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>프로젝트 |</title><link>https://inhyuk2000.github.io/tags/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/</link><atom:link href="https://inhyuk2000.github.io/tags/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/index.xml" rel="self" type="application/rss+xml"/><description>프로젝트</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Tue, 15 Jul 2025 00:00:00 +0900</lastBuildDate><image><url>https://inhyuk2000.github.io/media/icon_hu_eee4a95885829ab2.png</url><title>프로젝트</title><link>https://inhyuk2000.github.io/tags/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/</link></image><item><title>블록체인을 활용한 신뢰 기반 이미지 거래 서비스, BlockSnap</title><link>https://inhyuk2000.github.io/projects/blockchain-true-image-app/</link><pubDate>Tue, 15 Jul 2025 00:00:00 +0900</pubDate><guid>https://inhyuk2000.github.io/projects/blockchain-true-image-app/</guid><description>&lt;h3 id="설명"&gt;설명&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;프로젝트 이름&lt;/strong&gt; : 신뢰 기반 이미지 거래 서비스, BlockSnap&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;프로젝트 기간&lt;/strong&gt; : 2026.03 ~ 2026.06&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;프로젝트 설명&lt;/strong&gt; : 블록체인의 온체인에 이미지 메타데이터를 등록해 위조가 불가능한 이미지 데이터를 생성하고, 이를 거래할 수 있는 서비스&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;프로젝트 목적&lt;/strong&gt; : AI로 생성된 이미지가 굉장히 많아, 구별이 힘든 삶을 살아가고 있는 상황 속에서 검증된 이미지를 통해 사용자를 안심시켜주기 위함&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;프로젝트 성과&lt;/strong&gt; : 이미지 거래 서비스 개발&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="api-설계"&gt;API 설계&lt;/h3&gt;
&lt;p&gt;백엔드 파트를 맡고, 여러 팀원들이 협업하며 동일한 서비스를 개발하기 위해서 API를 통일하고 인지해야 할 필요성이 있었습니다.&lt;/p&gt;
&lt;p&gt;따라서 각 기능 별 &lt;strong&gt;Request Header&lt;/strong&gt;, &lt;strong&gt;Request Body&lt;/strong&gt;, &lt;strong&gt;Response Header&lt;/strong&gt;, &lt;strong&gt;Response Body&lt;/strong&gt;, &lt;strong&gt;Error Type&lt;/strong&gt; 들을 전부 정리하는 식으로 설계를 시작했습니다.&lt;/p&gt;
&lt;h3 id="스마트-컨트랙트-저장-구조-설계"&gt;스마트 컨트랙트 저장 구조 설계&lt;/h3&gt;
&lt;p&gt;이미지 거래 과정에서 발생하는 소유권과 거래 이력을 위변조가 어렵도록 관리하기 위해, 거래에 필요한 핵심 정보는 스마트 컨트랙트에 저장하고 실제 이미지 파일과 일부 상세 정보는 Off-chain 영역에 분리해 저장하도록 설계했습니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;구분&lt;/th&gt;
&lt;th&gt;필드&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;기본 블록 정보&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;blockNumber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;거래가 기록된 블록 번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;timestamp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;블록이 생성된 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;트랜잭션 정보&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;txHash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;각 거래를 구분하는 고유 트랜잭션 해시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;buyer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;구매자 지갑 주소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;seller&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;판매자 지갑 주소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;signature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;거래 당사자와 소유권을 인증하기 위한 서명값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;이미지 정보&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;imageHash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;이미지 위변조 여부를 검증하기 위한 해시값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;imageUrl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Amazon S3에 저장된 실제 이미지의 Off-chain 주소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;metadata&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;이미지 제목, 설명, 카테고리 등 부가 정보&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;거래 정보&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;이미지 거래 가격&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tokenId&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;이미지 자산을 식별하기 위한 토큰 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tokenType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ERC-721, ERC-1155 등 토큰 표준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;검증 및 인증 정보&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;verificationStatus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;이미지 검증 상태 (&lt;code&gt;VERIFIED&lt;/code&gt;, &lt;code&gt;PENDING&lt;/code&gt;, &lt;code&gt;FAILED&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deviceId&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;촬영에 사용된 디바이스 식별 정보&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;로열티 및 수익 분배&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;royaltyRate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;재판매 시 적용되는 원작자 로열티 비율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;creator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;원작자의 지갑 주소&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;모든 데이터를 온체인에 저장하면 저장 비용과 처리 부담이 커질 수 있기 때문에, 이미지의 위변조 검증과 소유권 증명에 필요한 &lt;code&gt;imageHash&lt;/code&gt;, 거래 주소, 서명, 가격 등의 핵심 정보는 On-chain에 저장하고, 실제 이미지 파일과 상세 메타데이터는 Amazon S3에 Off-chain으로 관리했습니다.&lt;/p&gt;
&lt;p&gt;이를 통해 블록체인의 무결성과 추적 가능성을 활용하면서도 저장 비용과 시스템 성능을 함께 고려한 구조를 설계했습니다.&lt;/p&gt;
&lt;h3 id="프로젝트를-진행하며-느낀점"&gt;프로젝트를 진행하며 느낀점&lt;/h3&gt;
&lt;p&gt;백엔드 개발을 담당하며 프론트엔드 팀과 스마트 컨트랙트 팀 사이의 협업 과정을 경험했습니다. 프로젝트 초기에는 각 파트가 동일한 기능과 데이터 구조를 이해할 수 있도록 요청·응답 형식과 예외 상황을 포함한 API 명세서를 구체적으로 작성했습니다. &lt;span class="high-mark"&gt;&lt;strong&gt;명세를 정리하는 과정에는 많은 시간이 필요했지만, 이후 파트 간 소통 비용과 구현 과정의 혼선을 줄여 프로젝트 후반부의 개발 속도를 높이는 데 기여했습니다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;또한 이미지 해시를 활용한 유사 이미지 검증 로직을 백엔드에 구현하며 여러 예외 상황과 기술적 문제를 해결했습니다. 이 과정에서 API 명세는 단순히 인터페이스를 기록하는 문서가 아니라, 문제의 발생 지점과 각 파트의 책임 범위를 명확하게 정의하고 해결 방향을 공유하는 협업 도구라는 점을 배울 수 있었습니다.&lt;/p&gt;</description></item></channel></rss>