[Spring Boot] Spring Boot 입문하기2

인프런에 있는 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 by 김영한" 강의를 듣고 개인적으로 공부한 내용을 정리하는 페이지입니다.
1에 이어서 이번에는 간단하게 웹 개발방식에 대한 전반적인 내용을 적어보려고 한다.
실제로 웹을 개발하는 내용은 "스프링 핵심원리 - 기본편","jpa"강의를 듣고 난 후에 이를 토대로 직접 간단한 프로그램을 개발하면서 설명해보려고 한다.
이번에는 개발방식들, DB접근기술에는 뭐가 있는지, AOP란 뭔지 가볍게만 설명하도록 하겠다.

진행환경

  • os : ubuntu 20.04.3
  • IDE : IntelliJ
  • java 11

정적 컨텐츠

1) 정적 컨텐츠란?

  • 변화가 없는 컨텐츠를 말하며, 보통 상황에 따라 컨텐츠가 바뀌는 것이 아닌 html,css와 같이 서버에 저장되어있다가 그대로 보여지는 파일을 말한다.

2) 동작원리

  • 스프링에서는 resource/static 디렉토리 안에 html파일을 넣게 되면, 아래와 같이 입력했을때,내장 톰캣서버가 이를 찾아서 읽어서 반환해준다.(hello-static.html이라는 파일을 넣었다 가정)
http://localhost:8080/hello-static.html
  • 아래의 그림과 같이 hello-static.html파일을 요청하게 되면 먼저 내장 톰켓 서버가 스프링 컨테이너에서 hello-static이라는 컨트롤러가 등록되어있는지 확인한다.(스프링 컨테이너는 기본편 강의를 듣고나서 정리하도록 하겠다.)
  • 만약 없다면, resource/static 디렉토리 안에서 파일을 찾아서 리턴해준다.

    출처:[https://www.inflearn.com/course/스프링-입문-스프링부트]

MVC와 템플릿 엔진

1) MVC란?

  • Model,View,Controller를 의미한다.
  • 역할에 따라서 분리해놓은 패턴이다,Controller는 사용자로 부터 호출되는 부분이며 데이터를 다루는 모델과 사용자간의 인터페이스이다.
  • model은 애플리케이션의 데이터를 다루는 부분이다. DB, 데이터 가공등, 데이터에 관련된것을 다루는 부분이다
  • View의 경우, 화면에 보여지는 부분을 나타낸다(html과 같은)

2) 템플릿 엔진이란?

  • 정적인 html과 같은 컨텐츠에 특정 내용(변수, 코드등)을 넣으면 그것을 변환해주는 역할을 하는 엔진이다.변수인 name값이 "hello"라면 ${name} 이부분에 hello라는 값이 들어가서 출력이 된다.
  • 아래의 예는 스프링에서 사용하는 thymleaf라고 하는 템플릿 엔진을 이용해서 만든 예시이다.

3) 동작원리

  • 아래는 코드와 동작 과정이다.이 메서드의 리턴값은 템플릿 엔진이 적용된 html파일의 이름이다이때 파일은 viewResolver가 찾아서 템플릿 엔진을 처리하여 리턴해준다.
  • (만약 name이 "hello"면 이를 적용해서 리턴한다.)
  • 아래의 이미지에서는 hello-template.html파일을 찾게 된다.
  • localhost:8080/hello-mvc로 호출하게 되면 컨테이너에서 컨트롤러중 @GetMapping("hello-mvc")라는 어노테이션으로 설정한 부분을 찾아서 해당 메서드를 실행하게 된다.


    출처:[https://www.inflearn.com/course/스프링-입문-스프링부트]

API

1) API방식이란

  • 위의 방식들과는 달리 view파일(html,css등)들을 리턴해주는 것이 아닌 HTTP의 BODY 부분에 값을 직접 담아서 반환해준다.
  • 이 경우, 보통은 json형식을 이용해서 전송을 한다(문자열,xml도 가능)

2) 동작원리

  • API 방식은 @ResponseBody라는 어노테이션을 사용하는데 이를 사용하면 viewResolver가 동작하지 않고 HttpMessageConverter가 동작해서 BODY의 내용을 직접 json,string등의 타입으로 변환하여 반환해주게 된다.
  • (여러 타입처리용 HttpMessageConverter가 존재하고 이는 원하는 것으로 변경할수 있다. - 보통은 그냥 쓴다고 한다. )

출처:[https://www.inflearn.com/course/스프링-입문-스프링부트]

DB 접근기술

이부분에 대해서는 아주 간단하게 이런것들이 있다만 적고 넘어가겠다.

좀더 자세한 내용은 JPA강의를 듣고 써보도록하겠다.

순수 Jdbc

  • jdbc는 자바에서 DB에 접근할수 있도록 만들어진 API이다
  • 초기에 사용하는 방식으로 이것을 이용해서 직접 디비에 연결과정을 통해서 sql문을 날리고, 작업이 끝나면 다시 연결을 끊어주는 식으로 개발하는 방식이다

스프링 JdbcTemplate

  • 순수 jdbc가 너무 반복작업이 많고 귀찮은 작업이 많아서 이를 제거하여 좀 더 쉽게 개발할수 있도록 만든 방식이다.
  • 순수jdbc와 동일하게 환경설정을 하지만 커넥션을 맺고 끊는것과 같은 반복작업을 제거해준다.
  • sql은 직접 작성해서 날려야 한다.

JPA

  • 기존의 반복 코드도 제거해주면서 sql또한 자바코드로 치면 알아서 JPA가 만들어서 처리해주는 방식이다.
  • 이것을 사용하면 얻게 되는 장점은 코드로 sql 처리가 가능해져서 객체중심으로 설계를 할수 있게된다.
  • 즉, 개발 생산성이 크게 증가하게 된다.
  • JPA는 자바진영의 디비 인터페이스의 표준이고, 그 뒤에는 구현기술로 여러가지가 들어간다
  • 이 구현기술의 대표적인 예로는 하이버네이트가 있다.

스프링 데이터 JPA

  • JPA방식만 사용해도 충분히 생산성이 증가하는데, 이를 좀 더 간단하게 사용할수 있도록 제공하는 방식이다
  • 반복해서 개발해온 CRUD기능조차도 스프링 데이터JPA가 제공해서 더욱 더 쉽게 제공하는 방식이다.

AOP

AOP란?

  • Aspect Oriented Progrmming
  • 공통 관심 사항과 핵심관심 사항을 분리해서 개발하는 방식이다.
  • 아래와 같이 모든 기능에 시간측정로직을 넣어서 시간을 측정해야 한다고 가정해보겠다.따라서 이 시간 측정 로직이라는 공통 관심사항을 따로 빼서 만들고, 각 기능을 실행하는 컨트롤러가 해당 로직을 실행전에 이 공통 관심사항을 구현한 로직을 먼저 실행하게 하는 방식이다.
  • 아래의 그림과 같이 컨트롤러가 서비스를 호출하는 과정사이에 공통 관심사항 로직을 실행하게 하는것이다.
  • 이 경우에 모든 로직에 일일이 넣을수는 없다.



    출처:[https://www.inflearn.com/course/스프링-입문-스프링부트]

좋은 웹페이지 즐겨찾기