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가 무슨 역할인지
OS 선택, 인스턴스 타입(CPU/메모리), 디스크, 보안 그룹 등 서버 한 대를 우리가 직접 설정·관리하는 서비스임.
- EC2 = AWS가 주는 가상 서버 한 대.
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)를 적어 둠.
- 실제로 서버를 띄울 때:
- ECS가 “새 태스크(컨테이너) 하나 띄워라”고 지시하고,
- 그 태스크를 맡은 실행 환경(Fargate 등)이 그 주소로 ECR에 접속해서 이미지를 pull 하고,
- 그 이미지로 컨테이너를 만들어서 실행함.
- 그 실행 중인 컨테이너가 곧 우리가 말하는 “서버”(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. 캐시
예:
- 이슈 리스트 조회 결과 캐싱
- 통계 결과 캐싱
- 자주 조회되는 데이터
흐름:
→ DB 부하 감소 + 속도 향상
3. Rate Limit
예:
Redis에 카운터 저장:
4. Pub/Sub (실시간 기능)
예:
- 실시간 알림
- 댓글 알림
- WebSocket 브로드캐스트
5. 작업 큐 (백그라운드 처리)
예:
- 이메일 발송
- AI 처리
- 로그 집계
Redis는 queue 시스템으로도 많이 쓰임 (BullMQ 등)
왜 Docker Compose에 Redis도 같이 띄우는지
로컬에서:
하면
- PostgreSQL
- Redis
둘 다 실행됨.
왜?
→ 배포 환경에서도 Redis 쓸 거라서
→ 로컬에서도 동일하게 테스트하려고
배포 환경에서는?
로컬:
- Docker Redis
AWS:
- 보통 ElastiCache (Redis managed 서비스)
구조:
아키텍처 전체 그림 정리
로컬
브라우저
→ 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
연계 흐름 (배포 기준):
- 프론트/백 → ECS에서 도커 이미지로 실행 (같은 Next.js 앱)
- 그 앱의 Prisma → DATABASE_URL(SSM에서 주입)이 가리키는 RDS에 접속
- 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이 같은 값으로 맞춰져 있어서, 복사만 하면 “연동된 것처럼” 돌아가는 거임.
'[React] Front-End' 카테고리의 다른 글
| Next.js 프로젝트 AWS 배포 시 고민한 것들 – App Runner, ECS, Lambda, EKS (0) | 2026.02.11 |
|---|---|
| Next.js부터 GitHub 연동까지: JIRA 클론 기술 해부 Phase 1: 기반 구축 (0) | 2026.02.05 |
| [TypeScript] 타입스크립트 기본 / 타입 / 연습 (0) | 2021.10.18 |
| [Deploy]우여곡절 많은 React netlify 배포 Page Not Found 와 Deploy Failed의 향연 (0) | 2021.10.12 |
| [FE] React 공통 컴포넌트 만들기 : 예제) 버튼(button) (0) | 2021.10.11 |