1. 도커(Docker)가 무엇인지 부터 사용 전에 한 번 더 알아두자.

도커 = “이 앱이 돌아가려면 필요한 환경(Node 버전, OS 라이브러리 등)을 통째로 상자(이미지)로 만들어 두는 도구”

  • 네 PC에는 Node 18이 깔려 있는데, 이 프로젝트는 Node 20이 필요할 수 있음.
  • 그걸 “우리 프로젝트는 Node 20 + 이 OS에서 돌아가요”라고 Dockerfile로 정의해 두면,

어디서든 같은 상자(Docker 이미지)만 쓰면 똑같이 돌아감 (로컬, 동료 PC, AWS 서버 모두).

  • 그래서 “배포할 때도 로컬이랑 똑같은 환경”을 쓰려고 Docker를 쓰는 거고,

이 프로젝트(사내 지라 프로잭트)에서는 앱(Next.js)을 Docker 이미지로 만들어서 ECR에 올리고, 나중에 ECS에서 그 이미지를 실행하는 구조임.

 

이미지 = “그걸 실행하면 앱이 돌아가게 만든 설계도 + 필요한 것들이 전부 들어 있는 패키지

 

Docker 이미지라고 하면

  • 앱 코드(Next.js 등)
  • 실행 환경(Node 20, OS 조각 등)
  • 설치된 라이브러리(npm 패키지 등)

이걸 한 덩어리로 포장한 것 Docker 이미지임.

  • 이 덩어리를 다운받아서 “실행”하면 → 그게 컨테이너 (실제로 돌아가는 프로세스).
  • 이미지 = 설계도/패키지

컨테이너 = 그걸로 띄운 “실행 중인 앱”

 

“앱을 상자(Docker 이미지)로 만들어서, 그 상자를 AWS 창고(ECR)에 넣어 두고, AWS가 그 창고에서 꺼내서 서버(ECS)에서 실행한다.”


ECR
ECR = Elastic Container Registry = “Docker 이미지 보관하는 AWS 전용 저장소”

- Docker 이미지는 파일 하나처럼 생겼고, 용량도 꽤 큼 (몇백 MB~1GB 등).
- 그래서 이걸 어디선가 “가져다 쓸 수 있는 주소”로 두어야 함.

그게 이미지 저장소(레지스트리). ECR은 AWS가 제공하는 그 저장소임.
“우리 회사(우리 AWS 계정)만 쓰는 Docker 이미지 창고”라고 보면 됨.

역할 요약
- CodeBuild가 docker build로 Next.js 앱을 Docker 이미지로 만든 다음,
docker push로 ECR에 올림.
- 나중에 ECS가 “이 앱 실행해라” 할 때, ECR에서 그 이미지를 pull 해서 실행함.
그래서 ECR = Docker 이미지 창고.

“어떤 앱 버전을 배포할지”는 “ECR에 어떤 이미지를 올렸는지”로 정해짐.


ECS
ECS = Elastic Container Service = “Docker 컨테이너를 AWS 위에서 실행·관리해 주는 서비스”

- Docker 이미지는 “실행 방법이 적힌 설계도” 같은 거고,
이걸 실제로 돌리는 곳이 있어야 웹사이트가 동작함.
- ECS가 그 “실제로 돌리는 곳”을 제공함.

“이 ECR 이미지로 컨테이너를 만들고, 24시간 켜 두고, 트래픽 들어오면 이 앱이 처리하게 해라”를 ECS가 해 줌.
역할 나눠 보면

실행: ECR에서 이미지를 가져와서 컨테이너로 띄움.
- 그 컨테이너 안에서 Next.js(노드 서버)가 돌아가서, 사용자가 접속하면 응답함.

유지: 컨테이너가 죽으면 다시 띄우고, 부하에 따라 태스크(컨테이너 개수)를 늘리거나 줄일 수 있음 (오토 스케일).
Fargate: ECS 안에서 “서버(EC2)는 안 쓰고, 컨테이너만 관리해 주는 옵션”.
- 우리가 서버 OS 설치·패치 할 필요 없이 “컨테이너만 신경 쓰면 됨”.
그래서 ECS = “ECR에 있는 Docker 이미지를 실제 서버처럼 돌려 주는 곳”.
사내 지라 프로젝트에서는 “Next.js 앱이 돌아가는 실행 환경”이 ECS라고 보면 됨.


****EC2 안 쓴다는 말의 뜻

 EC2가 무슨 역할인

  • EC2 = AWS가 주는 가상 서버 한 대.
OS 선택, 인스턴스 타입(CPU/메모리), 디스크, 보안 그룹 등 서버 한 대를 우리가 직접 설정·관리하는 서비스임.
  • 역할: "컨테이너가 돌아 그 컴퓨터"를 우리가 직접 만드는 방식이면,
ECS 클러스터에 EC2 인스턴스를 넣고, ECS가 그 EC2 위에 컨테이너를 띄움.
  • 이걸 "ECS on EC2" 라고 부름.
  • 우리는 EC2 서버 관리(OS, 패치, 스케일, 장애 대응)까지 해야 함.

"EC2를 왜 안 쓰냐" (Fargate를 쓰면)

  • ECS on EC2
    리가 EC2 인스턴스를 만들고, 그 위에서 ECS가 컨테이너 실행.
    서버 한 대 한 대를 우리가 관리해야 함 (OS, 용량, 비용 최적화 등).
  • ECS on Fargate
    우리는 "컨테이너 몇 개, CPU/메모리 얼마" 요청
    그 컨테이너가 돌아갈 "서버"는 AWS가 알아서 만들고 관리
    .
    우리 입장에서는 EC2를 "쓰지 않는" 것처럼 보임 (EC2 콘솔에서 인스턴스 안 만들고, SSH 안 함).

그래
"서버(EC2)를 안 쓴다" = 우리가 EC2 인스턴스를 직접 만들고 관리하지 않는다.
"컨테이너만 관리" = 우리는 컨테이너(이미지, CPU/메모리, 개수)만 신경 쓰고, 그 컨테이너가 도는 호스트(서버)는 AWS가 관리한다는 뜻임.


- 우리가 EC2 서버를 직접 만들고 관리하지 않는다는 뜻임.
- 컨테이너는 결국 어떤 컴퓨터(가상 서버) 위에서 돌아감. 그 "컴퓨터"를 우리가 EC2로 띄우고, OS 설치하고, 패치하고, 모니터링하는지 아니면 AWS가 알아서 해 주는지의 차이임.

Fargate
→ 우리는 "컨테이너 이 이미지로, CPU/메모리 이만큼으로 돌려줘"만 하고,
그 컨테이너가 도는 "컴퓨터(서버)"는 AWS가 알아서 준비·관리함.
그래서 "우리는 서버(EC2)를 안 쓴다" = "EC2 인스턴스를 우리가 직접 만들고 쓰지 않는다"라고 이해하면 됨.
예)
우리가 하는 것
"이 Docker 이미지로 컨테이너 돌려줘"
"CPU 0.25 vCPU, 메모리 512MB로 해줘"
환경 변수, 로그 보낼 곳 같은 설정만 넘김

Fargate가 하는 것
- 그 요청을 받아서컨테이너가 돌 수 있는 “실행 공간”을 자기가 가진 풀에서 하나 골라서 할당하고
- 그 공간에서 이미지 pull → 컨테이너 실행
우리에게는 “태스크가 실행 중” / “중지됨” / “실패” 정도만 보여 줌

즉, “어느 서버(EC2)에서 돌리는지”는 우리가 정하지 않고, Fargate가 알아서 배치하는 구조임.




이 프로젝트에서의 연결 관계

1. 개발
Next.js 앱 코드를 CodeCommit에 푸시함.

2. 빌드 (CodeBuild)
CodeBuild가 CodeCommit에서 코드 가져와서
docker build → Docker 이미지 생성.
그 이미지를 docker push로 ECR에 올림 (예: cl-workspace:latest).

3. 저장 (ECR)
ECR이 그 이미지를 보관.
“이 버전이 지금 배포할 앱”이라고 할 수 있는 주소(이미지 URI)가 생김.

4. 실행 (ECS)
ECS가 “이 ECR 이미지로 컨테이너를 띄워라”는 설정을 가지고 있음.
새 배포가 있으면 ECS가 ECR에서 새 이미지를 pull 해서 컨테이너를 새로 띄움.
사용자가 브라우저로 접속하면, 그 컨테이너(Next.js)가 응답함.

5. DB 등
ECS에서 돌아가는 앱은 RDS(PostgreSQL)에 DATABASE_URL로 접속하고,
파일은 S3에 두는 식으로, 다른 AWS 리소스와 연동됨.

 

 

즉 도커 = 앱 실행 환경을 통째로 포장해 두는 것. 로컬/서버 동일하게 쓰려고 씀.

 

ECR에 뭐가 저장되나

  • 저장되는 : Docker 이미지 자체 (앱 코드 + Node + 라이브러리 등이 들어 있 실제 파일/레이어들).
  • 경 정보만 따로 저장되는 게 아니라, 그 환경까지 포함한 “실행 가능한 패키지 전체”가 ECR에 들어감.
  • 그걸 가리키는 소(URI)가 하나 나옴.

예: 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/cl-workspace:latest

 “이 주소로 가면 저 이미지를 pull 할 수 있다”는 뜻.

정리: ECR = 이미지(실제 데이터) 저장 + 그걸 가져다 쓸 수 있는 주소 제공.

 

 ECS가 뭘 “받고” 뭘 하냐

  • ECS가 접 “이미지 파일”을 받는 건 아님.
  • ECS 설정 이미지 주소(URI)를 적어 둠.
예: “이 서비스는 ...ecr.../cl-workspace:latest 이미지를 써라.”
  • 실제로 서버를 띄울 때:
  1. ECS가 “새 태스크(컨테이너) 하나 띄워라”고 지시하고,
  2. 그 태스크를 맡은 실행 환경(Fargate 등)이 그 주소로 ECR에 접속해서 이미지를 pull 하고,
  3. 그 이미지로 컨테이너를 만들어서 실행함.
  4. 그 실행 중인 컨테이너가 곧 우리가 말하는 “서버”(Next.js 앱)임.
그래서:
  • ECR: 이미지(실제 데이터) 저장 + “가져다 쓸 수 있는 주소” 제공.
  • ECS: 그 주소를 설정으로 가지고 있다가, 필요할 때 그 주소로 이미지를 pull 해서 컨테이너로 실행 → 그게 서버가 됨
 

 

Fargate 대략적인 동작 흐름

1. 태스크 실행 요청

ECS에 “이 태스크 정의(이미지, CPU, 메모리, env)로 태스크 하나 실행해”라고 요청함.

 

2. Fargate가 “자리” 잡기

- Fargate 쪽에 이미 돌고 있는 “실행 환경” 풀이 있음 (AWS가 관리하는 컴퓨팅 리소스).

- 그중에서 요청한 CPU/메모리에 맞는 공간 할당함.

- 우리는 그게 “EC2 몇 번”인지, “어느 물리 서버”인지 전혀 모름. 추상화된 “실행 슬롯”이라고 보면 됨.

 

3. 그 자리에서 컨테이너 실행

그 슬롯에서

- ECR에서 이미지 pull

- 그 이미지로 컨테이너 시작

- 우리가 준 환경 변수·볼륨 등 적용

그래서 제로는 “어떤 컴퓨터 위에서 프로세스가 돌아가는” 구조이지만, 그 컴퓨터를 우리가 고르거나 관리하지 않음.

 

4. 동작 중

- 트래픽 들어오면 ALB 등이 그 실행 중인 태스크(컨테이너)로 요청을 보냄.

- 로그는 CloudWatch로 보내고, 우리는 “태스크 로그”만 보면 됨.

그 태스크가 돌아가는 호스트(서버)에는 우리가 SSH 같은 걸 할 수 없음.

    => 이 말은 해석하면

  • Fargate에서는 그 호스트를 AWS가 관리해서, 우리는 그 호스트에 SSH로 들어갈 수 없음이라는 말임

대신 로그·메트릭으로만 확인하는 구조라는 말임.

- 태스크 = 우리가 띄운 컨테이너 하나 (Next.js 앱).

- 그 컨테이너는 어떤 컴퓨터(가상 서버) 위에서 돌아감. 그 컴퓨터 호스트(서버).

- Fargate에서는 그 호스트를 AWS가 알아서 만들어서 우리 컨테이너를 그 위에 올려 둠.

- SSH = 그 서버(호스트) 원격으로 접속해서 로그인하는 것.

- 로그인하면 그 서버 안에서 쉘로 명령어 치고, 파일 보고, 프로세스 확인하는 식으로 직접 조작할 수 있음.

- “서버에 SSH 한다” = “그 컴퓨터에 터미널로 들어간다”라고 보면 됨.

  • Fargate일 때: 우리 태스크(컨테이너)가 돌아가는  호스트(서버)는 AWS가 만든 거라서, 우리한테 주소(IP)를 안 줌. 

 

 

**ALB: Application Load Balancer = “들어오는 요청을 여러 대상(서버/컨테이너)에 나눠 주는 서비스

ALB 왜 씀?

- ECS 컨테이너를 여러  띄우면,

“사용자는 어떤 URL로 접속하는데, 그 요청을 어느 컨테이너로 보낼지”를 정해 줘야 함.

- ALB가 그 역할을 함.

  -사용자  ALB 주소(도메인) 로 요청

  -ALB → 뒤에 있는 ECS 태스크(컨테이너) 중 하나 전달

  -그 컨테이너가 응답 → ALB가 다시 사용자에게 전달

그래서 “트래픽을 나눠 주는 것” = Load Balancer,

그중에서 HTTP/HTTPS 웹 요청을 나눠 주는  = Application Load Balancer (ALB).

 

5. 종료 시

태스크를 중지하거나 실패하면, Fargate가 그 슬롯을 반하고,

그 위에서 돌던 컨테이너는 사라짐.

비용은 그 태스크가 쓴 vCPU·메모리·실행 시간만큼만 나감 (인스턴스 1대를 24시간 빌려 쓰는 게 아님).

 

2. Docker Compose는 뭔지, 왜 로컬에서 DB까지 다 돌아가는지

Docker Compose = “도커 컨테이너 여러 개(예: 앱 + DB + Redis)를 한 번에 정의하고 같이 띄우는 설정 파일

  • 로컬에서는 “앱 서버”는 npm run dev로 직접 돌리고,

DB(PostgreSQL)랑 Redis만 Docker Compose로 띄우는 구조가 많음.이 프로젝트 docker-compose.yml “PostgreSQL 16 이렇게 띄워라, Redis 이렇게 띄워라”라고 적혀 있음.

  • docker-compose up -d 하면:
  • PostgreSQL “postgres / postgres / cl_workspace” 같은 계정·DB명이 이미 설정된 상태 컨테이너가 떠 있고,
  • Redis도 같이 떠 있음.
  • 그래서 네가 따로 “DB 계정 만들기”를 안 해도,

이미 docker-compose.yml 안에 “이 계정/비번/DB이름으로 만들어라”라고 적혀 있어서그대로 띄우면 그 계정으로 DB가 준비되는 거임.연동이 어디에 돼 있나?

  • 앱(Next.js) 쪽: .env DATABASE_URL="postgresql://postgres:postgres@localhost:5432/cl_workspace?schema=public" 처럼 “localhost 5432번 포트의 cl_workspace DB에 postgres/postgres로 접속해라”라고 적혀 있음.
  • DB 쪽: Docker Compose 같은 postgres/postgres/cl_workspace, 5432 포트로 PostgreSQL을 띄움.
  • 그래서 계정을 “너가 직접 입력”한 게 아니라,

저장소에 들어 있는 기본값(docker-compose.yml + .env.example)이 서로 맞춰져 있어서cp .env.example .env 하고 docker-compose up -d 면 “연동”이 자동으로 되는 거임.

 

Docker Compose = DB·Redis 같은 걸 “설정 포함해서 한 번에 띄우는 설정”.

계정/연동은 “코드·설정 파일에 이미 다 적혀 있어서” 별도로 받거나 넣을 게 없음.

 

** Redis

Redis = 메모리 기반 Key-Value 저장소 (In-Memory Data Store)

  • PostgreSQL은 디스크 기반 영구 저장 DB
  • Redis는 RAM 기반 초고속 저장소

 

구조적으로 보면

브라우저

→ HTTP 요청
Next.js 서버(tRPC / API Route)
→ (여기서 Redis 사용)
→ RDS(PostgreSQL) 등

Redis는 서버 내부 로직에서 사용되는 저장소다.

 

배포 환경에서는?

ECS 컨테이너 (Next.js 서버)

Redis (ElastiCache)

RDS

Redis는 ECS와 같은 VPC 내부에 존재한다.

 

 

속도 차이:

  • RDS(PostgreSQL): ms 단위 (디스크 I/O)
  • Redis: sub-ms 수준 (메모리)

Redis = “빠르게 꺼내 써야 하는 데이터를 임시로 저장하는 초고속 캐시/세션 저장소”

 

PostgreSQL vs Redis 역할 분리

구분 PostgreSQL Redis
저장 위치 디스크 메모리
속도 보통 매우 빠름
데이터 성격 영구 임시/캐시
트랜잭션 강함 약함
사용 예 유저, 이슈 세션, 캐시, 카운터

 

RDS는 영구 저장용이다.

예:

  • 유저
  • 이슈
  • 프로젝트
  • 위키

이건 반드시 영구 보존되어야 하므로 PostgreSQL에 저장.

하지만 이런 건?

  • 로그인 세션
  • 임시 토큰
  • API rate limit 카운트
  • 캐시 데이터
  • 최근 조회 데이터
  • Pub/Sub 알림
  • 작업 큐 상태

이건 굳이 디스크에 영구 저장할 필요 없다.

→ 여기서 Redis 사용.

 

항목설명

저장 위치 RAM
구조 Key-Value
속도 매우 빠름
영구성 기본적으로 휘발성
TTL 지원 자동 만료 가능

 

이 프로젝트에서 Redis는 어디에 쓰이는지?

docker-compose에 Redis가 있는 걸 보면 보통 이런 용도다:

1. 세션 저장소 (NextAuth)

로그인 세션을 Redis에 저장하면:

  • DB 부하 감소
  • 빠른 인증 체크
  • TTL 자동 만료

2. 캐시

예:

  • 이슈 리스트 조회 결과 캐싱
  • 통계 결과 캐싱
  • 자주 조회되는 데이터

흐름:

 
요청 → Redis에 캐시 있나 확인 → 있으면 바로 반환 없으면 DB 조회 → Redis에 저장 → 반환

→ DB 부하 감소 + 속도 향상


3. Rate Limit

예:

 
IP별 1분당 100회 제한

Redis에 카운터 저장:

 
INCR rate:ip:123 EXPIRE rate:ip:123 60

4. Pub/Sub (실시간 기능)

예:

  • 실시간 알림
  • 댓글 알림
  • WebSocket 브로드캐스트

5. 작업 큐 (백그라운드 처리)

예:

  • 이메일 발송
  • AI 처리
  • 로그 집계

Redis는 queue 시스템으로도 많이 쓰임 (BullMQ 등)

 

왜 Docker Compose에 Redis도 같이 띄우는지

로컬에서:

 
docker-compose up

하면

  • PostgreSQL
  • Redis

둘 다 실행됨.

왜?

→ 배포 환경에서도 Redis 쓸 거라서
→ 로컬에서도 동일하게 테스트하려고


배포 환경에서는?

로컬:

  • Docker Redis

AWS:

  • 보통 ElastiCache (Redis managed 서비스)

구조:

 
ECS 앱
Redis (ElastiCache)
RDS

 

아키텍처 전체 그림 정리

로컬

브라우저
→ Next.js
→ Prisma → PostgreSQL (Docker)
→ Redis (Docker)


배포

브라우저
→ ALB
→ ECS (Next.js 컨테이너)
→ Prisma → RDS
→ Redis → ElastiCache

 

 

3. Prisma가 뭔지, DB랑 어떤 관계인지

Prisma = “Node/TypeScript 앱에서 DB를 쓰기 쉽게 해주는 도구(ORM)

  • DB에 “사용자 넣어라, 이슈 조회해라” 같은 걸 SQL 직접 쓰지 말고,

TypeScript 코드(예: ctx.db.user.create(...))로 쓰게 해줌.

  • 떤 DB를 쓸지 연결 문자열 하나로만 정함.

이 프로젝트에서는 prisma/schema.prisma url = env("DATABASE_URL") 라고만 되어 있어서,DATABASE_URL에 뭐가 들어있느냐에 따라 “어느 DB”에 붙을지가 결정됨.Prisma 쓰려면 꼭 AWS RDS여야 하나?

  • 아님.

Prisma는 “PostgreSQL/MySQL 등에 연결만 할 수 있으면” 어디든 붙을 수 있음.

  • 로컬: Docker Compose로 띄운 PostgreSQL (localhost 5432)  DATABASE_URL이 그걸 가리킴.
  • 배포: AWS RDS(PostgreSQL)를 쓰면 → DATABASE_URL RDS 주소/계정으로 바꿔 주면 됨.

 RDS는 “배포 환경에서 쓰는 DB 서버”이고, Prisma는 “그 DB에 접속하는 방식(ORM)”임.한 줄: Prisma = 앱에서 DB 접근할 때 쓰는 도구.DB는 로컬이면 Docker PostgreSQL, 배포면 RDS 같은 “실제 DB 서버”이고, Prisma는 그 서버에 연결만 해주는 역할.

 

4. 이 프로젝트 아키텍처 — 프론트 / 백엔드 / 인프라가 어떻게 엮여 있는지

큰 그림만:

  • 프론트: 브라우저에서 보는 화면. Next.js로 만든 React 페이지들.

데이터는 tRPC로 “백엔드 API”한테 요청함.

  • 백엔드: 같은 Next.js 안에 있는 tRPC 라우터(src/server/routers/).

기서 Prisma 써서 DB를 읽고/쓰고, 그 결과를 프론트에 돌려줌.(로그인/세션은 NextAuth, 파일은 S3 Presigned URL 등.)

  • DB:
  • 로컬: Docker Compose로 띄운 PostgreSQL (같은 PC의 5432 포트).
  • 배포: AWS RDS(PostgreSQL). ====> 이건 백엔드 의사 결정에의해 Aurora PostgreSQL Serverless v2로 변경할 수도 있음

둘 다 Prisma가 DATABASE_URL로 접속함.

  • 인프라:
  • 로컬: Docker Compose(DB, Redis), .env(DATABASE_URL 등).
  • 배포: Terraform이 만든 AWS 리소스들 — CodeCommit(코드 저장), CodeBuild(빌드), ECR(도커 이미지 저장), ECS(앱 실행 예정), RDS(DB), S3(파일), SSM(비밀값) 등.

연계 흐름 (로컬 기준):

프론트 (브라우저) → tRPC 호출

엔드 (Next.js 서버, src/server/routers/) → Prisma로 DB 접근

Prisma  DATABASE_URL이 가리키는 DB에 접속 (로컬이면 Docker PostgreSQL)

DB → Docker Compose가 “postgres/postgres/cl_workspace”로 이미 띄워 둔 PostgreSQL

계 흐름 (배포 기준):

 

  1. 프론트/백 → ECS에서 도커 이미지로 실행 (같은 Next.js 앱)
  1. 그 앱의 Prisma  DATABASE_URL(SSM에서 주입)이 가리키는 RDS에 접속
  1. RDS → Terraform으로 만든 PostgreSQL 서버

도커가 왜 필요하나?

  • 로컬: DB/Redis를 “설정까지 포함해서” 같은 방식으로 띄우려고 Docker Compose 사용.
  • 배포: 앱을 “Node 버전·의존성까지 똑같이” 서버에서 돌리려고 Docker 이미지로 만들고, 그 이미지를 ECR에 넣어서 ECS에서 실행.

그래서 “도커”가 로컬(DB 띄우기)과 배포(앱 실행 환경 통일) 둘 다에 쓰이는 거임.

 

5. “계정도 안 받았고 연동도 어디에 했는지 모르겠는데” 되는 이유

  • 계정
  • DB 계정(postgres/postgres)은 우리가 만든 게 아니라,

docker-compose.yml에 이미 적혀 있는 기본값이고,그걸 그대로 쓰는 거라 “계정을 받은” 게 아님.

  • .env DATABASE_URL .env.example을 복사한 것이라,

그 안에 들어 있는 postgres/postgres/localhost가 docker-compose와 같은 값이라서 맞는 거임.

  • 연동을 “어디에” 했냐
  •  군데: .env DATABASE_URL.
  • 앱(Prisma)은 “DATABASE_URL이 가리키는 곳에 접속해라”만 하고,

그게 로컬이면 Docker Compose가 띄운 5432 포트의 PostgreSQL임.

  • 그래서 “연동 설정”은 .env 한 줄이고,

“그 한 줄이 왜 맞냐”는 docker-compose.yml과 .env.example을 우리가 서로 맞춰 놓았기 때문임.정리하면:

  • 도커 = 앱/DB 실행 환경을 통째로 포장해서, 로컬·서버 같게 쓰려고.
  • Docker Compose = 로컬에서 DB(PostgreSQL)·Redis를 “설정 포함”해서 한 번에 띄우는 설정.

계정·DB명은 여기 이미 있어서, 따로 받을 필요 없음.

  • Prisma = 앱이 DB 접근할 때 쓰는 도구.

DB는 로컬=Docker PostgreSQL, 배포=RDS. RDS는 “배포용 DB 서버”일 뿐, Prisma는 “그 DB에 붙는 방법”임.

  • 연동 = .env DATABASE_URL 한 줄.

docker-compose와 .env.example이 같은 값으로 맞춰져 있어서, 복사만 하면 “연동된 것처럼” 돌아가는 거임.

+ Recent posts