[사이드프로젝트] 벡엔드 기초 개념

이언덕·2025년 8월 20일
post-thumbnail

이번 프로젝트를 진행하게 되면서 로그인 기능을 만들고, 데이터를 서버에 저장해서 앱과 연동해야 했다.
그래서 처음으로 백엔드를 써보기로 했는데, 사실 거창한 건 아니고 그냥 기초적인 것만 해보는 수준일 것이다.
말 그대로 백엔드를 체험해본다는 느낌으로 발만 살짝 담가볼 것이다.
그런의미로 벡엔드가 어떤 것인지 초보자로서 벡엔드에 대해 정리해보았다.


1. 백엔드란 무엇인가?

처음에 “백엔드”라는 말을 들었을 때는 솔직히 막연했다.
프론트엔드는 화면을 만드는 거라는 건 알았는데, 백엔드는 뭔가 서버? 데이터? 잘 감이 안 왔다.

알아보니까 백엔드는 사용자가 눈에 직접 보지는 못하지만, 서비스가 돌아가게 만드는 뒤쪽 시스템이었다.

  • 프론트엔드 → 화면에서 버튼 누르고 글을 쓰고 사진을 올리는 부분
  • 백엔드 → 그 버튼이 눌렸을 때 데이터를 저장하고, 불러오고, 로그인 확인을 해주는 부분


    예를 들어 인스타그램을 생각해봤다.
    내가 사진을 올리면 그 사진 파일은 그냥 내 컴퓨터에만 있는 게 아니라 서버(DB)라는 곳에 저장된다.
    친구가 내 계정을 팔로우하면, 그 관계 정보가 DB에 기록된다.
    또, 내가 로그인할 때 아이디/비밀번호가 맞는지 확인하는 것도 백엔드에서 한다.

즉, 백엔드란 “화면에 보이는 행동을 실제 기능으로 만들어주는 보이지 않는 뒷단”이라고 할 수 있다.

백엔드가 왜 필요한가?

처음에는 “굳이 백엔드가 꼭 있어야 하나?”라는 생각도 했다.
사실 간단한 앱은 로컬 스토리지 같은 걸로도 데이터를 저장할 수 있다.
근데 문제는 앱과 서버가 연동되는 순간 생긴다.

  • 여러 기기에서 같은 데이터를 쓰려면 → 서버가 필요함.
  • 로그인해서 내 정보와 다른 사람 정보를 구분하려면 → 서버가 필요함.
  • 데이터를 안전하게 관리하고, 잃어버리지 않으려면 → 서버가 필요함.

결국 서비스가 커질수록 백엔드는 없어서는 안 되는 핵심이었다.


2. 백엔드의 기본 흐름 이해하기 (개발 순서의 흐름은 8번에!!)

백엔드가 왜 필요한지까지 알게 되니까, 이제는 백엔드가 실제로 어떻게 동작하는지 궁금해졌다.
찾아보니 생각보다 단순한 흐름으로 돌아갔다.


1. 사용자가 버튼을 누른다 → 요청(Request)
2. 서버가 그 요청을 받아서 처리한다 → DB에서 데이터 저장하거나 꺼내오기
3. 처리한 결과를 다시 사용자에게 돌려준다 → 응답(Response)


예를 들어 로그인 과정을 보자.
내가 아이디와 비밀번호를 입력하고 로그인 버튼을 누르면(요청),
서버가 DB에 있는 사용자 정보를 확인한다(처리).
그리고 비밀번호가 맞으면 “로그인 성공”이라는 응답을 돌려준다.
만약 틀리면 “로그인 실패”라는 응답이 돌아온다.

이런 흐름이 클라이언트(프론트엔드)서버(백엔드) 사이에서 계속 오가면서 서비스가 동작했다.

API라는 다리

여기서 중요한 개념이 하나 있었다. 바로 API인데.
API는 쉽게 말해서 프론트엔드와 백엔드가 서로 대화하는 규칙이다.

  • 프론트엔드: “이 데이터 좀 줘!” (요청)
  • 백엔드: “여기 있어” (응답)

이 규칙이 있었기 때문에, 프론트는 화면에 집중하고, 백엔드는 데이터 처리에 집중할 수 있다.

여기까지만 이해해도 충분하다

API에도 여러 가지 방식이 있었다. 예를 들면 REST APIGraphQL 같은 것들이 대표적이다.
근데 이런 것까지 들어가면 글이 너무 복잡해지기 때문에.

지금 단계에서는 “API = 프론트와 백엔드가 대화하는 방법” 정도만 알고 있으면 충분하다.

더 공부하고 싶다면?

만약 여기서 더 깊게 공부하고 싶다면 아래 키워드를 찾아보면 도움이 될 것이다.

  • REST API 기본 구조 (GET, POST, PUT, DELETE)
  • GraphQL이 REST랑 어떻게 다른지
  • HTTP 프로토콜 (요청과 응답이 오가는 방식)
  • Postman 같은 툴을 이용해서 API를 직접 테스트해보기

이 정도만 알아도 API에 대한 감이 훨씬 더 잘 잡힐 것이다.


3. 데이터베이스 기본

백엔드 흐름을 조금 이해하고 나니까, 다음으로 계속 부딪히게 된 게 바로 데이터 저장 문제였다.
로그인을 하려면 사용자 정보가 저장돼 있어야 했고, 글을 작성하면 그 글도 어딘가에 저장돼 있어야 한다.
앱을 껐다 켜도 데이터가 그대로 남아 있으려면 결국 데이터베이스(DB)가 필요하다.

즉, 백엔드를 한다는 건 곧 데이터를 어떻게 저장하고 꺼낼지 다루는 것과 직결된다.
그래서 DB 개념을 모르면 백엔드를 이해하기가 힘들었다.

데이터베이스란?

데이터베이스는 말 그대로 데이터를 체계적으로 저장하고 관리하는 곳이다.
엑셀처럼 표를 만들어서 데이터를 정리하는 걸 상상하면 조금 더 이해하기 쉽다.


예를 들어 사용자라는 데이터를 저장한다고 하면,

  • 아이디
  • 비밀번호
  • 이메일
  • 가입 날짜

이런 식으로 한 줄에 하나의 사용자 정보가 들어가게 된다.
그리고 수백, 수천 명의 사용자가 늘어나도 체계적으로 관리할 수 있다.

관계형 vs 비관계형

DB에도 종류가 있었는데, 크게 두 가지로 나뉜다.

  • 관계형 DB (SQL)
    → 데이터를 표(테이블) 형태로 저장.
    → 데이터베이스 시스템으로는 MySQL, PostgreSQL 같은 게 대표적이다.

  • 비관계형 DB (NoSQL)
    JSON처럼 자유로운 형태로 저장.
    → 데이터베이스 시스템으로는 MongoDB 같은 게 대표적이다.

관계형은 구조가 명확하고 안정적이라 많이 쓰였고,
비관계형은 유연해서 빠르게 바뀌는 데이터를 다룰 때 유리하다.

내가 접한 DB

이번 프로젝트에서 쓰게 된 SupabasePostgreSQL 기반이다.
PostgreSQL은 관계형 DB 중에서도 기능이 강력해서 실무에서도 많이 사용되고 있다.
그래서 단순히 “프로젝트를 빨리 만들 수 있다”는 장점뿐 아니라,
공부할 만한 가치가 있는 DB를 다루고 있다는 점도 좋다.

더 공부하고 싶다면?

DB도 막상 들어가면 공부할 게 많다.
처음에는 어렵게 느껴졌지만, 아래 키워드만 정리해도 이해가 훨씬 수월할 것이다.

  • SQL 기본 문법 (SELECT, INSERT, UPDATE, DELETE)
  • ERD (Entity Relationship Diagram) → 테이블 간 관계 그려보기
  • 인덱스 → 검색을 빠르게 하는 방법
  • 트랜잭션 → 데이터가 꼬이지 않게 안전하게 처리하는 방법

이 정도만 알아도 “DB가 어떻게 동작하는지” 감이 잡힐 것이다.


4. 백엔드에서 사용하는 언어와 프레임워크

백엔드를 공부하다 보니까 가장 먼저 궁금했던 건 “보통 어떤 언어를 쓰지?”였다.
찾아보니 상황에 따라 다르지만, 주로 아래 언어들이 많이 쓰이고 있었다.

  • Java → 전통적으로 가장 많이 쓰이는 언어, 특히 기업용 서비스에서 강세
  • JavaScript → 프론트엔드에서도 쓰는 언어라서 이어서 백엔드에서도 자주 사용
  • Python → 배우기 쉽고 빠르게 개발할 수 있어서 인기가 많음
  • (그 외 Go, PHP, Ruby 같은 언어들도 쓰이지만 주류는 위 세 가지였다)

언어별 대표적인 프레임워크

프론트엔드에서 React 같은 프레임워크를 쓰는 것처럼,
백엔드에도 각 언어마다 대표적으로 많이 쓰는 프레임워크가 있었다.

Java

  • 대표 프레임워크: Spring
  • 특징: 안정적이고 대규모 서비스에 많이 쓰임

JavaScript

  • 대표 프레임워크: Express, NestJS
  • 특징: 프론트엔드와 같은 언어를 쓸 수 있어서 입문자에게 친숙함

Python

  • 대표 프레임워크: Django, Flask, FastAPI
  • 특징: 문법이 단순하고, 빠르게 개발할 수 있음



Node.js는 뭐지?

처음엔 Node.js프레임워크인 줄 알았는데, 사실은 아니다.
Node.js자바스크립트를 브라우저 밖, 서버 환경에서도 실행할 수 있게 해주는 실행 환경(런타임)이다.

  • JavaScript라는 언어
  • Node.js 런타임 위에서 돌리고,
  • 필요하면 그 위에 Express, NestJS 같은 프레임워크를 얹어 더 구조적이고 빠르게 백엔드를 만든다.

프레임워크 없이도 가능하다

중요한 점은, Node.js만으로도 서버를 만들 수 있다는 것이다.
내장 모듈을 활용하면 라우팅, 요청/응답 처리 같은 기본 서버 기능을 직접 구현할 수 있다.

Node.js 단독으로 충분한 경우

  • 엔드포인트 수가 적고(대략 10개 내외) 단순 CRUD 중심일 때
  • 요청 바디가 JSON 위주이고 파일 업로드가 거의 없을 때
  • 인증이 간단한 토큰 검증 정도일 때
  • 내부용 API, 웹훅 수신기, 간단한 프로토타입처럼 트래픽·복잡도가 낮을 때


    하지만 규모가 커지면 이런 것들을 전부 직접 챙겨야 한다.
  • 라우팅 관리
  • 요청 바디 파싱 (JSON, 폼 데이터 등)
  • 에러 처리와 로깅
  • 보안 관련 설정 (CORS, 헤더, 레이트 리밋)
  • 프로젝트 구조화와 테스트

프레임워크는 왜 쓸까?

프레임워크는 필수는 아니지만, 반복적이고 복잡한 작업을 대신 처리해 주기 때문에 생산성이 크게 올라간다.

🚨 프레임워크가 필요해지는 시점

  • 엔드포인트가 많아지고(20개 이상) 라우팅이 복잡해질 때
  • 멀티파트/대용량 업로드, 스트리밍 같은 고급 기능이 필요할 때
  • RBAC 같은 복잡한 인증·인가 체계가 필요할 때
  • API 버전 관리, 모듈 분리, 팀 단위 개발이 요구될 때
  • 로깅·테스트·운영 신뢰성이 중요한 장기 서비스일 때
  • Express → 가볍고 유연, 작은 서비스·빠른 프로토타입에 적합
  • NestJS → 구조화·테스트·확장성에 강점, 큰 프로젝트·팀 협업에 적합

정리

결국 백엔드 개발은 언어 + 프레임워크 조합으로 이뤄진다.
프레임워크를 쓰면 로그인, 라우팅 같은 기본 기능이 준비돼 있어서
개발자가 더 빠르고 안전하게 서비스를 만들 수 있다.


5. 백엔드에서 꼭 쓰이는 기능

백엔드를 처음 접했을 때 막연했지만, 찾아보니까 거의 모든 서비스에서 공통으로 쓰이는 기능들이 있다.
앱이든 웹이든 백엔드를 쓴다면 아래 기능들은 무조건 들어간다고 봐도 된다.

1) 회원가입 / 로그인 (인증)

서비스를 만들면 당연히 사용자마다 계정을 구분해야 한다.

  • 회원가입 → 사용자 정보를 DB에 저장
  • 로그인 → 저장된 정보와 입력된 정보 비교
  • 권한 관리 → 관리자, 일반 사용자 구분

즉, 인증(Authentication)과 권한(Authorization)은 거의 모든 백엔드의 기본이다.

2) 데이터 CRUD

CRUD는 Create, Read, Update, Delete의 약자이다.

  • 글쓰기(저장) → Create
  • 글 목록 보기(조회) → Read
  • 글 수정하기 → Update
  • 글 삭제하기 → Delete

게시판, 블로그, 쇼핑몰 상품 관리… 사실 서비스 대부분이 이 CRUD를 기반으로 돌아간다.

3) 파일 저장

사진, 동영상, 첨부파일 같은 것들을 다루려면 스토리지(Storage)가 필요하다.
예를 들어 인스타그램에 사진을 올리면 그건 단순히 글자 데이터가 아니라 이미지 파일이었고,
이걸 안전하게 보관해주는 게 백엔드의 역할이다.

4) 알림 / 메일 발송

사용자에게 알림을 보내거나, 가입 확인 메일을 발송하는 것도 백엔드에서 처리하는 일이다.
“비밀번호 재설정” 같은 기능도 전형적인 예시이다.

5) 로그와 기록 관리

백엔드는 단순히 데이터만 다루는 게 아니라,
누가 언제 어떤 요청을 했는지 기록(log)을 남겨서 문제를 추적할 수 있게 해준다.

정리

정리해보면, 백엔드를 쓴다는 건 단순히 “데이터를 저장한다” 수준을 넘어서
사용자를 관리하고, 데이터를 안전하게 다루고, 서비스가 제대로 돌아가게 만드는 모든 기능을 책임지는 것이다.


6. 백엔드에서 꼭 알아야 할 보안 기본 (제일 중요!)

백엔드를 조금 공부하다 보니까, 제일 무섭다고 느낀 부분이 바로 보안이다.
사실 로그인 기능 하나만 잘못 만들어도, 사용자 데이터가 몽땅 유출될 수 있다.
초보자일수록 “그냥 돌아가기만 하면 됐다”라는 생각에 보안을 놓치기 쉬웠는데, 이게 진짜 큰 사고로 이어질 수 있다.

엔드포인트(Endpoint)란?

엔드포인트는 쉽게 말해 “백엔드가 열어둔 문” 같은 것이다.
프론트엔드가 백엔드에 요청을 보내는 주소가 바로 엔드포인트다.


예를 들어:

  • /login → 로그인 요청을 처리하는 문
  • /users → 사용자 목록을 보여주는 문
  • /posts → 게시글을 다루는 문

즉, 엔드포인트는 백엔드 기능에 들어가는 입구 같은 개념이다.

1) 엔드포인트 노출 문제

문제는 이 엔드포인트를 아무 제약 없이 누구나 호출할 수 있게 두면 큰일 났다는 거다.

  • 로그인 안 한 사람이 다른 사람 데이터까지 볼 수 있음
  • 관리자가 아닌데도 게시글을 삭제할 수 있음
  • 심지어는 DB를 통째로 날려버릴 수도 있음

그래서 엔드포인트는 반드시 권한(Authorization)을 확인한 뒤에만 접근할 수 있도록 만들어야 한다.

2) 비밀번호는 절대 그대로 저장하지 않는다

비밀번호를 DB에 그냥 저장하는 건 최악이다.
만약 DB가 털리면 사용자의 아이디/비밀번호가 고스란히 유출되기 때문이다.

그래서 보통은 해시(Hash) 알고리즘을 써서 비밀번호를 암호화해 저장한다.
대표적으로 bcrypt 같은 라이브러리를 많이 사용한다.

3) HTTPS는 기본이다

HTTP가 아닌 HTTPS를 써야 한다.
HTTP는 요청과 응답이 그냥 평문으로 오가기 때문에, 누군가가 네트워크를 가로채면 그대로 볼 수 있다.
하지만 HTTPS는 데이터를 암호화해서 주고받기 때문에 안전하다.

4) 토큰 관리 (JWT 같은 것들)

로그인 후에는 사용자에게 토큰(Token)을 발급해주는데,
이 토큰을 잘못 관리하면 역시 보안 사고가 난다.

  • 토큰을 로컬스토리지에만 막 저장하면 위험
  • 토큰이 탈취되면 다른 사람이 내 계정으로 로그인 가능

그래서 토큰 만료 시간을 짧게 두고, Refresh Token 같은 걸 함께 쓰는 게 일반적이다.

5) 기본 원칙

정리하자면, 초보자라도 이 3가지는 반드시 지켜야 한다.
1. 엔드포인트에는 권한 검사를 꼭 붙인다
2. 비밀번호는 해시해서 저장한다
3. HTTPS를 사용한다
이 기본만 지켜도, 흔히 발생하는 데이터 유출 사고는 피할 수 있다.


7. 요즘 백엔드 개발 방식

예전에는 백엔드를 만들려면 서버를 직접 세팅해야 했다.
컴퓨터에 리눅스를 깔고, 아파치(Apache)엔진엑스(Nginx) 같은 웹 서버 프로그램을 설치하고, DB를 붙이는 식이었다.
아파치나 엔진엑스는 사용자의 요청을 받아서 백엔드 프로그램으로 넘겨주는 역할을 한다.

문제는 이 방식은 초보자가 하기에는 너무 어렵고, 보안이나 업데이트 같은 관리도 전부 직접 해줘야 한다는 점이다.

그래서 요즘은 더 편하게 쓸 수 있는 방법들이 많이 나와 있다.

1) 직접 서버 운영

  • 서버에 리눅스, 웹 서버(Apache, Nginx), DB 등을 직접 설치해서 관리하는 방식
  • 자유도가 높지만 보안, 업데이트, 확장 같은 걸 전부 챙겨야 한다

2) 클라우드 서비스

  • AWS, GCP, Azure 같은 곳에서 서버를 빌려 쓰는 방식
  • 서버를 직접 사지 않아도 되고, 필요할 때 늘리거나 줄일 수 있다 (스케일링)
  • 그래도 처음 배우기에는 설정이 복잡하다

3) 서버리스 (Serverless)

  • 서버를 직접 관리하지 않고, 코드만 올리면 실행되는 방식
  • 대표적으로 AWS Lambda 같은 서비스가 있다
  • 서버 관리 부담은 줄지만, 모든 걸 세세하게 제어하기는 어렵다

4) BaaS (Backend as a Service)

  • Firebase, Supabase 같은 서비스가 여기에 해당한다
  • 회원가입, 로그인, DB, 파일 저장 같은 기본 기능이 다 준비돼 있다
  • 빠르게 개발할 수 있어서 개인 프로젝트나 스타트업에서 많이 쓴다


    정리하면, 예전에는 서버를 직접 다루는 게 기본이었다면,
    요즘은 클라우드나 서버리스, 특히 BaaS 같은 방식을 많이 사용한다.
    처음 배우는 입장에서는 BaaS가 진입 장벽을 확 낮춰준다.

8. 백엔드 개발의 흐름 이해하기

백엔드를 공부하다 보니까, 제일 헷갈리는 게 “언어, 프레임워크, 서버, 배포”가 각각 어떤 역할을 하는지였다.
알고 보니 흐름은 이렇게 정리할 수 있었다.

1) 언어 선택

백엔드를 만들 때 가장 먼저 고르는 건 언어다.

  • Java → 기업에서 많이 쓰는 안정적인 언어
  • JavaScript → 프론트에서도 쓰니까 백엔드까지 이어서 사용 가능
  • Python → 문법이 단순하고 배우기 쉬움

2) 프레임워크 사용

언어만 가지고 백엔드를 만들면 너무 힘들다.
그래서 프레임워크라는 도구를 같이 쓰는데, 이건 “코드를 구조적으로 짜는 틀”이라고 생각하면 된다.

  • Java → Spring
  • JavaScript → Express, NestJS
  • Python → Django, Flask, FastAPI

프레임워크 덕분에 로그인, 라우팅 같은 기본 기능을 쉽게 구현할 수 있다.

3) 서버에 배포

코드를 만들었으면, 이제 이 코드가 계속 실행 중이어야 한다.
그 역할을 하는 게 서버다.


서버를 운영하는 방식은 여러 가지가 있다.

  • 직접 서버 운영 → 리눅스 설치하고, Apache나 Nginx 같은 웹 서버 프로그램을 깔아서 요청을 처리
  • 클라우드 서버 → AWS EC2 같은 가상 서버를 빌려서 운영
  • 서버리스 → AWS Lambda 같은 곳에 함수 단위로 배포해서 코드만 실행

여기서 Apache, Nginx 같은 건 사용자의 요청을 받아서 → 내 백엔드 코드로 넘겨주는 “중간 다리” 역할을 한다.

4) 실제 서비스 동작

흐름을 정리하면 이렇게 된다.
1. 사용자가 앱/웹에서 요청을 보냄
2. 요청이 서버(Apache, Nginx, Lambda 등)에 도착
3. 서버가 내 백엔드 코드(Spring, Express 같은 프레임워크)로 전달
4. 코드가 DB와 통신 후 결과를 돌려줌

정리

즉, 백엔드를 만든다는 건:

  • 언어로 코드를 짜고,
  • 프레임워크로 더 편하게 개발하고,
  • 서버에 배포해서,
  • 사용자 요청을 처리할 수 있게 만드는 과정이다.

9. Supabase란 무엇이고, 왜 쓰는가

앞에서 본 것처럼 보통은 언어로 코드를 짜고 → 프레임워크로 구조를 만들고 → 서버에 배포하는 과정을 거쳐야 백엔드가 완성된다.
근데 이 과정은 초보자한테는 진입 장벽이 너무 높다.
서버를 직접 세팅하고, 보안도 챙기고, 배포까지 하려면 너무 복잡하다.


그래서 등장한 게 BaaS(Backend as a Service)라는 개념이다.
Supabase도 여기에 속한다.

Supabase가 해주는 일

Supabase는 초보자가 백엔드를 직접 세팅하지 않아도 되게 기본 기능을 다 제공해준다.

  • 데이터베이스(DB) → PostgreSQL 기반으로 자동 제공
  • 인증(Authentication) → 회원가입, 로그인 기능 기본 제공
  • 스토리지(Storage) → 사진, 파일 저장 가능
  • API 자동 생성 → DB에 테이블을 만들면 API가 자동으로 생김

즉, 내가 직접 프레임워크를 짜고 서버에 배포하지 않아도,
Supabase 안에서 바로 백엔드 기능을 쓸 수 있다.

Supabase의 장점

  1. 빠른 시작 → 회원가입만 하면 바로 프로젝트를 만들 수 있다
  2. PostgreSQL 기반 → 실무에서 많이 쓰는 DB라 학습 가치가 있다
  3. 무료 플랜 제공 → 개인이나 사이드 프로젝트에 부담이 없다
  4. 프론트엔드와 쉽게 연동 가능 → React 같은 프론트 코드랑 연결하기 쉽다

정리

Supabase는 프레임워크가 아니라 서비스다.
내가 직접 언어 + 프레임워크 + 서버를 다루는 대신,
Supabase가 그걸 미리 세팅해둔 걸 빌려 쓰는 개념이다.

그래서 나 같은 초보자 입장에서는 백엔드를 체험하고 배우기에 딱 좋은 선택지다.

0개의 댓글