웹 접근성 미드레벨 데이터베이스 기술면접

웹 접근성 미드레벨 (3~7년) 데이터베이스 3문항 조회수 60 · 2026-09-09 (수) 17:41:01
1 데이터베이스 모델링
Medium

Q. 웹 접근성 준수 여부를 추적하는 시스템을 설계한다고 가정합니다. 웹페이지별로 WCAG 체크리스트 항목(예: 대체 텍스트, 키보드 접근성 등)의 준수 여부를 기록하고, 각 항목에 대해 수정 이력을 추적해야 합니다. 이를 위한 데이터베이스 스키마를 설계할 때 고려해야 할 주요 정규화 전략과 테이블 구조를 설명하고, 이력 관리를 위한 효율적인 모델링 방법을 제시해주세요.

체크리스트 항목 마스터 테이블과 페이지별 준수 현황 테이블, 그리고 변경 이력 테이블의 관계를 생각해보세요.

A. 모범답안

웹 접근성 준수 추적 시스템은 크게 세 가지 테이블로 설계할 수 있습니다. 첫째, wcag_criteria 마스터 테이블에 WCAG 체크리스트 항목을 관리하고(기준 코드, 설명, 레벨 등), 둘째, page_compliance 테이블에 페이지별 현재 준수 상태를 저장합니다(페이지 ID, 기준 ID, 준수 여부, 최종 수정일). 셋째, compliance_history 테이블에 모든 변경 이력을 시간순으로 기록합니다(이력 ID, 페이지 ID, 기준 ID, 이전 상태, 새 상태, 수정자, 수정 시각). 정규화는 3NF까지 적용하되, 조회 성능을 위해 page_compliance에는 최신 상태만 유지하고 이력은 별도 테이블로 분리합니다. 대량의 이력 데이터 조회를 위해 파티셔닝(날짜 기준)을 고려할 수 있으며, 페이지별 전체 준수율 같은 집계 데이터는 materialized view나 summary 테이블로 관리하는 것이 효율적입니다.

핵심 포인트
  • • 마스터 데이터(WCAG 기준)와 트랜잭션 데이터(준수 현황) 분리
  • • 현재 상태 테이블과 이력 테이블의 분리로 조회 성능 최적화
  • • 3NF 정규화로 데이터 중복 제거 및 무결성 보장
  • • 이력 테이블의 파티셔닝 전략
답변에 넣으면 좋은 키워드
정규화 이력 관리 마스터 테이블 파티셔닝 materialized view 외래키
실무에서는

대규모 웹사이트의 접근성 관리 도구나 컴플라이언스 모니터링 시스템에서 검사 결과와 개선 이력을 추적할 때 사용됩니다.

Follow-up 질문

수백만 개의 페이지와 수십 개의 체크리스트 항목이 있을 때, 특정 기간 동안 준수율이 개선된 페이지 목록을 조회하는 쿼리의 성능을 최적화하려면 어떤 인덱스 전략을 사용하시겠습니까?

2 인덱스 및 쿼리 튜닝
Hard

Q. 스크린 리더 사용자의 페이지 탐색 패턴을 분석하기 위해 사용자 행동 로그를 저장하는 테이블이 있습니다. 이 테이블에는 사용자 ID, 세션 ID, 페이지 URL, 포커스된 요소의 ARIA role, 타임스탬프, 사용 기기 등이 포함됩니다. 특정 ARIA role을 가진 요소에 대한 사용자별 평균 체류 시간을 계산하는 쿼리가 매우 느립니다. 이 쿼리를 최적화하기 위한 인덱스 설계 전략과, 복합 인덱스를 사용할 때 컬럼 순서를 결정하는 기준을 설명해주세요.

WHERE 절의 필터링 조건, GROUP BY 절, 그리고 카디널리티를 고려한 인덱스 컬럼 순서가 중요합니다.

A. 모범답안

이 쿼리는 ARIA role로 필터링하고 사용자별로 그룹화하여 집계하므로, 복합 인덱스 설계가 핵심입니다. 인덱스 컬럼 순서는 일반적으로 WHERE 절의 동등 조건, WHERE 절의 범위 조건, GROUP BY/ORDER BY 절 순서로 결정합니다. 이 경우 (aria_role, user_id, timestamp) 순서의 복합 인덱스가 효과적인데, aria_role로 먼저 필터링하고 user_id로 그룹화하며 timestamp는 범위 계산에 사용되기 때문입니다. 다만 aria_role의 카디널리티가 낮다면(종류가 적다면) 인덱스 효율이 떨어질 수 있으므로, 실제 데이터 분포를 분석해야 합니다. 대안으로 특정 role에 대한 쿼리가 빈번하다면 필터링된 인덱스(partial index)를 고려하거나, 시간 범위 조건이 항상 포함된다면 (timestamp, aria_role, user_id) 순서로 파티셔닝과 결합하는 전략도 유효합니다. 또한 집계 쿼리의 특성상 커버링 인덱스를 구성하여 테이블 접근을 완전히 제거하는 것이 성능 향상에 큰 도움이 됩니다.

핵심 포인트
  • • 복합 인덱스의 컬럼 순서는 WHERE 동등 조건, 범위 조건, GROUP BY 순으로 결정
  • • 카디널리티가 낮은 컬럼은 인덱스 선두에 배치 시 효율성 저하 가능
  • • 커버링 인덱스로 테이블 접근 제거
  • • 파티셔닝과 필터링된 인덱스를 활용한 대안 전략
답변에 넣으면 좋은 키워드
복합 인덱스 카디널리티 커버링 인덱스 인덱스 컬럼 순서 필터링된 인덱스 파티셔닝
실무에서는

사용자 행동 분석 시스템에서 대량의 로그 데이터를 집계할 때 인덱스 전략이 쿼리 성능에 결정적인 영향을 미칩니다.

Follow-up 질문

이 테이블의 데이터가 시간이 지남에 따라 수억 건으로 증가한다면, 인덱스 유지보수 비용과 조회 성능 사이의 트레이드오프를 어떻게 관리하시겠습니까?

3 트랜잭션 및 동시성 제어
Medium

Q. 웹 접근성 자동 검사 시스템에서 여러 크롤러가 동시에 같은 웹페이지의 접근성 점수를 업데이트하려고 합니다. 각 크롤러는 페이지의 현재 점수를 읽고, 새로운 검사 결과를 반영하여 평균 점수를 계산한 후 업데이트합니다. 이 과정에서 발생할 수 있는 동시성 문제를 설명하고, Lost Update를 방지하기 위한 락(Lock) 전략과 격리 수준(Isolation Level) 설정 방법을 제시해주세요.

읽기-수정-쓰기 패턴에서 발생하는 경쟁 조건과 이를 해결하기 위한 비관적/낙관적 락을 고려해보세요.

A. 모범답안

이 시나리오는 전형적인 Lost Update 문제로, 두 크롤러가 동시에 같은 점수를 읽고 각자 계산한 결과로 업데이트하면 한 쪽의 변경사항이 손실됩니다. 비관적 락 방식으로는 SELECT FOR UPDATE를 사용해 행 수준 배타적 락을 획득한 후 업데이트하면 다른 트랜잭션이 대기하게 되어 안전하게 처리할 수 있습니다. 낙관적 락 방식으로는 버전 컬럼을 추가하고, UPDATE 시 WHERE 절에 읽었던 버전을 포함시켜 버전이 변경되었으면 재시도하는 방식으로 구현합니다. 격리 수준은 최소한 READ COMMITTED 이상이어야 하며, REPEATABLE READ나 SERIALIZABLE을 사용하면 더 강력한 보장을 받지만 성능과 데드락 가능성을 고려해야 합니다. 실무에서는 업데이트 빈도와 충돌 가능성을 고려하여, 충돌이 드물다면 낙관적 락으로 성능을 높이고, 충돌이 빈번하다면 비관적 락이나 큐 기반 순차 처리를 선택하는 것이 효과적입니다.

핵심 포인트
  • • Lost Update 문제 인식 및 읽기-수정-쓰기 패턴의 위험성
  • • SELECT FOR UPDATE를 통한 비관적 락 구현
  • • 버전 컬럼을 활용한 낙관적 락 구현
  • • 격리 수준과 성능 간의 트레이드오프 이해
답변에 넣으면 좋은 키워드
Lost Update 비관적 락 낙관적 락 SELECT FOR UPDATE 격리 수준 버전 관리
실무에서는

여러 워커나 마이크로서비스가 동일한 리소스를 동시에 업데이트할 때 데이터 일관성을 보장하기 위해 필수적입니다.

Follow-up 질문

비관적 락 사용 시 데드락이 발생할 수 있는 시나리오를 설명하고, 이를 예방하거나 해결하기 위한 방법은 무엇입니까?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!