Model1 Architecture 이란?
Model 1 은 View와 Model을 모두 JSP 페이지 하나에서 처리하는 구조를 말합니다. Java Bean은 class를 만들어서 로직을 작성해 놓은 것입니다.
JSP 역할
client 에게 리스트 또는 입력양식(form) 과 같은 웹화면을 제공합니다.
client 의 request 를 분석하고, request에 따른 java bean or component 과 연동 연동 결과에 따라 적절한 응답을 제공합니다.
Java Beans 역할
business logic 과 data access logic 을 담당합니다.
1. 브라우저가 JSP 페이지에 대한 요청을 보냅니다.
2. JSP는 Java Bean에 액세스 하고 비즈니스 로직을 호출합니다.
3. Java Bean은 데이터베이스에 연결하여 데이터를 가져오거나 저장합니다.
4. JSP에 의해 생성된 응답이 브라우저로 전송됩니다.
이러한 과정이 JSP 안에서 일어납니다.
Model 1 장점
- 쉽고 빠른 웹 애플리케이션 개발
- 숙련된 개발자가 아니더라도 구현 용이
Model 1 단점
- 출력을 위한 뷰 코드와 로직 처리를 위한 자바 코드가 함께 섞이기 때문에 JSP 코드가 복잡합니다.
- JSP 코드에서 분업이 용이하지 않습니다.
- 코드가 복잡해 유지보수가 어렵습니다.
예시 1
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*"%>
<%--
초기 웹개발 형태
jsp 와 db 가 연동하는 구조
회원수를 db 조회하여 화면에 제공
--%>
<%
Class.forName("oracle.jdbc.OracleDriver");
Connection con=
DriverManager.getConnection("jdbc:oracle:thin:@dbIP:1521:xe", "mango", "apple");
String sql="select count(*) from member";
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
int count=0;
if(rs.next()){
count=rs.getInt(1);
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>step1-jsp-db</title>
</head>
<body>
<div>
<h3>총회원수 <%=count %> 명</h3>
</div>
</body>
</html>
<%
rs.close();
pstmt.close();
con.close();
%>
1. java.sql.* import 해오기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*"%>
2. table은 예전에 만든 member table에서 회원수를 가져오는 문장을 작성했습니다.
CREATE TABLE member(
id VARCHAR2(100) PRIMARY KEY,
password VARCHAR2(100) NOT NULL,
name VARCHAR2(100) NOT NULL,
address VARCHAR2(100)
)
이렇게 생긴 테이블입니다.
3. JSP 파일에서 드라이버를 연결하여 DB와 연결하고 데이터를 가져오는 방식입니다. 예전에 Class (DAO) 파일에 작성했던 것처럼 구동시키는 것은 같습니다.
<%
Class.forName("oracle.jdbc.OracleDriver");
Connection con=
DriverManager.getConnection("jdbc:oracle:thin:@dbIP:1521:xe", "mango", "apple");
String sql="select count(*) from member";
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
int count=0;
if(rs.next()){
count=rs.getInt(1);
}
%>
1. oracle.jdbc.OracleDriver를 구동시켜야 합니다. (이것에 대하여 너무 화나는 스토리가 있습니다.)
**이것을 구동하기 위해서는 apache-tomcat을 구동하는 파일 안에 있는 lib 파일에 ojdbc6.jar을 넣어서 구동해야 하는 것을 모르고 계속 로캐일을 알 수 없다는 오류를 받고 얼마나 찾아 헤매었는지 모르겠습니다. 여러분들은 이러한 오류를 안 겪으셨으면 좋겠습니다. (맥북... 어렵네요)
2. DriverManger로 자신의 DB 주소, id, password를 입력하여 DB와 연동합니다.
DriverManager.getConnection("jdbc:oracle:thin:@dbIP:1521:xe", "mango", "apple");
3. sql 문을 작성해서 DB에 명령을 보냅니다.
4. 그리고 그 받아온 값을 화면에 출력합니다.
<h3>총회원수 <%=count %> 명</h3>
이렇게 DB에서 데이터를 받아오는 코드도 JSP에 작성하는 것을 Model1이라고 합니다.
Java Beans에 과거에 작성한 것처럼 DAO 파일을 만들어 놓고 JSP에서 불러와서 사용하는 것도 Model 1입니다.
하나의 예시를 보겠습니다.
예시 2 (Java Beans 사용)
MemberDAO Class 작성
public class MemberDAO {
public MemberDAO() throws ClassNotFoundException {
Class.forName(DbConfig.DRIVER);
}
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(
DbConfig.DB_URL, DbConfig.USER_NAME, DbConfig.USER_PASS);
}
public void closeAll(PreparedStatement pstmt,Connection con) throws SQLException {
if(pstmt!=null)
pstmt.close();
if(con!=null)
con.close();
}
public void closeAll(ResultSet rs,PreparedStatement pstmt,Connection con) throws SQLException {
if(rs!=null)
rs.close();
closeAll(pstmt, con);
}
public int getTotalMemberCount() throws SQLException {
int count=0;
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
con=getConnection();
String sql="select count(*) from member";
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
if(rs.next())
count=rs.getInt(1);
}finally {
closeAll(rs, pstmt, con);
}
return count;
}
}
JSP 파일 작성
<%@page import="model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Model1 설계방식</title>
</head>
<body>
<div>
<h4>Model1 회원수보기</h4>
<%
MemberDAO dao=new MemberDAO();
int count=dao.getTotalMemberCount();
%>
<h3>총회원수 <%=count %> 명</h3>
</div>
</body>
</html>
이렇게 Java Bean을 제작하여 데이터를 불러올 수도 있습니다.
하지만 화면에 더 많은 것을 송출해야 하는데 코드가 복잡해질 것이고, 그러면 유지보수에 용이하지 않으니
다음시간에는 Model2 MVC로 제작해 보겠습니다.
소감
요새 감기가 유행인 것 같은데 다들 몸조심하세요. 몸이 아플 것 같은 기분이 들면 약을 먹고 집에서 푹 쉬는 것이 가장 베스트입니다.
항상 쉬는 것이 가장 중요하다고 생각합니다. 육체가 없으면 아무것도 할 수 없기 때문이죠.
또한 경제적으로 좋은 글귀 하나 있어서 남깁니다.
사람들은 언제나 최고 수익률을 원한다.
그러나 오랜 시간 성공을 '유지'한 사람들은 최고 수익률을 내지 않았다.
그들은 꾸준한 투자율을 보였다.
오랫동안 괜찮은 수준의 수익률을 유지하는 것이 훨씬 더 나은 결과를 낳는다.
그러니 '닥치고 기다려라.'
시간의 힘이, 복리의 힘이 너희를 부유케 할 것이다.
- 돈의 심리학, 모건 하우절 지음
조급해하지 않고 꾸준히 성장한다면 지식과 자본이 부유한 사람이 되지 않을까요?
'코딩 개발 > Java' 카테고리의 다른 글
Singleton (싱글톤 패턴) (2) | 2023.05.27 |
---|---|
Model 2 Architecture (MVC) (0) | 2023.05.25 |
JSP HTTP 통신 (HTML <form>, <a> tag) (0) | 2023.05.23 |
Cookie & Session (0) | 2023.05.22 |
JSP (feat. 기본 문법) (2) | 2023.05.21 |