인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Spring Boot를 활용하여 채팅 플랫폼 만들어보기

Spring Boot를 활용하여 JWT, ws 통신에 대해서 학습하며, 대용량 TPS를 처리하는 방법에 대해서 학습하실 수 있습니다.

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

이런 걸 배울 수 있어요

  • Spring Boot의 기본 구조

  • ws 통신을 활용한 Stateful 서버

  • JWT를 활용한 Cookie 관리 및 인증

Spring Boot를 대용량 채팅 TPS 처리하기 😘

이 강의에서는 채팅 서비스가 들어가는 플랫폼에 대표적으로 사용하는 ws protocol을 활용하여 서비스를 어떻게 구성하고 관리를 할 수 있는지 학습하실 수 있습니다.

  • 치지직, 아프리카TV, Twitch 등등을 참고하시면 좋습니다.


본 강의는 Spring Boot, Next.js를 사용하여 직접 서비스를 구성하고, JWT를 활용한 인증 방식을 주제로 강의를 구성하였고, 이 강의를 수강하시면, 여러분들은 Spring Boot와 ws protocol에 대해서 심화적으로 학습하실 수 있습니다.

HTTP와 ws의 차이는 무엇일까요? 😘

여러분들은 이떄까지 HTTP Protocol만 주로 다루어 개발을 진행하셨다고 생각합니다.

물론 실제 실무에서는 HTTP를 주로 사용을 합니다. 하지만 이외에도 TCP, RPC, ws 등 다양한 통신 방식이 존재하며, 상황에 따라서 유연하게 적용하여 서비스를 구축 하실 수 있어야 합니다.


그럼 대표적인 HTTP와 ws의 차이는 무엇일까요?? 쉽게 말하면, Stateles와 Stateful의 차이로 보시면 됩니다.

  • Client와의 연결이 지속적이냐 아니면 일반적이냐의 차이로 이해하시면 되고, 해당 글이 이해가 안가신다면 제 강의를 수강하시면서 학습하시게 된다면, 충분히 이해하실 수 있을겁니다.


websocket를 그냥 HTTP로 구현을 하면 되는거 아닌가요? 🤔

📌 가능합니다. 불가능한 개발 방식은 아닙니다.

📌 하지만 서버 개발자는 일반적으로 서버에 대한 리소스를 최대한 절감을 하여 가져가야 합니다.

📌 그러기 떄문에, 채팅서버와 같이 지속적인 Connection이 유지되어야 하는 통신 같은 경우에는 WebSocket을 사용하는것이 매우 적합합니다.

이런 내용을 배워요 😘

1⃣ 판교 개발자의 Spring Boot를 활용한 서버 구성

HTTP와 ws를 모두 활용하는 서버를 만들어 보면서 실제 서버에 대해서 학습하실 수 있습니다. 또한 JWT를 활용하여, user에 대한 정보를 활용하는 방법에 대해서 학습하실 수 있습니다.

2⃣ JPA, Bean을 활용한 주입 모델링

Spring Boot를 활용했을 떄 가장 중요하게 학습하시는 부분은 무엇일까요?? 대부분의 Spring Boot 개발자들은 해당 내용을 주로 다루고 가장 많이 사용합니다. 판교 개발자는 어떻게 Spring Boot를 활용하는지 학습하실 수 있습니다.

3⃣ Next.js, Typescript를 활용한 실습 템플릿 제공

본 강의는 단순히 ws를 활용하는 서버만을 구성하여 테스트를 진행하는 강의가 아닙니다. 실제 FE 코드를 제공하여 완성도있는 플랫폼을 구성하기 위한 기본적인 Skelton을 제공해 드립니다.

4⃣ MySQL를 활용한 데이터 관리

실무에서 가장 대표적으로 사용하는 DB는 무엇일까요?? 서비스를 구축하는데에 있어서 RDB는 굉장히 많이 사용되는 데이터베이스 입니다.

이런 특징을 가지고 있어요.😘

1⃣ 실제 개발자와 함께 코드를 작성하며 구성하는 프로젝트

2⃣ JWT의 형태와 그에따른 구성요소

3⃣ 웹소켓과 HTTP와 차이와 리소스 절감의 이유

4⃣ 구현한 프로젝트에 대해 함께하는 디버깅

수강 전 참고 사항

실습 환경

  • 강의는 MacOS(M1) 기준으로 설명합니다.



  • 강의에서는 Spring Boot와 Next.js 를 사용합니다.

    • 강의 촬영자는 서버 개발자 학습을 위해 촬영이 되었습니다. Next.js에 대해서는 템플릿만을 제공하는것을 알아주세요.


  • 이 강의는 수강생들에 대한 학습 방향성을 제공하는것을 목표로 하고 있습니다. 기본적인 기능을 구현하지만, 추후 TODO를 남겨놓는 강의로써 구성이 되어 있으니, 해당 TODO를 참고하여 추가적인 학습을 하시면 좋습니다.

    • TODO에 대한 부분은 README.md 에 남겨두었습니다.


  • IDE는 Goland 및 vscode를 사용합니다.

이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • Spring Boot가 처음이신 분

  • HTTP가 아닌 다른 프로토콜이 궁금하신 분

선수 지식,
필요할까요?

  • Spring Boot

  • 네트워크 기본지식

안녕하세요
Hong입니다.

1,167

수강생

69

수강평

50

답변

4.3

강의 평점

8

강의

자기 소개

집에서 빈둥대다 개발에 흥미를 느껴 개발 공부를 시작하였고 현재는 판교에서 플랫폼 서버 개발을 담당하여 진행하고 있습니다.

 

제가 공부를 했던 방법과 실무에서 접하실 수 있는 여러가지 문제점들과 해결책을 여러분들에게 제공하고 싶어 지식공유자 활동을 이어나가고 있습니다.

 

강의는 오로지 저만의 지식을 통해 만들어지지 않습니다. 모든 강의는 함께하시는 분들이 계십니다.

  • 카카오에서 서버 개발하고 계시는 초이

  • 토스에서 개발하고 계시는 서버 개발자

  • 유니콘 스타트업에서 개발도 하고, DB도 관리하시는 능력자

 

지식공유자 경력

[前] 샌드박스 블록체인 개발자

[前] 넥슨 자회사 백엔드 개발자

[] 판교에서 고여가는 서버 개발자

 

인터뷰 이력

더보기

커리큘럼

전체

29개 ∙ (3시간 46분)

해당 강의에서 제공:

수업자료
강의 게시일: 
마지막 업데이트일: 

수강평

전체

21개

4.0

21개의 수강평

  • Anfield님의 프로필 이미지
    Anfield

    수강평 37

    평균 평점 4.8

    5

    100% 수강 후 작성

    강의 자체는 널널하게 시간을 투자해도 3~4일이면 다 볼 수 있는 정도여서 좋았습니다. 빠르게 보면 하루 정도 만에 다 볼 수 있을거 같습니다. 강의 내용은 인증에 대한 간단한 Provider를 만들어서 처리하시는데, 주 내용은 아니긴 해도 간략하게 jwt 인증 방식에 대해 알 수 있었습니다. 채팅 관련해서 pub sub model을 설명해주셨고, A라는 방법을 알려주시며 B에 대해 조금 알려주며. 스스로 찾아서 하는 방법에 대해 열린 결말? 처럼 알려주십니다. 저도 일을 계속 해보면서 느낀 점은 실무에서는 정말 어처구니 없는 일로 시간을 많이 보낼 때가 많습니다. 특히 에러 핸들링 관련해서. 강의는 빠르게 흘러가면서, 강사님이 틀리게 치는 경우가 종종 있습니다. 예를들어 usercredential 엔티티를 만들때, Table이름을 "user"로 선언한다던지, mapping method의 이름을 다른 것으로 해놓아서 front에서 404 error가 나는 부분. create_at -> created_at으로 선언해야하는 부분 문제가 발생했을 때, 에러 해결하는 강의를 보기 전에 스스로 찾아서 해결하는 부분이 저는 좋았는데 약간 실무 느낌도 나면서 ㅎㅎ 초보자 분들은 왜 안 될까. 고민하시는 분도 있을 것 같아요. 그리고 이 강의 하나 보고 채팅 어플리케이션을 서비스하겠다. 라는 강의는 아니긴 합니다. 완성도 있는 채팅 서비스를 완성해보고 싶다는 생각이 드네요. !

    • Hong
      지식공유자

      안녕하세요 좋은 평 남겨주셔서 감사합니다. 여러분들과 저의 시간은 모두 소중합니다. 최대한 기능을 구현하는데에 목표를 두었습니다. 이렇게 기능을 구현하시게 되면, 부수적인 부분은 어느정도 따라오게 되어 있어요. 그래서 핵심 코어 기능을 구현하는데 집중하였고 완전히 완성되어있는 강의보다는 함께 디버깅하면서 좀 더 인간적인 면모를 보여드리고 싶습니다. 세상에 완벽한 사람은 없으니 틀리고 버그가 있어도 괜찮기 떄문이죠. 완벽한 어플리케이션을 저도 조금 고민을 해보았는데, 제가 알려드리는 부분만 따라서 만드는것은 좋은 공부 방식이 아니라는 결론이 나와서 여러분들에게 추후 고민가능한 부분과 TODO List를 제공해드리고 싶었습니다. 이 과정에서 나오는 질문은 편하게 주셔도 됩니다. 좋은 강의로 계속 찾아뵙도록 하겠습니다. 감사합니다. :)

  • 100and님의 프로필 이미지
    100and

    수강평 11

    평균 평점 4.9

    4

    100% 수강 후 작성

    우선, 강의 감사합니다. 재밌게 잘 들었습니다! 다만, 몇 가지 아쉬웠던 부분을 조심스레 공유하고 싶습니다. 가장 아쉬웠던 점은 구성이 다소 산만했다는 점입니다. 중간마다 점검하는 게 아니라 기능을 전부 구현한 뒤 마지막에 테스트를 하니 기능별로 끝맺음이 없다고 해야 하나.. 매 포인트마다 마무리가 없으니 다른 기능 구현하다 돌아와야할 때 정신 없다는 느낌을 강하게 받았어요. 툴도 아쉽습니다. 특정 이유로 vscode 를 쓰실 수도 있겠지만, 잦은 import 오류 등등으로 흐름이 끊어질 때가 많았어요. 굳이 vscode 로 진행해야 할 이유가 있었을까 하는 개인적인 생각이 들었습니다. 마지막으로 선택과 집중을 했으면 더 좋지 않았을까 싶습니다. 강의 제목은 "스프링 부트를 활용하여 채팅 플랫폼 만들어보기" 입니다. 기본적으로 '채팅 플랫폼'이라는 점에서 당연히 강의의 방점이 웹 소켓에 있을 줄 알았는데, 생략된 부분이 많아 아쉬웠습니다. 하지만, 채팅 플랫폼을 만드는데 있어서 생각하지 못했던 부분, 가령 약간은 복잡한 sql 구문이 필요하다는 점과 db 설계에 놓칠 수 있는 부분을 하나 하나 따라갈 수 있어서 너무 좋았습니다. 너무 실력 좋은 개발자이신 건 강의 전반에 걸쳐 단번에 알 수 있었지만, 더 좋은 강사가 되셨으면 하는 바람에 주제 넘게 글을 적었습니다. 강의 구성이 조금만 더 다듬어진다면 정말 좋을 거 같아요!

    • Hong
      지식공유자

      안녕하세요. 좋은 평 남겨주셔서 감사합니다. 하나하나 테스트를 진행하는 방법도 고려를 하였지만, 아무래도 테스트를 실제 Front와 연동해서 보여드리고 싶은 욕심에 이렇게 강의가 준비가 되었습니다 ㅠㅠ 다음부터 해당 부분을 좀 더 참고해 보도록 하겠습니다. VsCode를 IDE로 활용했던 이유는 덜 익숙하신 분들도 있다고 생각해서 최대한 많이 사용하는 IDE를 사용했었습니다. 젯브레인 계열이 좋기도 한데 아무래도 더 많은 부분은 VsCode를 사용한다고 생각을 했었습니다. 채팅에 대한 웹소켓 기능에 대해서 강의를 준비하는데에 있어서 해당 주제만 다루기에는 여러분들이 얻어가실 수 있는 부분이 너무 적다고 생각을 했습니다. 그러다보니 강의 주제가 조금 산만해진 경향이 있네요 ㅠㅠ 이 부분은 죄송스럽습니다. 다시한번 더 좋은 평 남겨주셔서 감사하며 앞으로 더 재미있고 의미있는 강의로 찾아뵙도록 하겠습니다. 감사합니다!!

  • Kkyle님의 프로필 이미지
    Kkyle

    수강평 6

    평균 평점 5.0

    5

    90% 수강 후 작성

    실무에서도 Spring을 사용하고 있는 주니어 입니다. 강의가 궁금하여 수강을 해보았는데, HTTP와 Socket통신을 모두 학습할 수 있어서 좋았습니다. HTTP같은경우에는 모두들 사용하시고 JPA도 어느정도는?? 알고있기 떄문에 복습한다는 생각으로 수강 하였고 Socket은 다루어보지 않았지만, 이걸 왜 사용해야하고 어떤 상황에서 효율적이고 왜 효율적인지에 대해 간략하게 알 수 있었습니다. 그에따른 간단한 구현체도 구현 가능했고요 강의가 다 알려주신다는 느낌보다는 딱 길을 잡아준다는 느낌이 있었습니다. 개발을 하는데에 있어서 어떤 개발방법이나 무엇을 공부해야 하는지??를 알려주시는 느낌이 강했습니다. 좋은 강의 감사합니다.

    • Hong
      지식공유자

      안녕하세요 좋게 봐주셔서 감사합니다. 플랫폼을 구성하는데에 있어서 기본적인 부분도 함께 다루면서 강의를 준비해 보았습니다. 대략적인 공부 방향성과 그림을 스스로 그려보신거 같아서 기분이 좋네요. 앞으로 좋은 강의로 찾아뵙도록 하겠습니다. 감사합니다 :)

  • syhwan88님의 프로필 이미지
    syhwan88

    수강평 3

    평균 평점 4.3

    4

    100% 수강 후 작성

    너무나 좋은 강의였습니다. WS와 api에 대해서 좋은 예제와 테스트 해볼수 있는 방법등 좋은 내용이 많습니다. 다만 아쉬운점은 선행되어야할 점들이 디비세팅, vscode사용이면 ide세팅 같은 몇가지 있는데 나와있지 않습니다. 또 하나는 코드의 예제는 있는데 그에 대한 설명이 부족합니다. 수정할때 왜 수정하셨는지에 대한 설명이 많이 부족합니다. 하지만 마지막 문장에 개발자는 해결하는 사람이라는 말과같이 검색해서 해결해 나가는 방법이 가능한사람에게는 충분히 좋은 강의였습니다. 감사합니다.

    • Hong
      지식공유자

      안녕하세요 강의 좋게봐주셔서 감사합니다. 더 많은 만족을 드리고 싶었지만 조금 아쉬운 부분이 있어서 죄송스럽네요 ㅠㅠ 아무래도 저런 관점이 제가 개발공부를 혼자서 하고 실제로 따오기보다는 실제 개발을 하고 혼자서 스스로 검색하고 해결해나가는 과정에서 많은 도움이 되었다고 느끼다보니 이러한 부분이 강의에서도 자연스럽게 녹아들었던거 같습니다. 개발자는 단순히 다른사람이 친 코드를 복사하거나 붙이는 사람은 아니라고 생각합니다. 개념을 알고 해당 개념을 적용하면서 발생가능한 Trade Off를 고려하는 개발자가 좋은 개발자라고 생각을 합니다. 솔직하게 그러다보니 모든 부분을 알려드리고 싶지는 않았어요 ㅎㅎ 스스로 해보는 습관을 알려드리고 싶었습니다. 앞으로 더 좋은 강의로 찾아뵙도록 하겠습니다. 날이 많이 추우니 감기 조심하시고 감사합니다 :)

  • 박철현님의 프로필 이미지
    박철현

    수강평 22

    평균 평점 5.0

    5

    100% 수강 후 작성

    현재 사이드 프로젝트에 적용시켜보려고 쭈욱 해보았습니다. 백엔드만 해본 저로써는 웹소켓과 STOMP를 이용하여 ws를 연결하여 채팅을 주고 받는 부분까지 모두 코드적으로나 ws 통신적으로나 이해가 가지만 실제 프론트와 연동하는 부분에서 파일을 세팅하는 작업없이 바로 3000 포트를 키고 연동하는 모습에 많이 혼란스러웠습니다. WebStorm으로 package.json을 로드해도 되지 않고 그냥 새로운 프로젝트 만들어서 client 패키지의 모든 파일을 복붙한채 해보았지만 여러 의존성 문제부터 react 버전 문제 createContext 문제... 등등... 백엔드만 해온 저로써는 도무지 3000포트 서버를 킬 방법이 없네요.... 백엔드 개발자로서 얻은 부분은 깔끔한 Swagger 애노테이션 사용, WebSocket - STOMP로 채팅 부분얻어갔습니다. 채팅은 못해봤지만....

    • Hong
      지식공유자

      안녕하세요. 평 남겨 주셔서 감사합니다. 아무래도 템플릿 부분은 프론트 작업에 대한 부분이라서 백엔드 개발자인 제가 다루기에는 잘못된 지식이 전달되기 너무 쉽다는생각이 들었습니다. 어느정도만 할줄알다보니 테스트 하기 위한 UI의 용도로 활용을 하였습니다. 하지만 버전 충동이라던지 실행하는데에 많은 어려움이 있으신거 같습니다 ㅠㅠ 다음 강의를 준비할떄에는 좀 더 편하게 사용하실 수 있게, Docker를 사용하여 이미지로 다룸으로써 버전 충돌을 방지 할 수 있게 구성해보도록 하겠습니다. 감사합니다.

Hong님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!

연관 로드맵

강의가 포함된 로드맵으로 학습해 보세요!

₩57,200