JSP #6

jjinny_0609·2023년 3월 27일
0

JSP

목록 보기
6/6

커넥션 풀

커넥션 풀(Connection Pool)은 데이터베이스와 연결된 커넥션(Connection)을 미리 생성해 놓고, 필요할 때마다 커넥션을 가져다 쓰고 반납하는 방식으로 데이터베이스 연결을 관리하는 기술입니다.

일반적으로 데이터베이스 연결은 매번 새로운 연결을 생성하고 연결을 종료하는 과정이 필요합니다. 하지만 이 방식은 매번 연결을 생성하고 종료하기 때문에 불필요한 자원 낭비가 발생할 수 있습니다. 또한, 많은 사용자가 동시에 데이터베이스에 접근하는 경우에는 연결을 생성하는 데에 많은 시간이 소요될 수 있습니다.

커넥션 풀을 사용하면 데이터베이스 연결을 미리 생성해 놓고 필요할 때마다 커넥션을 가져다 쓰고 반납하는 방식으로 데이터베이스 연결을 관리합니다. 이렇게 함으로써 불필요한 자원 낭비를 줄이고, 데이터베이스 연결을 더욱 효율적으로 관리할 수 있습니다.

JSP에서 커넥션 풀을 구현하기 위해서는 일반적으로 JDBC(Java Database Connectivity) API를 사용합니다. JDBC API를 사용하여 데이터베이스와 연결된 커넥션을 생성하고, 커넥션 풀에서 관리합니다. JSP에서는 보통 커넥션 풀 라이브러리인 Apache Tomcat JDBC Connection Pool, HikariCP, c3p0 등을 사용합니다. 이러한 라이브러리를 사용하면 커넥션 풀을 더욱 편리하게 구현할 수 있습니다.

DBCP

DBCP(Apache Commons DBCP)는 Apache Commons 프로젝트에서 제공하는 커넥션 풀 라이브러리 중 하나로, JSP에서 데이터베이스 연결을 관리하기 위해 자주 사용됩니다.

DBCP는 JDBC 드라이버를 로드하고, 데이터베이스와 연결된 커넥션을 생성하고, 커넥션 풀에 관리하는 기능을 제공합니다. 또한, DBCP는 커넥션 풀 내의 커넥션 개수를 제한하고, 사용하지 않는 커넥션을 반환하도록 설정할 수 있어서, 데이터베이스 연결에 필요한 자원을 효율적으로 관리할 수 있습니다.

DBCP는 기본적으로 Apache Tomcat에 내장되어 있어서, Tomcat 환경에서는 별도의 설정 없이 바로 사용할 수 있습니다. 또한, DBCP는 XML 파일이나 소스 코드를 이용하여 간단하게 설정할 수 있습니다.

아래는 DBCP를 사용하여 JSP에서 MySQL 데이터베이스와 연결하는 간단한 코드 예시입니다.

import java.sql.*;
import org.apache.commons.dbcp.BasicDataSource;

public class DBConnect {
   private static BasicDataSource dataSource;
   static {
      dataSource = new BasicDataSource();
      dataSource.setDriverClassName("com.mysql.jdbc.Driver");
      dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
      dataSource.setUsername("myusername");
      dataSource.setPassword("mypassword");
      dataSource.setInitialSize(5);
      dataSource.setMaxIdle(10);
      dataSource.setMaxTotal(20);
   }

   public static Connection getConnection() throws SQLException {
      return dataSource.getConnection();
   }
}

위 코드에서는 BasicDataSource 클래스를 사용하여 데이터베이스 연결 정보와 커넥션 풀 설정 정보를 설정하고, getConnection() 메서드를 통해 커넥션을 가져옵니다. 이렇게 설정된 DBCP를 사용하면, JSP에서 데이터베이스 연결을 쉽게 관리할 수 있습니다.
(Apache Tomcat 8버전 이후로는 내장되어있어서 다운받을 필요는 없습니다.)

MVC 패턴

MVC(Model-View-Controller) 패턴은 소프트웨어 디자인 패턴 중 하나로, 소프트웨어의 구조를 세 가지 역할(Model, View, Controller)로 분리하여 개발하는 방법론입니다.

MVC 패턴에서 Model은 애플리케이션의 데이터와 비즈니스 로직을 담당하며, View는 데이터를 시각적으로 표현하는 UI(User Interface)를 담당합니다. Controller는 사용자의 입력에 따라 Model과 View를 제어하고, 사용자와 Model 사이의 상호작용을 담당합니다.

이러한 역할 분담을 통해, 소프트웨어의 구조가 단순하고 유연해지며, 코드의 재사용성과 유지보수성이 향상됩니다. 또한, Model과 View가 분리되어 있어서, 동일한 데이터를 다양한 형식으로 표현하는 다양한 View를 개발할 수 있습니다.

MVC 패턴을 사용하면, 소프트웨어의 각 구성 요소를 독립적으로 테스트할 수 있으므로, 소프트웨어의 품질을 향상시킬 수 있습니다. 또한, 각 역할이 분리되어 있기 때문에, 대규모 프로젝트에서 여러 명의 개발자들이 동시에 작업할 수 있도록 협업이 용이해집니다.

MVC 패턴은 웹 개발에서도 많이 사용됩니다. 예를 들어, Model은 데이터베이스와 상호작용하여 데이터를 처리하고, View는 HTML, CSS, JavaScript 등을 사용하여 UI를 표현하며, Controller는 사용자의 요청을 받아 Model과 View를 조작하여 응답을 생성합니다. 대표적인 MVC 웹 프레임워크로는 Spring MVC, Django 등이 있습니다.

이때, MVC 패턴은 대개 Model2 구조와 Model1 구조 두 가지 형태로 구현됩니다.

Model1 구조
Model1 구조는 JSP(JavaServer Pages) 페이지에서 비즈니스 로직을 처리하고, 데이터베이스와 연동하여 데이터를 처리하는 방식입니다. 이 구조에서 JSP 페이지는 View와 Controller 역할을 모두 수행하게 됩니다. JSP 페이지에서 데이터베이스 연동과 같은 비즈니스 로직을 처리하게 되므로, 코드가 간단하고 빠르게 개발할 수 있습니다. 그러나, 코드의 유지보수성이 떨어지며, 확장성도 낮아지는 단점이 있습니다. 따라서 대규모 프로젝트에서는 권장되지 않습니다.

Model2 구조
Model2 구조는 Model1 구조의 단점을 보완하여 만들어진 구조로, 각 역할이 분리되어 있습니다. Model은 비즈니스 로직을 처리하고, 데이터베이스와 연동하여 데이터를 처리합니다. View는 HTML, CSS 등을 사용하여 UI를 구성합니다. Controller는 사용자의 요청을 받아 Model과 View를 연결하여 결과를 반환합니다. 이러한 역할 분담을 통해, 코드의 유지보수성이 높아지고, 확장성도 좋아집니다. 대표적인 Model2 구조의 프레임워크로는 Spring MVC, Struts 등이 있습니다.

  • MVC 패턴의 구조

MVC의 컨트롤러 : 서블릿

MVC 패턴에서 컨트롤러는 모델과 뷰를 연결해주는 역할을 합니다. 웹 어플리케이션에서는 주로 서블릿(Servlet)을 사용하여 컨트롤러를 구현합니다.

서블릿은 자바로 작성된 웹 어플리케이션의 구성 요소 중 하나로, 클라이언트의 요청을 받아서 처리하고, 그 결과를 다시 클라이언트에게 전송하는 역할을 합니다.

서블릿을 이용하여 MVC 패턴의 컨트롤러를 구현할 때는, 주로 다음과 같은 방식으로 구현합니다.

  1. 서블릿 클래스에서 클라이언트의 요청을 받아서 처리합니다.
  2. 모델 클래스를 이용하여 요청에 대한 데이터를 처리합니다.
  3. 뷰 클래스를 이용하여 처리 결과를 클라이언트에게 전달합니다.

즉, 서블릿은 클라이언트의 요청을 받아서 모델과 뷰를 연결해주는 역할을 수행합니다. 이를 통해 웹 어플리케이션의 비즈니스 로직과 사용자 인터페이스를 분리하여 관리할 수 있습니다.

서블릿을 이용한 MVC 패턴의 장점은 다음과 같습니다.

  1. 코드의 재사용성이 높습니다.
  2. 유지보수가 용이합니다.
  3. 비즈니스 로직과 사용자 인터페이스를 분리하여 개발할 수 있습니다.

따라서, 서블릿은 MVC 패턴에서 컨트롤러를 구현하는 데 가장 많이 사용되는 기술 중 하나입니다.

  • 컨트롤러 서블릿 내부 동작 방식
profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글