From 2777055bd080677731127ba81c6d15a8c24c3374 Mon Sep 17 00:00:00 2001 From: jinhyeon Date: Tue, 14 May 2024 22:32:39 +0900 Subject: [PATCH] =?UTF-8?q?docs:8=EC=A3=BC=EC=B0=A8=20=EA=B3=BC=EC=A0=9C?= =?UTF-8?q?=20=EC=A0=9C=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\353\260\225\354\247\204\355\230\204.md" | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 "week08/\353\260\225\354\247\204\355\230\204.md" diff --git "a/week08/\353\260\225\354\247\204\355\230\204.md" "b/week08/\353\260\225\354\247\204\355\230\204.md" new file mode 100644 index 0000000..415c57a --- /dev/null +++ "b/week08/\353\260\225\354\247\204\355\230\204.md" @@ -0,0 +1,104 @@ +# COW MVC PRACTICE 학습 저장소 +Postman을 사용하여, 여러분이 직접 api를 설계합니다. 그 다음 여러분이 스프링을 사용하여 웹 서버를 구현하고 Postman을 통해 요청에 대한 적절한 응답이 왔는 지를 확인하는 것이 이번 과제의 +최종 목표입니다. +## 📮 미션 제출 방법 +- 미션 구현을 완료한 후 GitHub을 통해 제출해야 한다. + - [미션 구현 저장소] [docker 사용 버전](https://github.com/Hoya324/cow_mvc_practice) 또는 [h2 사용 버전](https://github.com/Hoya324/cow_mvc_session) 에 자신의 작성한 미션 pr 작성 + - docker 환경 설정이 어려운 경우 h2 사용 권장합니다. + - 미션 구현에서 기록한 md파일은 [COW-Spring-3](https://github.com/COW-edu/COW-Spring-3/tree/main/week08) 리포지토리에 pr 작성 + - 미션 구현 pr 링크 첨부(필수) +--- + +현재 목표가 웹 서버를 개발하기에 인터넷, http, Rest Api에 대해서 조사하시면 여러분들에게 도움이 될 것 같습니다. + +또 추가적으로 DB를 잘 모르시는 분들에게 엔터티간의 관계, 1:1 1:N 처리에 문제가 생길 수 있기에 추가적으로 학습하셔도 좋을 것 같습니다. + +5/14 화요일 23:59 까지 제출해주시면 되겠습니다. + +## [필수] + +## 1. 인터넷과 네트워크 + +**네트워크** + +네트워크는 두 개 이상의 컴퓨터나 장치가 서로 데이터를 공유하고 통신할 수 있도록 연결된 시스템으로 유선(예: 이더넷 케이블) 또는 무선(예: Wi-Fi, Bluetooth) 방식으로 이루어질 수 있다. + +네트워크의 두가지 분류 + +- 로컬 에어리어 네트워크(Local Area Network, LAN): 한정된 지역(예: 집, 사무실, 학교) 내에서 여러 장치를 연결하는 네트워크. 일반적으로 빠른 데이터 전송 속도를 제공하며, 관리자가 네트워크를 관리 +- 와이드 에어리어 네트워크(Wide Area Network, WAN): 지리적으로 넓은 범위(예: 도시, 국가, 세계)에 걸쳐 장치들을 연결하는 네트워크 EX)인터넷 + +**인터넷** + +인터넷은 전 세계적으로 분산된 수많은 네트워크를 하나로 연결하는 거대한 네트워크의 네트워크 + +인터넷은 TCP/IP(Transmission Control Protocol/Internet Protocol)라는 표준 프로토콜을 사용하여 다양한 네트워크 간의 통신을 가능하게 함 + +## 2. http란 + +- **HyperText Transfer Protocol의 약자** +- 텍스트 기반의 통신 규약 인터넷에서 데이터를 주고받을 수 있는 프로토콜 +- 규약을 정해놓았기때문에 모든 프로그램이 이규약에 맞춰 개발하여 서로 정보를 교환가능 +- 클라이언트가 브라우저를 통해 어떠한 서비스를 url을 통하거나 다른것을 통해 요청하면 서버에서 해당요청사항에 멎는 결과를 찾아 사용자에게전달 + + + +## 3. http메서드 + +- 클라이언트와 서버사이에 이뤄지는 요청과 응답데이트를 전송하는 방식 +- 총 9가지 주로 get, post, put, patch, delete 사용 + +1. get 특정 리소스의 표시를 요청(리소스 조회) +2. post 요청 데이터 처리, 주로 데이터 등록 +3. put 리소스를 대체, 해당 리소스가 없으면 생성 +4. PATCH: 리소스를 일부만 변경 +5. Delete: 리소스 삭제 + +## 4. http 상태코드 + +상태 코드는 IETF (Internet Engineering Task Force)에서 정의한 인터넷 표준에 따라 개발되며, 다섯가지 클래스로 분류 + +**1xx: Informational - 요청 정보 처리 중** + +서버가 요청을 클라이언트에서 성공적으로 수신했으며 서버 끝에서 처리 중이라는 정보를 나타낸다. 서버의 임시 응답이며 일반적으로 상태 줄과 선택적 헤더 만 포함하며 빈 줄로 끝난다. 현재는 거의 사용하지 않는다. + +**2xx: Success - 요청을 정상적으로 처리함** + +서버가 요청을 받고 성공적으로 처리되었음을 나타낸다. + +**3xx: Redirection - 요청을 완료하기 위해 추가 동작 필요** + +브라우저는 자동으로 다른 URL로 리디렉션되므로 브라우저 창에는이 코드가 표시되지 않지만, 이미지 파일처럼 캐싱된 파일을 새로고침 후 확인하면 3xx 코드를 확인할 수 있다. + +**4xx: Client Error - 서버가 요청을 이해하지 못함** + +서버가 해결할 수 없는 클라이언트 측 에러 코드다. 주로 클라이언트(사용자)가 서버에 잘못된 요청을 했을 경우 발생한다. + +**5xx: Server Error - 서버가 요청 처리 실패함** + +서버가 클라이언트의 요청을 처리하지 못했을 때 발생한다. 서버는 보안 상 통신하지 않는 것이 가장 좋으므로 대부분의 에러 코드를 500 Error로 처리한다. + +## 6. RestAPI + +**RestAPI(Representational State Transfer API)는 웹 상에서 사용되는 여러 자원(Resource)을 HTTP 프로토콜을 기반으로 CRUD(Create, Read, Update, Delete) 연산을 수행할 수 있게 해주는 인터페이스** + +**RestAPI 핵심 원칙** + +- 자원(Resource) 중심의 설계: 각 자원은 고유한 URI를 가지며, 자원에 대한 행위는 HTTP 메소드를 통해 표현 +- 캐시 처리 가능**:** HTTP 프로토콜의 특성을 활용하여 응답을 캐시할 수 있으므로, 네트워크 트래픽을 줄이고 성능을 향상 +- 무상태성: ****서버가 클라이언트의 요청을 처리할 때, 이전에 이루어진 요청의 상태 정보를 저장하지 않는다 +- **Client–server** 구조: 클라이언트와 서버는 서로 독립적이어야 하며, 클라이언트는 오직 URIs 리소스만 알아야 한다. +## [추가] + +## Entity간의 연관 관계의 주인 +엔터티 간의 연관 관계에서 '연관 관계의 주인(Owner)'이란, 두 엔터티 사이의 관계에서 데이터베이스 상의 외래 키(Foreign Key)를 관리하는 쪽 + +**연관 관계의 주인 이 중요한 이유** + +- 데이터 일관성: 데이터베이스의 외래 키는 하나만 존재하기 때문에, 양방향 연관 관계에서는 두 엔터티 중 하나만이 외래 키를 관리. 이를 통해 데이터의 일관성을 유지 +- 성능: 엔터티 간의 관계를 효율적으로 관리함으로써 성능 이슈를 최소화 +- 명확성: 연관 관계의 주인을 명확히 함으로써 코드의 가독성과 유지보수성을 향상 + +**JPA에서의 연관 관계의 주인** + +JPA(Java Persistence API)에서는 `@JoinColumn` 어노테이션을 사용하여 연관 관계의 주인을 지정 \ No newline at end of file