Technical Interview Prep
์ทจ๋ฝ ๊ฐ์ฆ์
1. Spring Class ์ค Helper Class (Util Class)
?
Helper Class (Util Class)
?Wikipedia
: In object-oriented programming, a helper class is used to assist in providing some functionality, which isn't the main goal of the application or class in which it is used
Utility Class, also known as Helper class means that contains just static methods
Stateless & cannot be instantiated (์ธ์คํด์คํ ๋ ์ ์๋ค)
๋ฐ๋ณต์ ์ด๊ฑฐ๋ ๊ณตํต์ผ๋ก ์ฐ์ด๋ ๊ธฐ๋ฅ๋ค์ ์ฒ๋ฆฌํ ๋
Util Class
๋ฅผ ์ฌ์ฉํจ!
ex)
1-1. org.springframework.util.ClassUtils
boolean isPresent(String className, @Nullable ClassLoader classLoader)
ํด๋น ํด๋์ค๊ฐ ์๋์ง ํ์ธ ([class].class.getName() ์ ์ฐ๋ฉด ์๋จ - ์๋ ๊ฒฝ์ฐ ์๋ฌ ๋ฐ์ํจ)
1-2. org.springframework.util.StringUtils
boolean isEmpty(@Nullable Object str)
String null ๊ณผ empty ์ฒดํฌ
boolean containsWhitespace(@Nullable String str)
๊ณต๋ฐฑ์ด ์๋์ง ์ฌ๋ถ ํ์ธ
String trimWhitespace(String str)
์๋ค ๊ณต๋ฐฑ ์ ๊ฑฐ
String replace(String inString, String oldPattern, @Nullable String newPattern)
ํด๋นํ๋ ๋ฌธ์์ด ๋ชจ๋ ๋ณ๊ฒฝ. newPattern์ด null์ธ ๊ฒฝ์ฐ ๋ณ๊ฒฝํ์ง ์์
String delete(String inString, String pattern)
ํด๋นํ๋ ๋ฌธ์์ด ๋ชจ๋ ์ญ์
String getFilename(@Nullable String path)
path ๊ฒฝ๋ก์์ ํ์ผ ์ด๋ฆ์ ๋ฐํ (๋ง์ง๋ง ๋ฌธ์์ด์ ๋ฐํ)
String delete(String inString, String pattern)
ํด๋นํ๋ ๋ฌธ์์ด ๋ชจ๋ ์ญ์
1-3. org.springframework.util.TypeUtils
boolean isAssignable(Type lhsType, Type rhsType)
์ค๋ฅธ์ชฝ์ ์๋ ํ์ ์ด ์ผ์ชฝ์ ์๋ ํ์ ์ ํ์ ํ์ ์ธ์ง ์ฒดํฌ
+
Service Class vs Helper Class
A Service class/interface provides a way of a client to interact with some functionality in the application. This is typically public, with some business meaning. For example, a
TicketingService
interface might allow you tobuyTicket
,sellTicket
and so on.A helper class tends to be hidden from the client and is used internally to provide some boiler plate work that has no business domain meaning. For example, let's say you wanted to convert a date into a timestamp in order to save it to your particular datastore. You might have a utility class called
DateConvertor
with aconvertDateToTimestamp
method that performs this processing.
2. MVC ๋?
๊ฐ๋ฐ ํ ๋ 3๊ฐ์ง ํํ๋ก ์ญํ ์ ๋๋์ด ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ๋ก
๋์์ธ ํจํด ์ค ํ๋
๋น์ฆ๋์ค ์ฒ๋ฆฌ ๋ก์ง๊ณผ ์ฌ์ฉ์ Interface ์์๋ฅผ ๋ถ๋ฆฌ์์ผ ์๋ก ์ํฅ์์ด ๊ฐ๋ฐ ํ๊ธฐ ์์ํ๋ค๋ ์ฅ์ ์ด ์์!
Model
Application์ด ๋ฌด์์ ํ ๊ฒ์ธ์ง๋ฅผ ์ ์
๋ด๋ถ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ญํ
ex) ์ฒ๋ฆฌ๋๋ ์๊ณ ๋ฆฌ์ฆ, DB, Data, etc
View
ํ๋ฉด์ ๋ฌด์์ธ๊ฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ์ญํ
Controller ํ์์ ์ข ์๋์ด, Model์ด๋ Controller๊ฐ ๋ณด์ฌ์ฃผ๋ ค๊ณ ํ๋ ๋ชจ๋ ํ์ํ ๊ฒ๋ค์ ๋ณด์ฌ์ค
์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์์ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํจ
Controller
Model์ด ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง๋ฅผ ์๋ ค์ฃผ๋ ์ญํ
๋ชจ๋ฐ์ผ์์๋ ํ๋ฉด์ ๋ก์ง ์ฒ๋ฆฌ ๋ถ๋ถ
๊ฐ๋จ ์ ๋ฆฌ
Django project ๊ธฐ์ค
M
Data ex) models.py
V (T)
UI (html + js)
C
Data & UI ์ ์ค์ฌ์ ex) views.py
3. CORS Policy
Same-Origin Policy (๋์ผ ์ถ์ฒ ์ ์ฑ
)
์ด๋ค ์ถ์ฒ์์ ๋ถ๋ฌ์จ ๋ฌธ์๋ script๊ฐ ๋ค๋ฅธ ์ถ์ฒ์์ ๊ฐ์ ธ์จ resource ์ ์ํธ์์ฉ ํ๋ ๊ฒ์ ์ ํํ๋ Browser ์ ๋ณด์ ๋ฐฉ์
๊ฐ์ ์ถ์ฒ๋ฅผ ๊ตฌ๋ถํ๋ ๊ธฐ์ค
Protocol
Host
Port
Cross-Origin Resource Sharing(CORS)
์ถ๊ฐ HTTP Header๋ฅผ ์ฌ์ฉํ์ฌ browser๊ฐ ํ ์ถ์ฒ์์ ์คํ ์ค์ธ Web application์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก browser์์ ์๋ ค์ฃผ๋ ์ฒด์
Web application์ resource ๊ฐ ์์ ์ ์ถ์ฒ (Domain, Protocol, Port) ์ ๋ค๋ฅผ ๋ CORS HTTP request๋ฅผ ์คํํจ
์ถ์ฒ๊ฐ ๋ค๋ฅธ ๋๋ฉ์ธ์์์ AJAX์์ฒญ์ด๋ผ๋ ์๋ฒ ๋จ์์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ถํ์ ํ์ฉํ๋ ์ ์ฑ !
4. GET ์์ฒญ๊ณผ POST ์์ฒญ
GET
Server ๋ก๋ถํฐ ์ ๋ณด๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ค๊ณ๋ method
Data๋ฅผ Body์ ๋ด์ง ์๊ณ Query string์ ํตํด ์ ์ก
Query string
URL ๋์
?
์ ํจ๊ป ์ด๋ฆ๊ณผ ๊ฐ์ผ๋ก ์์ ์ด๋ฃจ๋ request parameterparameter๊ฐ ์ฌ๋ฌ๊ฐ์ด๋ฉด
&
๋ก ์ฐ๊ฒฐex)
๋ถํ์ํ ์์ฒญ์ ์ ํํ๊ธฐ ์ํด ์์ฒญ์ด cache ๋ ์ ์์
Idempotent (๋ฉฑ๋ฑ)
์๋ฒ์ ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ์ ์กํ๋๋ผ๋ ๋์ผํ ์๋ต์ด ๋์์์ผ ํจ
์กฐํ๋ฅผ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ
POST
Resouce๋ฅผ ์์ฑ/๋ณ๊ฒฝํ๊ธฐ ์ํด ์ค๊ณ๋ method
์ ์กํด์ผ ๋ data๋ฅผ Body์ ๋ด์์ ์ ์ก
๊ธธ์ด์ ์ ํ ์์ด data ์ ์ก ๊ฐ๋ฅ
GET ๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๊ฒ ๋์ฉ๋ data ์ ์ก์ด ๊ฐ๋ฅํ๋ค!
์์ฒญ ํค๋์ Content-Type์ ์์ฒญ ๋ฐ์ดํฐ์ ํ์ ์ ํ์ํด์ผ ํจ
Non-idempotent
์๋ฒ์ ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ์ ์กํ ๋ ์๋ต์ ํญ์ ๋ค๋ฅผ ์ ์์
์๋ฒ์ ์ํ๋ data๋ฅผ ๋ณ๊ฒฝ์ํฌ ๋ ์ฌ์ฉ
์์ฑ/์์ /์ญ์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง, ์ฃผ๋ก ์๋์ ๊ฐ์ด ์ฌ์ฉ
์์ฑ - POST
์์ - PUT or PATCH
์ญ์ - DELETE
5. JSP์ application class
JSP(Java Server Pages)๋?
Java ์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Server Side script language
HTML ๋ด์ Java code ๋ฅผ ์ฝ์ ํ์ฌ Web Server์์ ๋์ ์ผ๋ก web page๋ฅผ ์์ฑํ์ฌ web browser์ ๋๋ ค์ฃผ๋ ์ธ์ด
JSP์ ์ฃผ์ Class
Request
client ๊ฐ ์ ์กํ request ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฐ์ฒด
Response
client ์ request์ ๋ํ HTTP response๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
pageContext
ํ page ์ ๋ํ ๋ด์ฅ ๊ฐ์ฒด
Session
Application
Page๋ฅผ service ํด์ฃผ๋ web application ์ ๋ํ ๊ฐ์ฒด
Server ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ ์งํจ
6. Session๊ณผ Cookie
์ฐธ๊ณ : https://jeong-pro.tistory.com/80
Cookie ์ Session ์ ์ฌ์ฉํ๋ ์ด์
: **HTTP Protocol
**์ ํน์ง์ด์ ์ฝ์ ์ ๋ณด์ํ๊ธฐ ์ํด ์ฌ์ฉ
Connectionless
Client ๊ฐ request๋ฅผ server์ ๋ณด๋ด๋ฉด, server๋ client์๊ฒ ์์ฒญ์ ๋ง๋ response๋ฅผ ๋ณด๋ด๊ณ ์ ์์ ๋๋๋ค
Stateless
์ฐ๊ฒฐ์ ๋๋ ์๊ฐ client ์ server์ ํต์ ์ด ๋๋๋ฉฐ ์ํ ์ ๋ณด๋ ์ ์งํ์ง ์๋๋ค
Cookie์ Session์ด ์๋ค๋ฉด ์ด๋ค page ์์ ์ฎ๊ฒจ๋ค๋ ๋๋ง๋ค ๋ค์ login ์ ํด์ผํจ!
Cookie
Client์ local ์ ์ ์ฅ๋๋ key์ value๊ฐ ๋ค์ด์๋ ์์ data file
์ฟ ํค์๋ ์ด๋ฆ, ๊ฐ, ๋ง๋ฃ๋ ์ง(์ฟ ํค ์ ์ฅ๊ธฐ๊ฐ), ๊ฒฝ๋ก ์ ๋ณด๊ฐ ๋ค์ด์๋ค.
์ฟ ํค๋ ์ผ์ ์๊ฐ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
๋ก๊ทธ์ธ ์ํ ์ ์ง์ ํ์ฉ
์ฟ ํค๋ ํด๋ผ์ด์ธํธ์ ์ํ ์ ๋ณด๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ๋ค๊ฐ ์ฐธ์กฐํ๋ค.
์ฟ ํค๋ ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ์์ฒญํ์ง ์์๋ ๋ธ๋ผ์ฐ์ ๊ฐ Request์์ Request Header๋ฅผ ๋ฃ์ด์ ์๋์ผ๋ก ์๋ฒ์ ์ ์ก ํ๋ค
Cookie process
๋ธ๋ผ์ฐ์ ์์ ์นํ์ด์ง ์ ์
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์นํ์ด์ง๋ฅผ ๋ฐ์ผ๋ฉด์ ์ฟ ํค๋ฅผ ํด๋ผ์ด์ธํธ ๋ก์ปฌ(ํ๋)์ ์ ์ฅ
ํด๋ผ์ด์ธํธ๊ฐ ์ฌ ์์ฒญ์ ์นํ์ด์ง ์์ฒญ๊ณผ ํจ๊ป ์ฟ ํค๊ฐ๋ ์ ์ก
์ง์์ ์ผ๋ก ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉ
์ฟ ํค ์ฌ์ฉ ์ฌ๋ก
์๋๋ก๊ทธ์ธ
ํ์ ์์ "์ค๋ ๋ ์ด์ ์ด ์ฐฝ์ ๋ณด์ง ์์" ์ฒดํฌ
์ผํ๋ชฐ์ ์ฅ๋ฐ๊ตฌ๋
Session
์ผ์ ์๊ฐ๋์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ก ๋ถํฐ ๋ค์ด์ค๋ ์ผ๋ จ์ ์๊ตฌ๋ฅผ ํ๋์ ์ํ๋ก ๋ณด๊ณ ๊ทธ ์ํ๋ฅผ ์ ์งํ๋ ๊ธฐ์
์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์น ์๋ฒ์ ์ ์ํ ์ดํ๋ก ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ ๋ ๊น์ง ์ ์ง๋๋ ์ํ
Session process
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ์์ session ID๋ฅผ ๋ฐ๊ธ
์๋ฒ์์๋ ํด๋ผ์ด์ธํธ๋ก ๋ฐ๊ธํด์ค session ID๋ฅผ ์ฟ ํค๋ฅผ ์ฌ์ฉํด ์ ์ฅ (JSESSIONID)
ํด๋ผ์ด์ธํธ๋ ๋ค์ ์ ์ํ ๋, ์ด ์ฟ ํค(JSESSIONID)๋ฅผ ์ด์ฉํด์ sessionID๊ฐ์ ์๋ฒ์ ์ ๋ฌ
session์ ๊ตฌ๋ณํ๊ธฐ ์ํด ID๊ฐ ํ์ํ๊ณ ๊ทธ ID๋ง ์ฟ ํค๋ฅผ ์ด์ฉํด์ ์ ์ฅํด๋๋๋ค. (์ฟ ํค์ฌ์ฉ)
์ฟ ํค๋ ์๋์ผ๋ก ์๋ฒ์ ์ ์ก๋๋๊น ์๋ฒ์์ session์์ด๋์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์
Session ์ฌ์ฉ ์ฌ๋ก
: ๋ก๊ทธ์ธ ์ ๋ณด ์ ์ง
Difference between Session
and Cookie
Session
and Cookie
7. SOLID ์์น
๊ฐ์ฒด์งํฅ 5๋ ์์น
SRP (Single Responsiblity Principle)
๋จ์ผ ์ฑ ์ ์์น
์ํํธ์จ์ด์ ์ค๊ณ ๋ถํ (class, method etc.) ์ ํ๋์ ์ฑ ์ (๊ธฐ๋ฅ)๋ง์ ๊ฐ์ ธ์ผ ํ๋ค
OCP (Open-Closed Principle)
๊ฐ๋ฐฉ-ํ์ ์์น
๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ (closed), ๊ธฐ๋ฅ์ ์์ ํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋๋ก (open) ์ค๊ฒํด์ผ ํ๋ค
LSP (Liskov Substitution Principle)
๋ฆฌ์ค์ฝํ ์นํ ์์น
์์ class ๋ ๋ถ๋ชจ class์์ ๊ฐ๋ฅํ ํ์๋ฅผ ์ํํ ์ ์์ด์ผ ํ๋ค
ISP (Interface Segregation Principle)
์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
ํ๋์ ์ผ๋ฐ์ ์ธ interface ๋ณด๋ค๋, ์ฌ๋ฌ๊ฐ์ ๊ตฌ์ฒด์ ์ธ interface๊ฐ ๋ซ๋ค
DIP (Dependency Inversion Principle)
์์กด ์ญ์ ์์น
์์กด ๊ด๊ณ๋ฅผ ๋งบ์ ๋, ๊ตฌ์ฒด์ ์ธ class๋ณด๋จ interface ๋ abstract class์ ๊ด๊ณ๋ฅผ ๋งบ์ด์ผ ํ๋ค
8. Jenkins ๋?
์ง์์ ํตํฉ (Continuous Integration)
๊ณต์ repository์ code ๋ฅผ ์ถ๊ฐํ ๋, ์๋์ผ๋ก project๋ฅผ buildํ๊ณ error, bug๋ฅผ testํ๊ณ ๊ฐ๋ฐ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ฃผ์ด ์์ ํ๊ฒ ๊ฐ๋ฐ์ ํ ์ ์๊ฒ ํ๋ ๊ฒ
์ด๋ฅผ ์ํ ๋ํ์ ์ธ Tools
Jenkins
CircleCI
ํ์ํ ์ด์
code ๊ฐ repository์ ๋ฐ์๋๊ธฐ ์ ์ ์๋์ผ๋ก ํ ์คํธ๋ฅผ ํ๋ฏ๋ก ๋ฒ๊ทธ๊ฐ ์ค์ด๋ค๊ณ , ๋ ๋น ๋ฅธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํด์ง!
๊ฐ ๊ฐ๋ฐ์์ ๊ฐ๋ฐ ํ๊ฒฝ์ด ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ํต์ผ๋ ํ๊ฒฝ์์ code๋ฅผ test ํ๋ ๊ฒ์ ํ์!
9. JSON ๊ณผ XML ์ ์ฐจ์ด
JSON ์ฅ์
XML ๋ฌธ์๋ XML DOM(Document Object Model)์ ์ด์ฉํ์ฌ ํด๋น ๋ฌธ์์ ์ ๊ทผ
JSON์ ๋ฌธ์์ด์ ์ ์ก๋ฐ์ ํ์ ํด๋น ๋ฌธ์์ด์ ๋ฐ๋ก ํ์ฑ
XML๋ณด๋ค ๋์ฑ ๋น ๋ฅธ ์ฒ๋ฆฌ ์๋๋ฅผ ๋ณด์ฌ์ค!
HTML๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ฐ๋๋์ด ๋น ๋ฅธ ์๋ต์ด ํ์ํ ์น ํ๊ฒฝ์์ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์
XML์ฅ์
JSON์ ์ ์ก๋ฐ์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ฌ์ฉ์๊ฐ ์ง์ ๊ฒ์ฆํด์ผ ํจ
๋ฐ์ดํฐ์ ๊ฒ์ฆ์ด ํ์ํ ๊ณณ์์๋ ์คํค๋ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ ์ ์๋ XML์ด ์์ง๋ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์
10. Overloading vs Overriding
์ค๋ฒ๋ผ์ด๋ฉ(Overriding) ์์ ํด๋์ค์ ์กด์ฌํ๋ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค์์ ํ์์ ๋ง๊ฒ ์ฌ์ ์ํ๋ ๊ฒ
์ค๋ฒ๋ก๋ฉ(Overloading) ์์ ํด๋์ค์ ๋ฉ์๋์ ์ด๋ฆ, return ๊ฐ์ ๋์ผํ์ง๋ง, ๋งค๊ฐ๋ณ์๋ง ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ๋ง๋๋ ๊ฒ
๋ค์ํ ์ํฉ์์ ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ ์๋๋ก ํจ
Last updated