개발자 기술면접 꼬리물기 질문
  • Welcome
  • 01 Java
    • 01-01. Generic
    • Garbage Collection
    • 자료형과 객체 비교
    • 힙(Heap)과 메모리(Memory)
    • JDK 버전과 JRE
    • 스레드(Thread)
    • 예외(Throwable)
    • Call By Value와 Call By Reference
    • String, equals, StringBuffer
    • Thread와 비동기
  • 02 Spring
    • 02-01. Spring 동작 방식
    • @Autowired, @RequiredArgsConstructor
    • 인증(Authentication)과 인가(Authorization)
    • 트랜잭션(Transaction)
    • QueryDSL과 SQL Injection
    • SecurityContextHolder
    • @EqualsAndHashCode
  • 알고리즘과 자료구조
    • Set 자료구조
    • 정렬 알고리즘
    • 우선순위 큐 (Priority Queue)
    • DFS와 BFS
    • 힙(Heap) 자료구조
    • 스택(Stack)과 큐(Queue)
    • 암호화 알고리즘
    • LinkedList
    • 자료구조 - 해시 테이블(HashTable)
    • 자료구조 - ConcurrentHashMap
  • 데이터베이스
    • 기본
    • 인덱스 (Index)
    • 정규화 (Normalization)
    • 파티셔닝과 샤딩(Partitioning & Sharding)
    • 트랜잭션(Transaction)과 락(Lock)
    • 덤프(Dump)
    • Redis
    • 격리 수준(MySQL)
  • 네트워크
    • 전송 계층 (Transport Layer)
    • 네트워크 계층 (Network Layer)
    • Http와 Https
    • IP(Internet Protocol)
    • 프록시 서버
    • Http Protocol
    • 소켓(Socket)
    • 로드 밸런싱(Load Balancing)
  • 디자인 패턴
    • 전략 패턴 (Strategy Pattern)
    • 싱글톤 패턴 (Singleton Pattern)
    • 템플릿 메서드 패턴과 전략 패턴
    • 데코레이터 패턴 (Decorator pattern)
  • 웹
    • CORS 정책
    • 동시성 제어
    • N+1 문제
    • 웹 브라우저 동작원리
    • URI, URL, URN
    • 채팅 아키텍처 설계
  • 개발자
    • 개발 방법론 TDD
  • 운영체제
    • JIT & AOT 컴파일
    • 컨텍스트 스위칭(Context Switching)
    • 프로세스와 스레드
    • 싱글 스레드와 멀티 스레드
  • 코딩테스트
    • Stack / Queue (스택 / 큐)
    • Heap(우선 순위 큐)
    • DP(동적 계획법)
    • DFS(깊이 우선 탐색)
    • BFS(너비 우선 탐색)
    • Greedy(그리디 알고리즘)
    • 해시(Hash)
    • 투 포인터 알고리즘
    • Shortest path
    • 수학적 사고
Powered by GitBook
On this page
  • Q. 데이터베이스 덤프(Dump)가 무엇인가요? 사용해본적인 있다면 어떠한 상황에서 덤프를 사용하셨나요?
  • Q. 환경을 구축 하면서 어려웠던 점이 있었나요?
  • Q. 그러면 그러한 덤프는 물리적 덤프 인가요? 논리적 덤프 인가요?
  1. 데이터베이스

덤프(Dump)

Q. 데이터베이스 덤프(Dump)가 무엇인가요? 사용해본적인 있다면 어떠한 상황에서 덤프를 사용하셨나요?

데이터베이스 덤프는 데이터베이스의 구조와 내용을 파일로 추출하는 작업입니다. 제가 실제로 사용했던 경험을 말씀드리자면, 테스트 데이터베이스 구축 과정에서 활용한 적이 있습니다. 처음에는 테스트할 때마다 필요한 데이터를 수작업으로 생성했었는데요. 이 방식은 매번 일관된 테스트 환경을 유지하기가 어려웠습니다. 그래서 운영 중인 데이터베이스의 덤프 파일을 생성하고, 이를 로컬 환경에 복원해서 테스트 데이터베이스를 구축했습니다. 이렇게 함으로써 두 가지 이점이 있었는데요. 첫째로 실제 운영 데이터와 동일한 환경에서 테스트가 가능했고, 둘째로 운영 데이터베이스를 직접 건드리지 않고도 필요한 테스트를 수행할 수 있었습니다.

Q. 환경을 구축 하면서 어려웠던 점이 있었나요?

구축하면서 가장 어려웠던 점은 대용량 데이터를 다룰 때 였습니다. 도커 컨테이너에서 MySQL 덤프를 진행하면서 가장 어려웠던 점은 'Lost connection to MySQL server during query' 에러가 발생하는 문제였습니다. 처음에는 단순히 덤프 파일을 복원하려고 했는데, 데이터가 많다 보니 중간에 계속 연결이 끊기는 현상이 발생했습니다. 이 문제를 해결하기 위해 도커 컴포즈 파일의 MySQL 설정을 수정했는데요. command 옵션에 max_allowed_packet을 1024MB로 늘리고, net_read_timeout과 net_write_timeout을 3600초로 설정했습니다. 이렇게 패킷 크기와 타임아웃 시간을 늘림으로써 대용량 데이터 덤프 복원 시에도 연결이 끊기지 않고 안정적으로 작업을 수행할 수 있었습니다. 이 경험을 통해 도커 환경에서 데이터베이스 작업을 할 때는 컨테이너의 설정 값 들도 꼼꼼히 확인하고 조정해야 한다는 것을 배웠습니다.

Q. 그러면 그러한 덤프는 물리적 덤프 인가요? 논리적 덤프 인가요?

제가 사용했던 것은 논리적 덤프입니다. 논리적 덤프는 SQL문 형태로 데이터를 추출하는 방식인데요. 물리적 덤프는 데이터베이스 파일을 그대로 복사하는 방식이라 속도는 빠르지만, 같은 버전의 DBMS에서만 사용이 가능합니다. 반면 논리적 덤프는 SQL 문으로 변환되어 추출되기 때문에 다른 DBMS나 버전이 다른 환경에서도 사용할 수 있다는 장점이 있습니다. 제 경우에는 개발 환경과 운영 환경의 데이터베이스 버전이 달랐기 때문에, 호환성이 좋은 논리적 덤프를 선택했습니다. 물론 논리적 덤프가 물리적 덤프보다 속도가 느리다는 단점이 있지만, 테스트 환경 구축이 목적이었기 때문에 속도보다는 호환성을 우선시했습니다.

Previous트랜잭션(Transaction)과 락(Lock)NextRedis

Last updated 5 months ago