[Djang] 정의
HTTP(Hypertext Transfer Protocol)
인터넷에서 데이터를 주고받기 위한 프로토콜
클라이언트 - 서버 모델을 기반으로 동작하며, 웹 브라우저와 웹 서버 간의 통신에 주로 사용된다.
1. 요청과 응답
HTTP는 클라이언트가 서버에게 요청(request)를 보내고, 서버는 클라이언트에게 응답(Response)을 반환
2. URL(Uniform Resource Locator)
HTTP 요청은 URL을 사용하여 특정 리소스를 식별한다.
URL은 프로토콜 (http, https), 도메인, 포트 번호, 경로, 쿼리 등을 사용하여 구성된다.
3. 상태코드(Status Code)
HTTP 응답을 상태 코드로 나타낼 수 있다. 해당 요청의 처리 결과를 코드로 나타낸다.
200 OK : 성공적인 요청
404 Not Found : 리소스를 찾을 수 없음
500 Internal Server Error : 서버 내부 오류
4. 메서드(Method)
GET : 리소스 조회
POST : 데이터 전송 및 리소스 생성
PUT : 리소스 수정 또는 생성
DELETE : 리소스 삭제
5. 상태 정보 유지
HTTP 프로토콜 자체는 상태 정보(stateless)다. 각각의 요청과 응답이 독립적으로 처리된다.
사용자의 상태 정보 관리를 위해 쿠키(Cookie), 세션(Session), 토큰(Token) 등과 같은 기술들을 활용한다.
URL(Uniform Resource Locator)
URL은 사용자와 개발자 모두에게 의미있는 정보를 전달해야 한다.
웹 어플리케이션에서 리소스에 접근하기 위한 일관된 방법을 정의하는 과정이다.
URL 설계는 사용자 경험, 검색 엔진 최적화(SEO), 보안 등 다양한 측면을 고려하자.
1. 경로
경로는 계층적 구조를 가진다. 각 단계가 리소스의 계층구조와 일치하도록 만들자.
예를 들어 /products/electronics/mobilephone 과 같이 URL이 상위 카테고리부터 하위 카테고리까지 포함된 경로는
직관적이고 의미가 명확하다.
2. 동사보다 명사, 복수보다 단수
/product/electronic/mobilephone
/user/Kim <- users/Kim 보다는 자연스러운 표현
3. 대소문자 일관성
URL은 대소문자를 구별한다. 대부분 웹 서버도 대소분자를 구별한다. 일관성을 위해서 소문자 또는 대문자만 사용하는 것이 좋다.
4. 하이픈(-) 사용
단어 사이에 하이픈(-)을 넣어서 가독성을 높일 수 있다. 스페이스, 언더바(_)보다 하이픈으로 불리하는 것을 권장한다.
/product/electronic/mobile-phone
5. 쿼리 문자열
필터링, 정렬, 검색과 같은 추가 매개변수가 필요한 경우 쿼리 문자열(query string)을 활용할 수 있다.
/product?category=electronics$sort=price
6. RESTful 원칙
리소스를 식별 - 각 리소스마다 고유한 식별자(ID)가 포함되어야 한다.
메서드 사용, 계층 구조
정적 페이지(Static Page), 동적 페이지(Dynamic Page)
1. 정적 페이지
정적 페이지는 서버에 미리 작성된 HTML, CSS, JavaScript 등의 정적 파일로 구성된다.
파일은 서버에서 클라이언트에게 직접 전송되어 사용자에게 표시된다.
정적 페이지는 서버 측에서 별도의 처리나 데이터베이스와의 상호작용 없이 항상 동일한 내용을 제공한다.
정적 페이지는 웹 서버에서 캐싱되어 성능과 로딩 속도가 빠르고, 단순하고 안정적인 구조를 가진다.
2. 동적 페이지
동적 페이지는 서버 측에서 요청에 따라 동적으로 생성되는 웹 페이지다.
사용자 요청에 따라 데이터베이스 조회, 계산, API 호출 등을 통해 컨텐츠를 생성한다.
동적 페이지는 프로그래밍 언어와 데이터베이스(SQL)을 활용하여 필요한 작업을 수행하고 클라이언트에게 결과를 전달한다.
동적으로 만든 웹 어프리케이션은 사용자와 상호작용하고 개인화된 컨텐츠 제공과 같은 고급 기능을 구현하는 데 유리하다.
하지만, 요청마다 데이터 처리와 계산 과정을 거치므로 성능 면에서 더 많은 리소스를 필요로 한다.
프론트엔드(Frontend)와 백엔드(Backend)
프론트엔드는 사용자가 직접 상호작용하는 웹 어플리케이션의 시각적인 부분을 담당한다.
주로 웹 페이지의 디자인, 레이아웃, UI 요소를 구성하고 제어하는 역할을 한다.
HTML, CSS, JavaScript, UI/UX 디자인
백엔드는 서버 측에서 동작하는 부분, 데이터 처리, 로직 실행 등 서버와 관련된 동작을 한다.
서버 사이드 언어 : PHP, Python(Django), Java(Spring), Ruby(Rails), C#(ASP.NET) 등으로 다양한 언어로 로직을 구현한다.
데이터베이스 : 데이터 저장 및 검색에 사용되는 시스템으로 MySQL, PostSQL, MongoDB, MariaDB 등 다양한 종류가 있다.
API(Application Programming Interface) : 클라이언트와 서버 간의 통신 방식으로 데이터 교환 및 리소스 접근 제공 등에 활용된다.
메서드
클라이언트가 서버에게 요청을
1. GET 메서드
* 서버로부터 정보(리소스)를 요청하기 위해 사용된다.
* URL의 쿼리 문자열(query string)을 통해 데이터를 전송한다.
* 데이터는 URL의 일부로 포함되어 전송되기 때문에 주소창에 노출된다.
* 요청 파라미터는 key=value 형태로 전달되며, 여러 개의 파라미터는 & 기호로 구분된다.
* GET은 캐싱이 가능하고 북마크가 가능한 특성을 가진다. idempotent(멱등성)한 특징을 가진다.
(동일한 요청이 여러번 실행되도 동일한 결과가 나와야 한다.)
* 주로 데이터 조회나 검색 등에서 사용된다.
2. POST 메서드
* POST는 서버에게 리소스를 생성하거나 수정하기 위해 사용된다.
* 요청 바디(body)에 포함되어 전송된다.
* URL 상에 데이터가 노출되지 않으므로 보안적인 면에서 우수하다.
* POST 요청은 중복 실행 시 같은 작업이 반복되거나 부작용이 발생할 수 있으므로 idempotent하지 않다. (예외 존재)
* 주로 회원가입, 로그인, 폼 제출 등에서 사용된다.
3. PUT 메서드
* PUT은 서버에게 리소스를 생성하거나 수정하기 위해 사용된다.
* 요청 (body)에 포함하여 데이터를 전송한다.
* 주로 클라이언트가 서버에게 업데이트할 리소스의 전체 내용을 보내는 경웅에 사용된다.
* 예를 들어, 게시글 전체 내용을 수정, 파일을 업로드 하는 등에서 사용한다.
4. DELETE 메서드
* DELETE는 서버에게 특정 리소스를 삭제하기 위해 사용된다.
* 주로 해당 URL의 리소스를 삭제하는 요청을 보낼 때 사용된다.
* DELETE 요청 idempotent한 특성을 가진다. 동일한 요청이 여러번 와도 동일한 결과가 나와야 한다.
* 예를 들어, 게시글 삭제, 회원 탈퇴 등에서 사용할 수 있다.