기술 스택을 정리하다 데이터 베이스 종류와 구조에대해 정리를 하고 가면 좋겠다고 생각했다. 현재 우리는 gameStartSet 정보를 인메모리 디비인 Redis를 사용하고 있는데, 멘토님은 RDB인 MySQL사용을 추천해 주셨다. 그 차이가 뭔지 정리해 보자.


1. RDB(Relational Database)

  • RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 관계형 데이터베이스
  • 대표적으로 Mysql, Oracle, PostgreSql 등이 가장 많이 알려진 RDB. 아래의 그림과 같은 구조를 나타낸다.

 

 

 

- 특징

 

  • 테이블(Table) 마다 스키마(Schema)를 정의해야 된다
    •  스키마
      데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것
      스키마 : 데이터베이스 : 테이블 = 평면도 : 집 : 방
  • 데이터 타입과 제약(Constraint)를 통해서 데이터의 정확성을 보장함
  • SQL 질의문을 통해 요청을 처리
  • 성능을 높이려며 하드웨어(H/W)를 고성능으로 교체해야 된다. (Scale Up)
  •  고성능 하드웨어는 가격이 비싸기 때문에, RDB의 성능을 높이거나 확장하기 어렵기 때문에 확장성에 좋지 않다.
  • 구성된 테이블이 다른 테이블들과 관계를 맺고 모여있는 집합체
  • 이러한 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용
  • 이러한 테이블간의 관계에서 외래 키를 이용한 테이블 간 Join이 가능하다는 게 가장 큰 특징입니다.

 

DBMS database management system

사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어

 

RDBMS Relational Database Management System

사용자의 요구에 따라 정보를 생성해 관계형 데이터베이스를 생성하고 수정하고 관리할 수 있는 소프트웨어

 

 

2. NoSQL(Not only SQL)

  • 대표적으로 mongoDB, hBase, redies(key-value) 등이 있으며, mongoDB의 경우 문서(document)형 데이터베이스이다.
  • hBase 같은 경우는 빅데이터 처리를 한다고 하면 누구나 한번쯤은 들어봤을 법한 DB. 아래의 그림과 같은 구조를 나타낸다.

 

 

- 특징

 

  • RDB의 확장성 이슈를 해결하기 위해 나온 데이터베이스 모델
  • 분산 컴퓨팅 활용이 목적이고, 이것을 통해 비교적 저렴한 가격으로 DB 성능을 높일 수 있다. (Scale Out)
  • 여러 개의 테이블이 아닌, 큰 테이블 하나만을 사용
  • 가장 많이 쓰이는 NoSQL의 방식은 key-value방식으로 데이터를 관리한다
  • SQL 질의문을 사용하지 않는다.
  • Schema-less (구조 변경이 용이하고, 데이터 형식이 다양하며, 바꾸기 쉬우며, 정확성 보다는 데이터 양이 중요한 빅데이터(Big Data)에 사용
  • NoSQL에서는 RDBMS와는 달리 테이블 간 관계를 정의하지 않음
  • 데이터 테이블은 그냥 하나의 테이블이며 테이블 간의 관계를 정의하지 않아 일반적으로 테이블 간 Join도 불가능

 

3. In-Memory DB

  • In-Memory DB의 경우에는 NoSQL 방식에 속하는 데이터베이스 이며, key-value방식을 사용하고 있다. 아래와 같은 구조를 갖는다.

 

 

- 특징

 

  • Memory의 가격이 용량 대비, 충분히 낮아지면서 빠른 데이터베이스 성능을 위해서 등장했다.
  • 디스트(Disk) 대신 메모리(Memory)를 사용함으로써, I/O(input/output)의 성능을 높여준다.
  • 대표적으로 Redis 및 LMDB 등이 있다

RDB(관계형 데이터베이스) RDBMS(데이터베이스를 관리)로 생성하고 수정하고 관리한다.
SQL은 RDBMS를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이고,

NOSQL(비관계형 데이터베이스)는 RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장방식.


[ 참고 자료 ]

 

https://im-designloper.tistory.com/67

 

[ DataBase ] RDB, RDBMS, SQL, NOSQL 간단 개념정리

데이터베이스 종류인 RDB, RDBMS, SQL, NOSQL에 대한 간단한 개념 정리!! 일단 자세한 설명전에 간단하게 용어들의 관계를 정의하자면 아래와 같습니다. 🅐RDB(관계형 데이터베이스)를 🅑RDBMS(데이터

im-designloper.tistory.com

https://toma0912.tistory.com/83

 

RDB, NoSQL, In-Memory DB 비교

안녕하세요. 오늘은 최근 많이 쓰이고 있는 데이터베이스 종류에 대해서 비교하는 포스팅을 하려고합니다. 대표적으로 분류하면 RDBMS, ORDBMS, NOSQL, NoSQL에 포함되어 있지만 In-Memory DB등이 있으며,

toma0912.tistory.com

 

'Coding > 기타' 카테고리의 다른 글

WebServer vs Was  (0) 2023.01.13
ChatGPT !! 엄청나다 !!  (0) 2023.01.10
HTTP 이해  (0) 2022.12.06
기술매니저님 추천 사이트 ( Spring 관련 )  (0) 2022.12.02
RESTful API 설계 가이드  (0) 2022.12.01

https://goldsony.tistory.com/37

Web Server

  • 웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고 HTML 문서와 같은 웹페이지를 반환하는 컴퓨터 프로그램
  • 클라이언트가 웹 브라우저에 어떠한 페이지 요청을 하면 웹 서버에서 그 요청을 받아 정적 컨텐츠를 제공하는 서버
  • 정적 컨텐츠란 HTML, CSS, JavaScript, 이미지, 파일 등 즉시 응답 가능한 컨텐츠를 의미한다.
  • 웹 서버가 동적 컨텐츠 요청을 받는 경우, WAS에게 해당 요청을 넘겨주고 WAS에서 처리한 결과를 다시 클라이언트에게 전달해주는 역할을 한다.
  • 대표적인 웹 서버엔 Apache 가 있다.

 

WAS

  • 인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행하주는 미들웨어이다
  • 주로 동적 서버 컨텐츠를 수행하는 것으로 웹 서버와 구별이 되며, 주로 데이터 베이서 서버와 같이 수행한다.
  • WAS는 웹 서버와 웹 컨테이너가 합쳐진 형태로, 웹 서버 단독으로는 처리할 수 없는 데이터베이스의 조회나 다양한 로직 처리가 필요한 동적 컨텐츠(JSP, ASP, PHP)를 제공한다.
  •  덕분에 사용자의 다양한 요구에 맞춰 웹 서비스를 제공할 수 있다.
  • WAS는 JSP, Sevlet 구동환경을 제공해주기 때문에 웹 컨테이너 혹은 서블릿 컨테이너라고도 불린다.
  • 대표적인 WAS 종류엔 Tomcat이 있다.

 

Wev Service Architecture

웹 어플리케이션은 요청 처리 방식에 따라 다양한 구조를 가질 수 있다.

  1. 클라이언트(사용자) -> WebServer -> DB
  2. 클라이언트 -> WAS -> DB
  3. 클라이언트 -> WebServer -> WAS -> DB

https://codechasseur.tistory.com/25

 

WebServer 와 WAS를 나누는 이유

이론대로라면 WAS의 경우 웹서버 + 웹컨테이너의 개념이기 때문에 웹서버가 없더라도 웹서버의 역할을 동시에 수행할 수 있다.

그런데 왜 나눠서 사용할까?

 

1 데이터 처리 방식

  • 위의 설명대로 웹서버는 정적 컨텐츠를, WAS는 동적 컨텐츠를 처리한다.
  • 만약 부하가 적은 웹서비스라면 두가지 요청을 WAS 하나로 다 처리해도 되지만, 부하가 많다면 빠른 시간에 처리할 수 있는 정적컨텐츠를 WAS에서 처리하는 것은 비효율적이다.
  • 웹서버를 WAS 앞에 두고 필요한 WAS들을 WebServer에 플러그인 형태로 설정하면 더 효율적인 분산처리가 가능하다.

2. 보안상의 이유

  • 사용자들에게 WAS는 공개될 필요가 없다.
  • WAS의 경우 DB서버에 대한 접속 정보가 있기때문에 외부로 노출될 경우 보안상 문제가 될 수 있다.
  • 이러한 이유로 웹 서버의 경우 DMZ구간에 위치하고 WAS는 내부망에 위치시켜 보안을 유지할 수 있다.

 

Tomcat vs Apache Tomcat

  • 위에서 언급한 대로 웹 서버의 대표는 Apache, WAS의 대표는 Tomcat이 있다.
  • Tomcat은 Apache Tomcat 이라는 이름으로 많이 사용되는데, 이유는 Tomcat5.5 버전부터 정적 컨텐츠를 처리하는 기능이 추가되어 이 기능이 순수 Apache를 사용하는 것에 비해 성능적 차이가 거의 없으며 Tomcat이 Apache의 기능을 포함하고 있기 때문이다.

 


[ 참고 자료 ]

 

'Coding > 기타' 카테고리의 다른 글

[ DataBase ] RDB, NOSQL, In-Memory  (0) 2023.01.22
ChatGPT !! 엄청나다 !!  (0) 2023.01.10
HTTP 이해  (0) 2022.12.06
기술매니저님 추천 사이트 ( Spring 관련 )  (0) 2022.12.02
RESTful API 설계 가이드  (0) 2022.12.01

코딩도 대신해주는 너란 녀석, 엄청나다.

 

 

요즘 노마트코더를 비롯한 개발자들의 유튜브 채널에 자주 등장하는 화제인 ChatGPT!

코드도 작성해주고, 만든 코드를 개선시켜 주기도하고, 다른 언어로 바꿔주는 등 인공지능으로 다양한 서비스를 제공한다고 한다. 

이번 프로젝트를 하면서, WebRTC와 관련된 예제코드들이 거의다 Node.js로 작성되어 있었는데, 도무지 이해할 수 없어서 이참에 한번 ChatGPT를 사용하여 Java로 언어변환을 시도해봤다! 비록 코드가 완전히 정확하진 않았지만, 그래도 뭔가 길을 안내해주는 (?) 역할은 한 것 같다.  완전 신기!

 

언어를 전공했는데 구글 번역기 등장으로 통번역가 일자리가 많이 줄더니, 코딩을 시작하자마자 바로 다음달에 ChatGPT가 등장한 My Life ..... ^__^  뭐 그래도 괜찮다. 오히려 좋아 ~ 잘 활용하면 인공지능을 통해 더 빨리 배울 수 있을 것 같다. 이거 만든 개발자들은 도대체 어떤 사람들일까 궁금하다. 파이썬을 공부해야 하나 ? ^___^ 허허

 

모든 개발자들 화잇팅 ! 


개념

  • ChatGPT는 사용자와 주고받는 대화에서 질문에 답하도록 설계된 언어모델이다. 오픈AI는 블로그 게시글을 통해 “챗GPT가 대화 형식으로 추가적인 질문에 답하고 실수를 인정하며 정확하지 않은 전제에 대해서는 이의를 제기하고 부적절한 요청을 거부할 수 있다”고 설명했다.

특징

  • 답변이 마음에 들지 않으면 Try Again 버튼으로 다른 답변을 요청할 수 있으며, 현재 답에 대해 긍정 또는 부정으로 평가할 수 있다.
  • 가능한 한 답변을 제공하려고 노력하나, 정치 색, 헤이트 스피치, 선정성등 사회통념상 논란이나 거부감이 들어간 답변은 거부하는 경우가 상당히 많다.
  • 기본적으로 간단한 개념에 대한 설명을 요청할 수 있으며, 특정 개념들에 대한 비교, 공통점, 차이점 등을 요청할 수도 있다.

잠재성 및 한계

  • ChatGPT가 가진 잠재력은 무시하지 못할 수준인데, 구글의 모회사인 알파벳 CEO가 직접 언급할 정도로 경계하고 있을 정도다. 데이터가 더 쌓여 한계를 극복한다면 사용자가 직접 검색할 대상의 정보를 입력해야 하는 현 검색 문법을 아예 뒤바꿀 기술이 될 것이기 때문에, 장기적으로는 구글을 비롯한 모든 검색 엔진을 대체 할 수 있는 기술이기 때문이다. 하지만 이러한 잠재적인 문제(영어)도 존재하기 때문에 섣부른 예측은 금물이다. 빅데이터 봇이라 그런지 영어로 질문하면 한국어로 질문할 때보다 정확도가 올라가긴 하지만, 100% 정확한 건 아니다.
  • 특히 기계학습 인공지능 모델들의 고질적 문제인 편향성 문제에서 자유롭지 못하다. 인공지능이 가치중립적일 것 처럼 보여도 결국 인공지능이 학습하는 것은 인간이 만든 데이터들이기 때문에 편향성에서 자유로울 수가 없다. 비교적 그런 문제에서 자유로운 편인 그림, 음악, 게임 알고리즘 부류와 달리 온갖 지식을 다루는 ChatGPT 특성상 편향성 문제가 강하게 드러날 잠재적 위험성이 크다. 게다가 제작진이 직접 개입하여 금지 사항을 정하고 가이드라인을 주입하기 때문에 더더욱 인위적인 편향성 문제가 생겨난다. 즉, 논란의 여지가 많은 질문일수록 대답을 신뢰하지 않는 것이 좋다.

 

출처 : https://namu.wiki/w/ChatGPT


 

ChatGPT 사이트 : https://openai.com/blog/chatgpt/

 

ChatGPT: Optimizing Language Models for Dialogue

We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests. ChatGPT is

openai.com

위키피디아 설명 : https://en.wikipedia.org/wiki/ChatGPT

 

ChatGPT - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Artificial intelligence chatbot ChatGPT (Generative Pre-trained Transformer)[1] is a chatbot launched by OpenAI in November 2022. It is built on top of OpenAI's GPT-3 family of large l

en.wikipedia.org

 

'Coding > 기타' 카테고리의 다른 글

[ DataBase ] RDB, NOSQL, In-Memory  (0) 2023.01.22
WebServer vs Was  (0) 2023.01.13
HTTP 이해  (0) 2022.12.06
기술매니저님 추천 사이트 ( Spring 관련 )  (0) 2022.12.02
RESTful API 설계 가이드  (0) 2022.12.01

HTTP(HyperText Transfer Protocol)란?

  • 데이터를 주고 받는 양식을 정의한 "통신 규약"중 하나가 HTTP
  • 매우 범용적인 양식을 가지고 있어 전 세계에서 제일 널리 쓰이는 통신 규약이다.
  • 여기서 말하는 통신 규약이란, 컴퓨터끼리 데이터를 주고 받을때 정해둔 약속을 의미
  • 현재 이용되는 대부분의 웹 서버가 HTTP를 기반으로 데이터를 주고 받습니다. 또한, 모든 브라우저는 HTTP 프로토콜을 기본으로 지원한다.

 

어떻게 HTTP로 데이터를 주고 받을까?

 

 

  • HTTP에서는 언제나 Request, Response라는 개념이 존재한다.
  • 서버와 브라우저의 관계
    • 브라우저는 서버에게 자신이 원하는 페이지(URL등의 정보)를 요구(Request)한다.
    • 서버는 브라우저가 원하는 페이지가 있는지 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 응답(Response)해준다. 
    • 없다면 없는 페이지에 대한 데이터를 반환해준다.
    • 브라우저는 서버에게 전달 받은 데이터를 기반으로 브라우저에 그려준다.

 

HTTP의 구성 요소

  • Method (호출/요청 방식)
    • GET: 이름 그대로 어떤 리소스를 얻을 때 사용. 브라우저의 주소창에 URL을 입력하면 GET 메서드를 사용해서 서버에 요청을 보낸다.
    • POST: 웹 서버에 데이터를 게시할 때 사용하는게 일반적 (ex. 회원가입, 게시글 작성, 댓글 작성)
  • Header (추가 데이터. 메타 데이터)
    • 브라우저가 어떤 페이지를 원하는지
    • 요청 받은 페이지를 찾았는지
    • 요청 받은 데이터를 성공적으로 찾았는지
    • 어떤 형식으로 데이터를 보낼지
    이러한 사례 외에도 아주 다양한 의사 표현을 위한 데이터를 모두 Header 필드에 넣고 주고 받는다. 위에서 설명 된 메서드도 사실은 헤더에 포함되어 서버로 보내진다.
  • Payload (데이터. 실제 데이터)
    • 서버가 응답을 보낼 때에는 항상 Payload를 보낼 수 있다.
    • 클라이언트(브라우저)가 요청을 할 때에도 Payload를 보낼 수 있다. 그리고 "GET method를 제외하곤 모두 Payload를 보낼 수 있다" 는게 HTTP에서의 약속!

 

웹 서버의 이해

① 웹 서버란?

  • 웹 서버는 인터넷을 통해 HTTP를 이용하여 웹상의 클라이언트의 요청을 응답해주는 통신을 하는 일종의 컴퓨터

② 웹 서버의 기본 동작 원리

  • 브라우저를 통해 HTTP request로 웹사이트를 웹서버에 요청한다. 이후 웹서버는 요청을 승인하고 HTTP response를 통해 웹사이트 데이터를 브라우저에 전송한다. 마지막으로 브라우저는 서버에서 받아온 데이터를 이용해 웹사이트를 브라우저에 그려내는 일을한다.
  • 기본적으로 브라우저가 웹서버에 요청을 할때는 항상 GET method로 요청하게 된다.

면접 예상 질문 : google.com 에 접속하면 보여지는 화면에 대한 데이터는 어떻게 받아오는걸까요?

더보기

답 : 사용자가 브라우저에 주소(URL)를 입력하면 해당 동작에 맞게 HTTP 데이터를 만들어 서버로 보내고 서버는 알맞는 응답 데이터를 브라우저(클라이언트)로 보내 이 데이터가 브라우저에 표현됩니다.

 

 

💡 더 찾아보면 좋을 키워드들

  1. 웹 서버 (Web Server)는 무엇일까요?
  2. 웹 서버 (Web Server)와 웹 어플리케이션 서버(WAS)는 어떤 차이점이 있을까요?
  3. HTTP Method에서 GetPost의 차이점은 무엇이 있을까요?
  4. HTTP와 HTTPS의 차이점은 무엇일까요? 

 

참고 자료 : https://teamsparta.notion.site/HTTP-6d40363a0b0e45acbc4d09a5d8c34b06

'Coding > 기타' 카테고리의 다른 글

WebServer vs Was  (0) 2023.01.13
ChatGPT !! 엄청나다 !!  (0) 2023.01.10
기술매니저님 추천 사이트 ( Spring 관련 )  (0) 2022.12.02
RESTful API 설계 가이드  (0) 2022.12.01
Error : Address already in use 오류 해결하기  (0) 2022.11.04

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.named-queries

 

Spring Data JPA - Reference Documentation

Example 119. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

https://tecoble.techcourse.co.kr/post/2020-04-26-Method-Naming/

 

좋은 코드를 위한 자바 메서드 네이밍

tecoble.techcourse.co.kr

 

'Coding > 기타' 카테고리의 다른 글

ChatGPT !! 엄청나다 !!  (0) 2023.01.10
HTTP 이해  (0) 2022.12.06
RESTful API 설계 가이드  (0) 2022.12.01
Error : Address already in use 오류 해결하기  (0) 2022.11.04
피그마 figma  (0) 2022.10.27

+ Recent posts