데이터베이스(DB) 맛보기

이준석·2025년 11월 27일

Web_Development_Basics

목록 보기
13/14

백엔드 맛보기에서는 백엔드를 postman으로 연결하더라도 서버를 껏다 키면 데이터가 초기화됐다.

따라서 이번에는 영구적으로 저장할 수 있는 공간을 만들 것이다.

Firebase 로!

데이터베이스(DB)

= 데이터를 영구적으로 저장하는 공간

오늘 할 것

1. 서버와 데이터베이스를 연결한다.

2. 잘 연결 됐는지 Postman으로 확인한다.

데이터베이스(DB, DataBase)란?

  • 데이터베이스(Database)는 식당의 초대형 냉장고이자 창고 와 같습니다.
    단순히 데이터를 저장 하는 것을 넘어, 데이터를 관리하기 위한 전문 시스템(프로그램)입니다.
  1. 일반적으로 영속성과 동시성을 갖고

  2. 무결성과 일관성을 가지며

  3. 이를 구조화하여 저장해두고 있고

  4. 질의(쿼리)라는 것을 통해서 데이터를 조작할 수 있께 해준다.

데이터베이스의 특성에 대해 알아보자

영속성(Durability) : 영원히/영구적 저장

  • 가게 문을 닫았다 열어도(서버 재시작) 데이터가 안전하게 보관됩니다.

동시성(Concurrency)

  • 여러 셰프(Service)나 주방 매니저(Controller)가 '동시에' 재료를 꺼내거나 넣어도(읽기/쓰기) 데이터가 꼬이지 않게 관리해 줍니다.

구조화(Structure)

  • 데이터를 체계적으로(예: '육류 코너', '채소 코너') 분류하고 저장합니다.

무결성/일관성(Integrity/Consistency)

  • ‘재고’가 0이면 "구매"를 허용하지 않거나, 동일한 ID를 가진 상품을 저장하지 못하게 할 수 있습니다. 오류(공백/중복) 발생 차단

질의(쿼리, Query)

  • "A-3 구역의 닭고기 5개만 줘"처럼, 데이터베이스마다 고유한 방식에 질의(Query)를 통해 데이터를 조작할 수 있습니다.

이 '냉장 창고'를 관리하는 소프트웨어를 DBMS (Database Management System)라고 부르며, 이 DBMS는 크게 두 가지 방식으로 나뉩니다.

DBMS 종류

RDB : 관계형 데이터베이스

  • MySQL, PostgreSQL, Oracle 등 엑셀 시트(테이블)처럼 데이터를 저장하고, 구조화(분류하고 저장)된 관계 바탕으로 데이터를 관리한다.
  • '상품'과 '사용자'를 연결하여 어떤 사용자가 어떤 상품을 찜했는지 명확하게 관리 가능
  • 데이터의 일관성명확성이 생명인 은행, 쇼핑몰, 예약 시스템 등에서 사실상 표준으로 사용된다.

NoSQL : 비관계형 데이터베이스

(SQL이 아니다. X -> Not only SQL O)
-> 구조화된 질의 언어만이 아니다. = 관계형도 쓸 수 있고, 관계형이 아닌 것도 가능

  • Firebase Firestore, MongoDB, Redis등
  • 엑셀 시트 같은 '틀'이 없다.
  • 데이터를 '폴더 안의 문서(JSON) 처럼 자유롭게 저장한다.
  • 정해진 틀이 없어 나중에 데이터 구조가 바뀌기 쉬운 서비스(SNS, 로그 데이터 등)나 빠른 개발에 매우 유용함
  • 따라서 빠른 속도와 유연한 확장성이 장점이다.(But, 일관성이나 명확성은 좀 떨어짐)
  • NoSQL은 쿼리(고유한 방식으로 조작)는 데이터베이스마다 자체 쿼리 언어가 있고(MQL, CQL, DSL 등) NoSQL 특성상 공용 쿼리 언어가 없다.
    오늘 할건 NoSQL의 Firestore이다. 이건 NoSQL이면서 RDB처럼 사용함
    -> NoSQL로 RDB처럼 활용해볼거임

그러면, SQL 한줄 정리

-> 데이터를 저장, 관리, 조작하기 위해 사용되는 표준 프로그래밍 언어
SQL(구조화된 질의 언어, Structured Query Language)은 RDB에서 사용하는 언어이다.

데이터베이스의 언어

  • 데이터베이스의 Query 언어는 우리가 Spring에서 사용하는 Java나, 프론트엔드에서 사용하는 JavaScript와는 목적과 방식이 완전히 다릅니다.

프로그래밍 언어(Java, Python, JavaScript 등)

목적

  • 애플리케이션(서버, 웹)을 만드는 범용 언어입니다.

방식

  • '명령형(Imperative)' - "어떻게(How)" 할지 모든 절차를 지시합니다.
    1. 냉장고(DB)로 걸어간다.
    2. 문을 연다.
    3. 'A-3' 구역을 찾는다.
    4. 닭고기를 하나 센다..."
    (개발자가 모든 과정을 코드로 작성해야 합니다.)

쿼리 언어 (SQL, NoSQL API 등))

  • 목적
    데이터베이스(DB)에서 데이터를 효율적으로 조회/관리하기 위한 질의 언어입니다.
    데이터베이스에게 물어보는 것입니다.
  • 방식
    '선언형(Declarative)' - "무엇을(What)" 원하는지만 선언합니다

SQL(관계형 데이터베이스)

SELECT name FROM items WHERE id=5
해석: ("5번 아이템의 이름(What)을 줘")

완전 지정형이다. 무엇을 원하는지만 선언함

= SELECT A FROM B WHERE C = B를 A에서 C인 얘들을 가져와

= items 이란 테이블에서 name이란 얘의 id=5인 것을 가져와줘(SELECT)

NoSQL (Firebase 등, 비관계형 데이터베이스)

db.collection('items').document('5').get()
해석: ("items 컬렉션에서 '5'번 문서(What)를 줘")

db에서 'items'를 collection 할건데, 5번 document라고 되어 있는 얘들을 가져와줘(.get())

SQL로 'SELECT'를 쓰든, 'NoSQL 함수인 .get()를 쓰든 [무엇(What)]을 원하지만 냉장고 관리인(데이터베이스)에게 여러 번 질의(쿼리)하면 데이터를 가져오는 가장 빠른 길은 알아서 최적화하여 실행한다.

클라우드(Cloud)와 Firebase란?

DB가 중요하다는 걸 알았으니, 이걸 어디에 설치해야 할까? 설치하거나 / 빌리자

내 컴퓨터(localhost)에 DB서버 '설치하기'

문제 : 내 컴퓨터 계속 켜놔야 함.

클라우드(cloud)에서 DB 서비스 '빌리기'

그러니까, 보통은 '가상 컴퓨터'를 '대여'하는 서비스를 사용한다.

Firebase란?

  • 클라우드에서 데이터베이스를 빌려오는 서비스이다.

BasS(Backend as a Service) - 서비스형 백엔드

  • 백엔드 서버를 운영하는 데 필요한 거의 모든 기능(데이터베이스, 사용자 인증, 파일 저장 등)을 Firebase가 API 형태로 제공해 줍니다.
  • 개발자는 복잡한 인프라를 직접 직접 구축할 필요 없이, Firebase가 제공하는 기능들을 '레고 블록'처럼 조립해서 쓰기만 하면 됩니다.

Firebase의 주요 기능들:

  • Firestore (우리가 쓸 기능)
    -> NoSQL 데이터베이스 (냉장고)
  • Authentication
    -> 소셜 로그인(구글, 페이스북 계정 연동) 기능 (출입 명부 관리인)
  • Storage
    -> 이미지, 동영상 파일 저장 (대형 창고)
  • Hosting
    -> 프론트엔드(React) 배포 (서빙 로봇)

실습

firebase에서 고유 키 설치

-> web-basic-backend-main\src\main\resources\firebase-service-account.json에 덮어씌우자(이름은 firebase-service-account.json으로 바꾸고)

오늘은 memory 말고 database 쓸거니까 아래꺼 바꿈


원래 memory에 저장되던 것들이 이제부터 database에 저장됨

실행

조금 더 빠르긴 하네

전체 찜 상품 조회

아무것도 안나옴

1 ~ 4 추가

그러니까, 찜 상품 추가에서 1, 2, 3, 4 추가해보자

다시 조회

추가되어 있다.(다만, id가 랜덤으로 나와서 삭제할거면 이 id 입력해야 함. 예: 1764214770672 이건 4번임)

Firestore는 NoSQL 기반의 데이터베이스기에 id 값이 생성될 때 조금 복잡한 방식으로 생성되는 탓에 이러는거임.

memory와 다른 점은 임시가 아닌 영구적 저장이다.

종료 후
다시 시작 : 원래라면 초기화 되어 있어야 하는데

단건 조회

전체 조회

껏다 켜도 데이터가 남아있다.

profile
취업 준비

0개의 댓글