티스토리 뷰

카테고리 없음

0119_알게 된 것들

lluna 2022. 1. 19. 14:59

Why SpringBoot?

스프링부트 라이브러리로 가장 강력한 기능이 톰캣(서버)와 MVC 제공이다.

내장 서버를 통해, 기존에 일일이 프로젝트와 서버를 연결(에러..) 하던 귀찮음이 사라졌다!

또한 웹 MVC 기능이 있어 @ 요런 콩들을 붙여서 아래의 어플리케이션 계층구조로 객체지향 서비스를 구현할 수 있다.

또한 스타터에 공통적으로 스프링 코어가 들어있고 로깅이라 하여, 로그를 출력해주는 요소가 있다. 실무에서 주로 사용한다고 한다.

테스트 지원도 좋다. 테스트 프레임워크가 있어서 단축키와 각종 annotation 을 통해 단위테스트 및 통합테스트를 작성할 수 있다.

 

Spring Boot 기반 MVC 구조 공부

주로 이러한 계층 구조를 따라 데이터가 전달된다.

  1. 프론트로부터 전달된 데이터를 컨트롤러에서 받으면, 생성해둔 멤버도메인(객체)의 메서드를 통해 set 한다. 데이터는 @ResponseBody 가 처리한다.
  2. 이후 컨트롤러단에 주입되어있던 서비스 객체에 파라미터로 멤버도메인(객체) 를 넣어 실행한다.

서비스 객체는 join, findMembers, findOne 등 비즈니스 로직을 가지고 있다.

  1. 컨트롤러에서 넘어온 멤버도메인(객체) 를 검증하고 서비스 객체 생성시 주입된 레포지토리 객체에 파라미터로 멤버도메인(객체) 를 넣어 메서드를 실행한다.
  2. 최종적으로 레포지토리는 구현체를 통해 DB 를 조작하는 메서드를 실행한다.
  3. 레포지토리를 인터페이스와 구현체 구조로 설정하면, 스프링 빈에 등록한 후 구현체를 자유롭게 바꿀 수 있다.

 

Template ⇒ RestAPI 적용 공부

ResPonseBody 사용시 객체를 반환하면 자동으로 JSON 으로 변환된다.

http://localhost:8080/hello-api?name=spring 라는 주소가 반환되었다고 생각해보다.

파라미터는 name 이고, 밸류는 spring 이다.

아래 Controller 빈으로 등록된 HelloController 클래스에서 @RequestParam ”name” 이기 때문에 name 파라미터의 밸류인 spring 을 name 으로 받는다.

그러면 이후 hello 객체에 set 메서드를 통해 spring 이란 이름을 넣을 수 있다.

그리고 return 으로 객체를 반환하는데, 이 때 @ResponseBody 가 동작하여 객체를 JSON 형태로 바꿔준다.

{ name : spring }
@Controller
  public class HelloController {
      @GetMapping("hello-api")
      @ResponseBody
      public Hello helloApi(@RequestParam("name") String name) {
          Hello hello = new Hello();
          hello.setName(name);
          return hello;
      }
      static class Hello {
          private String name;
          public String getName() {
              return name;
}
          public void setName(String name) {
              this.name = name;
} }
}

 

h2 설치 권한부여 및 실행

댓글