Thumbnail
BEST
개발 · 프로그래밍 백엔드

mongoDB 기초부터 실무까지(feat. Node.js) 대시보드

(4.7)
82개의 수강평 ∙  1,232명의 수강생
77,000원

월 15,400원

5개월 할부 시
지식공유자: 김시훈
총 112개 수업 (11시간 56분)
수강기한: 
무제한
수료증: 발급
난이도: 
입문
-
초급
-
중급이상
지식공유자 답변이 제공되는 강의입니다
폴더에 추가 공유

초급자를 위해 준비한
[백엔드, 웹 개발] 강의입니다.

mongoDB, NoSQL 요즘 많이 들리지만 아직은 낯선 데이터베이스인가요? 관계형 데이터베이스(RDS/SQL)처럼 사용하고 계시지는 않으신가요? 아무리 좋은 기술도 올바르게 사용하지 않으면 역효과가 발생합니다. 그래서 몽고디비 사용 실패 사례도 종종 보이는데요. 이 강의는 mongoDB를 최대한 mongoDB스럽게 사용할 수 있도록 기본 개념부터 실무 노하우까지 가르쳐드려요.

✍️
이런 걸
배워요!
mongoDB를 제대로 활용하는 백엔드 개발
Node.js, Express로 REST API 개발
비동기(async) 프로그래밍
Index, nesting을 이용한 Read 성능 극대화
ACID Transaction
AWS lightsail에 Node.js 서버 배포
mongoDB Atlas 클라우드 매니지드 서비스

NoSQL 기반 데이터베이스 중 가장 사랑받고 있는 몽고DB! 
몽고DB 찐 활용법을 알려드릴게요. 😎

주제 소개 📝

mongoDB 이름은 Humongous, "거대한"에서 이름을 따왔는데요. 빅데이터 키워드들이 생기기 시작한 인터넷 붐 이후 2009년에 출시된 NoSQL 기반 데이터베이스에요. 데이터베이스는 서비스 개발의 핵심 근간이 되죠. mongoDB와 다르게 우리에게 익숙한 관계형 데이터베이스(MySQL, PostgreSQL)는 이미 20년도 넘은 오래된 기술이에요. 지속적으로 새로운 프로그래밍 언어와 기술들이 탄생하는 프로그래밍 생태계인데 이렇게 변화가 적은 분야가 있다는게 신기하죠. 데이터베이스는 그만큼 중요하고 보수적인 기술입니다. 데이터베이스가 바뀌면 그 위에 만들어지는 백엔드는 물론 프론트엔드까지도 영향을 줄 수 있어요. 그러다보니 다소 생소한 기술인 몽고디비에 관한 다양한 의문점들도 생기고 실패 적용 사례들도 종종 보입니다:

  • 몽고디비는 상황에 따라 사용해야 된다?
  • e-commerce는 무조건 RDS 아닌가?
  • 초반에 빠르게 간단하게 개발하기에는 좋지만 나중에 가면 관계형 데이터베이스가 더 좋다?
  • JOIN도 지원하지 않는 데이터베이스라니..?

아무래도 비교적 신생 기술이고 노하우가 충분히 알려지지 않아서 발생한 문제들이라고 생각해요. mongoDB는 관계형처럼 범용적으로 사용할 수 있고 e-commerce도 당연히 mongoDB로 개발할 수 있어요(경험자입니다). 그리고 제대로 사용한다면 대형 트래픽이 발생했을 때 관계형 데이터베이스보다 훨씬 효율적이에요.

애초에 적용 실패 사례가 생기는 원인이 뭘까요? mongoDB 철학을 이해 하지 못해서에요. 단순 사용방법만 공부해서는 부족해요. 그리고 무엇보다 관계형 데이터베이스처럼 접근하면 안돼요. mongoDB가 접근하는 문제 해결방법은 근본적으로 다른 부분들이 많아요. 이런 특성을 잘 이해하고 mongoDB스럽게 사용하면  mongoDB는 장점이 정말 많은 데이터베이스입니다.

왜 배워야 하는지 ✒️

  1. 데이터베이스가 트래픽 병목이 되기 쉬운데 mongoDB가 이 확장성 문제를 근본적으로 해결할 수 있어요.
  2. 백엔드 개발을 같이 배우면서 mongoDB를 제대로 학습할 수 있어요. 백엔드 개발과 데이터베이스는 한몸이에요!
  3. 웹개발에서 통신하는 데이터는 대부분 JSON 형식인데요. mongoDB가 저장하는 데이터 형식은 JSON(BSON)이에요. 따라서 중간에 백엔드에서 데이터 변환을 하거나 ORM을 사용할 필요가 거의 없어져요. 그만큼 진입장벽이 낮아지기도 해요.
  4. 범용적으로 사용 할 수 있는 데이터베이스에요. NoSQL 데이터베이스 특성상 ACID Transaction이 지원 안돼는 경우가 대부분인데요. mongoDB는 NoSQL의 수평적 확장 특성을 가지면서 버전 4.0부터 ACID Transaction을 지원하고 있어요. 
  5. 강의 초반에 비동기 프로그래밍을 짚고 넘어가는데요. 백엔드가 데이터베이스와 효율적으로 통신하기 위한 필수적인 개념이에요.

이 강의에서 배우는 것들 ✏️

  1. mongoDB 기본 사용법 - CRUD
  2. mongoDB Atlas - 메니지드 클라우드 데이터베이스 배포하기
  3. 비동기(async) 프로그래밍으로 백엔드 효율 극대화시키기
  4. Express 프레임워크로 REST API 만들기
  5. 관계된 데이터 효율적으로 읽는 방법(populate)
  6. 자식 문서를 부모 문서에 적절하게 내장해서 읽기 퍼포먼스 극대화시키기
  7. Index 적용으로 탐색 퍼포먼스 극대화
  8. 트렌젝션(Multi Document Transaction) 활용해서 일관성 있게 데이터 관리하기
  9. AWS lightsail에 백엔드 서버 배포하기
  10. 관계형 데이터베이스(relational database)와 mongoDB 비교하기

아래는 강의에서 사용되는 일부 자료들입니다 :)

여기서 다루는 기술들 🧰 

mongoDB, Node.js, Javascript, Postman, AWS, mongoDB Atlas

예상 질문 Q&A 🙋🏻‍♂️ 

Q. Node.js(Javascript) 개발자를 위한 강의인가요?
A. 이 강의는 mongoDB 강의에요. Node.js는 백엔드 개발자가 mongoDB를 제대로 활용하는 전체적인 흐름을 보여주기 위한 수단이에요. 따라서 다른 언어로 백엔드 개발을 하고 계셔도 수강하실 수 있습니다. Node.js 관련 다루는 부분은 범용적으로 사용되는 기초적인 개념들(REST API, 비동기 프로그래밍)이에요. 개념들을 잘 이해하시면 mongoDB를 어떠한 개발 환경에서도 잘 사용하실 수 있을거에요 :)

Q. 백엔드(Node.js)를 같이 다루는 이유가 있나요?
A. 이 강의는 백엔드 개발자가 mongoDB 데이터베이스를 올바르게 설계하고 사용하는 방법을 가르쳐 드려요. 그래서 강의 초반에 데이터베이스를 올바르게 활용할 수 있도록 기본적인 백엔드 개발을 같이 가르쳐드려요. 그리고 이 강의는 DevOps 강의가 아니에요. 데이터베이스를 어떻게 설치하고 replica set, sharding을 어떻게 구축하고 관리하는지 가르쳐드리지 않아요. 대신 이런 DevOps 영역을 자동화해주는 메니지드 클라우드 서비스, mongoDB Atlas를 사용하게 되요.

Q. MongoDB Aggregate도 배우나요?

A. 이번 강의에서는 "일반적인" 백엔드 개발에서 몽고디비를 몽고디비스럽게 잘 활용하는 방법에 초점을 두었습니다. 호출 빈도가 높은 일반 API에서 Aggregate를 사용하면 디비에 부하가 갈 수 있어서 권장하지 않아요. 쉽게 생각하면 Aggregate를 자주 사용하게 되면 몽고디비스럽게 사용하지 못하고 관계형 디비처럼 사용하게 되는거라고 보시면 되요. 따라서 이 강의에서는 Aggregate 관련 내용을 포함하지 안핬습니다. Aggregate 없이 몽고디비를 올바르게 활용하는 방법을 보여드립니다! 그렇다고 Aggregate가 안좋다는건 절대 아닙니다. 사용용도가 따로 있을뿐이에요. 통계를 내거나 대용량 데이터 가공 등 Data Engineering 영역에서 매우 강력한 도구입니다. 일반적인 API들과 비교했을 때 이러한 Data Engineering 처리들은 호출 빈도가 훨씬 적고 응답속도가 오래 걸려도 딱히 상관 없다는 특징을 가지고 있습니다. 예를 들어 분기별로 매출현황을 추출하고 싶다면 분기에 한번씩 aggregate 배치를 돌려서 결과값을 저장해두었다고 결과값을 빠르게 불러오면 되겠죠. 차후에 MongoDB 기반 Data Engineer 강의도 제작할 예정인데요. 이 때 MongoDB Aggregate는 물론, MongoDB Data Lake로 빅데이터 관리 그리고 MongoDB Charts로 데이터 시각화까지 다룰 예정입니다!

Q. 이 강의를 시작하게 된 계기를 소개해주세요.
A. 저는 비전공자 출신이에요. 온라인에 뿌려진 파편된 자료들을 보고 분석하고 적용해보면서 배웠어요. 이 과정을 반복하다보면 개념들이 추상화가 되면서 정리가 되요. 여기서 말하는 "추상화"란 정말 중요한 개념인데요. 개발을 할 때 서비스가 돌아가게끔 단순 기능 구현만 할 수 있어요. 근데 "추상화"가 잘 된 개발자는 "잘 작동하는", "확장성 있는" 서비스를 만들 수 있어요. 다른 표현으로는 Why를 잘 이해하고 있는 개발자라고 할 수도 있겠네요. 그런데 비교적 최신 기술일수록 커뮤니티 전번작으로 Why에 대한 이해도가 떨어집니다. 그래서 상대적으로 낯선 데이터베이스인 mongoDB를 주제로 강의를 제작해봤어요. Why를 잘 이해하시고 좋은 서비스 많이 만들어주세요!

이런 분들께 추천드려요!

🎓
학습 대상은
누구일까요?
mongoDB를 제대로 사용해보고 싶으신분
백엔드 개발에 입문 해보고 싶으신분
확장성이 뛰어난 백엔드와 데이터베이스를 구축해보고 싶으신분
📚
선수 지식,
필요할까요?
Javascript 기초 문법(혹은 기본적인 프로그래밍 지식)

안녕하세요
김시훈 입니다.
김시훈의 썸네일

현재 공동창업한 작은 스타트업 Ninjalerts에서 CTO역할로 일하고 있습니다.

Ninjalerts는 이더리움 블록체인 데이터를 기반으로 NFT 거래 정보들을 실시간으로 알려주는 서비스에요!

전에 만나씨이에이에서 개발 팀장으로 있었어요. 시작은 기획자였는데 개발자가 부족한 탓에 외주를 맡기려다가 직접 개발할 기회가 생기면서 운좋게 개발자로 전향했어요. 이후 자사몰을 자체 개발하면서 이커머스 개발팀장을 맡았어요. 온라인에 나온 다양한 좋은 자료들 덕분에 빠르게 성장할 수 있었어요. 제 노하우가 여러분들에게도 도움이 되길 바랍니다 :) Linkedin 프로필

커리큘럼 총 112 개 ˙ 11시간 56분의 수업
이 강의는 영상, 수업 노트가 제공됩니다. 미리보기를 통해 콘텐츠를 확인해보세요.
섹션 1. MongoDB 맛보기
MongoDB Atlas(Managed Cloud Service) 미리보기 04:28 데이터베이스 생성 및 연결 미리보기 05:53 create document 미리보기 03:01
Schemaless 특성 02:36
update document 01:42
update nested document 01:59
Update with ObjectID 02:25
delete document 00:49
CRUD 00:43
Database 구조 01:33
섹션 2. Node.js & Express를 활용한 REST API 만들기
Node.js 설치 02:35
npm 02:06
Code Editor 03:36
package.json 03:57
Express 설정하기 02:11
nodemon 02:27
REST API 06:12
User GET & POST API 만들기 04:41
Postman 02:20
Express Middleware 06:13
섹션 3. 비동기(Asynchronous) 프로그래밍
Non-blocking 미리보기 11:49
Callback 11:15
Promise 07:02
Promise Chain 08:38
Async Await 07:19
요약 09:14
섹션 4. Node.js로 MongoDB 다루기
Mongoose Connection 10:06
Schema & Model 05:36
User Document 생성하기 03:04
Express에서 오류 처리하기 08:11
GET /user 02:57
Unique Index 03:44
GET /user/:userId 05:41
DELETE /user/:userId 03:04
PUT /user/:userId 08:19
Mongoose가 내부적으로 어떤 작업을 하는가 04:26
debug 모드 설정하기 07:22
라우터 리팩토링 03:28
VS Code Plugin 설정하기 01:55
findOneAndUpdate vs save 04:55
save로 document 수정하기 04:44
섹션 5. 관계된 데이터 관리하기
User와 관계된 Blog Model 04:39
Blog Router 준비하기 04:48
create Blog document 09:14
Blog 관련 API 만들기 11:03
Postman API 관리하기 05:39
Comment model 만들기 02:16
자식 관계 만들어주기 06:41
POST /comment 07:51
Promise.all - Response Time 개선하기 02:37
Comment 불러오기 07:27
리팩토링 02:35
섹션 6. 관계된 데이터 효율적으로 읽기
블로그의 관계 데이터 읽기 소개 미리보기 05:00
<Mongoose v6 업데이트 관련 공지>
faker로 데이터 생성하기 12:55
axios 이용해서 client 코드 만들기 14:55
Client 코드 리팩토링 & 마무리 09:33
N+1 Problem 06:45
성능 측정하기 09:30
populate로 자식문서 효율적으로 불러오기 11:25
Virtual Populate 07:35
Populate 성능 테스트 04:28
개념 복습 04:43
섹션 7. 문서 내장으로 읽기 퍼포먼스 극대화
MongoDB 핵심 - 적절한 내장(denormalize) 미리보기 02:31
수정된 faker 적용하기 05:07
Comment POST API 수정하기 14:33
debugging & testing Comment POST API 05:03
Blog에 Comment 내장하기 04:42
Nesting 성능 테스트 11:53
"$" 내장된 특정 문서 수정하기 10:36
updateMany 11:16
arrayFilter 08:55
$pull, $elemMatch 05:41
User 삭제하기 06:06
스키마 설계 12:09
섹션 8. Index - 많은 데이터 관리하기(빠른 읽기)
데이터가 많아지면서 느려지는 탐색시간 미리보기 03:38
Index 원리 이해하기 06:03
탐색 성능 테스트를 위한 데이터 생성 02:53
index 성능 테스트하기 12:49
Pagination 원리 14:19
GET /blog API에 Pagination 적용 06:57
Compound Key(복합키) 07:14
Selectivity - 분포도를 고려해서 효율적으로 인덱스 생성 16:08
mongoose로 index 생성하기 07:28
text index 생성하기 05:50
세션 마무리 05:00
섹션 9. 부분 Nesting & Pagination을 이용한 고급스러운 API 만들기
섹션 소개 미리보기 07:42
Comments Pagination 07:35
Computed Fields 07:46
부분 내장(Partial Nesting) 08:25
섹션 10. Transaction - 데이터 일관성 보장
섹션 11. AWS에 Node.js 백엔드 배포하기
배포 과정 설명 미리보기 02:36
git 설정 04:04
.env로 환경변수 설정 06:24
github으로 코드 push 04:07
AWS lightsail 서버 준비 03:30
Lightsail에 Node.js 설치 및 환경변수 설정 09:53
80포트 설정 및 pm2로 서버 실행 11:19
앗 환경변수가 노출? 05:34
변동 IP의 문제 미리보기 03:30 도메인 연결 미리보기 08:30 https(SSL인증서) 적용 미리보기 03:20
Postman 환경변수 설정 02:58
서버 내리기(과금 막기!) 02:07
섹션 12. 무중단 서비스 & 확장성 그리고 관계형 데이터베이스(RDS)와 비교하기
Replica set - Zero Down Time(무중단 서비스) 05:08
Sharded cluster - Horizontal(수평) 확장 10:14
관계형데이터베이스와 비교하기 17:00
MongoDB 관련 좋은 자료들 공유합니다
강의 게시일 : 2021년 02월 04일 (마지막 업데이트일 : 2023년 11월 13일)
수강평 총 82개
수강생분들이 직접 작성하신 수강평입니다.
4.7
82개의 수강평
5점
4점
3점
2점
1점
VIEW 추천 순 최신 순 높은 평점 순 낮은 평점 순 평점 순 높은 평점 순 낮은 평점 순
윤병록 thumbnail
5
5년차 자바 개발에서 노드몽고DB로 전향하려고 공부중이였는데 많은 도움이 되었습니다. 많은 자료 인강을 통해 공부해왔는데 이자료가 가장 으뜸이였습니다. 앞으로도 좋은 강의 부탁드리겠습니다.
2021-02-22
신론 thumbnail
4
강의는 정말 좋습니다. 근데 한가지 아쉬운 점은 화면 크기가 너무 작아 코드를 보기가 너무 힘들었어요. 화면 사이즈를 좀 키웠으면 훨씬 좋은 강의가 되었을 것 같습니다. 다음 강의는 화면을 학생들 위주에 맞게 키워서 만들어 주시면 감사하겠습니다.
2021-02-26
지식공유자 김시훈
신론님 안녕하세요 :) 화면 크기 때문에 불편하셨죠. 첫 강의라 미숙한점이 많네요. 다음 강의 그리고 몽고 강의 개선할 때 화면 크기 꼭 조절해서 녹음하도록 할게요!
2021-02-26
dongqsarang thumbnail
4
nodejs+mongodb로 app개발하시는 개발자들에게 강추합니다. 알기 쉬운 설명으로 복잡한 부분도 잘 가르쳐주고 있어요. 두가지 단점이 보이는데 한가지는 중간중간에 실수하시고 그거 찾는데 시간이 많이 가는 부분들이 있는데 그런부분들 편집되면 더 좋을거 같아요. 두번째는 실습화면이 너무 작아서 따라가기가 불편합니다. 좀더 zoom in을 통해서 실습화면을 확대해서 찍어주셨으면 하는 아쉬움이 있네요. 컨텐츠 자체로는 VERY GOOD입니다. 감사합니다.
2021-03-28
ㅌㅇ thumbnail
5
이해 하기 쉽게 잘 가르치십니다ㅎㅎ 다만, 디비 개념이 아에 없으면 중간에 멍해질 때 있음ㅎㅎ 추천 !
2021-04-26
kookdong.kim thumbnail
5
기본기 익히기 매우 좋음
2023-05-02