지난번에 이어서 db설계를 마무리했다. 그래도 핵심적인 기능을 담당하는 테이블 설계는 얼추 논의가 끝난 상태라 생각보다 오래걸리지는 않았다. 생각해보면 4회동안 진행한 스터디 중 가장 잘 풀리지 않았나 싶다.
1.어려웠던 점
이번에는 mysql을 많이 써보지 않아서 데이터 타입에 대해서 잘 몰라 어려움을 겪었다. mysql에는 enum 타입이라는게 있다고 알고만 있었는데 생각해보니 mysql에도 varchar 타입이 있는데 굳이 enum 타입을 쓰는 이유를 생각해보지 않았다.
또 tinyint(1)는 1글자만 표현 할 수 있다는 줄 알았었는데 1바이트를 쓸 수 있다는걸 이제야 알았다. 생각보다 기초가 부족한 상태라는 것을 알았다.
2.느낀점
공부는 해도 해도 할게 보인다. mysql 에서 enum 타입의 장단점을 부랴부랴 검색했다. 그리고 enum이 어떻게 쓰이고 왜쓰이는지 알았다. 장점을 정리해보면 이렇다고 한다.
- 데이터가 차지하는 용량이 작음
- 정해진 데이터만 저장할 수 있어 잘못된 값 입력을 방지
- 가독성이 좋음
- 내부적으로 정수로 저장되어서 조회속도가 빠름
그런데 enum을 검색하면 단점이 더 부각되는 느낌을 받았다. 우선 enum은 단점은 다음과 같다.
- 확장성이 떨어짐
- 비교 연산에서 버그 발생 위험
- ORDER BY 에서 정렬은 enum 선언 순서라 ORDER BY 가 의도치 않게 될 수 있음
- SELECT enum_value +0 FROM ENUM_TABLE 이런 쿼리가 있을때 숫자 연산이 진행되어 버림
버그 발생 위험 존재
enum 타입의 값은 정수형으로 저장이 되기에 예기치 못한 오류가 더 발생할 수 있을 것 같다는 생각이 들었다. 괜히 버그의 원인 파악을 할 위험성을 높이는 것보다 varchar 형이 훨씬 낫지 않나 싶었다. 또 varchar 형으로 정의 하면 정수나 문자열을 자유롭게 저장 할 수 있는 반면, enum 타입에서 정수형으로 값을 선언하는건 권고 하지 않는다고 한다.
그리고 oracle 에 있었던 테이블과 쿼리를 MSSQL 환경으로 이전하는 경험이 있어서 만약 mysql 에서 다른 벤더의 테이블로 이전하는 상황이 생길때 문제가 커질것 같은 느낌을 받았다.
3.앞으로 해야할 일
api명세를 작성하고 이제 개발을 해야 할 차례이다. 또 기초공부를 꼭 지금이 아니더라도 틈틈히 해놔야겠다. 그리고 공부할게 너무 많다. jpa도 공부해야하고, jwt도 공부해야하고, spring security도 공부해야 한다. 할게 산더미처럼 많다. 차근차근 해야 하지 않을까 싶다.
'개인공간 > 회고' 카테고리의 다른 글
선택 안됨 프로젝트 DUCKS - 다섯번째 회고 (0) | 2025.03.12 |
---|---|
프로젝트 DUCKS - 세번째 회고 (0) | 2025.02.26 |
프로젝트 DUCKS - 두번째 회고 (0) | 2025.02.21 |
프로젝트 DUCKS - 첫번째 회고 (0) | 2025.02.21 |