영카트5 신입 데이터베이스 기술면접

영카트5 신입 · 취준 (0~1년) 데이터베이스 5문항 조회수 22 · 2026-09-02 (수) 22:10:55
1 데이터베이스 모델링
Easy

Q. 영카트5에서 회원(g5_member) 테이블과 주문(g5_shop_order) 테이블의 관계는 어떤 관계인가요? 그리고 이런 관계를 데이터베이스에서 어떻게 표현하나요?

한 회원이 여러 주문을 할 수 있는지 생각해보세요.

A. 모범답안

회원 테이블과 주문 테이블은 1:N(일대다) 관계입니다. 한 명의 회원이 여러 개의 주문을 할 수 있기 때문입니다. 이 관계는 주문 테이블에 회원 테이블의 기본키(mb_id)를 외래키(Foreign Key)로 참조하여 표현합니다. 영카트5에서는 g5_shop_order 테이블의 mb_id 컬럼이 g5_member 테이블의 mb_id를 참조합니다. 이를 통해 특정 회원의 모든 주문 내역을 조회하거나, 주문 정보에서 회원 정보를 JOIN으로 가져올 수 있습니다.

핵심 포인트
  • • 1:N 관계
  • • 외래키(Foreign Key) 사용
  • • 주문 테이블에서 회원ID 참조
  • • JOIN을 통한 데이터 조회
답변에 넣으면 좋은 키워드
1:N 일대다 외래키 Foreign Key mb_id 참조
실무에서는

쇼핑몰에서 회원별 주문 내역 조회, 주문 통계 분석 등에서 이 관계 설계가 활용됩니다.

Follow-up 질문

만약 한 주문에 여러 상품이 포함될 수 있다면, 주문과 상품 테이블의 관계는 어떻게 설계해야 할까요?

2 인덱스
Easy

Q. 영카트5에서 회원 테이블(g5_member)의 mb_id 컬럼에는 PRIMARY KEY 인덱스가 설정되어 있습니다. 인덱스란 무엇이고, 인덱스가 있을 때와 없을 때 데이터 조회 성능이 어떻게 다른가요?

책의 목차나 색인을 생각해보세요.

A. 모범답안

인덱스는 데이터베이스에서 데이터를 빠르게 검색하기 위한 자료구조로, 책의 색인이나 목차와 같은 역할을 합니다. 인덱스가 있으면 특정 데이터를 찾을 때 테이블 전체를 스캔하지 않고 인덱스를 통해 빠르게 찾을 수 있습니다. 인덱스가 없으면 Full Table Scan이 발생하여 데이터가 많을수록 조회 속도가 느려집니다. PRIMARY KEY 인덱스는 자동으로 생성되며, 중복을 허용하지 않고 NULL 값도 허용하지 않습니다. 영카트5에서 mb_id로 회원을 조회할 때 인덱스 덕분에 매우 빠른 검색이 가능합니다.

핵심 포인트
  • • 인덱스는 빠른 검색을 위한 자료구조
  • • Full Table Scan 방지
  • • PRIMARY KEY는 자동 인덱스 생성
  • • 검색 성능 향상
답변에 넣으면 좋은 키워드
인덱스 PRIMARY KEY Full Table Scan 검색 성능 자료구조
실무에서는

회원 로그인 시 아이디로 회원 정보를 조회할 때 인덱스가 없으면 수만 명의 회원 데이터를 모두 확인해야 합니다.

Follow-up 질문

그렇다면 모든 컬럼에 인덱스를 생성하면 좋을까요? 인덱스의 단점은 무엇인가요?

3 쿼리 튜닝
Medium

Q. 영카트5 쇼핑몰에서 상품 목록 페이지가 느려진다는 보고가 들어왔습니다. 상품 테이블(g5_shop_item)에 10만 건의 데이터가 있고, WHERE it_use = '1' 조건으로 사용 중인 상품만 조회하는데 매우 느립니다. 어떻게 개선할 수 있을까요?

자주 사용되는 WHERE 조건 컬럼에 무엇을 추가하면 좋을지 생각해보세요.

A. 모범답안

it_use 컬럼에 인덱스를 추가하여 성능을 개선할 수 있습니다. WHERE 절에 자주 사용되는 컬럼은 인덱스 추가 대상이 됩니다. 또한 SELECT * 대신 필요한 컬럼만 선택하여 데이터 전송량을 줄일 수 있습니다. LIMIT을 사용하여 페이징 처리를 하면 한 번에 가져오는 데이터 양을 제한할 수 있습니다. EXPLAIN 명령어를 사용하여 쿼리 실행 계획을 확인하고 인덱스가 제대로 사용되는지 검증해야 합니다. 추가로 it_order(정렬 순서) 컬럼과 함께 복합 인덱스를 고려할 수도 있습니다.

핵심 포인트
  • • WHERE 절 컬럼에 인덱스 추가
  • • 필요한 컬럼만 SELECT
  • • LIMIT으로 페이징 처리
  • • EXPLAIN으로 실행 계획 확인
답변에 넣으면 좋은 키워드
인덱스 WHERE 절 EXPLAIN 쿼리 튜닝 복합 인덱스 LIMIT
실무에서는

상품 목록, 게시판 목록 등 대량의 데이터를 조건별로 필터링하여 보여주는 모든 페이지에서 쿼리 튜닝이 필요합니다.

Follow-up 질문

복합 인덱스(Composite Index)란 무엇이고, 언제 사용하면 좋을까요?

4 트랜잭션
Medium

Q. 영카트5에서 주문 처리 시 재고 차감, 주문 정보 저장, 포인트 차감이 함께 일어납니다. 이 중 하나라도 실패하면 전체를 취소해야 하는데, 이를 위해 어떤 데이터베이스 개념을 사용해야 하나요?

여러 작업을 하나의 단위로 묶어서 전부 성공하거나 전부 실패하도록 하는 개념을 생각해보세요.

A. 모범답안

트랜잭션(Transaction) 개념을 사용해야 합니다. 트랜잭션은 여러 개의 데이터베이스 작업을 하나의 논리적 단위로 묶어서 전부 성공(COMMIT)하거나 전부 실패(ROLLBACK)하도록 보장합니다. 트랜잭션은 ACID 특성을 가지며, 특히 원자성(Atomicity)이 이 상황에서 중요합니다. 영카트5에서는 BEGIN, COMMIT, ROLLBACK 명령어를 사용하여 트랜잭션을 제어합니다. 재고 차감 중 재고 부족이 발생하거나 포인트가 부족한 경우 ROLLBACK을 통해 이전 상태로 되돌려야 합니다. 이를 통해 데이터의 일관성을 유지할 수 있습니다.

핵심 포인트
  • • 트랜잭션으로 여러 작업 묶기
  • • COMMIT과 ROLLBACK
  • • ACID 특성 중 원자성
  • • 데이터 일관성 유지
답변에 넣으면 좋은 키워드
트랜잭션 COMMIT ROLLBACK ACID 원자성 일관성
실무에서는

결제, 포인트 거래, 재고 관리 등 여러 테이블의 데이터를 동시에 변경해야 하는 모든 작업에서 트랜잭션이 필수입니다.

Follow-up 질문

트랜잭션의 ACID 특성 4가지를 모두 설명해주세요.

5 락(Lock)
Medium

Q. 영카트5 쇼핑몰에서 인기 상품의 재고가 1개 남았는데, 두 명의 고객이 동시에 주문 버튼을 눌렀습니다. 데이터베이스에서 이런 동시성 문제를 어떻게 해결하나요?

동시에 같은 데이터를 수정하지 못하도록 잠그는 메커니즘을 생각해보세요.

A. 모범답안

데이터베이스의 락(Lock) 메커니즘을 사용하여 동시성 문제를 해결합니다. 재고를 조회하고 차감하는 동안 해당 레코드에 배타적 락(Exclusive Lock)을 걸어 다른 트랜잭션이 접근하지 못하도록 합니다. MySQL에서는 SELECT ... FOR UPDATE 구문을 사용하여 조회 시점부터 락을 걸 수 있습니다. 첫 번째 주문이 재고를 차감하고 커밋할 때까지 두 번째 주문은 대기하게 되며, 재고 확인 시 0개가 되어 주문이 실패합니다. 이를 통해 재고가 마이너스가 되는 것을 방지할 수 있습니다. 트랜잭션 격리 수준(Isolation Level) 설정도 동시성 제어에 영향을 줍니다.

핵심 포인트
  • • 락(Lock)으로 동시 접근 제어
  • • SELECT FOR UPDATE 사용
  • • 배타적 락으로 동시 수정 방지
  • • 트랜잭션 격리 수준
답변에 넣으면 좋은 키워드
락 Lock SELECT FOR UPDATE 배타적 락 동시성 트랜잭션 격리
실무에서는

한정 수량 상품 판매, 좌석 예매, 쿠폰 발급 등 동시에 많은 사용자가 같은 자원을 차지하려 할 때 락을 사용합니다.

Follow-up 질문

락을 오래 보유하면 어떤 문제가 발생할 수 있나요? 데드락(Deadlock)이란 무엇인가요?

댓글 0

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

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