그누보드5 리드·아키텍트 데이터베이스 기술면접

그누보드5 리드 · 아키텍트 (10년+) 데이터베이스 7문항 조회수 34 · 2026-08-04 (화) 15:21:50
1 데이터베이스 모델링
Hard

Q. 그누보드5의 게시판 테이블(g5_write_*)은 게시판마다 별도 테이블로 생성됩니다. 대규모 커뮤니티 서비스로 확장할 때 이 구조의 문제점과 통합 테이블 구조로 전환 시 고려해야 할 마이그레이션 전략, 그리고 각 방식의 트레이드오프를 설명해주세요.

테이블 수 증가에 따른 관리 복잡도, 조인 성능, 파티셔닝 전략, 무중단 마이그레이션 방법을 생각해보세요.

A. 모범답안

게시판별 테이블 분리 방식은 테이블 수가 수백 개 이상 증가하면 스키마 관리, 백업/복구, 통계 쿼리 작성이 복잡해지고 메타데이터 오버헤드가 발생합니다. 통합 테이블로 전환 시 board_id 컬럼으로 구분하고 (board_id, wr_num) 복합 인덱스를 설계하며, 파티셔닝(RANGE 또는 HASH)을 적용해 성능을 유지할 수 있습니다. 마이그레이션은 읽기는 기존 구조 유지, 쓰기는 dual write로 양쪽에 기록하는 단계적 전환이 필요하며, 데이터 정합성 검증과 롤백 계획이 필수입니다. 통합 테이블은 관리 편의성과 크로스 게시판 쿼리에 유리하지만, 단일 테이블 크기 증가와 핫스팟 이슈를 관리해야 하는 트레이드오프가 있습니다. 서비스 규모, 게시판 생성 빈도, 운영 인력을 고려해 아키텍처를 선택해야 합니다.

핵심 포인트
  • • 게시판별 테이블 분리의 메타데이터 오버헤드와 관리 복잡도 이해
  • • 통합 테이블 설계 시 인덱스 전략과 파티셔닝 적용
  • • 무중단 마이그레이션을 위한 dual write 전략과 정합성 검증
  • • 각 방식의 트레이드오프와 비즈니스 요구사항 기반 의사결정
답변에 넣으면 좋은 키워드
테이블 파티셔닝 dual write 복합 인덱스 메타데이터 오버헤드 무중단 마이그레이션 스키마 마이그레이션
실무에서는

레거시 멀티 테넌트 시스템을 단일 통합 테이블로 리팩토링할 때 마이그레이션 전략 수립에 활용됩니다.

Follow-up 질문

통합 테이블 구조에서 특정 인기 게시판으로 트래픽이 집중될 때 발생하는 핫스팟 문제를 어떻게 해결하시겠습니까?

2 인덱스 최적화
Hard

Q. 그누보드5에서 회원 테이블(g5_member)의 mb_level, mb_point, mb_datetime 컬럼으로 복잡한 조건 검색이 자주 발생합니다. 복합 인덱스 설계 시 컬럼 순서 결정 원칙과 커버링 인덱스 적용 가능성, 그리고 인덱스 비용 대비 효과를 측정하는 방법을 설명해주세요.

카디널리티, 선택도, 쿼리 패턴 분석, Index Condition Pushdown을 고려해보세요.

A. 모범답안

복합 인덱스 컬럼 순서는 WHERE 절의 등호 조건을 먼저, 범위 조건을 나중에 배치하고, 카디널리티가 높은 컬럼을 앞에 두는 것이 원칙이지만 실제 쿼리 패턴 분석이 우선입니다. mb_level(등호) + mb_datetime(범위) 조합이 많다면 (mb_level, mb_datetime, mb_point) 순서로 구성하고, SELECT 절에 자주 사용되는 컬럼을 마지막에 추가해 커버링 인덱스로 만들면 테이블 액세스를 제거할 수 있습니다. 인덱스 효과 측정은 EXPLAIN ANALYZE로 실행 계획의 rows examined, filtered 비율을 확인하고, slow query log에서 Query_time과 Rows_examined 비교로 정량화합니다. 인덱스 비용은 INSERT/UPDATE 성능 저하와 디스크 용량을 모니터링하며, 실제 쿼리 응답시간 개선이 30% 이상일 때 추가를 권장합니다. pt-index-usage 같은 도구로 미사용 인덱스를 주기적으로 제거하는 것도 중요합니다.

핵심 포인트
  • • 쿼리 패턴 기반 복합 인덱스 컬럼 순서 결정
  • • 커버링 인덱스로 테이블 액세스 제거
  • • EXPLAIN ANALYZE와 slow query log 기반 정량적 효과 측정
  • • 인덱스 유지보수 비용과 미사용 인덱스 관리
답변에 넣으면 좋은 키워드
복합 인덱스 커버링 인덱스 카디널리티 선택도 EXPLAIN ANALYZE Index Condition Pushdown
실무에서는

대용량 회원 DB에서 관리자 검색 기능 최적화 시 인덱스 전략 수립에 활용됩니다.

Follow-up 질문

인덱스를 추가했는데 오히려 쿼리 성능이 저하되는 경우는 어떤 상황이며, 어떻게 진단하고 해결하시겠습니까?

3 트랜잭션 설계
Hard

Q. 그누보드5의 포인트 시스템에서 게시글 작성 시 포인트 지급, 회원 포인트 업데이트, 포인트 내역 기록이 동시에 일어납니다. 이 과정에서 적절한 트랜잭션 격리 수준 선택, 데드락 방지 전략, 그리고 대규모 동시 접속 환경에서의 락 경합 최소화 방안을 설명해주세요.

격리 수준별 발생 가능한 문제, 락 획득 순서, 낙관적 락과 비관적 락의 선택 기준을 생각해보세요.

A. 모범답안

포인트 업데이트는 Lost Update 문제를 방지하기 위해 최소 READ COMMITTED 이상이 필요하며, SELECT FOR UPDATE로 비관적 락을 사용하거나 버전 컬럼 기반 낙관적 락을 적용할 수 있습니다. 데드락 방지를 위해 항상 회원 테이블 → 포인트 내역 테이블 순으로 일관된 락 획득 순서를 유지하고, 트랜잭션 범위를 최소화해 락 보유 시간을 줄여야 합니다. 대규모 동시 접속 환경에서는 Redis 같은 인메모리 저장소에서 포인트를 먼저 증감하고 비동기로 DB에 반영하는 eventual consistency 패턴을 고려할 수 있습니다. 또는 포인트 증감 이벤트를 큐에 적재하고 워커가 배치 처리하는 방식으로 락 경합을 근본적으로 회피할 수 있습니다. 비즈니스 요구사항상 강한 일관성이 필요한지, 최종 일관성으로 충분한지에 따라 아키텍처를 선택해야 합니다.

핵심 포인트
  • • 격리 수준과 Lost Update 방지를 위한 락 전략
  • • 일관된 락 획득 순서로 데드락 방지
  • • 인메모리 저장소와 비동기 처리로 락 경합 회피
  • • 강한 일관성 vs 최종 일관성 트레이드오프 이해
답변에 넣으면 좋은 키워드
트랜잭션 격리 수준 SELECT FOR UPDATE 낙관적 락 비관적 락 데드락 eventual consistency
실무에서는

결제, 재고 차감 등 금액이나 수량 업데이트가 포함된 트랜잭션 설계에 동일한 원칙이 적용됩니다.

Follow-up 질문

포인트 시스템에서 낙관적 락을 사용할 때 충돌 재시도 로직을 어떻게 구현하고, 재시도 횟수는 어떻게 결정하시겠습니까?

4 쿼리 튜닝
Medium

Q. 그누보드5의 최근 게시글 목록 조회 시 여러 게시판 테이블을 UNION ALL로 결합하고 ORDER BY wr_datetime으로 정렬하는 쿼리가 느립니다. 이 쿼리의 성능 병목을 진단하는 방법과 구체적인 최적화 전략을 제시해주세요.

UNION ALL의 임시 테이블 생성, 각 서브쿼리의 인덱스 활용, LIMIT 적용 시점을 고려해보세요.

A. 모범답안

EXPLAIN을 실행해 각 서브쿼리가 인덱스를 활용하는지 확인하고, Using temporary와 Using filesort 발생 여부를 체크합니다. 각 게시판 테이블에 wr_datetime 인덱스가 있더라도 UNION ALL 후 정렬은 임시 테이블을 생성하므로, 각 서브쿼리에서 ORDER BY + LIMIT을 먼저 적용해 결과 수를 줄인 후 UNION하는 것이 효과적입니다. 또는 애플리케이션 레벨에서 각 게시판의 최신글 N개를 병렬로 조회한 후 머지 소트하는 방식으로 변경할 수 있습니다. 근본적으로는 통합 게시글 뷰 테이블이나 Elasticsearch 같은 검색 엔진을 도입해 크로스 게시판 조회를 최적화하는 것이 장기적 해결책입니다. 캐싱 레이어(Redis)를 추가해 최근 게시글 목록을 5분 단위로 갱신하는 것도 실용적인 방안입니다.

핵심 포인트
  • • EXPLAIN으로 임시 테이블과 파일 정렬 진단
  • • 서브쿼리 단계에서 LIMIT 적용으로 결과 집합 축소
  • • 애플리케이션 레벨 병렬 조회와 머지 소트
  • • 통합 뷰 테이블이나 검색 엔진 도입의 장기 전략
답변에 넣으면 좋은 키워드
UNION ALL 임시 테이블 EXPLAIN 서브쿼리 최적화 머지 소트 캐싱
실무에서는

멀티 소스 데이터를 통합 조회하는 대시보드나 피드 기능 개발 시 동일한 최적화 기법을 적용합니다.

Follow-up 질문

통합 뷰 테이블을 만들 때 실시간 동기화 방법과 데이터 정합성 보장 전략은 무엇입니까?

5 락 메커니즘
Hard

Q. 그누보드5에서 인기 게시글의 조회수 업데이트 시 UPDATE 쿼리가 빈번하게 발생해 락 대기가 증가하고 있습니다. InnoDB의 Row Lock과 Gap Lock의 동작 원리를 설명하고, 조회수 업데이트로 인한 락 경합을 최소화하는 아키텍처 개선 방안을 제시해주세요.

락 범위, 인덱스 사용 여부에 따른 락 동작, 비동기 집계 패턴을 생각해보세요.

A. 모범답안

InnoDB는 인덱스를 통해 접근한 행에 Row Lock을 걸고, 범위 조건이나 인덱스가 없으면 Gap Lock으로 범위를 잠가 Phantom Read를 방지합니다. 조회수 업데이트는 PRIMARY KEY로 접근하므로 Row Lock만 발생하지만, 초당 수백 건의 UPDATE가 동일 행에 집중되면 락 대기 큐가 길어집니다. 이를 해결하기 위해 Redis 카운터로 조회수를 실시간 증가시키고, 1분마다 배치로 DB에 동기화하는 방식으로 DB 락 경합을 99% 이상 줄일 수 있습니다. 또는 조회수 증가 이벤트를 Kafka 같은 메시지 큐에 적재하고 컨슈머가 집계 후 벌크 업데이트하는 방식도 효과적입니다. 실시간성이 중요하지 않은 통계성 데이터는 eventual consistency를 허용하는 것이 락 경합 해결의 핵심입니다. 트랜잭션 격리 수준을 READ COMMITTED로 낮춰 Gap Lock을 제거하는 것도 고려할 수 있습니다.

핵심 포인트
  • • InnoDB의 Row Lock과 Gap Lock 동작 원리 이해
  • • 인메모리 카운터와 배치 동기화로 락 경합 회피
  • • 메시지 큐 기반 비동기 집계 패턴
  • • 통계성 데이터의 eventual consistency 허용
답변에 넣으면 좋은 키워드
Row Lock Gap Lock 락 경합 비동기 집계 Redis 카운터 배치 업데이트
실무에서는

좋아요, 조회수, 댓글 수 같은 고빈도 업데이트 컬럼 최적화에 동일한 패턴을 적용합니다.

Follow-up 질문

Redis 카운터 방식에서 Redis 장애 시 조회수 데이터 손실을 방지하는 방안은 무엇입니까?

6 데이터베이스 스케일링
Hard

Q. 그누보드5 기반 서비스가 성장해 단일 MySQL 서버로 처리가 어려워졌습니다. Read Replica 도입, 샤딩, CQRS 패턴 중 어떤 전략을 선택할지 결정하는 기준과 각 방식의 구현 복잡도, 운영 리스크, 비용을 비교 분석해주세요.

읽기/쓰기 비율, 데이터 증가 속도, 조인 쿼리 의존도, 팀 역량을 고려해보세요.

A. 모범답안

읽기 비중이 80% 이상이고 쓰기가 적다면 Read Replica 도입이 가장 간단하며, 애플리케이션에서 읽기 전용 커넥션을 분리하고 replication lag만 모니터링하면 됩니다. 데이터가 수십억 건 이상 증가하고 단일 DB 용량 한계에 도달하면 샤딩이 필요하며, 그누보드의 경우 사이트 ID나 게시판 ID 기반 샤딩이 자연스럽지만 크로스 샤드 조인이 불가능해 애플리케이션 복잡도가 크게 증가합니다. CQRS는 쓰기는 정규화된 DB에, 읽기는 비정규화된 별도 저장소(Elasticsearch 등)에 저장해 각각 최적화할 수 있지만, 이벤트 소싱과 동기화 인프라 구축이 필요해 구현 비용이 가장 높습니다. 대부분의 경우 Read Replica로 시작해 용량 문제가 발생하면 테이블별 샤딩을 단계적으로 적용하고, 검색이나 분석 워크로드만 별도 저장소로 분리하는 하이브리드 접근이 현실적입니다. 팀의 기술 역량과 운영 인력을 고려한 점진적 전환이 리스크 관리의 핵심입니다.

핵심 포인트
  • • 읽기/쓰기 비율과 데이터 증가 패턴 기반 전략 선택
  • • Read Replica의 간단함 vs 샤딩의 확장성 트레이드오프
  • • CQRS의 높은 구현 복잡도와 운영 비용
  • • 점진적 전환과 하이브리드 접근의 실용성
답변에 넣으면 좋은 키워드
Read Replica 샤딩 CQRS replication lag 크로스 샤드 조인 점진적 마이그레이션
실무에서는

스타트업의 급성장 단계에서 DB 병목을 해결하기 위한 스케일링 전략 수립에 활용됩니다.

Follow-up 질문

샤딩 도입 후 특정 샤드에 데이터가 집중되는 핫스팟 문제가 발생하면 어떻게 해결하시겠습니까?

7 데이터베이스 운영
Medium

Q. 그누보드5 운영 중 특정 시간대에 slow query가 급증하고 있습니다. 근본 원인을 파악하기 위한 체계적인 진단 프로세스와 사용할 도구들, 그리고 재발 방지를 위한 모니터링 체계 구축 방안을 설명해주세요.

slow query log 분석, 실행 계획 변화, 통계 정보 갱신, 프로파일링 도구를 생각해보세요.

A. 모범답안

먼저 slow query log를 pt-query-digest로 분석해 가장 빈번하거나 누적 시간이 긴 쿼리를 식별하고, 해당 쿼리의 EXPLAIN 결과를 시간대별로 비교해 실행 계획 변화를 확인합니다. 테이블 통계 정보가 오래되어 옵티마이저가 잘못된 실행 계획을 선택할 수 있으므로 ANALYZE TABLE로 통계를 갱신하고, 인덱스 힌트 적용 여부를 판단합니다. Performance Schema나 sys 스키마를 활성화해 락 대기, 임시 테이블 생성, 풀 스캔 발생 쿼리를 실시간 모니터링합니다. 특정 시간대 급증은 배치 작업이나 크롤러 접근일 수 있으므로 애플리케이션 로그와 상관 분석이 필요합니다. 재발 방지를 위해 Datadog이나 PMM 같은 APM 도구로 쿼리 성능을 지속 모니터링하고, slow query 임계값을 점진적으로 낮춰가며 경보 설정을 정교화합니다. 주기적인 쿼리 리뷰 문화와 배포 전 쿼리 성능 테스트를 프로세스화하는 것이 중요합니다.

핵심 포인트
  • • pt-query-digest로 slow query 패턴 분석
  • • EXPLAIN과 테이블 통계 정보로 실행 계획 변화 진단
  • • Performance Schema로 락과 임시 테이블 모니터링
  • • APM 도구 기반 지속적 모니터링과 경보 체계 구축
답변에 넣으면 좋은 키워드
slow query log pt-query-digest EXPLAIN ANALYZE TABLE Performance Schema APM
실무에서는

프로덕션 DB 성능 저하 시 신속한 원인 파악과 대응을 위한 표준 운영 절차 수립에 활용됩니다.

Follow-up 질문

쿼리 튜닝 후에도 성능이 개선되지 않는다면 어떤 인프라 레벨의 문제를 의심하고 확인하시겠습니까?

댓글 0

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

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