· Nacho Coll · Guides · 24 분 소요
프론트엔드를 IPFS에 배포하는 방법 — 분산형 앱 호스팅
튜토리얼: React 또는 정적 프론트엔드를 IPFS에 배포합니다. IPFS.NINJA를 사용하여 자산을 핀하고 전용 게이트웨이를 통해 제공하세요.

전통적인 웹 호스팅은 다운될 수 있고, 검열될 수 있으며, 유지 관리 비용이 비싸지는 중앙 집중식 서버에 의존합니다. 만약 당신의 프론트엔드가 더 탄력적이고, 비용 효율적이며, 전 세계적으로 분산된 탈중앙화 네트워크에서 호스팅될 수 있다면 어떨까요? IPFS 호스팅이 등장합니다 — 인터플래너터리 파일 시스템을 활용한 진정한 탈중앙화 앱 호스팅을 위한 웹 애플리케이션 배포의 혁신적인 접근 방식입니다.
이 종합 가이드에서는 IPFS.NINJA를 사용하여 React 애플리케이션을 IPFS에 배포하는 전체 프로세스를 앱 빌드부터 사용자 정의 게이트웨이 구성, ENS 도메인 통합 탐색까지 안내합니다. 간단한 포트폴리오 사이트를 구축하든 복잡한 탈중앙화 애플리케이션을 구축하든, 이 튜토리얼은 프론트엔드를 IPFS에 효과적으로 호스팅하기 위한 기초를 제공합니다.

왜 프론트엔드 호스팅에 IPFS를 선택해야 할까요?
기술적 구현에 들어가기 전에 IPFS 호스팅이 전 세계 개발자와 조직 사이에서 인기를 얻고 있는 이유를 이해해 봅시다.
탈중앙화의 이점: 사이트가 단일 서버나 CDN에 의존하는 전통적인 호스팅과 달리, IPFS는 콘텐츠를 글로벌 노드 네트워크에 분산합니다. 이는 개별 노드가 오프라인이 되어도 사이트가 계속 액세스 가능하다는 것을 의미합니다.
콘텐츠 주소 지정: IPFS는 암호화 해시(CID)를 사용하여 콘텐츠를 식별하여 불변성을 보장합니다. 프론트엔드를 배포하면 사용자는 콘텐츠가 변조되지 않았음을 신뢰할 수 있습니다.
비용 효율성: IPFS.NINJA와 같은 서비스를 사용하면 전통적인 호스팅 비용의 일부로 정적 프론트엔드를 호스팅할 수 있습니다. 우리의 Dharma 플랜은 무료로 1GB 스토리지와 월 2GB 대역폭을 제공하고, Bodhi 플랜은 월 $5에 10GB 스토리지와 20GB 대역폭을 제공하며, Karma 플랜은 월 $19에 100GB / 100GB로 업그레이드됩니다.
성능: IPFS의 P2P 특성은 콘텐츠가 가장 가까운 사용 가능한 노드에서 제공된다는 것을 의미하며, 잠재적으로 중앙 집중식 CDN보다 더 나은 성능을 제공합니다.
검열 저항성: 탈중앙화 호스팅은 단일 엔터티가 애플리케이션을 중단시키는 것을 극도로 어렵게 만듭니다.
웹 호스팅을 위한 IPFS 핀 이해하기
프론트엔드를 IPFS에 배포할 때, 본질적으로 빌드된 애플리케이션 파일을 네트워크에 업로드하는 것입니다. 그러나 IPFS 노드는 적극적으로 사용 중인 콘텐츠만 유지합니다. 이것이 IPFS 핀이 중요한 이유입니다 — IPFS.NINJA와 같은 전용 핀 서비스에 파일을 저장함으로써 파일이 계속 사용 가능하도록 보장합니다.
핀을 호스팅 보증으로 생각하세요. 파일이 고유한 콘텐츠 식별자(CID)로 IPFS 네트워크에 존재하지만, 핀 서비스는 사이트를 방문하려는 사용자에게 항상 액세스 가능하도록 보장합니다.
개발 환경 설정
IPFS에 배포할 React 애플리케이션을 만드는 것부터 시작하겠습니다. 기존 프론트엔드 프로젝트가 있다면 빌드 최적화 섹션으로 건너뛸 수 있습니다.
# 새 React 앱 생성
npx create-react-app my-ipfs-app
cd my-ipfs-app
# IPFS 통합을 위한 추가 종속성 설치
npm install axios이 튜토리얼에서는 탈중앙화 애플리케이션에서 일반적으로 필요한 다양한 기능을 보여주는 간단하지만 기능적인 React 애플리케이션을 만들 것입니다.
// src/App.js
import React, { useState, useEffect } from 'react';
import './App.css';
function App() {
const [ipfsStatus, setIpfsStatus] = useState('Checking...');
const [deploymentInfo, setDeploymentInfo] = useState(null);
useEffect(() => {
// IPFS 연결 확인 시뮬레이션
setTimeout(() => {
setIpfsStatus('Connected to IPFS Network');
setDeploymentInfo({
cid: 'QmYourAppHashWillAppearHere',
deployed: new Date().toISOString(),
size: '2.3 MB'
});
}, 2000);
}, []);
return (
<div className="App">
<header className="App-header">
<h1>🚀 My Decentralized App</h1>
<p>Hosted on IPFS via IPFS.NINJA</p>
<div className="status-card">
<h3>IPFS Status</h3>
<p className={ipfsStatus.includes('Connected') ? 'connected' : 'checking'}>
{ipfsStatus}
</p>
</div>
{deploymentInfo && (
<div className="deployment-info">
<h3>Deployment Information</h3>
<p><strong>CID:</strong> {deploymentInfo.cid}</p>
<p><strong>Size:</strong> {deploymentInfo.size}</p>
<p><strong>Deployed:</strong> {deploymentInfo.deployed}</p>
</div>
)}
<div className="features">
<h3>Decentralized Features</h3>
<ul>
<li>✅ Censorship Resistant</li>
<li>✅ Globally Distributed</li>
<li>✅ Content Addressable</li>
<li>✅ Cost Effective</li>
</ul>
</div>
</header>
</div>
);
}
export default App;시각적으로 매력적으로 만들기 위해 일부 스타일을 추가합니다:
/* src/App.css */
.App {
text-align: center;
}
.App-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 40px;
color: white;
min-height: 100vh;
}
.status-card, .deployment-info, .features {
background: rgba(255, 255, 255, 0.1);
border-radius: 10px;
padding: 20px;
margin: 20px auto;
max-width: 500px;
backdrop-filter: blur(10px);
}
.connected {
color: #4ade80;
font-weight: bold;
}
.checking {
color: #fbbf24;
}
.features ul {
list-style: none;
padding: 0;
}
.features li {
padding: 8px 0;
font-size: 1.1em;
}IPFS용 빌드 최적화
IPFS는 정적 파일에서 가장 잘 작동하므로 React 애플리케이션이 탈중앙화 호스팅을 위해 올바르게 빌드되는지 확인해야 합니다. 몇 가지 중요한 고려 사항이 있습니다:
1. IPFS 경로용 React 구성
기본적으로 React 앱은 루트 도메인에서 제공된다고 가정합니다. IPFS에서 호스팅할 때 앱은 https://gateway.ipfs.io/ipfs/QmYourHash와 같은 경로를 통해 액세스됩니다. 이를 올바르게 처리하도록 React를 구성해야 합니다.
package.json을 생성하거나 수정합니다:
{
"name": "my-ipfs-app",
"version": "0.1.0",
"homepage": "./",
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"axios": "^1.6.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"ipfs-build": "npm run build && npm run prepare-ipfs",
"prepare-ipfs": "echo 'Build optimized for IPFS deployment'"
}
}"homepage": "./" 구성은 React에게 상대 경로를 사용하도록 지시하며, 이는 IPFS 호스팅에 필수적입니다.
2. 단일 페이지 애플리케이션의 라우팅 처리
앱이 React Router를 사용하는 경우 IPFS 호환성을 위해 BrowserRouter 대신 HashRouter를 사용해야 합니다:
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import { HashRouter } from 'react-router-dom';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<HashRouter>
<App />
</HashRouter>
</React.StrictMode>
);3. 애플리케이션 빌드
이제 프로덕션 빌드를 만들어 봅시다:
npm run build이렇게 하면 애플리케이션에 필요한 모든 정적 파일이 포함된 build 폴더가 생성됩니다.
IPFS.NINJA로 IPFS에 업로드
이제 흥미진진한 부분이 옵니다 — IPFS.NINJA의 강력한 핀 서비스를 사용하여 프론트엔드를 IPFS에 배포합니다. 다른 핀 서비스와 비교했을 때, IPFS.NINJA는 경쟁력 있는 가격, 전용 게이트웨이 및 개발자 친화적인 API를 제공합니다.
IPFS.NINJA 계정 설정
먼저, 무료 IPFS.NINJA 계정 만들기를 통해 API 키를 받습니다. bws_ 다음에 32개의 16진수 문자가 오는 형식의 API 키를 받게 됩니다.
방법 1: 대시보드를 통한 업로드
프론트엔드를 배포하는 가장 간단한 방법은 IPFS.NINJA 대시보드를 통하는 것입니다:
- https://ipfs.ninja로 이동하여 로그인
- 업로드 섹션으로 이동
- 프로젝트용 새 폴더 만들기
- 전체
build폴더를 끌어다 놓기 - “My React App v1.0”과 같은 설명 추가
- 업로드 클릭
대시보드는 파일을 처리하고 전체 애플리케이션을 나타내는 CID를 반환합니다.
방법 2: API를 통한 프로그래밍 방식 업로드
보다 자동화된 배포 프로세스를 위해 IPFS.NINJA API를 사용할 수 있습니다. 이는 CI/CD 파이프라인에 특히 유용합니다.
배포 스크립트를 만듭니다:
// deploy.js
const fs = require('fs');
const path = require('path');
const axios = require('axios');
const API_KEY = 'bws_your_32_character_hex_api_key_here';
const API_BASE = 'https://api.ipfs.ninja';
async function uploadFile(filePath, fileName) {
try {
const fileContent = fs.readFileSync(filePath);
const base64Content = fileContent.toString('base64');
const response = await axios.post(`${API_BASE}/upload/new`, {
content: base64Content,
description: `Frontend file: ${fileName}`,
metadata: {
filename: fileName,
type: 'frontend-asset',
deployment: new Date().toISOString()
}
}, {
headers: {
'X-Api-Key': API_KEY,
'Content-Type': 'application/json'
}
});
return response.data;
} catch (error) {
console.error(`Failed to upload ${fileName}:`, error.response?.data || error.message);
throw error;
}
}
async function uploadDirectory(dirPath) {
const files = fs.readdirSync(dirPath);
const uploads = [];
for (const file of files) {
const fullPath = path.join(dirPath, file);
const stat = fs.statSync(fullPath);
if (stat.isDirectory()) {
// 하위 디렉토리를 재귀적으로 업로드
const subUploads = await uploadDirectory(fullPath);
uploads.push(...subUploads);
} else {
console.log(`Uploading ${file}...`);
const result = await uploadFile(fullPath, file);
uploads.push({
file: file,
cid: result.cid,
url: result.uris.url,
size: result.sizeMB
});
}
}
return uploads;
}
async function deployFrontend() {
try {
console.log('🚀 Starting IPFS deployment...');
const buildPath = './build';
if (!fs.existsSync(buildPath)) {
throw new Error('Build directory not found. Run "npm run build" first.');
}
const uploads = await uploadDirectory(buildPath);
console.log('\n✅ Deployment complete!');
console.log('\nUploaded files:');
uploads.forEach(upload => {
console.log(`📄 ${upload.file}: ${upload.cid} (${upload.size}MB)`);
});
// 메인 HTML 파일 찾기
const indexUpload = uploads.find(u => u.file === 'index.html');
if (indexUpload) {
console.log(`\n🌐 Your app is live at: ${indexUpload.url}`);
console.log(`📋 Root CID: ${indexUpload.cid}`);
}
} catch (error) {
console.error('❌ Deployment failed:', error.message);
process.exit(1);
}
}
// 배포 실행
deployFrontend();이 스크립트를 package.json에 추가합니다:
{
"scripts": {
"deploy": "node deploy.js",
"build-and-deploy": "npm run build && npm run deploy"
}
}배포 실행:
npm run build-and-deploy사용자 정의 게이트웨이 설정
IPFS.NINJA의 두드러진 기능 중 하나는 애플리케이션용 사용자 정의 게이트웨이를 만들 수 있는 능력입니다. 이는 공용 게이트웨이에 비해 더 나은 브랜딩과 성능을 제공합니다.
전용 게이트웨이 만들기
IPFS.NINJA 대시보드를 통해:
- Gateways 섹션으로 이동
- “Create New Gateway” 클릭
- 하위 도메인 선택 (예:
myapp.gw.ipfs.ninja) - 액세스 설정 구성:
- Open: 공개적으로 액세스 가능
- Restricted: API 키 필요
- Folder: 디렉토리 목록 제공
- 필요한 경우 오리진 제한 설정
- 추가 보안을 위한 IP 화이트리스트 구성
게이트웨이 구성 예시
// gateway-config.js
const gatewayConfig = {
slug: 'myapp',
access: 'open',
description: 'My React App Gateway',
settings: {
cors: true,
caching: true,
compression: true
}
};
async function setupGateway() {
try {
const response = await axios.post(`${API_BASE}/gateways`, gatewayConfig, {
headers: {
'X-Api-Key': API_KEY,
'Content-Type': 'application/json'
}
});
console.log('Gateway created:', response.data);
console.log(`Access your app at: https://${gatewayConfig.slug}.gw.ipfs.ninja/ipfs/${YOUR_APP_CID}`);
} catch (error) {
console.error('Gateway setup failed:', error.response?.data);
}
}사용자 정의 게이트웨이의 이점
- 브랜드 URL: 일반 IPFS 게이트웨이 대신 자신의 하위 도메인 사용
- 더 나은 성능: 애플리케이션을 위한 전용 리소스
- 분석: 사용량 및 성능 지표 추적
- 보안: API 키 또는 IP 제한으로 액세스 제어
- 신뢰성: 공용 게이트웨이 가용성에 대한 의존성 감소
고급 IPFS 호스팅 전략
1. 콘텐츠 업데이트 구현
파일을 단순히 덮어쓸 수 있는 전통적인 호스팅과 달리, IPFS 콘텐츠는 불변입니다. 각 변경은 새 CID를 생성합니다. 업데이트를 효과적으로 처리하는 방법은 다음과 같습니다:
// update-manager.js
class IPFSUpdateManager {
constructor(apiKey) {
this.apiKey = apiKey;
this.apiBase = 'https://api.ipfs.ninja';
}
async deployUpdate(buildPath, version) {
// 새 버전 업로드
const newCID = await this.uploadBuild(buildPath, version);
// 버전 매핑 업데이트
await this.updateVersionMapping(version, newCID);
// 선택적으로 ENS 레코드 업데이트(이에 대해서는 나중에 자세히)
// await this.updateENSRecord(newCID);
return newCID;
}
async updateVersionMapping(version, cid) {
const versionInfo = {
version,
cid,
timestamp: new Date().toISOString(),
description: `Release ${version}`
};
await axios.post(`${this.apiBase}/upload/new`, {
content: Buffer.from(JSON.stringify(versionInfo)).toString('base64'),
description: `Version manifest ${version}`,
metadata: { type: 'version-manifest', version }
}, {
headers: { 'X-Api-Key': this.apiKey }
});
}
}2. 성능 최적화
// optimization.js
const compressionOptions = {
// 번들 크기 최소화
build: {
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chunks: 'all',
}
}
}
}
},
// IPFS 특정 최적화
ipfs: {
chunkSize: '1MB', // IPFS에 대한 최적의 청크 크기
preloadCriticalAssets: true,
enableServiceWorker: true
}
};3. 오프라인 지원을 위한 Service Worker 추가
오프라인 사용을 위해 앱을 캐시하는 service worker를 만듭니다:
// public/sw.js
const CACHE_NAME = 'ipfs-app-v1';
const urlsToCache = [
'/',
'/static/js/bundle.js',
'/static/css/main.css',
'/manifest.json'
];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(urlsToCache))
);
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(response => {
// 캐시된 버전 반환 또는 네트워크에서 가져오기
return response || fetch(event.request);
})
);
});React 앱에 service worker를 등록합니다:
// src/serviceWorkerRegistration.js
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js')
.then(registration => {
console.log('SW registered: ', registration);
})
.catch(registrationError => {
console.log('SW registration failed: ', registrationError);
});
});
}ENS 통합 및 사용자 정의 도메인
이더리움 이름 서비스(ENS)를 사용하면 사람이 읽을 수 있는 도메인 이름을 IPFS 콘텐츠에 매핑할 수 있습니다. 이는 탈중앙화 콘텐츠를 가리키는 전통적인 도메인을 가질 수 있는 강력한 조합을 만듭니다.
IPFS 사이트용 ENS 설정
- ENS 도메인 등록: ENS Manager를 사용하여 .eth 도메인 등록
- 콘텐츠 해시 설정: ENS 도메인을 IPFS CID에 가리키도록 설정
- DNS 브리지 구성: 전통적인 도메인의 경우 DNS 레코드 설정
// ens-integration.js
async function updateENSRecord(domain, ipfsCid) {
// 이것은 일반적으로 web3 공급자를 사용합니다
// 설명을 위한 단순화된 예시
const ensContract = new ethers.Contract(ENS_REGISTRY_ADDRESS, ENS_ABI, signer);
try {
const tx = await ensContract.setContentHash(
ethers.utils.namehash(domain),
`ipfs://${ipfsCid}`
);
await tx.wait();
console.log(`ENS record updated: ${domain} -> ${ipfsCid}`);
} catch (error) {
console.error('ENS update failed:', error);
}
}전통적인 도메인 통합
IPFS와 함께 전통적인 DNS를 사용할 수도 있습니다:
; example.com용 DNS TXT 레코드
_dnslink.example.com. IN TXT "dnslink=/ipfs/QmYourContentHash"많은 DNS 공급자가 이를 지원하므로 사용자가 일반 도메인 이름을 통해 IPFS 호스팅 사이트에 액세스할 수 있습니다.
모니터링 및 분석
IPFS 호스팅 프론트엔드가 어떻게 수행되는지 이해하는 것이 중요합니다. IPFS.NINJA는 핀된 콘텐츠에 대한 포괄적인 분석을 제공합니다.
IPFS.NINJA Analytics API 사용
// analytics.js
async function getDeploymentAnalytics(cid) {
try {
const response = await axios.get(`${API_BASE}/analytics/files/${cid}`, {
headers: { 'X-Api-Key': API_KEY }
});
const analytics = response.data;
console.log('📊 Analytics Report:');
console.log(`Total Requests: ${analytics.totalRequests}`);
console.log(`Bandwidth Used: ${analytics.bandwidthGB}GB`);
console.log(`Geographic Distribution:`, analytics.geoStats);
return analytics;
} catch (error) {
console.error('Failed to fetch analytics:', error);
}
}
// 모니터링 대시보드 설정
async function createMonitoringDashboard() {
const analytics = await getDeploymentAnalytics(YOUR_APP_CID);
// 시각적 대시보드 만들기 (선호하는 차트 라이브러리와 통합)
const dashboardData = {
requestsOverTime: analytics.dailyRequests,
popularAssets: analytics.assetStats,
performanceMetrics: {
averageResponseTime: analytics.avgResponseTime,
cacheHitRatio: analytics.cacheHitRatio
}
};
return dashboardData;
}IPFS 프론트엔드 호스팅의 모범 사례
1. 콘텐츠 구성
최적의 IPFS 성능을 위해 빌드를 구조화합니다:
build/
├── index.html (진입점)
├── static/
│ ├── js/
│ │ ├── main.[hash].js
│ │ └── vendor.[hash].js
│ ├── css/
│ │ └── main.[hash].css
│ └── media/
│ └── images/
└── manifest.json2. 보안 고려 사항
- 콘텐츠 무결성: IPFS의 암호화 해싱은 콘텐츠 무결성을 보장합니다
- 액세스 제어: 비공개 배포를 위해 IPFS.NINJA의 게이트웨이 제한 사용
- HTTPS: 항상 HTTPS 게이트웨이를 통해 콘텐츠에 액세스
- 정기 업데이트: 종속성을 최신 상태로 유지하고 필요한 경우 다시 배포
3. 성능 최적화
// performance-tips.js
const performanceOptimizations = {
// 더 나은 캐싱을 위한 번들 분할
splitChunks: true,
// 중요한 리소스 사전 로드
preloadStrategy: 'critical-path',
// 이미지 최적화
imageOptimization: {
format: 'webp',
compression: 0.8,
lazy: true
},
// 압축 활성화
compression: 'gzip',
// 일반 라이브러리에 CDN 사용
externals: {
react: 'React',
'react-dom': 'ReactDOM'
}
};일반적인 문제 해결
콘텐츠가 로드되지 않음
IPFS 콘텐츠가 로드되지 않는 경우:
- CID 유효성 확인: CID가 올바른지 확인
- 게이트웨이 가용성: 다른 게이트웨이 시도
- 핀 상태: 파일이 제대로 핀되었는지 확인
- 네트워크 연결: IPFS 네트워크 상태 확인
// troubleshooting.js
async function diagnosticCheck(cid) {
const gateways = [
'https://ipfs.io/ipfs/',
'https://gateway.pinata.cloud/ipfs/',
'https://cloudflare-ipfs.com/ipfs/'
];
const results = await Promise.allSettled(
gateways.map(gateway =>
axios.get(`${gateway}${cid}`, { timeout: 5000 })
)
);
results.forEach((result, index) => {
const gateway = gateways[index];
if (result.status === 'fulfilled') {
console.log(`✅ ${gateway} - Working`);
} else {
console.log(`❌ ${gateway} - Failed: ${result.reason.message}`);
}
});
}빌드 문제
일반적인 빌드 문제 및 해결책:
# React 빌드 캐시 지우기
rm -rf build/ node_modules/.cache/
# 자세한 출력으로 재빌드
CI=true npm run build
# 라우팅 문제 확인
# SPA 라우팅을 위해 HashRouter를 사용하고 있는지 확인IPFS 호스팅 솔루션 비교
프론트엔드 호스팅을 위한 IPFS 핀 서비스를 선택할 때 다음 요소를 고려하십시오:
| 기능 | IPFS.NINJA | 대안 |
|---|---|---|
| 가격 | 무료 티어: 1GB, 월 $5: 10GB | 크게 다름 |
| 사용자 정의 게이트웨이 | ✅ 포함 | 종종 프리미엄 기능 |
| API 품질 | RESTful, 잘 문서화됨 | 품질이 혼합됨 |
| 분석 | 내장 대시보드 | 제한된 옵션 |
| 개발자 도구 | 포괄적인 SDK | 기본 도구 |
자세한 비교는 IPFS 핀 서비스의 종합 분석 및 Pinata와의 구체적인 비교를 확인하세요.
탈중앙화 프론트엔드 호스팅의 미래
웹 호스팅의 환경은 빠르게 진화하고 있습니다. IPFS는 더 분산되고 탄력적인 웹 인프라로의 전환의 시작에 불과합니다. 주목할 미래 발전:
- 프로토콜 개선: IPFS 2.0 및 기타 차세대 프로토콜
- 브라우저 통합: 주류 브라우저의 기본 IPFS 지원
- 개발 도구: 탈중앙화 개발을 위한 더 나은 프레임워크 및 도구
- 성능 향상: 향상된 캐싱 및 콘텐츠 전송 메커니즘
IPFS 배포 시작하기
이제 프론트엔드를 IPFS에 배포하는 전체 프로세스를 이해했으므로 진정으로 탈중앙화된 애플리케이션을 구축할 준비가 되었습니다. IPFS의 분산 아키텍처와 IPFS.NINJA의 개발자 친화적인 핀 서비스의 조합은 현대 웹 애플리케이션을 위한 견고한 기반을 제공합니다.
개인 포트폴리오, 비즈니스 웹사이트 또는 복잡한 탈중앙화 애플리케이션을 구축하든, IPFS 호스팅은 비할 데 없는 탄력성, 성능 및 비용 효율성을 제공합니다. IPFS 콘텐츠의 불변성과 노드의 글로벌 분포가 결합되어 전통적인 호스팅 제한과 관계없이 애플리케이션이 계속 액세스 가능하도록 보장합니다.
파일 업로드 및 관리에 대한 자세한 정보는 포괄적인 IPFS 업로드 튜토리얼을 확인하고 이 강력한 기술을 최대한 활용하기 위해 IPFS 핀이 작동하는 방법에 대해 자세히 알아보세요.
핀을 시작할 준비가 되셨나요? 무료 계정 만들기 — 파일 50개, 1GB 스토리지, 2GB 대역폭/월. 신용카드 필요 없음.