Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[8주차] 박진현 학습 PR 제출합니다. #38

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions week08/박진현.md
Original file line number Diff line number Diff line change
@@ -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` 어노테이션을 사용하여 연관 관계의 주인을 지정