※ TIL와는 별개로 적는 개인 일지라서 말은 좀 편하게하는 페이지입니다.
일지이기 때문에 일기의 성격이 더 강합니다.

EL:FMT
저번 시간에 이어서 `formatting`(이하 `fmt`)를 `el` 형식으로 나타내는 방식에 대해서 알아본다. 어려운 건 아니고, `<fmt:포매팅 형태 value="${el}" type="데이터 형태"/>` 형식으로 사용하면 되는 것이라 간단하게 해결된다. `el`과 `fmt`는 다음에서 사용했었다.
[Java 풀스택 과정 강의] 3월 24일
※ TIL와는 별개로 적는 개인 개발 일지라서 말은 좀 편하게하는 페이지입니다.일지이기 때문에 일기의 성격이 더 강합니다. JSP 액션 태그jsp 액션 태그는 형태로 되어있는 태그를 총칭한다. 아래
bbbbabbbababababa.tistory.com
[Java 풀스택 과정 강의] 3월 25일
※ TIL와는 별개로 적는 개인 일지라서 말은 좀 편하게하는 페이지입니다.일지이기 때문에 일기의 성격이 더 강합니다. JSTLJSTL은, JSP Standard Tag Library의 준말로, JSP 페이지에서 자주 사용하는 자바
bbbbabbbababababa.tistory.com
더 크게 정리할 것은 없을 거 같다.
MVC 모델
MVC 모델이란 웹 애플리케이션 모델의 한 종류로, 현재는 자주 사용되고 있는 모델2를 이야기한다. 모델2라고 하니 모델1도 있는지 의아해할 텐데, 그렇다, 모델 1도 있다.

모델 1은 모든 클라이언트의 요청과 비즈니스 로직을 JSP에서 담당했던 것으로, 클라이언트 요청 → JSP → DAO(Model) → DB라는 과정을 거친다. 기능 구현이 쉽고 편리하지만, 코드의 재사용성이 떨어지고, 코드가 복잡해지며 유지보수가 어려워졌다는 단점이 있다.
반면 현재 사용되는 MVC 패턴은 모델 2로 다음과 같다.

모델 1의 단점을 보완한 것으로, 웹 애플리케이션의 각 기능을 분리해서 구현하였다. M은 Model, V는 View, C는 Controller로 각 기능이 분리되어 모듈화되어 있으므로 모듈별 개발이 가능하며, 이에 따라 유지보수도 쉬워졌다. 모듈의 분리로 코드 재사용, 확장성 및 이식성이 높아졌지만 동시에 구조가 복잡해지고 개발 비용이 증가했다는 단점이 있다.
커넥션 풀
커넥션 풀Connection Pool은 정확히는 DBCP(DataBase Connection Pool)이라 하는데, 이것이 탄생한 계기는 간단하다. 요청이 들어올 때마다 데이터베이스에 연결을 위해 Connection 객체를 생성하게 된다면 속도와 비용 면에서 손해를 보기 때문에, 연결을 파괴하지 않고 재사용하기 위한 풀을 만드는 것이다. 따라서 `context.xml` 에서 `DataResource`를 등록하는 등의 방법을 통하여 사용할 수 있다. Spring Boot 등의 프레임워크를 사용하면 이러한 `context.xml`을 수정할 필요는 없고, `application.properties` 혹은 `yml`, `.env`를 통하여 연결하기도 한다.
우리가 배운 것은 `DataResource` 사용으로 다음과 같이 사용했다.
<Resource
name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdle="30"
maxWaitMills="10000"
username="C##SQL_USER"
password="1234"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe"
/>
`username`은 DB 접속 사용자 이름, `password`는 DB 접속 사용자 비밀번호, `driverClassName`은 사용하는 드라이버, `url`에는 연결하는 url을 사용한다. 생소한 게 있을 텐데 `maxTotal`은 풀에 만들 수 있는 최대 연결 수를 의미하고, `maxIdle`은 놀고 있어도 되는 최대 유휴 연결 수를, `maxWaitMills`는 풀이 꽉 찼을 때 대기 시간을 알린다.
FACTORY
팩토리(Factory)는 객체를 만드는 복잡한 과정을 개발자가 직접 작성하지 않고, 객체를 생성해 주는 전용 클래스에 위임하는 디자인 패턴이다. 이러한 패턴이 마치 공장과 같다 하여 팩토리라고 일컫는다. 팩토리에는 위에서 설명한 커넥션 풀 또한 포함이 되어있으며, 다음과 같이 사용이 가능하다. 선행으로는 위에 적혀 있는 커넥션풀에 `factory="org.apache.commons.dbcp.BasicDataSourceFactory"` 를 추가해야 한다는 것이다.
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class MemberDAO {
private DataSource dataFactory;
public MemberDAO() {
try {
Context ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:/comp/env");
dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) try { rs.close(); } catch (Exception e) {}
if (pstmt != null) try { pstmt.close(); } catch (Exception e) {}
if (conn != null) try { conn.close(); } catch (Exception e) {}
}
}
public List<MemberDTO> selectAll() {
List<MemberDTO> list = new ArrayList<>();
String sql = "SELECT * FROM member2";
try (
Connection conn = dataFactory.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()
) {
while (rs.next()) {
list.add(new MemberDTO(
rs.getString("memId"),
rs.getString("memPwd"),
rs.getString("memName"),
rs.getString("memEmail"),
rs.getDate("memJoinDate")
));
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
여기서 핵심은 `dataFactory = (DataSource) envContext.lookup("jdbc/oracle");`를 사용하여 풀을 찾고, `Connection conn = dataFactory.getConnection();`을 통해 풀을 빌린 뒤, `close()`를 통하여 풀을 닫는다. 닫는다는 게 가장 중요한데, 연결을 끊는 게 아니라 닫는다는 점이다. 즉, 연결은 여전히 대기 처리를 했다가 연결이 필요할 경우 다시 풀을 여는 형태가 바로 팩토리 아키텍처의 중심이라고 할 수 있다.
'부트캠프 일지 > Java 풀스택 과정 강의' 카테고리의 다른 글
| [Java 풀스택 과정 강의] 3월 30일 (0) | 2026.03.30 |
|---|---|
| [Java 풀스택 과정 강의] 3월 27일 (0) | 2026.03.27 |
| [Java 풀스택 과정 강의] 3월 25일 (0) | 2026.03.25 |
| [Java 풀스택 과정 강의] 3월 24일 (0) | 2026.03.24 |
| [Java 풀스택 과정 강의] 3월 23일 (0) | 2026.03.23 |
