정규화와 비정규화

·2022년 6월 24일
2

컴퓨터개론

목록 보기
7/14

14시부터 15시까지 면접을 봤는데....
대답을 너무 아쉽게 했다고 생각한다.

그 중에는 아예 대답을 못한 질문이 있었는데 그것이 바로 비정규화였다.

정규화란?

데이터의 중복을 최소화하기 위하여 데이터를 분리하는 작업을 이야기한다.

정규화는 보통 제1, 제2, 제3 정규화가 일반적인데, 이 부분에 대해서는 링크로....
=> https://mr-dan.tistory.com/10

개발자의 이야기로 이야기를 하면 관계가 형성되어있는 값을 최대한 분리를 시켜주는 작업이다.

이것을 해야하는 이유는 크게 2가지가 존재한다.

  • 중복되는 데이터가 발생한다.
    • 왜냐하면 이미 중간 테이블에 데이터가 저장이 됐는데, 한번 더 저장해야하는 문제가 발생하기 때문이다.
  • 데이터의 갱신이 되지 않아서 데이터의 오염이 있을 수 있다.
    • 관계가 맺어있는 데이터라면 한번에 다같이 변하는 특성을 가지고 있는데
      그러지 않을 경우에는 일관성이 위배되는 일이 벌어진다.

하지만 이러한 조건에서도 일부로 정규화를 무시하는 경우가 있는데, 그것이 비정규화였다.

비정규화란?

하나 이상의 테이블에 데이터를 의도적으로 중복 배치하는 편의성을 위한 최적화 기법

이 질문이 왜 들어왔나 고민을 하다가 검색을 해보고 뜻을 보니 바로 알겠더라.

subCategory가 있음에도 같은 의미인 boardSubject이 있는 모습을 볼 수 있다.

왜? 고의적으로 이런 작업을 했는지

왜 이런 작업을 했냐면 프론트단에서 메인 페이지에 각 게시글마다 리스트를 뿌려줘야하는데,
전체 페이지에서는 전부를 불러오기 때문에 페이지를 이동시키는 라우터의 문제가 없었지만

그런 것이 없는 메인페이지에서 subCategory를 통해서 값을 가져올 경우에는 폴더구조가 복잡해진다는 것이 그 이유였다.

그래서 API 요청을 할 때 불러오기 편하라고 그냥 boardSubject이라는 컬럼을 추가해서 해결을 했다.

그리고 불러오기 편하라고 고의적으로 정규화를 무시하는 것을 비정규화라고 부른다.

이것이 비정규화라는 것을 질문하시게 된 이유라고 생각한다(....)

받은 쪽지에도 보낸 유저의 사진이 들어가있다.


제일 최근에 쓴 블로그 글을 보시고 질문을 하셔서 정말... 어....? 정말로....? 라는 생각이 들었다.

데코레이터가 뭔지도 물어보시고,,, Nest가 어떤지도 물어보시고....
nestjs 쓰려고 선배 개발자 분들에게 받았던 답변 리스트도 물어보시고

내가...내가 주말에 다 공부하고 정리해서 기필코 다 올릴 것이다...

쿠버네티스, 도커, 레디스, nestjs, express, fastify 왜 쓰는지, 특징이 무엇인지, 간략하게만 알고 있는데

조금 더 딮하게 정리를 해야할 필요성이 있어보인다. 할게 태산이다!

profile
물류 서비스 Backend Software Developer

1개의 댓글

comment-user-thumbnail
2022년 7월 5일

화이팅!

답글 달기