본문 바로가기

728x90

Spring

(26)
[DB] DataSource 란? 커넥션 획득 방법커넥션을 얻는 방법은 JDBC DriverManager를 직접 사용하거나, 커넥션 풀을 사용하는 등 다양한 방법이 있습니다. 여기서 문제가 존재합니다. JDBC DriverManager를 통해 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변경한다고 하면 애플리케이션 코드도 함께 변경해야 하게 되는 것이죠. 위와 같은 문제를 해결하기 위해서 자바에서 javax.sql.DataSource 라는 인터페이스를 제공합니다.DataSourceDatasource는 커넥션을 획득하는 방법을 추상화하는 인터페이스입니다. Datasource 에는 여러 기능이 있지만, 핵심 기능은 커넥션 조회 라고 할 수 있습니다. public interface DataSource { Connection getCon..
[DB] 커넥션 풀이란? (Connection pool) 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거칩니다.애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회합니다.DB 드라이버는 DB와 TCP/IP 커넥션을 연결합니다. 즉, 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생하게 됩니다.DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달합니다.DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성합니다.DB는 커넥션 생성이 완료되었다는 응답을 보내고, DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환합니다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모되는 일입니다. DB는 물론이고 애플리케이션 서버에서도 TCP/IP 커넥..
[DB] JDBC 실습 (구현 및 테스트) 아래 포스팅에서 만든 H2 DataBase를 사용해서 실습을 진행할 예정입니다.https://silver-programmer.tistory.com/entry/JDBC%EB%9E%80 JDBC란?서버에서는 데이터를 데이터베이스에 저장하고 있습니다. 그리고 데이터베이스에는 MySQL, Oracle과 같이 다양한 종류가 있죠. 여기서 문제가 발생합니다. 첫째로, 특정 데이터베이스를 사용하다silver-programmer.tistory.com 테이블 생성 및 DTO 정의schema.sql아래처럼 task라는 테이블을 생성합니다. task 테이블의 필드는 task_id, category, priority로 구성했습니다.DROP TABLE IF EXISTS task CASCADE;CREATE TABLE task (..
[DB] JDBC란? 서버에서는 데이터를 데이터베이스에 저장하고 있습니다. 그리고 데이터베이스에는 MySQL, Oracle과 같이 다양한 종류가 있죠. 여기서 문제가 발생합니다. 첫째로, 특정 데이터베이스를 사용하다가 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코드도 함꼐 변경해야 합니다. 그리고, 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달,  그 결과를 응답받는 방법을 새로 학습해야 됩니다. 위와 같은 문제를 해결하기 위해 JDBC라는 자바 표준이 등장합니다. 위키 백과를 보면 JDBC를 아래와 같이 정의합니다.JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC 는 데이터베이스에서 자료를 쿼..
서블릿(Servlet) 이란? 서블릿은 웹 서버를 구현할 때 필요한 TCP/IP 연결, HTTP 메시지 파싱, HTML 생성 등의 역할을 대신해주어 개발자가 비즈니스 로직에만 집중할 수 있도록 해줍니다. 서블릿은 아래와 같이 생겼습니다. urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행됩니다. HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServetRequest 서블릿이 개발자를 위해 HTTP 요청 메시지를 직접 파싱하여 HttpServletRequest 객체에 담아서 제공 HTTP 응답 정보를 편리하게 사용할 수 있는 HttpServetResponse 개발자가 설정한 스펙에 맞게 서블릿이 HTTP 응답 메시지 직접 구성하여 HttpServletResponse 객체에 담아서 제공 서블릿은 HTTP 요..
Spring Boot와 내장 톰캣 내장 톰캣은 WAR 방식의 단점을 보완하기 위해서 등장하였습니다. (참고: 외장 서버와 내장 서버) 내장 톰캣은 쉽게 말해 톰캣을 라이브러리로 포함하고 자바 코드로 직접 실행하는 것을 의미합니다. 이번 포스팅에서는 내장 톰캣을 이용하여 Spring과 연결하여 웹 애플리케이션을 만들어보는 과정을 작성하였습니다. 사용할 코드의 패키지 구조와 build.gradle 구조는 아래와 같습니다. plugins { id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { //스프링 MVC 추가 implementation 'org.springfra..
외장 서버 vs 내장 서버 외장 서버 과거에는 자바로 웹 애플리케이션을 개발할 때, 먼저 서버에 톰캣과 같은 WAS(Web Application Server)를 설치한 뒤, 설치한 WAS에서 동작하도록 Servlet 스펙에 맞추어 코드를 작성하였습니다. 그리고 작성한 코드를 WAR 형식으로 빌드하여 war 파일을 생성하고, 생성한 war 파일을 설치한 WAS에 배포하는 방식으로 애플리케이션을 개발하였습니다. 하지만 이렇게 개발을 하는 것은 상당히 복잡하고 추가 설정이 필요합니다. 따라서 현재는 다른 방식으로 개발을 진행하는 데요, 그 방식인 내장 서버를 이용한 방식입니다. 내장 서버 최근에는 Spring Boot가 내장 톰캣을 포함하고 있습니다. 애플리케이션 코드 안에 톰캣 같은 WAS가 라이브러리로 내장되어 있어, 개발자가 코드..
@Autowired와 Collection 클래스(List, Map, etc.) 아래 포스팅에서 동일 타입의 빈들이 충돌할 때 어떻게 해결할 수 있는지 확인했습니다. 이번 포스팅은 의도적으로 해당 타입의 스프링 빈이 다 필요한 경우, 특히 동적으로 동일 타입의 스프링 빈이 선택되는 경우에는 어떻게 해결할 수 있을지 작성하였습니다. 이 경우에는 자바의 Collection 클래스를 이용하여 동일 타입의 모든 빈들을 저장할 수 있습니다. 코드를 통해 확인해 보겠습니다. // Product 인터페이스 public interface Product { int discount(); } // Product 상속(구현)하는 Computer 클래스 @Component public class Computer implements Product{ @Override public int discount() {..

728x90
반응형