2021-11-30-TIL
Today I Learned
FLO 최종 면접
FLO 최종 면접도 1차 면접과 마찬가지로 CTO님과 팀의 리드 개발자님이 면접을 보게 되었다. 그리고 기본적인 질문 보다는 이전에 했던 프로젝트의 전체적인 이해도 같은 것을 물어보았다. 그렇게 잘 대답한 것은 없지만 특별히 잘못 대답한 것도 없는것 같다.
Open API
- https://en.wikipedia.org/wiki/Open_API
Open API(공개 API)는 인터넷에 공개되어 조직 바깥의 개발자도 쓸 수 있는 API를 말한다. 무료 가입, 호출량 제한 같은 조건이 붙기도 하지만 접근 자체는 열려 있다. YouTube의 동영상 API처럼 외부 개발자가 자기 서비스에 기능을 붙일 수 있게 하는 것이 목적이다.
이름이 비슷한 OpenAPI Specification과는 다른 개념이다. Open API는 API를 누구에게 공개하느냐에 대한 말이고, OpenAPI Specification은 HTTP API를 기술하는 문서 형식의 표준이다. 명세의 개정 이력에는 Swagger 2.0이 OpenAPI Initiative에 기증되어 이어졌다고 적혀 있다.
Sharding and Partitioning
이전에 두나무 프리테스트에서 DB 샤딩과 파티셔닝의 차이에 대해서 질문을 했다. 하지만 키워드만 들어보았지 제대로 공부해본적이 없다. 그래서 정리가 필요하다고 생각했다.
파티셔닝은 논리적인 데이터 엘리먼트들을 다수의 엔티티(테이블)로 쪼개는 행위이다. 테이블의 형태를 보면 수직방향(column)으로 자를 수도 있고, 수평방향(row)으로 자를 수도 있다. 이 중에 수평 파티셔닝을 샤딩이라고 부른다.
다시 말해, 파티셔닝은 논리적인 데이터 요소를 나누는 것인데, 수직 파티셔닝은 칼럼을 쪼개서 별도의 테이블을 만드는 것이고, 수평 파티셔닝(샤딩)은 데이터 행이 너무 많아서 여러의 테이블로 분리하는 것이다.
- https://spidyweb.tistory.com/168
- https://galid1.tistory.com/797
- https://gmlwjd9405.github.io/2018/09/24/db-partitioning.html
수평 파티셔닝과 샤딩은 같은가
위 정리에서 “수평 파티셔닝을 샤딩이라고 부른다”는 부분은 조금 더 구분할 필요가 있다. 둘 다 행을 기준으로 나눈다는 점은 같지만, 나눈 조각이 어디에 놓이느냐가 다르다.
- 수평 파티셔닝: 보통 하나의 데이터베이스 서버 안에서 테이블을 행 기준으로 나눈다. MySQL의 파티셔닝이 이 경우다. MySQL 문서는 테이블의 일부를 규칙에 따라 서로 다른 위치에 저장해서, 사실상 각 부분이 별도의 테이블처럼 저장된다고 설명한다. 애플리케이션은 여전히 테이블 하나에 쿼리한다.
- 샤딩: 행 기준으로 나눈 조각(샤드)을 여러 데이터베이스 서버 인스턴스에 나눠 둔다. 저장 용량과 부하를 서버 여러 대로 분산하는 것이 목적이다. 대신 어느 샤드에 데이터가 있는지 찾는 라우팅이 필요하고, 샤드를 넘나드는 조인이나 트랜잭션이 어려워진다.
| 구분 | 나누는 기준 | 조각이 놓이는 곳 |
|---|---|---|
| 수직 파티셔닝 | 컬럼 | 별도 테이블 |
| 수평 파티셔닝 | 행 | 같은 DB 서버 안의 파티션 |
| 샤딩 | 행 | 여러 DB 서버 |
참고로 MySQL 8.0은 수평 파티셔닝만 지원하고, 컬럼을 서로 다른 물리 파티션에 두는 수직 파티셔닝은 지원하지 않는다. 수직으로 나누려면 테이블 자체를 따로 설계해야 한다.
댓글
아직 댓글이 없습니다