Hiya_
๊ฐœ๋ฐœ์ž์ทจ๐ŸŒฑ
Hiya_
Github
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (155) N
    • ๐Ÿ’ปBackend (1) N
      • ๋ผ์ด์ง•์บ ํ”„ (6)
      • SSAFY | ์‹ธํ”ผ (2)
      • ์‹ ํ•œDS ๊ธˆ์œตSW ์•„์นด๋ฐ๋ฏธ (2)
    • ๐Ÿ“๋ฌธ์ œ ํ’€์ด (102)
      • ๐ŸงฉBaekjoon (47)
      • ๐ŸงฉProgrammers (42)
      • ๐ŸงฉSWExpertAcademy (10)
      • ๐ŸงฉSofteer (3)
    • ๐Ÿ“‚Language (31)
      • Python (3)
      • JAVA (2)
      • SQL (6)
      • English (19)
    • โœจUseful information (5)
    • ๐Ÿ”‘Algorithms (3)
    • ๐Ÿ™Git (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ํ† ์ต๊ณต๋ถ€
  • mysql
  • ๊ตฌํ˜„
  • UNION ALL
  • 2์ฐจ์› ๋ฐฐ์—ด
  • ํ† ์ต์ ์ˆ˜
  • ํ† ์ต๋ฌด๋ฃŒ๊ฐ•์˜
  • ์ฝ”ํ…Œ
  • ๋‹ค์ต์ŠคํŠธ๋ผ
  • ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
  • ํ•ด์ปค์Šคํ† ์ต
  • ๊ทธ๋ฆฌ๋””
  • ๋ฆฌ์ŠคํŠธ
  • ํ† ์ตRC
  • ๋‚ด์žฅํ•จ์ˆ˜
  • greedy algorithm
  • BaekJoon
  • ์ •๋ ฌ
  • ์˜ค๋ธ”์™„
  • ๋ฐฑ์ค€
  • ํ•ด์ปค์ŠคํŒŒ๋žญ์ด
  • ํ† ์ต๋…ํ•™
  • Union
  • ํ† ์ต๋ฌด๋ฃŒ์ž๋ฃŒ
  • ํ† ์ต๊ธฐ์ถœ
  • ์™„์ „ํƒ์ƒ‰
  • Python
  • ํ† ์ต์‹œํ—˜
  • sort
  • BFS

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ


Owner : ๊น€์‹ ์˜
Naver Blog

hELLO ยท Designed By ์ •์ƒ์šฐ.
Hiya_

๊ฐœ๋ฐœ์ž์ทจ๐ŸŒฑ

[Java Web] 1. WAS (Web Application Server)
๐Ÿ’ปBackend/์‹ ํ•œDS ๊ธˆ์œตSW ์•„์นด๋ฐ๋ฏธ

[Java Web] 1. WAS (Web Application Server)

2024. 11. 25. 15:56
Java๋กœ Servlet๊ธฐ๋ฐ˜ Web Server๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ธ€์ด๋‹ค.
๋กœ๊ทธ์ธ ์„œ๋น„์Šค ์ œ๊ณต ์„œ๋ฒ„ ์ œ์ž‘์„ ๋ชฉํ‘œ๋กœ ์ž‘์„ฑํ•จ

 

 

Spring framework๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ ์™œ ๊ตณ์ด ์“ฐ์ง€๋„ ์•Š๋Š” Servlet์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ์˜๋ฌธ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ Spring framework๋„ Servlet์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ‹€(frame)์„ ์ œ๊ณตํ•ด์ค„๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด ์–ธ์  ๊ฐ€ Servlet์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋งˆ์ฃผํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๋‹ค์‹œ ๋Œ์•„์™€ ๊ณต๋ถ€ํ•˜๊ธฐ ๋ณด๋‹ค ํŠผํŠผํ•œ ๊ธฐ์ดˆ๋ฅผ ์Œ“๊ณ  framework๋ฅผ ๊ณต๋ถ€ํ•˜์ž.

 

 


ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ

๋ณธ๊ฒฉ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์•ž์„œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์„ธํŒ… ๊ฐ’, ํŒจํ‚ค์ง€ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์ž.

ํ”„๋กœ์ ํŠธ ์„ค์ •์ด ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋‹ค์–‘ํ•œ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด์„œ ๋™์ผํ•œ ํ™˜๊ฒฝ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•ด๋†“๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

https://suyeonchoi.tistory.com/33

 

[Intellij] Servlet ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ(JSP, Web Dynamic Project ์ƒ์„ฑํ•˜๊ธฐ)

Intellij 2020.3.2 ๋ฒ„์ „ ๊ธฐ์ค€ (Ultimate๊ธดํ•˜์ง€๋งŒ Community์—์„œ๋„ ๊ฐ€๋Šฅ) ์ธํ…”๋ฆฌ์ œ์—์„œ ์ดํด๋ฆฝ์Šค์™€ ๊ฐ™์€ Dynamic Web Project๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ๊นŒ์ง€๋Š” ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ ๊ธ€๊ณผ ๋น„์Šทํ•œ๋ฐ ๋‚œ servlet์ƒ์„ฑ

suyeonchoi.tistory.com

 

- OS : mac m2

- IDE : Intellij

- Package ๊ตฌ์กฐ

 

- context(ํ”„๋กœ์ ํŠธ ์ด๋ฆ„) : bananaShop

 

๐Ÿ“ src : WAS, ์ฆ‰ javaํŒŒ์ผ๋“ค์ด ๋ชจ์—ฌ์žˆ๋‹ค.

๐Ÿ“ web : .html, .js, .jsp ๋“ฑ ํ™”๋ฉด ๊ด€๋ จ ์ •์  ํŒŒ์ผ๋“ค์ด ๋ชจ์—ฌ์žˆ๋‹ค.

 

 

 

โ“ context์ด๋ฆ„์€ 'Run/Debug Configurations'์—์„œ 'Deployment' ํƒญ์—์„œ 'Application context'๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Database

- DBMS : Oracle 

- Database : xe

- userid : hr

- userpass : hr

--------------------------------------------------------
--  DDL for Table MEMBERS
--------------------------------------------------------

  CREATE TABLE "HR"."MEMBERS" 
   (	"MEMBER_ID" VARCHAR2(20 BYTE), 
	"MEMBER_PASS" VARCHAR2(20 BYTE), 
	"MEMBER_NAME" VARCHAR2(50 BYTE), 
	"MEMBER_EMAIL" VARCHAR2(50 BYTE)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSTEM" ;
--------------------------------------------------------
--  DDL for Index MEMBERS_PK
--------------------------------------------------------

  CREATE UNIQUE INDEX "HR"."MEMBERS_PK" ON "HR"."MEMBERS" ("MEMBER_ID") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSTEM" ;
--------------------------------------------------------
--  Constraints for Table MEMBERS
--------------------------------------------------------

  ALTER TABLE "HR"."MEMBERS" MODIFY ("MEMBER_ID" NOT NULL ENABLE);
  ALTER TABLE "HR"."MEMBERS" ADD CONSTRAINT "MEMBERS_PK" PRIMARY KEY ("MEMBER_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSTEM"  ENABLE;

 

 

 

 

๋‹ค๋ฃจ๊ฒŒ ๋  server ๊ตฌ์กฐ๋Š” MVC2 model์ด๋‹ค.

MVC2 model์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค

(MVC2 model ์ด๋ฏธ์ง€)

[MVC1, MVC2 ๋ชจ๋ธ](MVC1, 2 model ๊ธ€)

 

์ฆ‰, Java Web server๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. Servlet (Controller)

2. Model

3. JSP (View)

 

Servlet (Controller)

๋™์  ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ 

 

๊ฑฐ์ฐฝํ•œ ํ‘œํ˜„๊ฐ™์ง€๋งŒ ํ’€์–ด์„œ ์„ค๋ช…ํ•˜์ž๋ฉด 'web server๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์š”์ฒญ์„ Java๋กœ ๋˜์กŒ์„ ๋•Œ ์ฒ˜๋ฆฌํ•  ๋Šฅ๋ ฅ์ด ์žˆ๋Š” ํด๋ž˜์Šค'์ด๋‹ค.

 

web server๋Š” HTML, CSS, JS์ฒ˜๋Ÿผ ์ •์ ์ธ ํŒŒ์ผ๋งŒ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„ ํŒŒ์ผ๋“ค์ด ์•„๋‹Œ ์š”์ฒญ๋“ค์„ web server์ž…์žฅ์—์„œ๋Š” ํ•ด์„ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ WAS๋กœ ํ•ด๋‹น ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

 

์ด ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ Servlet์ด ํ•œ๋‹ค.

 

 

 

Servlet์˜ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ๊ธ€์—์„œ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋งŒ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

class ์œ„์— @WebServlet("/auth/login.do")์„ ํ†ตํ•ด ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ์„ ๋“ฑ๋กํ•œ๋‹ค.

 

doGet : http://<ip>:<port>/<context path>/auth/login.do ๊ฒฝ๋กœ์— Get์š”์ฒญ์œผ๋กœ ๋“ค์–ด์˜ค๋ฉด ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

doPost : http://<ip>:<port>/<context path>/auth/login.do ๊ฒฝ๋กœ์— Post์š”์ฒญ์œผ๋กœ ๋“ค์–ด์˜ค๋ฉด ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

package main.java.com.shinhan4.controller;

import java.util.Arrays;
import java.util.Map;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import main.java.com.firstzone.member.MemberDTO;
import main.java.com.firstzone.member.MemberService;

@WebServlet("/auth/login.do")
public class LoginServlet extends HttpServlet {

    MemberService memberService = new MemberService();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("GET");

        // ์œ„์ž„ (๋ฐ›์€ ์š”์ฒญ์„ ์ „๋‹ฌ)
//        RequestDispatcher rd = request.getRequestDispatcher("/auth/login.jsp"); // ์ ˆ๋Œ€
        RequestDispatcher rd = request.getRequestDispatcher("login.jsp");  // ์ƒ๋Œ€ : 'servlet' path(auth/) == 'context' web/auth
        rd.forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");

        String uid = request.getParameter("userid");
        String upass = request.getParameter("userpass");
        MemberDTO memberDTO = new MemberDTO().builder().memberId(uid).memberPass(upass).build();

        MemberDTO login = memberService.login(memberDTO);
        String message = "";
        if(login == null){
            message = "ID ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.";
        } else if (login.getMemberId().equals("-1")){
            message = "Password๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.";
        } else{
            message = login.getMemberName() + "๋‹˜ ํ™˜์˜ ๐Ÿ˜š";
        }

        // 1. ๊ฐ๊ฐ์˜ ํŒŒ๋ผ๋ฉ”ํ„ฐ ์ฝ๊ธฐ
        String food = request.getParameter("food");

        String[] food2 = request.getParameterValues("food2");
        
        Map<String, String[]> map = request.getParameterMap();
        for(String key:map.keySet()){
            System.out.println(Arrays.toString(map.get(key)));
        }

        request.setAttribute("resultMessage", message);
        RequestDispatcher rd = request.getRequestDispatcher("result.jsp");
        rd.forward(request, response);
    }
}

 

Model

์š”์ฒญ์„ ๋ฐ›๋Š” ๊ฒƒ(servlet ์—ญํ• )์„ ์ œ์™ธํ•œ ์‹œ์Šคํ…œ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌ๊ฐ„

 

Service, DAO(Repositoty)๊ฐ€ ์žˆ๋‹ค.

 

Service

Service๋Š” ์š”์ฒญ์„ ๋ฐ›๋Š” ๊ฒƒ (servlet)๊ณผ Database์—ฐ๊ฒฐ(DAO) ๋กœ์ง์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋กœ์ง์„ ๋‹ด๋‹นํ•œ๋‹ค

src>main>java>com>firstzone>member ํด๋”์— MemberService.java ํŒŒ์ผ
package main.java.com.firstzone.member;


// DAO : ์—…๋ฌด๋กœ์ง, DB์— CRUD
// service : DB ๋ฌด๊ด€ํ•œ ์—…๋ฌด๋กœ์ง ex. ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”
public class MemberService {
    MemberDAO memberDAO = new MemberDAO();

    public MemberDTO login(MemberDTO memberDTO){
        return memberDAO.login(memberDTO);
    }
}

DAO (Repository)

Database๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

src>main>java>com>firstzone>member ํด๋”์— MemberDAO.java ํŒŒ์ผ
package main.java.com.firstzone.member;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import main.java.com.shinhan4.util.DBUtil;

public class MemberDAO {
    Connection conn;
    PreparedStatement statement;
    ResultSet rs;
    String sql ="";

    public MemberDTO login(MemberDTO memberDTO){
        System.out.println("memberDTO : " + memberDTO);
        sql =  "select * from members where member_id=?";
        MemberDTO result = null;
        conn = DBUtil.getConnection();
        try {
            statement = conn.prepareStatement(sql);
            statement.setString(1, memberDTO.getMemberId());
            rs = statement.executeQuery();
            if(rs.next()){
                // ์•„์ด๋”” ์žˆ์Œ
                String resultUserPass = rs.getString("member_pass");

                if(memberDTO.getMemberPass().equals(resultUserPass)){
                    // ๋น„๋ฐ€๋ฒˆํ˜ธ ๋งž์Œ
                    result = MemberDTO.builder()
                            .memberId(memberDTO.getMemberId())
                            .memberPass(memberDTO.getMemberPass())
                            .memberName(rs.getString("member_name"))
                            .mamberEmail(rs.getString("member_email"))
                            .build();
                } else{
                    result = MemberDTO.builder().memberId("-1").build();
                }
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        return result;
    }
}

 

JSP (View)

Servlet์—์„œ HTML์„ ๋™์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” servlet

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
    <title>Title</title>
    <title>Login</title>
</head>
<body>
<main>
    <h1>๋กœ๊ทธ์ธ</h1>
    <c:set var="path" value="${pageContext.request.contextPath}"></c:set>
    <form action="${path}/auth/login.do" method="post">
        <%--<form action="login.do" method="post">--%>
        <label>์•„์ด๋””</label>
        <input type="text" name="userid" value="kseenyoung">
        <br>
        <label>๋น„๋ฐ€๋ฒˆํ˜ธ</label>
        <input type="password" name="userpass" value="1234">
        <input type="submit" value="๋กœ๊ทธ์ธ">
    </form>
</main>
</body>
</html>

 

 

๊ฒฐ๊ณผ ํ™”๋ฉด

๋‹น์—ฐํžˆ DB์— ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์ด ๋“ค์–ด์žˆ์–ด์•ผ ํ•จ!

 

 


 

Web Server / WAS (Web Application Server)

์œ„์— ์–ธ๊ธ‰ํ•œ MVC2 model์€ server ๋‚ด๋ถ€ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด์—ˆ๋‹ค.

์กฐ๊ธˆ ๋” ๋ฉ€๋ฆฌ์„œ client์™€ server์˜ ๊ด€๊ณ„๋ฅผ ๋ณธ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ชจ์Šต์ด๋‹ค.

 

server์— Database๋ฅผ ๋ถ™์ธ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

 

server๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋ถ™์—ฌ์„œ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋ณธ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

 

 

'๐Ÿ’ปBackend > ์‹ ํ•œDS ๊ธˆ์œตSW ์•„์นด๋ฐ๋ฏธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java Web] Servlet Binding | Local/ Session Storage  (0) 2024.11.19
    '๐Ÿ’ปBackend/์‹ ํ•œDS ๊ธˆ์œตSW ์•„์นด๋ฐ๋ฏธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Java Web] Servlet Binding | Local/ Session Storage
    Hiya_
    Hiya_
    ํ•˜์–€ ์ฒœ๊ณผ ๋ฐ”๋žŒ๋งŒ ์žˆ๋‹ค๋ฉด ์–ด๋””๋“  ๊ฐˆ ์ˆ˜ ์žˆ์–ด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”