웹 애플리케이션을 개발할 때 데이터는 보통 데이터베이스에 보관한다. 1. 주로 TCP.IP를 통해 커넥션을 연결한다.2. 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결한 커넥션을 통해 DB에 전달한다.3. DB는 전달된 SQL을 수행하고 그 결과를 응답한다. JDBC(Java Database Connectivity)는 자바에서 데이터 베이스에 접속할 수 있도록 하는 자바 API이다.자바가 표준 인터페이스를 정의했으니 개발자는 사용해서 개발하면 되는데, 사용할 DB에 맞는 드라이버도 필요하다. SQL 작성 후 SQL Mapper가 SQL 결과를 객체로 편리하게 매핑해준다.SQL Mapper로는 JdbcTemplate와 MyBatis가 있다. MyBatis가 Jdbc Template보다 더 많은 ..
스프링 mvc 2편 드디어 완강이다 야호✨ 파일 전송과 HTML Form 전송방식 각각 차이가 있다. 이것부터 이해해야한다. 요청 HTTP 메시지 헤더에 Content-Type application/x-www-form-urlencoded 추가된다. (가장 기본)폼에 입력한 항목은 HTTP 바디에 username=wow&age=100와 같이 &로 구분해서 전송된다. 파일을 전송할려면 파일은 문자가 아니라 바이너리 데이터로 전송해야 한다.그런데 파일을 전송할 때는 보통 폼인 문자 데이터도 함떼 전송하는 상황이 많다.이때 HTTP는 multipart/form-data 전송방식을 사용한다. 서블릿 파일 업로드 @GetMapping("/upload") public String newFile() { ..
스프링 웹프로젝트를 하다보면 문자를 숫자로 변환하거나, 반대로 숫자를 문자로 등 타입을 변화해야하는 경우가 많다.스프링 기능인 타입 컨버터가 이를 지원한다. HTTP 요청 파라미터는 모두 문자로 처리된다. 숫자가 필요한 경우 타입을 변환하는 과정을 거친다. @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request) { //요청 파라미터는 모두 문자로 처리된다. String data = request.getParameter("data"); //자바에서 다른 타입으로 변환할 때 방법 Integer intValue = Integer.valueOf(data); Sy..
ExceptionResolver는 스프링 MVC에서 컨트롤러 실행 중에 예외가 발생할 때 이를 잡아 적절한 응답을 해주는 인터페이스 클레스이다. 여러 Resolver를 한 묶음으로 묶어 순서대로 실행해주는 컨테이너가 HandlerExceptionResolverComptosite이다.그래서 스프링 부트는 에러가 발생하면 다음과 같은 순서대로 예외 처리가 실행된다.HandlerExceptionResolverComposite ├─ 1. ExceptionHandlerExceptionResolver ├─ 2. ResponseStatusExceptionResolver └─ 3. DefaultHandlerExceptionResolver ExceptionHandlerExceptionResolver스프링에서 가장 많이 ..
스프링이 아닌 순수 서블리 컨테이너에서 예외를 어떻게 처리하는 알아본다. 자바에서 메인 메소드가 실행되면 main이라는 이름의 쓰레드가 실행된다.실행 도중에 예외를 잡지 못하고 처음 실행한 main 메소드로 넘어와서 예외가 던져지면 쓰레드가 종료된다.반면 웹 애플리케이션은 사용자 요청별로 쓰레드가 할당되고 서블릿 컨테이너 안에서 실행된다.만약 애플리케이션이 예외를 못 잡고, 서블릿까지 예외가 전달되면 WAS까지 결국 전달되어 500에러 발생한다.(WAS - 필터 - 서블릿 - 인터셉터 - 컨트롤러) 스프링 부트를 통해서 서블릿 컨테이너를 사용하기 때문에 스프링 부트가 제공하는 기능을 이용해 서블릿 오류페이지를 등록해보겠다.public class WebServerCustomizer implements We..
웹 애플리케이션에서 상품 등록, 수정, 삭제 등 로그인을 해야만 가능한 페이지를 관리하기 위해선 로그인 여부를 확인해야 한다.이렇게 웹 애플리케이션에 여러 로직에서 공통으로 관심있는 것을 공통 관심사(cross-cutting concern)이라고 한다. 서블릿 필터서블릿 필터는 서블릿이 지원하는 수문장이다.왜냐하면 요청이 있을 때 컨트롤러단에 가기 전에 필터 그리고 서블릿이 호출되기 때문이다. 필터 흐름은 다음과 같다.HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러만약 적절하지 않는 요청이라 서블릿 호출이 안되는 경우HTTP 요청 -> WAS -> 필터 끝!필터가 여러개인 경우 필터첸이이라고 한다. 로그를 남기고 싶다면 이때 필터추가하면 된다.HTTP 요청 -> WAS -> 필터1 -> ..