본문 바로가기

웹/Spring

[메모] Spring 입문(1)

Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다.

 

 - 스프링 부트 라이브러리 -

  • spring-boot-starter-web
    • spring-boot-starter-tomcat: 톰캣(웹 서버)
    • spring-webmvc: 스프링 웹MVC
  • spring-boot-stater-thymeleaf: 타임리프 템플릿 엔징(View)
  • spring-boot-stater(공통): 스프링 부트 + 스프링 코어 + 로깅
    • spring-boot
      • spring-core
    • spring-boot-stater-loggin
      • logback + slf4j

 

 - 테스트 라이브러리 -

  • spring-boot-starter-test
    • junit: 테스트 프레임워크
    • mockito: 목 라이브러리
    • assertj: 테스트 코드 작성의 편리함 제공
    • spring-test: 스프링 통합 테스트 지원

 - thymeleaf 템플릿엔진 동작  -

  • 컨트롤러에서 리턴 값으로 문자 반환 -> 뷰 리졸버('viewResover')가 화면을 찾아 처리
    • 스프링부트 템플릿엔진 기본 viewName 매핑
    • 'resources:templates/' + {ViewName} + '.html'
    • * 반환하는 값이 찾아가야할 경로

<spring-boot-devtools 라이브러리 - 별도의 서버 재시작 없이 View 파일 변경>

 

 - thymeleaf 템플릿엔진 동작  -

  • 컨트롤러에서 리턴 값으로 문자 반환 -> 뷰 리졸버('viewResover')가 화면을 찾아 처리
    • 스프링부트 템플릿엔진 기본 viewName 매핑

 

 - 빌드  -

  • ./gradlew build
  • cd build/libs
  • jar 파일 실행

 

 - 스프링부트에서 API동작  -

  • '@ResponseBody'를 사용
    • 서버 요청시에 @ResponseBody가 있다면, 
    • HTTP의 BODY에 return 내용을 직접 반환
    • 기본 문자처리: 'StringHttpMessageConverter'
    • 기본 객체처리: 'MappingJackson2HttpMessageConverter' (JSON)
    • 등 여러 형식에 대해 HttpMEssageConverter가 기본으로 등록되어 있음

- 객체처리 Controller 예제코드

package winterlimited.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@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;
        }
    }
}

 

 - 테스트진행 -

  • 전체 테스트코드 실행 시에 일괄적으로 진행됨
  • store에 저장된 값이 공유되어 버림
  • @AfterEach(메소드 진행 이후마다 실행됨)를 이용해 store(저장 공간)의 저장값을 비워 테스트를 진행

 

  • @BeforeEach(메소드 진행 이후마다 실행됨)를 이용해 constructor에 직접 repository를 넣어줌 (DI를 이용해 테스트 진행)

 

 

 - 스프링 빈 - 

  • 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에 찾아 넣어줌 (DI: Dependency Injection 이라고 함)
  • 기본적으로 @Component 단위에 의해 이루어짐 (기본적으로 메인 SpringApplication의 package폴더 내에서만 스캔함)
    • @Controller
    • @Service
    • @Repository
    • 해당 annotation들은 모두 @Component annotation 처리가 되어 있음

  • SpringConfig
    • @Bean 을 이용하여 스프링빈에 직접 등록해줄 수 있음