본문 바로가기
반응형

Spring/Spring MVC 524

생성자 vs setter vs field 의존성 주입 개요 DI를 하는 방법은 생성자 주입과 setter 주입이 있습니다. 2개를 코드로 비교하게 된 계기는, 스프링 공식문서에서 순화참조를 해결하기 위해서는 setter 주입을 사용하라고 했던 내용입니다. 생성자 주입이 훨씬 좋다고 평가되는데, 왜 setter 주입을 사용해서 해결하라고 했을까요? 실제 코드를 통해서 의존성 주입 방식에 따라 빈이 어떤순서로 생성되는지 비교해보겠습니다. 주입 방식에 따른 호출 순서 setter주입, 필드 주입, 생성자 주입에 따라서 매개변수가 있는 생성자, 매개변수가 없는 생성자, setter 함수 등이 어떤 순서로 실행된는지 알아보겠습니다. @Component로는 DogsDao, DogsService, DogsController 총 3개를 사용하겠습니다. setter 주입 .. 2022. 7. 15.
DispatcherServlet & ContextLoaderListener * 개요 서블릿을 먼저 공부하고, 스프링 구조를 공부하면서, DispatcherServlet이 중요한 역할을 한다는 것을 알게되었습니다. 이 서블릿 덕분에 클라이언트의 요청을 스프링이 처리할 수 있으므로 그 동작과정과 작동원리가 궁금했습니다. 또한 이와 관련하여 WebApplicationContext와 ContetLoaderListener도 함께 공부했습니다. Web Application에는 1개의 ServletContext가 있습니다. 여기에는 여러 자원들의 공유자원들이 있습니다. WebApplicationContext는 ServletContext 안에 만들어 집니다. ContextLoadListener는 Root WebApplicationContext에 여러 자바 빈들을 적재합니다. 주로 Servic.. 2022. 7. 12.
미니프로젝트 오늘의 공부 (@RequestParam), (@ModelAttribute) 매개변수 넘어왔을 때, request객체에 등록되는 것은 ModelAttribute뿐이다. @RequestParam의 변수를 jsp에서도 사용하고 싶으면 (Model model)을 주입받아 model.addAttribute를 사용하여 jsp에 넘긴다. form 커스텀에서 modelAttribute를 통해서 값들을 넘기지 않으면, request 객체에 담기지 않는다. ex)form 태그 안에 value에 ${}을 사용하면 파라미터에 넘어오지 않는다. form 커스텀에서 modelAttribute를 넘기기 위해서는 아무내용없는 Bean 객체를 (@RequestParam)에 보낸다. ex) 글쓰기를 한 내용을 파라미터로 넘기기 위해 f.. 2020. 5. 29.
Restful API 기본 웹 애플리케이션은 응답 결과를 브라우저가 사용하는 html, css,javascript 로 생성하여 전달한다. Restful API 서버는 응답결과를 "데이터만으로 구성"하여 클라이언트로 전달하는 서버이다. Restful API 서버는 웹, 모바일 PC 등 다양한 플랫폼으로 "데이터"를 전달할 때 사용한다. @RestController @Controller는 return하는 값이 jsp를 지정하는 의미이지만 @RestController에서 return은 "그 값자체를 브라우저에 전달"하는 방식이다. 객체나 리스트를 json 데이터로 만들어 주는 것이 Jackson Databind @RestController public class RestTestController { @GetMapping("/tes.. 2020. 5. 28.
MyBatis Java 언어를 사용하여 데이터베이스와 연동하는 프로그램을 만들 수 있는 기술이 JDBC JDBC 프로그래밍을 보다 쉽게 할 수 있도록 설계된 라이브러리가 MyBatis MyBatis는 Spring framework에서 이용할 수 있도록 라이브러리를 제공하고 있다. *JDBC(Java DataBase Connectivity) = 자바에서 데이터베이스에 연결하기 위한 인터페이스 *ODBC(Open Database Connectivity) = ODBC는 모든 응용 프로그램(프로그래밍 언어 무관)에서 모든 데이터베이스 시스템과 통신하는 데 사용할 수있는 개방형 인터페이스. 언어와 독립적이다. *DBCP(DataBase Connection Pool) = 데이터베이스와 커넥션을 맺고 있는 객체를 관리하는 역할. .. 2020. 5. 27.
예외처리 프로그램 실행 중 오류가 발생되면 프로그램이 중단되는데, 이 오류표시가 사용자 입장에서 보기 좋지 않다. 따라서, 오류 발생시 보여줄 jsp를 구성하고 이 jsp로 응답결과를 생성하여 브라우저로 전달한다. @ExceptionHandler는 Controller마다 만들면 불편하기 때문에 오류에 관련된 핸들러가 Controller에 없다면 Global Exception Handler를 만든다. 예외처리하는 방법은 다음과 같다. 1. Exception을 implements하고 @ControllerAdvice를 가진 GlobalExceptionHandler.java 생성하고 @ExceptionHandler로 예외처리 내용 정하기 2. 에러처리를 위한 jsp파일 생성 후 return 3. ServletAppCon.. 2020. 5. 27.
Interceptor spring Framework의 AOP를 적용한 Spring MVC의 요소이다. Interceptor는 요청주소에 대해 관심을 가지고 있다. 요청주소를 확인하여 Controller의 메서드를 호출 하기 전이나 후에 다른 메서드를 호출 할 수 있도록 가로 채 간다. 메서드의 코드가 중복되는 부분이 있다면 Interceptor를 통해 처리할 수 있다. 로그인 여부 확인, 등급별 서비스 권한 확인 등.. implements HandlerInterceptor extends HandlerInterceptorAdaptor 2가지 모두 가능하다. Interceptor는 보통 3가지 메소드를 구현한다. preHandle() - 메서드 호출 전 (return false이면 이후는 실행하지 않고 종료된다.) postHan.. 2020. 5. 27.
Validator 커스터마이징 JS-303, JS-380 2가지의 경우에 유효성 검사하는 코드를 알아보았다. Validator를 본인이 직접 만들어 사용 할 수 있다. JS 사용 대신 추가해 주어야 할 부분은 다음과 같다. 1. Validator를 implements한 클래스 구현하기 2. 1번의 객체를 TestController.java에 @initBinder 구현한 함수에 바인딩하기 1. TestController에 initBinder 함수 추가하기 @InitBinder public void initBinder(WebDataBinder binder) { DataBean1Validator validator1 = new DataBean1Validator(); //binder.setValidator(validator1); binder... 2020. 5. 27.
JSR-303 / JSR-383 JSR-303 어노테이션은 빈 객체에 주입되는 값의 유효성을 검사한다. properties에 [annotation이름.bean객체이름.변수명] 을 써서 등록한다. properties를 사용하기 위해서 ServletAppContext.java에 등록한다. @Bean public ReloadableResourceBundleMessageSource messageSource() { ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource(); res.setBasename("/WEB-INF/properties/error_message"); return res; } setBasename으로 등록했기 때문에, error_.. 2020. 5. 27.
반응형