TIL

TIL - HTTP 웹 기본 지식

yolang 2025. 1. 20. 22:21
728x90

📚 Today's TODO

[어제 한 것]

✅ 풀스택 GPT 코드 챌린지 제출 - QuizGPT

[오늘]

❌모든 개발자를 위한 HTTP웹 기본 지식 다 듣기

  • ✅ 섹션 5. HTTP 메서드
  • ✅ 섹션 6. HTTP 메서드 활용
  • ✅ 섹션 7. HTTP 상태코드
  • ▶️섹션 8. HTTP 헤더 1

📡 새로 알게 된 내용

  • 멱등: 한번 호출하든 여러 번 호출하든 결과가 똑같다.
    • POST 는 멱등이 아니다. 서버를 변경하는 것이여서 아예 대체하거나 삭제하지 않기 때문.
    • 리소스의 ID가 클라이언트에 의해 지정되지 않습니다. 대신 서버가 생성합니다.
      • 이게 포인트인데 PUT은 지정되어 있어서 딱 그것만 작업하는 반면에 POST는 ID가 식별되지 않아 같은 것이 여러 개 생길 수도 있다.
      • 서버가 관리하는 Resource directory, 즉 서버가 resource의 URI를 관리하는 것을 Collection이라고 함
      • 반면에 클라이언트가 관리하는 Resource directory 는 Store이라고 함
      • 대부분 Collection이고 파일, 게시판 같은 경우에 Store을 사용
      • POST는 Collection, PUT은 Store
  • POST는 request 내용을 body에 넣고 GET을 쓰면 쿼리 파라미터로 넣어버림! GET은 조회할 때만 쓰기!
  • multipart/form-data를 사용하면 자동으로 body부분을 나눠서(Multipart) body에 넣음
  • HTML FORM은 GET, POST만 지원함
  • Control URI: HTTP CRUD로만 해결하기 애매할 경우 동사로 된 리소스 경로 사용하는 것
  • 📌 URI 설계 개념: https://restfulapi.net/resource-naming/
 

REST API URI Naming Conventions and Best Practices

In REST, having a strong and consistent REST resource naming strategy – will prove one of the best design decisions in the long term. Let's discuss.

restfulapi.net

  • 상태 코드: 매우 다양하게 존재하지만 프로젝트 시 팀에서 몇 개만 쓰자고 합의하고 쓰는게 좋음
    • 201 Created | 202 Accepted | 204 No Content
    • 301, 308 영구 리다이렉트 | 302, 307, 303 일시 리다이렉트
    • PRG(Post / Redirect / Get): 중복 주문을 방지하기 위해 POST 사용 후에 GET 으로 redirect
      • 이렇게 하면 새로고침을 해도 결과 화면을 GET으로 조회
    • 4xx, 5xx: 이 오류를 서버 개발자가 잘 지정해 두는 것이 중요하다. 어디의 오류인지 잘 해놔야 클라이언트 잘못인지, 서버 잘못인 지 구분 할 수 있기 때문
      • 401 인증 문제, 403 Forbidden, 404 Not found
      • 500 서버 문제, 503 서버 과부하 - 진짜 서버의 문제일 때만 발생시키기

🗃️ SQL 문제 - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

  1. Group By를 적용하지 않아 틀렸다가
  2. DURATION_TYPE을 WHERE에서 걸러서 틀렸다가
  3. START_DATE, END_DATE를 거르는 과정에서 틀렸었다.
더보기
SELECT C.CAR_ID, C.CAR_TYPE, FLOOR(C.DAILY_FEE * 30 * (1 - D.DISCOUNT_RATE / 100))  AS FEE
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY R
ON C.CAR_ID = R. CAR_ID
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN D
ON C.CAR_TYPE = D.CAR_TYPE AND
    D.DURATION_TYPE = '30일 이상'
WHERE (C.CAR_TYPE = '세단' OR C.CAR_TYPE = 'SUV') 
    AND C.CAR_ID NOT IN (SELECT CAR_ID 
                                 FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
                                WHERE NOT (END_DATE < '2022-11-01' OR 
                                           '2022-11-30' < START_DATE))
    AND ((C.DAILY_FEE * 30 * (100 - D.DISCOUNT_RATE) / 100) BETWEEN 500000 AND 2000000 OR 
         (C.DAILY_FEE * 30) BETWEEN 500000 AND 2000000)
GROUP BY C.CAR_ID
ORDER BY 
    FEE DESC, 
    C.CAR_TYPE ASC, 
    C.CAR_ID DESC;

👻 오늘 하루 복기

저번 프젝할때 URI를 아주 엉망진창으로 했다는 것을 알게 되었다..ㅎㅎ 보고도 참아준 팀원들에게 미안함이..ㅠㅠㅠ

오늘 정말정말 공부가 안된 날이다 ㅠㅠㅠㅠㅠ 슬픔 미세먼지 때문인가.. ㅋㅋ

푹 쉬고 내일 다시 계획 좀 세우고 해야지

728x90