diff --git a/week0/README.md b/week0/README.md index 3087928..26bcf4c 100644 --- a/week0/README.md +++ b/week0/README.md @@ -17,17 +17,13 @@ # 필수 ## www.google.com을 치면 일어나는일 Keywords : DNS, TCP/IP프로토콜, WS, WAS - ---- - ## API, HTTP통신 + --- ## 백엔드가 하는 일 ---- - ## 객체지향 특징 및 장점 --- diff --git "a/week0/[0\354\243\274\354\260\250]\354\265\234\354\204\270\353\246\260.md" "b/week0/[0\354\243\274\354\260\250]\354\265\234\354\204\270\353\246\260.md" new file mode 100644 index 0000000..eb326c3 --- /dev/null +++ "b/week0/[0\354\243\274\354\260\250]\354\265\234\354\204\270\353\246\260.md" @@ -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. 코드의 재사용성과 확장성 고려 + 각 구성 요소는 독립적이고 재사용 가능한 모듈로 개발하여 프로젝트의 규모가 커지거나 요구 사항이 변경될 때 쉽게 확장 및 수정 할 수 있도록 해야한다. + +--- \ No newline at end of file