1. DI (Dependency Injection) (1) 의존성(Dependency) 한 객체(A)가 다른 객체(B)를 사용하는 것을 의미한다. A->B 만약 B가 변경된다면 A에도 영향을 미친다. 즉 A는 B의 변화에 취약하다. 이를 개선하기 위해 인터페이스를 두어 서로의 결합도가 느슨해지도록 설계를 하기도 한다. (2) 의존성 주입(Dependency Injection / DI) 런타임 시 의존 관계를 맺는 대상을 외부(스프링 프레임워크)에서 결정하고 주입해 주는 것을 의미한다. 스프링 프레임워크는 DI 기능을 지원해 주는 프레임워크이다. (3) DI 장점 의존성 주입을 인터페이스 기반으로 설계하면, 느슨한 결합도(loose coupling)를 가질 수 있고, class 간의 결합도를 낮출 수 있으..
1. MVC 프레임워크 (1) 스프링 웹 MVC 프레임워크 구조 ①, ②, ③ 순서대로 프로세스가 진행된다. 요청이 들어오면 Dispatcher Servlet이 요청을 받아 Handler Mapping을 통해 적절한 핸들러(컨트롤러)를 찾아 보내게 된다. 핸들러는 view name을 return 한다. Dispatcher Servlet는 return 받은 view name을 가지고 View Resolver를 통해 View 객체를 return 받게 된다. 최종적으로 view render를 응답 값을 return 하게 된다. 2. MVC 프레임워크 실습 (1) 목표 DispatcherServlet AnnotationHandlerMapping HandlerAdapter ViewResolver (2) mvc-p..
1. 프런트 컨트롤러 단일 handler에서 모든 요청을 처리하는 패턴을 가진다. 즉, 중앙집중식 요청 처리 메커니즘이라 할 수 있다. 스프링 웹 MVC 프레임워크의 DispatcherServlet이 프런트 컨트롤러 패턴으로 구현되어 프런트 컨트롤러의 역할을 한다. 다시 말해, 요청이 들어오면 프런트 컨트롤러가 받아 적절한 컨트롤러에게 위임해준다. 2. Forward VS Redirect (1) Forward 서블릿에서 웹 브라우저(클라이언트)를 거치지 않고 바로 다른 서블릿에게 요청하는 방식으로 url 주소가 달라지지 않는다. 서버 내부에서 일어나는 요청이기 때문에 기존에 생성되었던 HttpServletRequest, HttpServletResponse 객체가 공유된다. // 기존의 객체 전달 Requ..
1. DBCP (1) DBCP (Database Connection Pool) 미리 여러개 DB 커넥션을 생성하여 하나의 풀에 저장해 두었다가 필요에 따라 풀에서 커넥션을 불러와 사용하는 기법이다. 스프링 부트 2.0 부터는 디폴트 커넥션 풀로 HikariCP가 설정되어 있다. DBCP 라이브러리 종류로는 HikariCP, 톰캣JDBC 등이 있다. (2) 커넥션 풀 사용 시 유의 사항 커넥션의 사용 주체는 WAS 스레드(HTTP 웹 서버에서 생성했던 스레드)이므로 커넥션의 개수는 WAS 스레드 수와 함께 고려해야 한다. 커넥션 수가 커질수록 메모리 소모가 커지지만, 동시 접속자 수가 많을 때에는 사용자 대기 시간이 감소하는 이점이 있다. 반대로 커넥션 수가 감소한다면 비례하여 메모리 소모가 감소하지만 사..
1. JDBC(Java Database Connectivity) 자바 애플리케이션에서 데이터베이스(DB) 프로그래밍을 할 수 있도록 도와주는 표준 인터페이스이다. 표준이기 때문에 DBMS 종류에 상관이 없다. JDBC 인터페이스들을 구현한 구현체들은 각 DB 벤더 사들이 제공해주며 이를 JDBC 드라이버라 한다. 자바 코드에서는 보통 JDBC 인터페이스에만 의존하기 때문에 DB가 바뀌더라도 코드를 수정이 필요 없다. 2. JDBC 실습 (1) 의존성 추가 implementation(‘com.zaxxer:HikariCP:5.0.1’) implementation(‘org.sptingframework:splitng-jdbc:5.3.22’) // assert testImplementation(‘org.asser..
오늘은 CGI 프로그램과 서블릿에 대하여 학습하고 서블릿 구현 실습을 하려고 한다. 1. CGI와 서블릿 1) CGI (Common Gateway Interface) 웹 서버가 애플리케이션과 데이터를 주고받을 때 사용되는 규칙 CGI 프로그램은 CGI 규칙에 따라 데이터를 주고받는 프로그램이다. c, c++, java 등 컴파일 언어뿐만 아니라 php, python 등 스크립트 언어(인터프리터 방식)로도 작성이 가능하다. 2) 인터프리터 방식 웹 서버는 스크립트 엔진(script engine)을 실행시키고, 스크립트 엔진은 스크립트 파일을 해석해 웹서버에 결과값을 return 한다. 서블릿과 서블릿 컨테이너에도 동일하게 CGI 규칙이 적용된다. 개발자는 더이상 서블릿과 서블릿 컨테이너 사이에 사용되는 C..
오늘은 이어서 계산기 프로그램 프로젝트의 Step2 와 Step3를 진행해보려 한다. 1. 계산기 프로그램을 웹 애플리케이션 1) 계산기 프로그램을 웹 애플리케이션으로 만들기 Step1 - 사용자 요청을 메인 Thread가 처리하도록 한다. Step2 - 사용자 요청이 들어올 때마다 Thread를 새로 생성해서 사용자 요청을 처리하도록 한다. Step3 - Thread Pool을 적용해 안정적인 서비스가 가능하도록 한다. 2) 구현 참고사항 Step1의 한계 Step1 과정에서 웹 애플리케이션 서버인 미니 톰캣을 구현하였다. 이 때 main 스레드에서 작업을 하였는데, main 스레드가 작업을 수행하던 중 블럭킹이 걸리게 된다면 다음 클라이언트 요청이 바로 수행되지 못하고 이전 작업이 완료될 때까지 기다..