C
개발 도구/빌드_API/Lesson 03

빌드 + API — Maven · Gradle · curl · Postman

30분·theory

빌드 + API — Maven · Gradle · curl · Postman

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ Maven vs Gradle 선택 + Wrapper 사용 이유
  • ✅ curl + Postman + Newman 워크플로우
  • ✅ GitHub Actions 에서 API 회귀 테스트 자동화

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

Maven vs Gradle — Java 빌드 표준

한 줄: 의존성 + 빌드 + 테스트 + 배포의 자동화 도구.

항목MavenGradle
출시20042007
문법XML (pom.xml)Groovy / Kotlin DSL (build.gradle)
표현력선언적 (낮음)명령형 + 선언적 (높음)
빌드 속도느림 (~45s)빠름 (~12s, 증분 빌드)
캐시약함강함 (빌드 캐시 + 데몬)
학습 곡선낮음중간
AndroidX표준
한국 대기업많음증가 추세

같은 의존성, 다른 문법:

xml
<!-- Maven pom.xml -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
gradle
// Gradle build.gradle
implementation 'org.springframework.boot:spring-boot-starter-web'

> 💡 언제 뭐 쓸지: 신규 프로젝트 = Gradle. 기존 Maven 프로젝트 = 그대로. Spring Initializr 기본값도 Gradle.

💻 📌 ./gradlew vs gradle — 버전 고정이 핵심

curl + Postman — API 테스트

curl = 터미널 HTTP 클라이언트. CI · 디버깅 · 문서 예제 표준.

필수 옵션:

  • -X POST — 메서드
  • -H "Header: value" — 헤더 추가
  • -d '{"key":"value"}' — 본문 (POST/PUT)
  • -i — 응답 헤더 포함
  • -v — 자세히 (요청·응답 전체)
  • -o file — 파일로 저장
  • -L — 리다이렉트 따라감

예시:

bash
# GET
curl -i https://api.github.com/users/torvalds

# POST + JSON
curl -X POST https://api.example.com/login \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","password":"x"}'

# 인증 헤더
curl -H "Authorization: Bearer $TOKEN" https://api.example.com/me

# 파일 업로드
curl -X POST -F "[email protected]" https://api.example.com/upload

Postman = GUI + 협업 기능:

  • Collection — API 그룹 (팀과 공유)
  • Environment — dev/stage/prod 변수
  • Tests — JS 로 응답 검증 (pm.expect(...))
  • Mock Server — API 가짜 응답 (백엔드 없이 프론트 개발)
  • Newman — CLI 로 collection 자동 실행 (CI 통합)

> 💡 curl코드 예제·CI·빠른 디버그. Postman팀 협업·복잡한 시나리오. 둘 다 사용.

💻 📌 Postman + Newman CI — API 회귀 테스트 자동화
💻 📌 빌드·API 명령 모음
# === Maven ===
mvn clean package                   # 빌드 (테스트 포함)
mvn clean install -DskipTests       # 테스트 건너뛰고 로컬 repo 설치
mvn dependency:tree                 # 의존성 트리
mvn -pl module-a clean install      # 멀티 모듈에서 특정만
mvn versions:display-dependency-updates  # 의존성 업데이트 가능 목록

# === Gradle ===
./gradlew build                     # 빌드 + 테스트
./gradlew bootRun                   # Spring Boot 실행
./gradlew dependencies               # 의존성 트리
./gradlew :module-a:build           # 특정 모듈만
./gradlew build --scan              # 빌드 스캔 (시각화)
./gradlew clean build --refresh-dependencies  # 캐시 무시

# === npm / pnpm ===
npm install                         # package-lock.json 기반 설치
npm ci                              # 정확히 lock 대로 (CI 권장)
npm update                          # 마이너·패치 업데이트
npm outdated                        # 구버전 목록
pnpm install                        # npm 보다 디스크·속도 ↑

# === Python ===
python -m venv .venv                # 가상환경 생성
source .venv/bin/activate           # 활성화 (macOS/Linux)
.venv\Scripts\activate              # Windows
pip install -r requirements.txt
pip install -e .                    # 개발용 (편집 가능 설치)
pip freeze > requirements.txt        # 현재 상태 저장

# === curl 실전 ===
# 응답 시간 측정
curl -o /dev/null -s -w "%{time_total}\n" URL
# HTTP/2 확인
curl --http2 -I https://example.com
# 헤더만 (HEAD 메서드)
curl -I https://example.com
# 쿠키 저장·재사용
curl -c cookies.txt -d "user=x" URL/login
curl -b cookies.txt URL/dashboard

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 pom.xml 을 build.gradle.kts 로 마이그레이션해줘"
  • "이 의존성 그래프에서 충돌 + 중복 점검해줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

빌드 + API — Maven · Gradle · curl · Postman - 개발 도구