Skip to content

Commit e9282f6

Browse files
authored
update: qna list week-16~18 (#77)
1 parent 5702397 commit e9282f6

File tree

5 files changed

+586
-3
lines changed

5 files changed

+586
-3
lines changed

네트워크/README.md

+119-1
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,122 @@
137137
<li>4xx (Client Error) : 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음</li>
138138
<li>5xx (Server Error) : 서버 오류, 서버가 정상 요청을 처리하지 못함.</li>
139139
</ul>
140-
</details>
140+
</details>
141+
<details>
142+
<summary><strong>💡 쿠키와 세션의 차이</strong></summary>
143+
<ul>
144+
<li>쿠키는 웹사이트 접속시 접속자의 개인장치에 다운로드 되고 브라우저에 저장되는 데이터이다.</li>
145+
<li>세션는 웹사이트 접속시 방문자메모리에 저장하는 것이 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아가고 있는 서버에 저장을 하는것을 말한다.</li>
146+
<li>차이점
147+
<ol>
148+
<li>정보가 저장되는 위치가 다르다 -> 쿠키는 클라이언트(브라우저)에 저장. 서버는 세션에 저장</li>
149+
<li>보안 면에서 세션이 우수하다 (서버에서 처리를 해주므로)</li>
150+
<li>속도는 쿠키가 빠르다 (서버를 이용하지 않으므로)</li>
151+
</ol>
152+
</li>
153+
</ul>
154+
</details>
155+
156+
<details>
157+
<summary><strong>💡 GET와 POST의 차이점</strong></summary>
158+
<ul>
159+
<li>GET 은 데이터를 조회하기 위해 사용되는 방식으로 데이터를 헤더에 추가하여 전송하는 방식이다.
160+
<ul>
161+
<li>URL에 데이터가 노출되므로 보안적으로 중요한 데이터를 포함해서는 안된다.</li>
162+
</ul>
163+
</li>
164+
<li>POST 는 데이터를 추가 및 수정하기 위해 사용되는 방식으로 데이터를 HTTP 메세지의 body에 추가하여 전송하는 방식이다.
165+
<ul>
166+
<li>URL에 데이터가 노출되지 않아 GET 보다는 비교적 안전하다.</li>
167+
<li>HTTP 메세지의 body는 길이 제한이 없기 때문에 대용량 데이터를 전송할때 적합하다. </li>
168+
</ul>
169+
</li>
170+
<img width="476" alt="스크린샷 2023-02-26 21 39 41" src="https://user-images.githubusercontent.com/67703882/221411001-3acb3111-edd6-48c8-b6ff-bbe841729515.png">
171+
</ul>
172+
</details>
173+
<details>
174+
<summary><strong>💡 URL와 URI의 차이점</strong></summary>
175+
<ul>
176+
<li>URI(Uniform Resource Identifier)
177+
<ul>
178+
<li>특정 리소스를 식별하는 통합 자원 식별자를 의미한다.</li>
179+
<li>웹 브라우저 파일을 비롯한 리소스를 식별하는 고유한 문자열 시퀀스이다.</li>
180+
</ul>
181+
</li>
182+
<li>URL(Uniform Resource Locator)
183+
<ul>
184+
<li>컴퓨터 네트워크 상에서 통합 자원(리소스)가 어디에 위치하고 있는지 나타내기 위한 규약이다.</li>
185+
<li>URI의 서브셋이다.</li>
186+
<li>어떻게 위치를 찾고 도달할 수 있는지까지 포함되어야하기 떄문에 프로토콜(http,https,ftp 등) + 이름 의 형태여야한다. </li>
187+
</ul>
188+
</li>
189+
</ul>
190+
</details>
191+
<details>
192+
<summary><strong>💡 DNS란</strong></summary>
193+
<ul>
194+
<li>컴퓨터의 주소를 찾기 위해, 사람이 이해할 수 있는 Domain Name과 숫자로 된 IP 주소를 서로 변환하는 역할을 한다.</li>
195+
<li>라우팅 시, 많은 Domain이 존재하기 때문에 계층적으로 분리하여 DNS를 관리한다.
196+
<ol>
197+
<li>Root DNS 서버
198+
<ul>
199+
<li>가장 최상위에 위치한다.</li>
200+
<li>ICANN(국제인터넷주소관리기구)에서 관리한다.</li>
201+
<li>도메인에 따라 다음 DNS 서버로 라우팅한다.</li>
202+
</ul>
203+
</li>
204+
<li>TLD(Top Level Doamin) 서버
205+
<ul>
206+
<li>.org .com과 같은 일반 최상위 도메인</li>
207+
<li>.kr등 국가 코드 최상위 도메인</li>
208+
<li>최상위 도메인의 IP를 저장한다.</li>
209+
<li>이후, 도메인과 연관된 다음 DNS 서버로 라우팅한다.</li>
210+
</ul>
211+
</li>
212+
<li>Authoritative DNS Server
213+
<ul>
214+
<li>도메인과 IP 주소를 변환한다.</li>
215+
<li>최종 도착지 도메인의 IP 주소를 얻는다.</li>
216+
</ul>
217+
</li>
218+
<li>Recursive DNS Server (DNS resolver)
219+
<ul>
220+
<li>최종 도착지 도메인의 정보를 캐싱한다.</li>
221+
<li>DNS 서버가 안내하는 정보에 따라 라우팅한다.</li>
222+
</ul>
223+
</li>
224+
</ol>
225+
</li>
226+
</ul>
227+
</details>
228+
229+
<details>
230+
<summary><strong>💡 PUT, POST, PATCH 비교</strong></summary>
231+
<ul>
232+
<li><strong>POST</strong>: 자원 생성
233+
<ul>
234+
<li><a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/POST">https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/POST</a></li>
235+
<li><a href="https://developer.mozilla.org/ko/docs/Glossary/Idempotent">멱등성</a> X</li>
236+
</ul>
237+
</li>
238+
<li><strong>PUT</strong>: 자원 생성 및 전체 수정(대체)
239+
<ul>
240+
<li><a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/PUT">https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/PUT</a></li>
241+
<li>자원 생성으로 동작할 경우 201로 응답해야한다.</li>
242+
<li>멱등성 O</li>
243+
</ul>
244+
</li>
245+
<li><strong>PATCH</strong>: 자원 부분 수정
246+
<ul>
247+
<li><a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/PATCH">https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/PATCH</a></li>
248+
<li>자원 생성으로 동작할 경우 201로 응답해야한다.</li>
249+
<li>멱등성 X</li>
250+
</ul>
251+
</li>
252+
</ul>
253+
</details>
254+
255+
<details>
256+
<summary><strong>💡 DHCP Server 역할</strong></summary>
257+
DHCP(Dynamic Host Configuration Protocol, 동적 호스트 설정 프로토콜) 서버는 IP를 보유하고, 클라이언트들에게 동적으로 IP 주소를 할당한다.
258+
</details>

데이터베이스/README.md

+40-2
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,6 @@
119119
<li>데이터가 저장된 레코드 주소 : 인덱스 목록에 있는 페이지 번호</li>
120120
</ul>
121121
</details>
122-
123-
124122
<details>
125123
<summary><strong>💡 INNER JOIN vs OUTER JOIN</strong></summary>
126124
<ul>
@@ -165,4 +163,44 @@
165163
</ul>
166164
</li>
167165
</ul>
166+
</details>
167+
168+
<details>
169+
<summary><strong>💡 SQL vs NoSQL</strong></summary>
170+
<ul>
171+
<li><strong>SQL</strong>
172+
<ul>
173+
<li>관계형 데이터베이스 (Structured Query Language)</li>
174+
<li>데이터는 정해진 스키마에 따라 테이블에 저장</li>
175+
<li>데이터는 관계를 통해 여러 테이블에 분산</li>
176+
<li>장점
177+
<ul>
178+
<li>명확하게 정의 된 스키마, 데이터 무결성 보장</li>
179+
<li>관계는 각 데이터를 중복없이 한번만 저장</li>
180+
</ul>
181+
</li>
182+
</ul>
183+
</li>
184+
<li><strong>NoSQL</strong>
185+
<ul>
186+
<li>비관계형 데이터베이스</li>
187+
<li>sql과는 다르게 스키마와 관계가 없음</li>
188+
<li>어떠한 데이터의 형태도 저장 가능</li>
189+
<li>장점
190+
<ul>
191+
<li>스키마가 없기때문에, 훨씬 더 유연. 언제든지 저장된 데이터를 조정하고 새로운 "필드"를 추가 할 수 있음.</li>
192+
<li>데이터는 애플리케이션이 필요로 하는 형식으로 저장. → 데이터를 읽어오는 속도가 빨라짐</li>
193+
<li><strong>수직 및 수평 확장</strong>이 가능하므로 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기 / 쓰기 요청을 처리 할 수 있음.</li>
194+
</ul>
195+
</li>
196+
</ul>
197+
</li>
198+
</ul>
199+
</details>
200+
<details>
201+
<summary><strong>💡 인덱스의 장단점</strong></summary>
202+
<ul>
203+
<li>장점: 데이터 탐색의 성능이 향상된다.</li>
204+
<li>단점: 데이터 삽입/삭제 시 인덱스가 변경되기 때문에 성능이 떨어질 수 있다.</li>
205+
</ul>
168206
</details>

디자인패턴/README.md

+113
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,117 @@
99
<li>Controller: 명령을 Model과 View로 라우팅</li>
1010
</ul>
1111
<img src="https://user-images.githubusercontent.com/70627979/221409309-01e157c8-937d-4dbb-8cef-f610fa067359.png" alt="image" style="zoom: 25%;" />
12+
</details>
13+
14+
<details>
15+
<summary><strong>💡 SOLID 원칙</strong></summary>
16+
<ul>
17+
<li>SRP(Single Responsibility Principle): 단일 책임 원칙</li>
18+
<li>OCP(Open Closed Priciple): 개방 폐쇄 원칙</li>
19+
<li>LSP(Listov Substitution Priciple): 리스코프 치환 원칙</li>
20+
<li>ISP(Interface Segregation Principle): 인터페이스 분리 원칙</li>
21+
<li>DIP(Dependency Inversion Principle): 의존 역전 원칙</li>
22+
</ul>
23+
</details>
24+
25+
<details>
26+
<summary><strong>💡 Singleton 패턴이란</strong></summary>
27+
싱글톤 패턴은 애플리케이션이 시작될 때 어떤 클래스가 <strong>최초 한번만 메모리를 할당(static)</strong>하고, 이후로는 해당 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다.<br/>
28+
즉, <strong>하나의 인스턴스만 생성</strong>하여 인스턴스가 필요할 때, 똑같은 인스턴스를 만드는 것이 아닌 <strong>기존의 인스턴스를 활용</strong>하는 방법이다.<br/>
29+
<ul>
30+
<li>싱글톤 패턴의 장점
31+
<ol>
32+
<li><strong>메모리</strong> 절약</li>
33+
<li><strong>데이터 공유</strong> 측면에서의 이점</li>
34+
</ol>
35+
</li>
36+
<li>싱글톤 패턴의 단점
37+
<ol>
38+
<li><strong>많은 코드의 작성</strong> 필요</li>
39+
<li><strong>테스트의</strong> 어려움</li>
40+
<li><strong>클라이언트가 구체 클래스에 의존</strong>하는 문제</li>
41+
<li><strong>자식 클래스</strong>를 만들 수 없음</li>
42+
<li><strong>내부 상태 변경</strong>의 어려움</li>
43+
</ol>
44+
</li>
45+
</ul>
46+
</details>
47+
48+
<details>
49+
<summary><strong>💡 Strategy 패턴이란</strong></summary>
50+
<ul>
51+
<li><strong>행위(Behavioral)</strong>를 클래스로 캡슐화하여 동적으로 바꿀 수 있도록 하는 패턴을 말한다.
52+
<ul>
53+
<li>동일한 문제를 해결할 수 있는 알고리즘들이 캡슐화 되어있다.</li>
54+
<li>필요할 때 서로 교체할 수 있다.</li>
55+
<li>결국, 동일한 문제를 다른 알고리즘을 통해 해결할 수도 있게된다.</li>
56+
</ul>
57+
</li>
58+
<li><strong>전략(Strategy)</strong>을 쉽게 바꿀 수 있다.
59+
<ul>
60+
<li>게임 프로그래밍에서 유용하게 사용된다.
61+
<ul>
62+
<li>게임에서는, 캐릭터의 상황에 따라 공격이나 이동 방식이 바뀐다.</li>
63+
<li>이 때, <strong>Strategy 패턴</strong>이 유용하게 사용된다.</li>
64+
</ul>
65+
</li>
66+
<li>역할 및 작업
67+
<ul>
68+
<li>Strategy
69+
<ul>
70+
<li>인터페이스나 추상 클래스</li>
71+
<li>외부에서 동일한 방식으로 알고리즘을 호출하는 방식을 명시한다.</li>
72+
</ul>
73+
</li>
74+
</ul>
75+
</li>
76+
<li>ConcreteStrategy
77+
<ul>
78+
<li>알고리즘을 실제로 구현한 클래스</li>
79+
</ul>
80+
</li>
81+
<li>Context
82+
<ul>
83+
<li>패턴을 이용하여 역할을 수행한다.</li>
84+
<li>상황에 따라, 동적으로 전략이 변경될 수 있도록 <strong>setter 메서드(집약관계)</strong>를 제공한다.</li>
85+
</ul>
86+
</li>
87+
</ul>
88+
</li>
89+
</ul>
90+
</details>
91+
92+
<details>
93+
<summary><strong>💡 Template Method 패턴이란</strong></summary>
94+
<ul>
95+
<li>일부를 <strong>서브 클래스</strong>로 캡슐화하여, <strong>구조의 변경 없이 특정 단계의 내역만 바꾸는 패턴</strong>을 의미한다.
96+
<ul>
97+
<li>전체적으로는 동일하다.</li>
98+
<li>부분적으로는 다르다.
99+
<ul>
100+
<li>코드 중복을 최소화할 때 유용하다.</li>
101+
<li>동일한 기능은 상위 클래스에, 확장 및 변화가 필요한 부분은 서브 클래스에 구현한다.</li>
102+
<li>전체적인 알고리즘 재사용에 유리하다.</li>
103+
</ul>
104+
</li>
105+
</ul>
106+
</li>
107+
<li>역할 및 작업
108+
<ul>
109+
<li>AbstractClass
110+
<ul>
111+
<li>템플릿 및 메서드를 정의하는 클래스</li>
112+
<li>하위 클래스에는 공통 알고리즘을 정의한다.</li>
113+
<li>하위 클래스에서 구현될 기능을 <strong>primitive 메서드</strong> <strong>hook 메서드</strong>로 정의한다.</li>
114+
</ul>
115+
</li>
116+
<li>ConcreteClass
117+
<ul>
118+
<li>상속받은 <strong>primitive 메서드</strong> <strong>hook 메서드</strong>를 구현하는 클래스</li>
119+
<li>서브 클래스에 적합하게 메서드를 오버라이드한다.</li>
120+
</ul>
121+
</li>
122+
</ul>
123+
</li>
124+
</ul>
12125
</details>

0 commit comments

Comments
 (0)