항해99 4주차 회고 (JWT,ORM,Mysql,Nosql)

최예닮·2022년 10월 16일
post-thumbnail

주특기 숙련주차에 접어들었다.....


(정신과 수련의 방에 있는 나의 모습...)

입문도 어렵게 느껴졌는데 .... 숙련주차는 어떨지 너무 기대가 가득했다 ^_^
강의를 보는데 JWT 보고 처음에 JMT (존맛탱) 인줄알고 흠짓했다.

하지만 그 존맛탱이 아니라... 회원가입 로그인을 위한것이였다...
솔직히 처음에는 알아들을 수 없었다. 요즘 웹툰에서 이세계물이 굉장히 유행인데 흡사 그런느낌을 받았다.

(대충 못알아들었다는 소리)

그 상태에서 미들웨어로 넘어왔는데 ㅎ ^^ 살려줘

지금 돌이켜보면 JWT에 대한 이해도가 낮은 상태에서 미들웨어를 보니 죽을 맛이었겠지... 고생했다... 과거의 나여...


JWT란


JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다.

이 방식의 장점으로는 나열해보면

  • Header와 Payload를 가지고 Signature를 생성하므로 데이터 위변조를 막을 수 있다.
  • 인증 정보에 대한 별도의 저장소가 필요없다.
  • JWT는 토큰에 대한 기본 정보와 전달할 정보 및 토큰이 검증됬음을 증명하는 서명 등 필요한 모든 정보를 자체적으로 지니고 있다.
  • 클라이언트 인증 정보를 저장하는 세션과 다르게, 서버는 무상태(StateLess) 가 된다.
  • 확장성이 우수하다.
  • 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다. (쿠키와 차이)
  • OAuth의 경우 Facebook, Google 등 소셜 계정을 이용하여 다른 웹서비스에서도 로그인을 할 수 있다.
  • 모바일 어플리케이션 환경에서도 잘 동작한다. (모바일은 세션 사용 불가능)

이렇게 나열할 수 있다.

어느정도 JWT에 대한 이해가 조금 되니까 미들웨어도 더 눈에 들어오게 되었다.

미들웨어란

미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수입니다. 그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시됩니다.

미들웨어 함수의 수행할 수 있는 것을 나열해보자면

  • 모든 코드를 실행.
  • 요청 및 응답 오브젝트에 대한 변경을 실행.
  • 요청-응답 주기를 종료.
  • 스택 내의 그 다음 미들웨어 함수를 호출.

이렇게 나열할 수 있다.

우선 JWT를 통해 회원가입을 하고 토큰값을 받아와서 그 토큰값으로 로그인하고 게시글과 댓글을 작성할 수 있게 하였다.

내가 이렇게 쉽게 나열하고 이해기했지만 여기에 접근하기까지가 너무너무너무 오랜시간이 걸렸다... 고통스러웠어....

솔직히 Sequelize 의 강의는 앞에 있는 강의보다는 크게 어렵지는 않아 바로바로 이해하고 캐치를 했었다.
그래서 DB테이블을 생성하고 거기에 데이터를 저장하는 것은 어렵지 않았다.
다만 필요한 명령어들과 마이그레이션에 대해 이해할때 조금 시간이 걸렸지만 위에 친구들에 비해서는 양반이었지요 ^^

ORM 이란

(Object-relatinal mapping)이란 객체(클래스)와 관계
(관계형 데이터 베이스)와의 설정을 의미 합니다. 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터 베이스는 테이블을 사용합니다. 여기서 객체 모델과 관계형 모델간에 불일치가 존재 하는데 이 객체간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결 하는 것이 ORM입니다.

즉, ORM은 관계형 DB를 손쉽게 사용할 수 있게 해주는 매니저 같은 역할을 합니다.

NOSQL vs MYSQL

솔직히 내 입장에서는 몽고DB를 많이 사용해서 그런지 몽고DB가 더 쉽게 느껴졌고.. 몽고DB로 작성하고 Sequelize로 넘기는거 ... 오류가 너무 많이 나와서 그냥 하려고하는 걸로 하는게 좋구나하고 깨달았다...

다만 MYSQL의 장점은 정해진(엄격한) 데이터 스키마를 따라서 저장이된다. 여러개의 테이블에 분산도 된다.

그리고 NOSQL은 스키마도 없고 관계도 없어서 정해진 스키마를 따르지 않아도 다른 구조의 데이터를 같은 컬렉션에 추가할 수 있다.

SQL의 장점

  • 명확하게 정의 된 스키마, 데이터 무결성 보장
  • 관계는 각 데이터를 중복없이 한번만 저장됩니다.

NoSQL의 장점

  • 스키마가 없기때문에, 훨씬 더 유연합니다. 즉, 언제든지 저장된 데이터를 조정하고 새로운 "필드"를 추가 할 수 있습니다.
  • 데이터는 애플리케이션이 필요로 하는 형식으로 저장됩니다. 이렇게 하면 데이터를 읽어오는 속도가 빨라집니다.
  • 수직 및 수평 확장이 가능하므로 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기 / 쓰기 요청을 처리 할 수 있습니다.

SQL의 단점

  • 상대적으로 덜 유연합니다. 데이터 스키마는 사전에 계획되고 알려져야 합니다. (나중에 수정하기가 번거롭거나 불가능 할 수 도 있습니다.)
  • 관계를 맺고 있기 때문에, JOIN문이 많은 매우 복잡한 쿼리가 만들어 질 수 있습니다.
  • 수평적 확장이 어렵고, 대체로 수직적 확장만 가능합니다. 즉 어떤 시점에서 (처리 할 수 있는 처리량과 관련하여) 성장 한계에 직면하게 됩니다.

NoSQL의 단점

  • 유연성 때문에, 데이터 구조 결정을 하지 못하고 미루게 될 수 있습니다.
  • 데이터 중복은 여러 컬렉션과 문서가 (SQL 세계에서 처럼 하나의 테이블에 하나의 레코드가 아니라) 여러 개의 레코드가 변경된 경우 업데이트를 해야 합니다.
  • 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정(update)를 해야 하는 경우 모든 컬렉션에서 수행해야 함을 의미합니다. (SQL 세계에서는 중복된 데이터가 없기 때문에 한번만 수행하면 됩니다.)
profile
산을 오르려고 하는데 이제 주차장에 막 주차한 초보개발자

0개의 댓글