
Marketing Solution Group
브랜드의 가능성을 바꿉니다.
데이터로 설계된 새로운 경험
콘텐츠 마케팅 솔루션 그룹
브랜드의 가능성을 바꿉니다.
데이터로 설계된 새로운 경험
A Strategy to experience new trends
High-end Factory for Brand
Contact Us
SECTOR OF OPERATION
SECTOR OF OPERATION
Growth Solution · Creative LAB · Media Solutions
· Digital Agent · Bussiness AI Platform
지속가능한 마케팅 전략 제안
크리에이티브 콘텐츠
미디어 솔루션
디지털 마케팅
비즈니스 맞춤형 AI 솔루션
SIGN UP FOR NEWSLETTER
IMP 뉴스레터 구독

Leading AD Tech
The Core That
Grows The Brand
크리에이티브한 전략으로 비전있는 국내 기업과 함께
시장을 선도하는 마케팅 솔루션 그룹입니다.
지속가능한 성장을 위한 시스템을 기반으로
계속해서 변화하는 시장 속 새로운 브랜드 경험을 제안합니다.
크리에이티브한 전략으로
비전있는 국내 기업과 함께 시장을 선도하는
마케팅 솔루션 그룹입니다.
지속가능한 성장을 위한 시스템을 기반으로
계속해서 변화하는 시장 속 새로운 브랜드 경험을 제안합니다.

Leading AD Tech
The Core That
Grows The Brand
비전있는 국내 기업과 함께
시장을 선도하는 마케팅 솔루션 그룹 IMP
지속가능한 성장을 위한 시스템 기반으로
새로운 브랜드 경험을 제안합니다.
35+
35+
Client Network
Client Network
3,200+
3,200+
Work
Work
8.2억+
8.2억+
Stacked View
Stacked View
46억원+
46억원+
Cumulative Sales
(2025.09 기준)
Cumulative Sales
(2025.09 기준)
주요 파트너 브랜드
OUR Clients
주요 파트너 브랜드
OUR Clients
주요 파트너 브랜드
OUR Clients

IMP Ent.
회사 소개
서비스
포트폴리오
리소스
블로그
뉴스
FAQ
고객지원
문의하기
협업 제안
채용
팔로우
YouTube
Blog
IMP Ent.
회사 소개
서비스
포트폴리오
리소스
블로그
뉴스
FAQ
고객지원
문의하기
협업 제안
채용
팔로우
YouTube
Blog
IMP Ent.
회사 소개
서비스
포트폴리오
리소스
블로그
뉴스
FAQ
고객지원
문의하기
협업 제안
채용
팔로우
YouTube
Blog
IMP Ent.
회사 소개
서비스
포트폴리오
리소스
블로그
뉴스
FAQ
고객지원
문의하기
협업 제안
채용
팔로우
YouTube
Blog
<!-- FRAMER EMBED: Rotating B/W Globe (works out of the box) -->
<section class="globe-embed" aria-hidden="true" style="position:relative;width:100%;height:100%;min-height:320px;margin:0;padding:0;line-height:0;background:#000;overflow:hidden;">
<canvas style="position:absolute;inset:0;width:100%;height:100%;display:block;"></canvas>
</section>
<script>
/* No-ID, no-conflicts, fills parent, zero margins/padding */
(function () {
const wrap = document.currentScript.previousElementSibling;
const canvas = wrap.querySelector('canvas');
const ctx = canvas.getContext('2d', { alpha: true });
// ===== Tunables =====
const COLOR_LINES = 'rgba(255,255,255,0.22)';
const COLOR_FRONT = 'rgba(255,255,255,0.58)';
const BG_GLOW = 'rgba(255,255,255,0.08)';
const ROT_SPEED = 0.35;
const LON_STEP = 15;
const LAT_STEP = 15;
const SEG_STEP = 5;
// 배치/크기 (0~1)
const ALIGN_X = 0.5; // 0=left ~ 1=right
const ALIGN_Y = 0.5; // 0=top ~ 1=bottom
const RATIO = 0.46; // radius = min(w,h)*RATIO
let dpr = Math.max(1, Math.min(window.devicePixelRatio || 1, 2));
let w=0,h=0,cx=0,cy=0,R=0,cam=0;
function resize() {
const rect = wrap.getBoundingClientRect();
const cssW = Math.max(1, rect.width);
const cssH = Math.max(1, rect.height);
const W = Math.round(cssW * dpr);
const H = Math.round(cssH * dpr);
if (canvas.width !== W || canvas.height !== H) {
canvas.width = W; canvas.height = H;
ctx.setTransform(dpr,0,0,dpr,0,0); // 1 CSS px = 1 unit
}
w = cssW; h = cssH;
R = Math.min(w, h) * RATIO;
cx = w * ALIGN_X;
cy = h * ALIGN_Y;
cam = R * 3.2;
}
resize();
// 레이아웃 변화 대응
new ResizeObserver(resize).observe(wrap);
const rad = d => d * Math.PI / 180;
function project(lambda, phi, rot) {
const cl = Math.cos(lambda + rot), sl = Math.sin(lambda + rot);
const cp = Math.cos(phi), sp = Math.sin(phi);
const x = R * cl * cp;
const y = R * sp;
const z = R * -sl * cp;
const s = cam / (cam - z);
return { x: cx + x * s, y: cy + y * s, z };
}
function strokeVisiblePath(pts) {
let drawing = false;
for (let i=0;i<pts.length;i++){
const p = pts[i];
if (p.z > 0) { // front
ctx.strokeStyle = COLOR_FRONT;
ctx.lineWidth = 1.25;
if (!drawing) { ctx.beginPath(); ctx.moveTo(p.x,p.y); drawing = true; }
else ctx.lineTo(p.x,p.y);
} else if (drawing) {
ctx.stroke(); drawing = false;
}
}
if (drawing) ctx.stroke();
}
let tPrev = performance.now()/1000, rot = 0;
function draw(now) {
const t = now/1000, dt = t - tPrev; tPrev = t;
rot += ROT_SPEED * dt;
ctx.clearRect(0,0,canvas.width/dpr,canvas.height/dpr);
// glow
const g = ctx.createRadialGradient(cx,cy, R*0.72, cx,cy, R*1.06);
g.addColorStop(0,'rgba(255,255,255,0)');
g.addColorStop(1,BG_GLOW);
ctx.fillStyle = g;
ctx.beginPath(); ctx.arc(cx,cy,R*1.06,0,Math.PI*2); ctx.fill();
// sphere outline
ctx.strokeStyle = 'rgba(255,255,255,0.22)';
ctx.lineWidth = 1.2;
ctx.beginPath(); ctx.arc(cx,cy,R,0,Math.PI*2); ctx.stroke();
// latitudes
for (let lat=-90+LAT_STEP; lat<=90-LAT_STEP; lat+=LAT_STEP){
const pts = [];
for (let lon=-180; lon<=180; lon+=SEG_STEP) pts.push(project(rad(lon), rad(lat), rot));
strokeVisiblePath(pts);
ctx.strokeStyle = COLOR_LINES; ctx.lineWidth = 0.85; // back guideline style
}
// longitudes
for (let lon=-180; lon<=180; lon+=LON_STEP){
const pts = [];
for (let lat=-90; lat<=90; lat+=SEG_STEP) pts.push(project(rad(lon), rad(lat), rot));
strokeVisiblePath(pts);
ctx.strokeStyle = COLOR_LINES; ctx.lineWidth = 0.85;
}
// center soft spot
const spot = ctx.createRadialGradient(cx,cy,0, cx,cy,R*0.9);
spot.addColorStop(0,'rgba(255,255,255,0.06)');
spot.addColorStop(1,'rgba(255,255,255,0.00)');
ctx.fillStyle = spot;
ctx.beginPath(); ctx.arc(cx,cy,R,0,Math.PI*2); ctx.fill();
requestAnimationFrame(draw);
}
requestAnimationFrame(draw);
})();
</script>