[Optimization] 정규화와 속도사이에서
정규화 VS 속도
내가 최근에 진행한 사내 프로젝트에서 개발 완성 단계에서 뒤통수를 맞는 듯한 느낌이 들었었다. 그 이유는 정규화때문이었다. 그냥 지나치치 말아야지 하고 쓰는 대중 메모(영어로 쓰기 힘들다.. 오늘은 대충 한글)
뭐가 중요할까?? 뭐 둘다 중요하다. 상황에 따라 다르겠지….
1. 프로젝트상황
- 서로 다른 DAO를 가진(하지만 값은 개념을 가진, 실제 서비스의 경우는 가끔 이럴때도 있더라…) 데이터를 하나의 일관된 비지니스 로직에서 계산해야 상황이다.
- 그냥 따로 갈 경우 비지니스 로직을 두배로 늘려야하는 상황이다.
- 계산을 해야하는 데이터의 양은 수억 건..으로..(실제 서비스 중인 데이터이며 migration작업 기간은 1달)
- 계산을 한 데이터는 RDB에서 저장한다.
- (먼가 코드를 넣고 싶었지만.. 회사코드를 별로 드러내고 싶지 않다..)
2. 해결 : 정규화
- 서로 다른 DAO를 하나의 DTO로 변경해서 비지니스로직의 양산을 방지했다.(나름의 정규화)
3. 문제발생
- 정규화를 하다가 불필요한 연산이 발생, 속도가 느려짐
- regex를 통한 불필요한 string 비교가 발생(정규화를 하지 않고 하나로 갔다면 하지 않았다.)
4. 해결
- 느려진 속도가 원래 처음 계산했던 속도보다는 빠르게 나와서 큰 문제가 없이 지나갔다.. 해결이라기 보단.. 다행이었다..
5. 느낀점
- 정규화의 장점
- 첫번째는 데이터의 흐름을 일관되게 가져 갈 수 있다.
- 두번째는 나는 처음 정규화 되지 않은 코드를 보면서, 해석의 시간을 갖었는데, 정규화가 잘 되어있다면 그리 헷갈릴 일이 없다.
- 위와 같은 상황에서 속도를 유지할 수 있는 정규화 방법이 고민되어야 했다. 사실 할 수 있었다..(일단 속도가 떨어졌다고는 하나, 원래 예상보다는 빠른상황이어서…)
- 속도가 메인이면 정규화를 안할 수도 있다고 생각이 된다.
오늘 끝!!
Leave a comment