Spring
[DB] JDBC 란
💡 JDBC 란? Javc Database Connectivity 의 줄임말로, DB 프로그래밍을 하기 위해 사용되는 Api 이다. 애플리케이션을 개발할 때 중요 데이터들을 주로 데이터베이스에 보관하게 되는데 JDBC 는 애플리케이션에서 데이터베이스에 접근하기 위해 사용하게 된다. JDBC Api를 사용하여 데이터 베이스에 연동할 수 있고, 데이터베이스에서 자료를 쿼리하거나 업데이트 하는 방법을 제공한다. ✔︎ JDBC 의 등장배경 애플리케이션 서버는 주로 TCP/IP 를 사용해서 커넥션을 연결하여 DB를 사용하게 된다. 이후 서버는 DB가 이해할 수 있는 SQL 을 연결된 커넥션을 통해 DB에 전달하게 되고 DB는 전달된 SQL 을 수행하고 그 결과를 응답해주어 애플리케이션 서버에서 활용되게 된다. ‼..
[spring] HTTP 메세지 컨버터
💡 HTTP 메세지 컨버터 메세지 컨버터는 XML, JSON 을 이용한 AJAX 기능이나 웹 서비스를 개발할 때 사용할 수 있다. HTTP API 처럼 JSON 데이터를 HTTP 메세지 바디에서 직접 읽거나 쓰는 경우에 HTTP 메세지 컨버터를 사용하면 편리하다. ❓스프링 MVC 는 언제 메세지 컨버터를 적용할까? HTTP 요청 데이터 읽기 : @RequestBody, HttpEntity(RequestEntity) HTTP 요청이 왔을 때 컨트롤러에서 @RequestBody, HttpEntity 파라미터를 사용한다. 메세지 컨버터가 메세지를 읽을 수 있는지 확인하기 위해 canRead( ) 를 호출한다. 대상 클래스 타입을 지원하는가 HTTP 요청의 Content-Type 미디어 타입을 지원하는가 ca..
[spring] 스프링 MVC - HTTP 응답 데이터
💡 응답 데이터를 만드는 방법 스프링(서버)에서 응답데이터를 만드는 방법들 1️⃣ 정적 리소스 스프링 부트는 class path 의 다음 디렉토리에 있는 정적 리소스를 제공한다. ex ) /static, /public, /resources, /META-INF/resources /src/main/resources 는 리소스를 보관하는 곳이며, class path의 시작경로이다. 따라서 이 디렉토리에 리소스를 넣어두면 스트링 부트가 정적 리소스로 서비스를 제공한다. 정적 리소스는 해당 파일을 변경없이 그대로 서비스한다. 2️⃣ 뷰 템플릿 사용 과정 뷰 템플릿을 거쳐 HTML 이 생성되고 -> 뷰가 응답을 만들어서 전달한다. 일반적으로는 HTML 을 동적으로 생성하는 용도로 사용하지만, 뷰 템플릿이 만들 수 ..
[spring] 스프링 MVC - HTTP 요청 메세지
요청 파라미터와 다르게, HTTP 메시지 바디를 통해 데이터를 넘어오면 @RequestParam, @ModelAttribute를 사용할 수 없다. HTML Form 형식은 요청 파라미터로 인정된다. HTTP 메세지 바디 데이터는 여러 방법으로 읽을 수 있는데 그 방법에 대해서 알아보자. 💡 HTTP 요청 메세지 - 단순 텍스트 1️⃣ HttpServeltRequest 에서 InputStream을 사용하기 @PostMapping("/request-body-string-v1") public void requestBodyString(HttpServletRequest request, HttpServletResponse response) throws IOException { ServletInputStream in..
[spring] 스프링 MVC - HTTP 요청 파라미터
서블릿에서 학습했던 HTTP 요청 데이터를 조회하는 방법은 예전 포스팅에서 다루었었다. 서블릿으로 조회하는 HTTP 요청 데이터 이번 포스팅에서는 서블릿으로 조회하는 방법이 아닌, 스프링으로 조회하는 방법에 대해서 알아보자. 💡 HTTP 요청 파라미터 - @RequestParam @RequestParam 스프링이 제공하는 @RequestParam 을 사용하면 요청 파라미터를 매우 편리하게 조회가 가능하다. @ResponseBody @RequestMapping("/request-param-v2") public String requestParamV2( @RequestParam("username") String memberName, @RequestParam("age") int memberAge) { log.i..
[spring] 스프링 MVC - 요청을 매핑하는 다양한 방법
💡 요청 매핑이란? url 요청이 왔을 때 어떤 컨트롤러가 호출되어야 하는지 정해놓는 것을 말한다. ✔︎ 사용법 @RequestMapping을 통해 명시된 url 경로로 요청이 들어올 경우 해당 메서드가 호출된다. 단일, 다중 매핑이 가능하다. ex ) @RequestMapping("hello-basic") @RequestMapping({"hello-basic", "hello-go")} @RestController public class MappingController { private Logger log = LoggerFactory.getLogger(getClass()); @RequestMapping(value = "/hello-basic", method = RequestMethod.GET) publi..
[spring] logging
💡 logging 알아보기 스프링 MVC 의 기본 기능 중 하나이다. 로그는 별도의 로깅 라이브러리를 사용해서 로그를 출력한다. ❗️로깅 라이브러리 스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리(spring-boot-starter-logging) 가 포함된다. 스프링 부트 로깅 라이브러니는 기본으로 아래와 같은 로깅 라이브러리를 사용한다. SLF4J Logback 이때, 수많은 로그 라이브러리가 존재하지만 그것을 통합하여 인터페이스로 제공하는 것이 SLF4J 라이브러리이다. SLF4J 는 인터페이스이고, 구현체로 Logback 같은 로그 라이브러리를 선택하면 된다. 실무에서는 대부분 스프링 부트가 기본으로 제공하는 Logback 을 사용한다. ✔︎ 로그 사용방법 로그 선언 private ..
[spring] spring MVC 구조 이해 - dispatcherServlet
🧩 스프링 MVC 의 구조 스프링 MVC 의 구조는 우리가 직접 만들었던 MVC 프레임워크 구조와 매우 유사하다. 스프링 MVC 또한 프론트 컨트롤러 패턴으로 구현 되어있고, 우리가 만들었던 프론트 컨트롤러가 스프링 MVC 에서는 DispatcherServlet 에 해당한다. 💡 DispatcherServlet 이란? HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아서 적절한 컨트롤러에 위임해주는 역할을 하는 프론트 컨트롤러이다. DispatcherServlet 또한 HttpServlet을 상속 받아서 사용하고, 서블릿으로 동작한다. ❗️요청 흐름 살펴보기 서블릿이 호출되면 HttpServlet 이 제공하는 service( ) 가 호출되고 스프링 MVC 는 DispatcherServlet의 부모인..