βοΈ [μ€νλ§ MVC 2νΈ - λ°±μλ μΉ κ°λ° νμ© κΈ°μ ] μΉμ
7 μκ° λ° μ 리 μλ£
βοΈ [μ€νλ§ MVC 2νΈ - λ°±μλ μΉ κ°λ° νμ© κΈ°μ ] μΉμ
8 μκ° λ° μ 리 μλ£
μλΈλ¦Ώμ΄ μλ μμ , μ΄μ°½κΈ°μ μΉ μ ν리μΌμ΄μ
μ ν΄λΌμ΄μΈνΈκ° μμ²νλ©΄ html νμΌκ³Ό κ°μ μ μ μΈ λ°μ΄ν°λ§ μ 곡ν μ μμλ€.
μ¦, μ¬μ©μλ§λ€ λ€λ₯Έ νλ©΄μ΄ μλ μ λΆ λμΌν νλ©΄λ§ μ 곡 λ°μλ¨ μ리λ€.
μ μ 컨ν
μΈ λ§ μ 곡νλ€ λ³΄λ μ¬μ©μλ€μκ² λ€μν νλ©΄μ 보μ¬μ£ΌκΈ°κ° νλ€μκ³ , μ΄λ‘ μΈν΄ λμ 컨ν
μΈ μ 곡μ νμμ±μ λλΌκ² λμλ€.
κ·Έλμ λμ¨ κ²μ΄ CGI(Common Gate Interface)μ΄λ€. CGIλ λμ μΈ λ°μ΄ν°λ₯Ό μ 곡νκΈ° μν κ·μ½μ λ§νλ€.
μλ²λ CGIλ₯Ό ꡬνν ꡬν체μκ² λμ μΈ λ°μ΄ν°λ₯Ό μ κ³΅ν΄ λ¬λΌκ³ μμ²νλ€. CGI ꡬνμ²΄κ° μ΄λ₯Ό μνν΄ κ²°κ³Όλ₯Ό μ λ¬ν¨μΌλ‘μ¨ ν΄λΌμ΄μΈνΈλ λμ μΈ λ°μ΄ν°λ₯Ό μ 곡 λ°μ μ μκ² λλ€.
νμ§λ§ CGI ꡬν체λ λͺ¨λ μ¬μ©μ μμ²λ§λ€ νλ‘μΈμ€λ₯Ό μ¬μ©ν΄μ μμ²μ μ²λ¦¬νκΈ° λλ¬Έμ λ¬Έμ κ° μλ€. 무κ²κ³ , μμ±λλ μκ°μ΄ μ€λ κ±Έλ € μλ²κ° λ§μ 리μμ€λ₯Ό λΆλ΄ν΄μΌ νλ€.
λν, κ°μ μμ²μ΄λΌλ λμΌν CGI ꡬν체λ₯Ό μμ±νλ€λ λ¬Έμ μ μ΄ μλ€.
μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ λ°λ‘ Servletμ΄ λ±μ₯νμλ€.
μλΈλ¦Ώμ λμ λ°μ΄ν°λ₯Ό μ 곡νκΈ° μν΄ CGIλ₯Ό κΈ°λ°μΌλ‘ μ μν νλ‘κ·Έλ¨μ΄λ€.
μλΈλ¦Ώμ μμ λ§ν λ¬Έμ λ₯Ό λ€μκ³Ό κ°μ΄ ν΄κ²°ν΄ μ€λ€.
κ° μμ²λ§λ€ νλ‘μΈμ€λ₯Ό λ§€λ² μμ±νλ κ²μ μ€λ λλ‘ λ³κ²½νμλ€. μ€λ λλ‘ μμ νκΈ° λλ¬Έμ μλ²μμ λ§μ 리μμ€λ₯Ό μλͺ¨νλ λ¬Έμ κ° ν΄κ²°λμλ€.
λν, λμΌν μμ²μλ λ§€λ² κ΅¬ν체λ₯Ό μμ±νλ μ΄μ κ³Ό λ¬λ¦¬ μ±κΈν€ ν¨ν΄μ μ μ©ν΄ νλμ ꡬν체λ₯Ό μ¬μ¬μ©νλλ‘ κ΅¬μ‘°λ₯Ό λ³κ²½νμλ€.
μ΄λ‘ μΈν΄ μλ²κ° λΆλ΄ν΄μΌ ν 리μμ€λ₯Ό μ€μ΄λ©΄μ, ν΄λΌμ΄μΈνΈμκ² λμ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ μ 곡ν μ μκ² λμλ€.
Servlet μ¬μ©μΌλ‘ μΈν μ΄μ
κΈ°λ³Έμ μΌλ‘ μΉ μ ν리μΌμ΄μ
μμ²μ λ³΄λΌ λ HTTP λ©μμ§λ‘ ν΅μ μ νλ€. HTTP λ©μμ§λ₯Ό μλ²κ° λ°μΌλ©΄ κ° μλ―Έμ λ§κ² νμ±νμ¬ μ²λ¦¬ν ν, μλ΅ HTTP λ©μμ§λ₯Ό λ§λ€μ΄μ ν΄λΌμ΄μΈνΈμκ² μ λ¬νλ€.
νμ§λ§ κ°λ°μκ° μΌμΌμ΄ μμ² κ°μ νμ±νμ¬ μλ΅ λ©μμ§λ₯Ό λ§λ€μ΄ μ€ μλ μλ€. μ΄κ²μ λ무 λ²κ±°λ‘μ΄ μΌμ΄λ€.
μλΈλ¦Ώμ κ°λ°μκ° μ΄λ¬ν νμ± μμ
μ μΌμΌμ΄ νμ§ μλλΌλ, APIλ₯Ό ν΅ν΄ μ 곡λ°μ μ μλλ‘ λ§μ κΈ°λ₯λ€μ μ 곡νκ³ μλ€. (addCookie, sendRedirect λ±)
λν, HTTP λ©μλμ λν λΆκΈ°μ²λ¦¬λ κ° μμ²λ³λ‘ λμ μ²λ¦¬ν΄ μ€λ€.
@WebServlet(name = "servletExample", urlPatterns = "/example")
public class ServletExample extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
super.doGet(req, resp);
//λΉμ¦λμ€ λ‘μ§
}
}
μ¦, κ°λ°μλ μ΄λ¬ν μμ²λ€μ μ²λ¦¬ν΄ μ£Όλ λ©μλλ₯Ό μ¬μ μνκ³ APIλ₯Ό μ¬μ©ν λ€, μμ² λ°μ URLλ§ λ§€νν΄ μ£Όλ©΄ μνλ λΉμ¦λμ€ λ‘μ§μ μμ±νκ³ μ€νν μ μλ€.
Servletμ λμ λ°©μ
μλΈλ¦Ώ 컨ν μ΄λλ μλΈλ¦Ώμ μμ±νκ³ κ΄λ¦¬νλ€. (λνμ μΌλ‘ ν°μΊ£μ΄ μλ€.)
@Override
public void init() throws ServletException {
super.init();
}
@Override
public void destroy() {
super.destroy();
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) {
super.service(request, response);
}
μλΈλ¦Ώμ μμ± μ init(), μ κ±° μ destroy() λ©μλλ₯Ό ν΅ν΄ μμ± λ° μ κ±°κ° μ΄λ£¨μ΄μ§λ€.
μλΈλ¦Ώ 컨ν
μ΄λλ μλΈλ¦Ώμ μμ±, νΈμΆ, μ κ±°μ λͺ¨λ μμ
λ€μ κ΄λ¦¬νλ©΄μ μλΈλ¦Ώμ μλͺ
μ£ΌκΈ°λ₯Ό λ΄λΉνλ€.
ν΄λΌμ΄μΈνΈμ μμ²μ΄ μ€λ©΄, μλΈλ¦Ώ 컨ν
μ΄λλ ν΄λΉ μμ²κ³Ό 맀νλ μλΈλ¦Ώμ μ°Ύλλ€.
λ§μ½ μλΈλ¦Ώμ΄ μμ±λμ΄ μμ§ μλ€λ©΄ μλΈλ¦Ώ 컨ν
μ΄λλ μλΈλ¦Ώμ μμ±νκ³ μ΄λ₯Ό λμμν¨λ€. μμ
μ΄ μ’
λ£λ μλΈλ¦Ώμ μλ©Έλμ§ μκ³ , μλΈλ¦Ώ 컨ν
μ΄λμμ κ΄λ¦¬νλ€.
ν΄λΌμ΄μΈνΈμ μμ²κ³Ό 맀νλμ΄ μλ μλΈλ¦Ώμ΄ μ΄λ―Έ μ‘΄μ¬νλ€λ©΄, μλΈλ¦Ώ 컨ν
μ΄λλ ν΄λΉ μλΈλ¦Ώμ λ€μ νΈμΆνμ¬ μμ
μ μννλ€. (μλΈλ¦Ώ μ¬μ¬μ©)
μλΈλ¦Ώμ κ° μμ²λ§λ€ νλμ μλΈλ¦Ώμ΄ 1:1λ‘ λ§€νλλ ꡬ쑰λ₯Ό κ°μ§κ³ μλ€. μ¦, 10κ°μ μμ²μ΄ μλ€λ©΄ 10κ°μ μλΈλ¦Ώμ΄ μ‘΄μ¬νλ€λ μκΈ°λ€. μ΄ κ²½μ° κ³΅ν΅ λ‘μ§μ΄ λ§€λ² λ°λ³΅λΌμ μμ±λκ³ μ€ννλ€λ λ¬Έμ μ μ΄ μκΈ΄λ€.
λν λͺ¨λ μμ²λ€μ΄ μλΈλ¦Ώμ μμ‘΄μ μΈ κ΅¬μ‘°λ₯Ό κ°μ§κΈ° λλ¬Έμ, νλ‘κ·Έλ¨ λν μλΈλ¦Ώμ μμ‘΄νκ² λλ€.
μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ Controllerκ° λ±μ₯ν κ²μ΄λ€.
Front Controller Patternμμ λ λμκ° MVC Patternμ΄ λ±μ₯νκ² λμλ€.
μ°Έκ³ μλ£
kohen's κΈ°λ‘, β[Spring] Servletμ΄λ?β, https://kohen.tistory.com/29
μ°μνTech, β[10λΆ ν μ½ν‘] 루ν€μ Servlet & Spring Web MVCβ, https://youtu.be/h0rX720VWCg
λΆμ‘±ν κΈμ‘ κ³μ°νκΈ°
class Solution {
public long solution(int price, int money, int count) {
long answer = 0;
for(int i = 1; i <= count; i++) {
answer += price * i;
}
if(money < answer) {
answer -= money;
return answer;
}
return 0;
}
}
λ°μ μ μλ 10μ . μκ°λ³΄λ€ μμ² λΉ¨λ¦¬ νμλ€.
μ²μμ νλ Έλ€κ³ λμλλ°, μ΄μ λ κΈμ‘μ΄ λΆμ‘±νμ§ μμ λ return 0μ μ ν΄μ€μ κ·Έλ¬λ κ²... 쑰건μ μ μ½μ.