MyShop 서비스는 InnoDB를 사용하는데, MyISAM과 InnoDB의 차이와 왜 결정하게 되었는지 작성하고자 한다.

MySQL의 스토리지 엔진은 여러 종류가 있지만 이 포스트에서는 MyISAM과 InnoDB의 차이를 설명하겠다.

1. MyISAM

MyISAM은 테이블에 ROW COUNT를 갖고 있어 SELECT count(*) 명령과 기본적인 SELECT 명령이 빠르다.

또한 Full-Text 인덱스를 지원해 검색의 효율성을 자랑한다. 그렇기 때문에 Read Only 기능이 많은 서비스에 MyISAM 엔진이 적합한 엔진이라고 할 수 있다.

그러나 Row Level Lock을 지원하지 않아, CRUD 작업이 이뤄질 때 해당 테이블 전체에 Lock이 걸리게 된다. (데이터(행)가 많아질 수록 속도는 느려짐)

<aside> 💡 따라서 MyISAM은 대규모 쓰기가 적은 웹사이트나 블로그 등에서 적합

</aside>

2. InnoDB

InnoDB는 MyISAM이 지원하지 않는 Raw Level의 Lock을 지원한다.

그러나 MyISAM이 지원하는 Full-Text 인덱스를 InnoDB는 지원하지 않는다.

<aside> 💡 따라서 대용량 데이터 처리나 트랜잭션 처리가 필요한 애플리케이션에서 적합

</aside>

3. InnoDB 엔진을 결정한 이유

위에서 간단하게 설명한 차이점을 정리해 보자면 다음 표와 같다.

MyISAM InnoDB
데이터 무결성 트랜잭션, 롤백, 로그 복구를 지원하지 않음 트랜잭션, 롤백, 로그 복구를 지원
속도 쿼리 처리 속도 및 인덱스 검색이 빠름 쿼리 처리 속도 및 인덱스 검색이 상대적으로 느리지만, 대용량 데이터 처리에 적합.
잠금 방식 테이블 단위의 LOCK 행 단위의 LOCK
복구 ACID를 준수하지 않아 복구 불가 ACID를 준수해 복구가 가능
외래키 제약 조건 외래키 제약 조건 지원하지 않음 외래키 제약 조건 지원

온라인 편집샵의 주된 목적은 상품을 검색하고 보여주는 목적도 있지만 결국 모든 사용자는 상품을 구매하게 될 것이다. 추가로 효율적인 검색은 엘라스틱 서치같은 검색엔진을 도입하는 것이 마땅하다고 생각했다.

이러한 특성을 고려해 봤을 때 다수의 데이터 쓰기 작업이 이뤄진다는 점과 외래키를 이용해 다른 테이블과 관계를 맺는다는 점 등이 InnoDB를 사용하는 것으로 결정하게 되었다.