Skip to content
Open
Show file tree
Hide file tree
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
6 changes: 1 addition & 5 deletions week0/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,13 @@
# 필수
## www.google.com을 치면 일어나는일
Keywords : DNS, TCP/IP프로토콜, WS, WAS

---

## API, HTTP통신


---

## 백엔드가 하는 일

---

## 객체지향 특징 및 장점

---
Expand Down
193 changes: 193 additions & 0 deletions week0/[0주차]최세린.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
# [WEEK 0] 온보딩 (기간 : 9/16 ~ 9/22)

## COW SPRING 6기 PRE-ONBOARDING 학습 과제

본격적으로 Spring 학습에 들어가기 전에 여러분은 객체지향 코드에 대해 학습하고 이해하는 시간을 가지실겁니다!

객체지향 코드를 짜기 위해서는 우리가 사용할 언어인 JAVA에 대해 이해하고 있어야합니다.

이 온보딩 과제는 이번 COW Server 파트에 함께 하시는 7분의 개개인의 역량이 다르기 때문에 가장 최소한으로 알고 계셔야 할 내용을 중심으로 선정해봤어요!

많은 양의 정리를 요구하지 않는 과제이니 이해하신 내용을 토대로 간단하게 정리해주시면 됩니다. (1, 2, 3, 4기의 학습자료가 github에 나와있으니 참고하셔도 좋아요☺️)

개인적으로, 분명 학습했던걸 다 기억하실 수 없으실거예요! 저도 마찬가지이고요.. 공부했던 것을 잘 정리해두는 습관을 가지는 것은 분명 큰 도움으로 돌아올 것이라 생각합니다. 그런 의미로 다들 파이팅해봐요!

---

# 필수
## www.google.com을 치면 일어나는일
Keywords : DNS, TCP/IP프로토콜, WS, WAS
1. 브라우저는 www.google.com 의 해당 IP 주소를 찾기 위해 캐시에서 DNS를 탐색한다.

www.google.com (도메인) 을 IP 주소로 변환해야 한다. 모든 URL 에는 고유한 IP 주소가 할당 되어 있다.
따라서 우리는 URL 로 검색을 하지만 실제로는 IP 주소로 사이트에 접속할 수 있다.
이때 도메인과 매칭 되는 IP 주소를 찾아주는 역할을 바로 DNS (Domain Name System)이다.

2. 브라우저는 캐싱 된 DNS 기록을 확인한다.
라우저는 내가 이전에 google 에 방문한 적은 없었는지 내부적으로 여러 단계에 걸쳐서 DNS 캐시를 찾기 시작한다.

1. 브라우저 캐시: 가장 먼저 이전에 방문했던 웹사이트의 DNS 기록이 브라우저에 남아있는지 확인
2. OS 캐시: 브라우저에 기록이 없으면, 컴퓨터 운영체제(OS)가 저장하고 있는 캐시를 확인
3. 라우터 캐시: 컴퓨터에도 기록이 없다면, 공유기(라우터)에 저장된 캐시를 확인
4. ISP 캐시: 마지막으로 위의 모든 캐시에서 기록을 찾지 못하면, SK브로드밴드나 KT와 같은 인터넷 서비스 제공업체(ISP)의 캐시에서 DNS 기록을 찾음



3. 캐시를 찾지 못했다면, ISP 의 DNS 서버가 DNS 쿼리로 IP 주소를 찾기

ISP 는 DNS 서버에다가 DNS 쿼리를 보내기 시작한다. 예를 들어 "구글이라는 주소의 IP 주소를 알면 나에게 알려줘" 라며 여기저기 물어본다.
이를 IP 주소를 찾거나, 찾을 수 없다는 오류 응답을 받을때까지 반복한다. 이를 Recursive search 라고 한다.


4. 브라우저가 TCP/IP 프로토콜을 사용해 서버와 연결

알아낸 IP 주소를 바탕으로 서버와 클라이언트(브라우저) 간에 TCP 연결을 맺는다. 일반적으로 HTTP 요청에서는 TCP(Transmission Control Protocol) 라는 전송 제어 프로토콜을 사용한다.
이 과정에서 3-Way Handshake를 통해 신뢰성 있는 연결을 설정한다. HTTPS의 경우 TLS 핸드셰이크를 통해 데이터를 암호화한다.


5. 브라우저가 웹서버에 HTTP 요청 Web Server (WS) & Web Application Server (WAS)

TCP 연결이 되면 데이터를 전송합니다. 클라이언트는 GET 요청을 통해 서버에 www.google.com 의 웹페이지 데이터를 요구한다.
그럼 서버는 request 를 받아 처리고 그에 대한 응답을 생성해서 보내준다.


6. 브라우저가 HTML content를 보여준다.

브라우저는 응답 받은 HTML을 화면에 단계별로 표시한다.
1. HTML 골격을 렌더링한다.
2. HTML 태그를 확인하고 이미지, CSS 스타일시트, 자바스크립트 파일 등과 같은 웹 페이지의 추가 요소에 대한 GET 요청을 보낸다.

정적 파일(Static File)은 브라우저에서 캐싱되므로 다음에 페이지를 방문할 때 다시 가져올 필요가 없음
3. www.google.com 페이지가 브라우저에 나타나 사용자는 화면을 보게 된다.
---



## API, HTTP통신

API

응용 프로그램에서 사용할 수 있도록,
운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

API의 역할
1. 중개자 역할:

애플리케이션과 서버 사이에서 요청을 전달하고 응답을 받아오는 중간 창구 역할을 하며, 클라이언트는 서버의 내부 구조를 몰라도 필요한 기능만 가져다 쓸 수 있다.
2. 규칙가 명세 제공:

데이터를 요청할 때는 이런 형식으로 요청해야 해와 같은 명확한 규칙(명세)을 제공한다.
3. 보안 강화:

API는 서버의 모든 기능을 노출하는 것이 아니라, 허용된 기능과 데이터에만 접근할 수 있게한다.


HTTP 통신

HTTP
웹 브라우저와 웹 서버가 서로 데이터를 주고받기 위해 사용하는 핵심적인 통신 규칙(프로토콜).

HTTP의 특징
1. 요청과 응답:

항상 클라이언트의 요청이 먼저 있고, 그에 대해 서버가 응답
2. 비연결성:

클라이언트가 서버에 요청을 보내고 응답을 받으면, 그 연결은 바로 끊어짐
3. 무상태:

서버는 클라이언트의 이전 요청이나 상태를 기억하지 않고, 각각의 요청은 완전히 독립적인 것으로 취급

---

## 백엔드가 하는 일
1. 서버 개발 및 관리:
백엔드 개발자는 만들고 유지보수하는데 필요한 컴퓨터 시스템을 선택하고 설정하며, 이를 관리하고 안정적으로 운영한다.
2. 데이터베이스 관리:
사용자 정보, 게시글, 상품 목록 등 서비스에 필요한 모든 데이터를 저장, 조회, 수정, 삭제할 수 있도록 데이터베이스를 설계하고 관리한다.
3. API 개발 및 관리:
API를 사용하여 프로그램끼리 소통하는데 도움을 줄 수 있게 API를 설계하고 구현하여 클라이언트 애플리케이션과 원활한 대화를 할 수 있게 한다.
4. 보안:
해킹으로부터 데이터를 보호하고, 허가된 사용자만 특정 정보나 기능에 접근할 수 있도록 권한을 관리한다.
---

## 객체지향 특징 및 장점

특징
1. 추상화:
객체의 복잡한 내부 구현은 숨기고, 실제 사용에 필요한 핵심적인 기능(인터페이스)만 외부에 드러내는 것
2. 상속:
부모 클래스의 특징(속성과 메서드)을 자식 클래스가 그대로 물려받는 것
3. 다형성:
여러 가지 형태를 가질 수 있다'**는 의미로, 같은 이름의 메서드라도 객체의 종류에 따라 각기 다른 방식으로 동작하는 것
4. 캡슐화:
관련 있는 데이터(속성)와
기능(메서드)을 하나의 '캡슐' 즉, 객체로 묶는 것. 객체 외부에서는 내부의 데이터를 직접 접근하지 못하게 막고,
오직 허용된 기능(메서드)을 통해서만 접근할 수 있도록 하여 데이터를 보호한다.

장점
1. 코드 재사용성 증가:
상속을 통해 기존 코드를 쉽게 재사용
2. 생산성 향상 및 유지보수 용이:
캡슐화를 통해 각 객체가 독립적으로 작동하여, 특정 기능의 수정이나 추가가 다른 부분에 미치는 영향을 최소화하여 유지보수 용이
3. 높은 신뢰성:
캡슐화는 데이터를 외부로부터 보호하고, 추상화는 불필요한 세부사항을 숨겨줌
4. 대규모 프로젝트에 적합:
복잡하고 큰 문제를 작고 관리하기 쉬운 객체 단위로 나눌 수 있어, 여러 개발자가 협업하는 대규모 프로젝트를 체계적으로 관리가능

---

## 코드 컨벤션이란
읽고, 관리하기 쉬운 코드를 작성하기 위한 코딩 스타일 규약

규칙
1. 이름 규칙:

카멜 표기법(ex> camelCase)(변수, 함수) , 파스칼 표기법(ex> PascalCase)(클래스), 스네이크 표기법(ex> snake_case), 케밥 표기법(ex> kebab-case)
2. 들여쓰기 줄 바꿈:

들여쓰기는 스페이스 2칸, 4칸 또는 탭(tab) 중 하나로 통일, 한 줄의 코드 길이를 80자 또는 120자 등으로 제한
3. 주석:

주석 스타일(예: //, /* */, #)과 작성 방식을 통일

중요성
1. 가독성 향상
2. 유지보수 용이
3. 협업 효율 증대
4. 버그 예방


---

## MVC 패턴
MVC (Model-View-Controller) 패턴은 컴퓨터공학에서 소프트웨어 설계와 아키텍처를 위한 디자인 패턴 중 하나로
Model, View, Controller로 나누어 설계한다. 각 부분이 서로 독립적으로 작동하도록 만들어, 애플리케이션의 유지보수, 확장, 그리고 팀원 간의 협업을 쉽게 만들어준다.
1. 모델:
애플리케이션의 핵심 데이터와 그 데이터를 처리하는 규칙를 다루며, 데이터베이스와 직접 상호작용하며, 데이터의 상태가 변경되면 컨토롤러에게 알린다.

예시: 데이터베이스의 데이터 읽기, 쓰기, 수정, 삭제 / 데이터 유효성 검사
2. 뷰:
사용자에게 보여지는 화면을 담당한다.
모델로부터 받은 데이터를 사용자에게 보여주거나, 사용자의 입력을 받는 인터페이스를 제공한다.

예시: 사용자가 볼 화면을 그리고 렌더링/모델이 처리한 데이터를 시각적으로 표현
3. 컨트롤러:
컨트롤러는 Model과 View 사이의 중개자 역할을 한다.
사용자의 입력(요청)을 받아, 이를 어떻게 처리할지 결정하고,
그에 맞는 모델의 기능을 호출하여 데이터를 변경한 뒤, 변경된 데이터를 보여줄 뷰를 선택하여 사용자에게 전달한다.
예시: 사용자의 요청 먼저 받기/ 요청에 맞는 모델을 호출하여 데이터 처리를 지시

MVC패턴의 설계원칙
1. 각 구성 요소의 역할과 책임을 명확하게 구분
모델, 뷰, 컨트롤러는 독립적으로 작동하고, 각각의 역할에 집중해야한다.
1. 모델(Model): 데이터의 저장, 검색, 수정 등에 집중하며, 뷰와 컨트롤러에 대한 정보는 가지고 있지 않아야함
2. 뷰(View):사용자의 입력을 받아 컨트롤러에 전달하고, 데이터 표시에만 집중해야함
3. 컨트롤러(Controller): 사용자의 요청을 해석하고, 적절한 모델 함수를 호출하여 데이터를 처리한 후 결과를 뷰에 전달해야함
2. 구성 요소간의 결합도 최소화
결합도 최소화를 위해 구성 요소간의 직접적인 참조를 피하고, 각 구성 요소는 다른 구성 요소와의 의존성을 최소화해야한다.
3. 코드의 재사용성과 확장성 고려
각 구성 요소는 독립적이고 재사용 가능한 모듈로 개발하여 프로젝트의 규모가 커지거나 요구 사항이 변경될 때 쉽게 확장 및 수정 할 수 있도록 해야한다.

---