25.4.2.수 최종프로젝트 2일차

kinkin_a·2025년 4월 2일

내일배움캠프 TIL

목록 보기
82/100

경매 사이트 참고해서 경매 기능 구현하기로 결정.

-API 작성할 땐, RESTful 규칙 반드시 지킬 것

RESTful 규칙 다시 복습

RESTful API에서 URL(엔드포인트) 설정을 자세히 설명해줄게!


1️⃣ 기본 원칙

URL은 명사(리소스)로 표현해야 함

  • RESTful에서는 URL이 리소스를 나타내야 해.
  • 동작(행위)은 HTTP 메서드(GET, POST, PUT, DELETE)로 표현하면 되므로 URL에는 동사를 포함하지 않는다.

✅ 올바른 예시:

GET /users          → 모든 사용자 조회
GET /users/1        → ID가 1인 사용자 조회
POST /users         → 새로운 사용자 생성
PUT /users/1        → ID가 1인 사용자 정보 수정
DELETE /users/1     → ID가 1인 사용자 삭제

❌ 잘못된 예시:

GET /getUser/1        → `get` 같은 동사를 쓰면 안 됨
POST /createUser      → `create` 같은 동사를 쓰면 안 됨
DELETE /deleteUser/1  → `delete` 같은 동사를 쓰면 안 됨

2️⃣ 컬렉션과 개별 리소스 표현

RESTful API에서는 리소스(컬렉션)과 개별 항목을 URL에서 명확하게 구분해야 해.

개념URL 예시
컬렉션(리소스 목록)/users (사용자 전체 목록)
개별 리소스(하나의 항목)/users/1 (ID 1번 사용자)

✅ 올바른 예시:

GET /books       → 모든 책 조회
GET /books/123   → ID 123인 책 조회

3️⃣ 계층 구조 표현 (하위 리소스)

RESTful에서는 계층적인 관계를 URL 경로로 표현하는 것이 일반적이야.
예를 들어, 특정 사용자의 주문을 조회한다고 해보자.

✅ 올바른 예시:

GET /users/1/orders       → ID 1번 사용자의 모든 주문 조회
GET /users/1/orders/10    → ID 1번 사용자의 주문 ID 10번 조회

왜 이렇게 쓰는 걸까?

  • /users/1 → ID가 1인 사용자를 의미
  • /users/1/orders → ID 1번 사용자의 주문 목록
  • /users/1/orders/10 → ID 1번 사용자의 주문 ID 10번

❌ 잘못된 예시:

GET /getUserOrders?userId=1   → 동사 포함 ❌
GET /user-orders/1            → 비일관적인 네이밍 ❌

4️⃣ 필터링, 정렬, 검색은 쿼리 스트링 사용

  • 특정 기준으로 데이터를 필터링하거나, 정렬하거나, 검색할 때는 쿼리 스트링을 사용해.

✅ 올바른 예시:

GET /books?category=fiction        → 카테고리가 "fiction"인 책 조회
GET /books?sort=price_asc          → 가격 오름차순 정렬
GET /books?author=Hemingway        → 작가가 Hemingway인 책 검색
GET /books?limit=10&offset=20      → 20번째부터 10개 가져오기 (페이징)

❌ 잘못된 예시:

GET /books/sort/price_asc        → 리소스처럼 보이지만, 정렬은 동작이므로 ❌
GET /books/category/fiction      → 필터링을 리소스처럼 표현하면 ❌

5️⃣ 상태 변경을 위한 URL

✅ 올바른 예시:

POST /users/1/activate       → ID 1번 사용자를 활성화
POST /users/1/deactivate     → ID 1번 사용자를 비활성화

❌ 잘못된 예시:

GET /users/1/activate        → `GET`은 데이터를 조회할 때 사용해야 함 ❌

이렇게 POST를 사용하는 이유는 상태 변경은 "행위"에 해당하기 때문이야.


6️⃣ 관계(연관 데이터) 표현

다대일 관계

예를 들어, 책(book)이 여러 개의 리뷰(review)를 가질 수 있다면:

GET /books/123/reviews       → ID 123인 책의 모든 리뷰 조회
GET /books/123/reviews/5     → ID 123인 책의 리뷰 ID 5 조회

다대다 관계

예를 들어, 한 사용자가 여러 개의 책을 좋아할 수 있다면:

GET /users/1/favorites       → ID 1번 사용자가 좋아하는 책 목록 조회
POST /users/1/favorites/99   → ID 1번 사용자가 ID 99번 책을 좋아요 추가
DELETE /users/1/favorites/99 → ID 1번 사용자가 ID 99번 책 좋아요 취소

7️⃣ RESTful API URL 설계 가이드라인 정리

좋은 URL 예시

GET /products         → 전체 상품 목록 조회
GET /products/5       → ID가 5인 상품 조회
POST /products        → 새 상품 추가
PUT /products/5       → ID 5번 상품 전체 수정
PATCH /products/5     → ID 5번 상품 일부 수정
DELETE /products/5    → ID 5번 상품 삭제

GET /users/1/orders   → ID 1번 사용자의 모든 주문 조회
GET /users/1/orders/7 → ID 1번 사용자의 주문 ID 7번 조회

잘못된 URL 예시

GET /getAllProducts      → `GET /products`가 더 RESTful함
POST /addProduct         → `POST /products`가 더 RESTful함
DELETE /removeProduct/5  → `DELETE /products/5`가 더 RESTful함

  • 일단 coupon crud부터 시작.

mac에 mysql , redis 설치.
mysql은 예전에 설치하고 intelliJ에 연결이 안돼서 잠시 뒀다가 다시 설정
터미널에 mysql실행 후 비밀번호를 입력해 mysql실행.
인텔리제이에서 아이디랑 비밀번호 입력해서 연결.

Test Connection 위에 드라이버 먼저 다운 받은 후 실행..

redis 는 mac에서 정말 간편하게 설치가 가능했다.

터미널에서

brew install redis

명령어만 입력하면 끝

brew services start redis

그 후 redis 서버 실행해서

redis-cli ping
pong

이라고 뜨면 실행 완료.

그 후 intelliJ에서 redis noAuth로 바로 연결하면 된다.

사실 보안을 위해선 비밀번호 꼭 설정해줘야함.

0개의 댓글