모르지 않다는 것은 아는것과 다르다.

분류 전체보기 224

스프링 타입 컨버터

스프링과 타입 변환 타입을 변환해야 하는 경우는 상당히 많다. 스프링 MVC 요청 파라미터 -> ex> @RequestParam , @ModelAttribute , @PathVariable @Value 등으로 YML 정보 읽기 XML에 넣은 스프링 빈 정보를 변환 뷰를 렌더링 할 때 이런게 가능한 것은 스프링이 중간에 타입 변환기를 사용해서 타입을 String Integer 로 변환해주었기 때문에 개발자는 편리하게 해당 타입을 바로 받을 수 있는 것이다. 만약 개발자가 새로운 타입을 만들어서 변환하고 싶으면 아래와 같이 컨버터 인터페이스를 사용하면 된다. public interface Converter { T convert(S source); } 스프링은 확장 가능한 컨버터 인터페이스를 제공한다. 개발자..

Spring 2022.02.26

서블릿 구조

서블릿이란? 서블릿이란 동적 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그램밍 기술이다. 다시말해서 서블릿은 웹 프로그래밍에서 클라이언트 요청을 처리하고 처리 결과를 클라이언트에게 전송하는 기술이다. 자바로 구현된 CGI이다. html을 사용해서 요청에 응답한다. java thread를 통해서 동작한다. MVC 패턴중 Controller로 이용된다. HTTP 변경시 Servlet을 재 컴파일한다. HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다. UDP보다 속도가 느리다. SpringMVC 구조 Spring MVC의 구조는 위와 같다. 동작순서는 아래와 같다. 1. 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러..

Spring 2022.02.26

서블릿 예외처리

서브릿이 예외를 처리하는 방식 Exception(예외) 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무런 문제가 없다. 애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무런 문제가 없다. 동작과정은 아래와 같다. WAS(여기까지 전파) 인터셉터 -> 컨트롤러 2. WAS(여기까지 전파) 컨트롤러(/error-page/500) -> View 스프링 부트가 제공하는 오류페이지 스프링 부트는 아래와 같은 과정으로 오류페이지를 제공한다. ErrorPage 를 자동으로 등록한다. 이때 /error 라는 경로로 기본 오류 페이지를..

Spring 2022.02.26

빈 스코프

빈 스코프란? 보통 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지된다고 알고있다. 그 이유는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. applicatio..

Spring 2022.02.26

빈 생명주기와 콜백

빈 생명주기와 콜백 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 간단하게 다음과 같은 라이프사이클을 가진다. 객체 생성 -> 의존관계 주입 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 스프링은 스프링 컨테..

Spring 2022.02.26

Transactional Propagation

Transaction Propagation 종류 REQUIRED (default) 기존에 시작된 트랜잭션이 있으면 유효성을 검사해서 문제가 있다면 Exception 을 던지고 문제가 없으면 기존의 시작된 트랜잭션을 사용한다. 만약 기존에 시작된 트랜잭션이 없다면? -> 새로운 트랜잭션을 생성한다. 실무에서는 거의 이 옵션을 주로 사용한다. REQUIRES_NEW 부모 트랜잭션이 있더라도 항상 새로운 트랜잭션을 시작한다. 이미 진행중인 트랜잭션이 있으면 트랜잭션을 잠시 보류시킨다. 그리고 자식 트랜잭션이 완료(커밋 혹은 롤백)되면 보류되었던 트랜잭션이 다시 활성화된다. SUPPORTS 기존에 시작된 트랜잭션이 있으면 유효성을 검사해서 문제가 있다면 Exception 을 던지고 문제가 없으면 기존의 시작된 ..

Spring 2022.02.26

SpringMVC

개요 SpringMVC 패턴을 이해하기 위해서 기본적으로 알아야 될 지식들을 정리하고자 한다. 웹 서버(Web Server) HTTP 기반으로 동작한다. 정적 리소스를 제공한다. 정적(파일)에는 HTML, CSS, JS, 이미지, 영상등이 있다. 웹 서버의 예로는 NGINX, APACHE 등이 있다. 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작한다. 프로그램 코드를 실행해서 애플리케이션 로직을 수행한다. 동적 HTML 를 처리한다. HTTP API(JSON) 등을 핸들링할 수 있다. 서블릿, JSP, 스프링 MVC 가 WAS에서 실행된다. 웹 서버가 하는 기능 대부분을 포함하고있다. 예로는 Tomcat, Undertow, Jetty 등이 있다. WAS..

Spring 2022.02.26

BindingResult

BindingResult BindingResult는 검증 오류가 발생할 경우 오류 내용을 보관하는 스프링 프레임워크에서 제공하는 객체다. 스프링이 제공하는 검증 오류를 보관하는 객체이다. 검증 오류가 발생하면 여기에 보관하면 된다. BindingResult 파라미터의 위치는 @ModelAttribute 파라미터 다음에 와야한다. BindingResult가 없으면 @ModelAttribute 에 데이터 바인딩 시 오류가 발생해도 컨트롤러가 호출된다. 원래 같았으면 400에러로 오류 페이지로 넘어가야 되지만, BindingResult를 넣어주면 오류에 대한 결과가 BindingResult 객체에 담기고 컨트롤러가 호출된다. BindingResult에 검증 오류를 적용하는 3가지 방법 @ModelAttribu..

Spring 2022.02.26

Bean Validation (BindingResult 개념을 먼저 숙지 해야된다.)

Bean Validation (BindingResult 개념을 먼저 숙지 해야된다.) Bean Validation 특정 피리드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직일 확률이 크다. 그렇기 때문에 이런 검증 로직을 모든 프로세스에 적용할 수 있게 공동화하고, 표준화 한 것이 Bean Validation이다. Bean Validation을 잘 활용하면, 애노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있다. implementation 'org.springframework.boot:spring-boot-starter-validation' 디펜던시를 추가해줘야한다. 예시로는 아래와 같은 검증 애노테이션이 있다. @NotBlank : 빈값 + ..

Spring 2022.02.26

ApplicationRunner,CommandLineRunner

ApplicationRunner,CommandLineRunner 개요 스프링 부트 애플리케이션이 구동될 때마다 앞서 실행시키고 싶은 코드가 있다면, ApplicationRenner, CommandLineRunner 를 이용해서 처리할 수 있다. ApplicationRunner 코드 예시는 아래와 같다. @Component public class MyApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("ApplicationRunner start!"); } } 위와 같이 설정하면 구동 시점에 run 메소드의 코드..

Spring 2022.02.26