정보 구조

Information architecture

콘텐츠를 어떻게 분류하고 이름 붙이고 계층으로 연결할지 설계하는, 사이트·앱의 뼈대를 짜는 작업.

다른 이름: IASite structure
···
html
<div class="stage">
  <svg viewBox="0 0 400 200" class="tree">
    <g id="edges"></g>
    <g id="nodes"></g>
  </svg>
</div>
css
.stage{width:96%;height:90%}
.tree{width:100%;height:100%}
.edge{stroke:var(--line);stroke-width:1.5;fill:none;stroke-dasharray:120;stroke-dashoffset:120;transition:stroke-dashoffset .6s ease}
.edge.on{stroke-dashoffset:0}
.node{fill:var(--surface);stroke:var(--line);stroke-width:1.5;opacity:0;transition:opacity .4s}
.node.root{fill:var(--accent);stroke:none}
.node.on{opacity:1}
text{font:700 9px sans-serif;fill:var(--fg);text-anchor:middle;opacity:0;transition:opacity .4s}
text.on{opacity:1}
js
const edgesG = document.getElementById('edges');
const nodesG = document.getElementById('nodes');
const NS = 'http://www.w3.org/2000/svg';
const root = { x: 200, y: 20 };
const mids = [{ x: 80, y: 90 }, { x: 200, y: 90 }, { x: 320, y: 90 }];
const leaves = [
  { x: 40, y: 165, p: 0 }, { x: 120, y: 165, p: 0 },
  { x: 200, y: 165, p: 1 },
  { x: 280, y: 165, p: 2 }, { x: 360, y: 165, p: 2 },
];
function edge(a, b) {
  const p = document.createElementNS(NS, 'path');
  p.setAttribute('class', 'edge');
  p.setAttribute('d', 'M' + a.x + ' ' + a.y + ' L' + b.x + ' ' + b.y);
  edgesG.appendChild(p);
  return p;
}
function node(pt, cls) {
  const c = document.createElementNS(NS, 'circle');
  c.setAttribute('class', 'node ' + (cls || ''));
  c.setAttribute('cx', pt.x); c.setAttribute('cy', pt.y); c.setAttribute('r', 9);
  nodesG.appendChild(c);
  return c;
}
const rootNode = node(root, 'root');
const midEdges = mids.map((m) => edge(root, m));
const midNodes = mids.map((m) => node(m));
const leafEdges = leaves.map((l) => edge(mids[l.p], l));
const leafNodes = leaves.map((l) => node(l));
rootNode.classList.add('on');
function reveal(list) { list.forEach((el) => el.classList.add('on')); }
function hide(list) { list.forEach((el) => el.classList.remove('on')); }
async function loop() {
  for (;;) {
    reveal(midEdges); reveal(midNodes);
    await new Promise((r) => setTimeout(r, 700));
    reveal(leafEdges); reveal(leafNodes);
    await new Promise((r) => setTimeout(r, 1800));
    hide(leafEdges); hide(leafNodes); hide(midEdges); hide(midNodes);
    await new Promise((r) => setTimeout(r, 500));
  }
}
loop();

정보 구조(IA)는 "이 콘텐츠가 몇 개 카테고리로 나뉘고, 카테고리마다 뭐라고 부르고, 어디에 속하는가"를 정합니다. 결과물은 보통 트리 형태의 사이트맵으로 그려지며, 각 노드는 화면이 아니라 콘텐츠·기능의 한 단위입니다.

와이어프레임이 한 화면의 배치를 다룬다면, 정보 구조는 화면들 사이의 관계 — 무엇이 상위 카테고리이고 무엇이 하위 항목인지 — 를 다룹니다. IA가 잘못되면 아무리 화면을 예쁘게 그려도 사용자는 원하는 콘텐츠를 찾지 못합니다.

카드 소팅으로 사용자의 머릿속 분류 체계를 알아내고, 트리 테스팅으로 완성된 구조에서 실제로 길을 찾을 수 있는지 검증하는 것이 일반적인 짝입니다. 깊이(단계 수)와 너비(한 단계의 항목 수) 사이의 균형도 핵심 결정입니다 — 너무 깊으면 클릭이 늘고, 너무 넓으면 한 화면에 항목이 넘칩니다(→ hicks-law).

언제 쓰나

내비게이션이나 메뉴를 새로 설계하거나, 콘텐츠가 늘어나 기존 분류가 더 이상 맞지 않을 때. 화면을 그리기 전에 먼저 끝내야 하는 작업입니다.