유데미 스타터스 취업 부트캠프 3기 - 백엔드 7주차 학습 일지

joon·2023년 1월 7일
2

이번주는 jdbc로 데이터베이스 업데이트, 삭제 실습을 마무리하고, 서블릿과 jsp를 시작했다. 몇 주전만해도 이미 알고 있는 내용과 모르는 내용이 섞여 있어 복습하는 데에 많은 시간이 소요되지는 않았다. 요즘은 모르는 내용이 점점 많아지고 있어 정리할 것들이 늘어간다.

이번주엔 서블릿과 jsp에 대해 배웠다. 서블릿은 동적인 웹페이지를 만들때 필요하며, 하나의 자바 클래스이다. 이 자바 클래스는 클라이언트의 요청을 받아 처리를 한 뒤 결과물을 클라이언트에게 재전송한다. 이 때 html로 처리 결과를 내보내는 경우가 많은데, 서블릿에서 html문서를 작성하고 내보내기란 보통 번거로운 일이 아니다. 게다가 사용자에게 디스플레이 하는 요소와 정보를 처리하는 부분이 하나의 자바 클래스에 존재하다보니 유지관리도 쉽지 않다. 이때 jsp를 이용하면 html 코드를 보다 편리하게 작성할 수 있다. 단순하게 이야기하자면 자바 코드와 html 모드를 섞어가며 작성할 수 있어 서블릿 실행 결과에 따라 달라지는 출력 내용을 쉽게 작성할 수 있다. 게다가 view가 서블릿에서 분리되어 유지보수도 편리해진다. jsp는 하나의 자바 클래스로 변환되어 실행시 html을 작성하게 된다. Spring을 이용하면 Thymeleaf나 Mustache 같은 템플릿 엔진을 이용하게 되겠지만 지금은 Spring 배우기 전 동작원리를 간단하게 들여다보는 차원에서 전통적인(?) 방식의 수업이 진행되고 있다.

그리고 데이터베이스 연결 풀링에 대해 새로 알게 되었다. DB 접속할 때는 DB와의 연결이 필요하다. 그런데 DB와의 연결을 하나 생성하고 해제하기 위해 많은 비용과 시간이 소요된다. 실습환경은 로컬에 데이터베이스가 있는 데다가 여러명이 동시접속하는 환경이 아니기 때문에 속도 저하가 체감이 나지 않는다. 하지만 루프문을 이용해 수천-수만 개의 db 연결을 생성했다 끊어보는 코드를 만들어 실행하면 속도가 느려지고 커넥션이 부족하다는 예외가 발생한다. 연결 생성에 시간이 걸리기도 하지만 close()를 한다고 해서 즉시 db 연결이 메모리에 해제되는 것 또한 아니기 때문이다.

커넥션을 빌리고 반납하는 시스템이 예전의 비디오 대여점처럼 느껴진다.
Photo by Sean Benesh on Unsplash

만약에 웹서버가 DB와의 연결들을 미리 생성해놓고, 필요할 때마다 공유,반납,재사용하는 방식을 써보면 어떨까? connection pool을 이용하면 그런 문제를 해결할 수 있다. 예전에는 connection pool을 직접 구현했겠지만 웹서버가 javax.sql.DataSource 인터페이스를 구현한 것을 이용하면 직접 구현없이 커넥션 풀을 사용할 수 있다. 설정하는 구체적 방법들은 환경에 따라 다를 수 있으니 다른 블로그나 현재 듣고 있는 강의를 참조하면 될 것 같다. https://atoz-develop.tistory.com/entry/Tomcat-%EC%84%9C%EB%B2%84-DataSource-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95-JNDI

——————————————————————————

2개의 댓글

comment-user-thumbnail
2023년 1월 14일

👍

1개의 답글