채팅 서버 만들어보기 1

바그다드·2023년 4월 10일
0

채팅 서버 만들기

목록 보기
1/4

mongoDB 설치

먼저 mongoDB부터 설치해주자
1. mongoDB download 검색 후 community server download클릭
2. 운영체제와 버전 확인 후 msi 다운로드

3. 설치 진행(따로 설정은 필요하지 않음)
4. 환경변수 설정
- 내 PC 우클릭 후 설정
- 고급 시스템 설정 클릭

- 환경변수 클릭

- 시스템 변수에서 path 선택 후 편집 클릭

- 새로 만들기 클릭 후 mongoDB 설치 폴더의 bin폴더 경로 입력

- cmd창 띄우고 mongod 입력

- 이런 창 뜨면 설치 완료!!
- 나는 여기서 시간을 많이 잡아 먹었는데 환경 변수 설정을 해도 cmd에서 자꾸 명령어를 인식하지 못했다. 근데 디렉토리를 확인해보니 mongo라는 파일은 없고 mongod라는 파일은 있어서 이걸 입력했더니 됐다ㅜㅜ 잃어버린 내 시간 돌려줘

프로젝트 생성

  • start.spring.io 접속해서 다음과 같이 프로젝트 생성
  • 강의에서는 maven을 사용하였지만 나는 gradle로 진행해보려 한다.

application.properties 입력

  • 마찬가지로 강의에서는 yml로 진행하였지만 나는 properties형식으로 진행해보려 한다.
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=chatdb

RDBMS MongoDB(NoSQL)

  • 오라클이나 MySQL등은 대표적인 RDBS이고, mongoDB는 대표적인 NoSQL이다.
  • 데이터베이스는 자바의 객체처럼 하나의 객체 안에 또 다른 객체를 담을 수 없다.

RDBMS

  • 중복 값이 없음
  • 데이터를 공유할 수 있음
  • user와 board 테이블은 user의 id와 board의 userId를 이용해 관계를 맺고 있다. 때문에 이 하나의 컬럼을 이용하여 두 테이블은 서로 데이터를 참조할 수 있게 된다.

MongoDB(NoSQL)

  • 컬렉션이라고도 하며 List의 형태를 하고 있다
  • 예를 들어 user라는 컬렉션이 있다고 하면 아래와 같은 형태를 가진다
user : [{id:1,username:pem},{id:2,username:qkrmekem}]
  • 그런데 board라고 하는 게시판 컬렉션이 있다고 하자 그럼 아래와 같은 형태를 가지게 된다.
BOARD:[{id:1,title:제목1,content:내용1,username:pem}]
  • 하나의 컬렉션에 게시판 정보와 작성자 정보를 한번에 담고 있다.

장점

  • RDBMS에 board의 값을 select할 때 참조키인 userId를 가진 user테이블까지 확인하는 과정이 필요로 하기 때문에 data를 읽어올 때에 그만큼 시간이 소요된다.
  • 반면 MongoDB에서는 데이터를 입력할 때 더 많은 데이터가 들어가더라도, data를 읽어올 때 하나의 컬렉션만 읽으면 되기 때문에 RDBMS에 비해 속도가 더 빠르다. 다만 데이터의 중복이 발생할 수 있다는 단점이 있다.

비동기 Netty서버

  • 위에서 진행한 설정을 완료하고 프로젝트를 실행해보자

  • 기존에 tomcat이 실행되던 것과 달리 Netty라는 서버가 구동되었다.

  • 톰캣은 멀티스레딩을 지원한다.
    사용자가 서버에 요청을 하면 스레드 하나를 할당받아 요청이 완료 될 때까지 해당 사용자가 스레드를 점유하고, 요청이 끝나면 스레드를 반환한다.

  • 반대로 Netty는 단일 스레드 서버로 하나의 스레드가 무한 루프를 돌며 요청을 받고, 이 요청을 스레드 풀의 스레드에 넘기고 다시 응답을 받기 위해 대기한다. 작업을 처리하던 스레드의 작업이 완료되면 이를 이벤트 루프를 돌고 있는 스레드에 전달하고 이벤트 루프 스레드는 이를 클라이언트에 전달한다.

profile
꾸준히 하자!

0개의 댓글