[TIL 23.01.12] 4일차.. 아무고토 안하고싶다.

이승렬·2023년 1월 12일
0

항해99

목록 보기
4/34
post-thumbnail

오늘은 3일차인지, 4일차인지 모를 하루였다.
사실상 OT주차라서인지는 모르겠지만, 마음이 너무나도 놓인다는 거짓말..
사실상 오늘의 목표인 로그인 구현은 하지 못했다..
너무나도 어려운 것이였다.

따라서 오늘 3줄요약은 다음과 같다.

오늘의 3줄요약

  1. DB에서의 Problem, 중복오류
  2. ORM과 ODM이 뭔데..
  3. JWT.. 그놈의 JWT

Q1.[mongoDB] 데이터 중복처리는 어떻게 할까요?

A. 사실상 그 입학시험관련해서 문제를 풀어보다가 발견한 것이다.
만약 mongoDB에서 데이터를 넘겨주었을때,
num 이라는 값이 중복되어서 저장되었다고 가정하자.
이 상황은 '버켓리스트' 문제에서 적용 가능한데

만약 내가 버켓리스트를 처음 적었을때를 num:1 이라고 가정하고
두번째 버켓리스트를 num:2
세번째 버켓리스트를 num:3
이라고 했을때, 내가 설정해준 코드는 DB에 있는 총 다큐먼츠의 list의 길이를 반환해서 num을 설정해 주기 때문에 다음에 들어오는 버켓리스트는 num이 4가 된다.

이때
이 버켓리스트에 삭제기능이 생긴다면 두번째 버켓리스트를 삭제해보자
그렇다면 새로 들어온 버켓리스트는 길이가 줄어들었으므로 3으로 들어오게 된다.
이때 중복이 생기는 것이다.

따라서 이를 막기 위해서 나는
이 리스트 중에서 가장 큰 num을 가진 친구를 찾아서 +1을 해주었다.

(사실상 여기에서 num은 새로운 Id 라고 생각해도 무방할 것같다.)

다른 필요한 pymongo에서 사용하는 언어들은 여기에 잘 정리되어 있다.
https://parkjh7764.tistory.com/25

Q2. ORM 과 ODM 이 뭘까요

사실상 이 질문은 지금 사용하고 있는 mongoDB 에서 가졌던 의문점이였다.
인터넷 커뮤니티를 살펴보고 있으면 사실상 한사람이 하나의 좋아요를 누르게 되어있다.
나도 지금 내가 만들고 있는 내 페이지가 한 사람당 하나의 좋아요만 누르게 하고 싶은 것이다..
사실상 로그인 기능은 구현할 수 없었다... 내일 클론코딩을 하더라도 무적권 해결하고 잘 것이다.

이 이야기를 개발 매니저님에게 질문하자 다대다, 다대일 db에 대해서 설명하면서 이 이야기가 나온것이다.

  • A. ODM은 Object-Document Mapper 이다.
    이는 NoSQL에서 Document Database를 지원하기 위해서 데이터를 변환하는 프로그래밍 기법이다.

지금 내가사용하고 있는 MongoDb와 Mongoose 와 같은 것들이 가장 많이 사용하는 것들이라고 한다.

이에 대한 특징은 다음과 같다.

  1. 다양한 종류의 쿼리문을 지원한다.
  2. Join이 없어서 데이터 구조화가 필요하다
  3. 관리하기 편리하다.
  4. 필드를 추가하기 쉽다.
  5. 수평적으로 쉽게 확장 가능
  6. 인덱싱 제공하고 있다. (Id를 주는것을 말하나 보다)

그렇다면 ORM은 무엇일까
ORM은 Object-Relational Mapper 이다.
이는 데이터베이스와 객체 지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.
즉, 객체(클래스) 와 관계(관계형 데이터 베이스) 와의 설정을 의미하는 것이다.
객체지향 프로그래밍은 클래스를 사용하고
관계형 데이터베이스는 테이블을 사용하는데,
객체 모델과 관계형 모델간의 불일치가 존재를 하는데, 이 객체간의 관계를 바탕으로 SQL을 자동생성해서
불일치를 해결하는 것이 ORM이다.

이를 간편하게 수식화 한 것이 이것이다.

객체 (Class) <- ORM -> DB데이터

장점같은 경우에는

  1. 객체 지향적인 코드로 인해서 더 직관적이다.
  2. 재사용 및 유지보수의 편리하다
  3. DBMS에 대한 종속이 낮다.

단점같은 경우에는
1. 복잡성이 올라갈수록 난이도가 높아진다.
2. 프로시저가 많은 시스템을 전환하기가 어렵다.

마치며...

사실상 오늘 공부한게 별로 없다.
너무나도 슬프다.
내일은 진짜 많이한다 진짜

profile
Backend_Developer

0개의 댓글