[Spring Boot2][2] 1. 프로젝트 환경설정

sorzzzzy·2021년 10월 9일
0

Spring Boot - RoadMap 2

목록 보기
12/26
post-thumbnail

🏷 프로젝트 생성

스프링 부트 스타터 사이트로 이동해서 프로젝트 생성

✔️ 프로젝트 선택

  • Project: Gradle
  • Project Language: Java
  • Spring Boot: 2.5.x

✔️ Project Metadata

  • Group: jpabook
  • Artifact: jpashop

✔️ Dependencies

  • Spring Web
  • Lombok
  • validation
  • h2
  • jpa
  • Thymeleaf


🏷 라이브러리 살펴보기

📌 gradle 의존관계 보기
터미널에서 프로젝트 위치로 이동한 뒤,
➡️ ./gradlew dependencies —configuration compileClasspath


1️⃣ 스프링 부트 라이브러리

  • spring-boot-starter-web
    • spring-boot-starter-tomcat : 톰캣 (웹서버)
    • spring-webmvc: 스프링 웹 MVC
  • spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진(View)
  • spring-boot-starter-data-jpa
    • spring-boot-starter-aop
    • spring-boot-starter-jdbc
      ➡️ HikariCP 커넥션 풀 (부트 2.0 기본)
    • hibernate + JPA: 하이버네이트 + JPA
    • spring-data-jpa: 스프링 데이터 JPA
  • spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
    • spring-boot
      ➡️ spring-core
    • spring-boot-starter-logging
      ➡️ logback, slf4j

1️⃣ 테스트 라이브러리

  • spring-boot-starter-test
    • junit : 테스트 프레임워크
    • mockito : 목 라이브러리
    • assertj : 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
    • spring-test : 스프링 통합 테스트 지원
  • 핵심 라이브러리
    • 스프링 MVC
    • 스프링 ORM
    • JPA, 하이버네이트
    • 스프링 데이터 JPA
  • 기타 라이브러리
    • H2 데이터베이스 클라이언트
    • 커넥션 풀 : 부트 기본은 HikariCP
    • WEB(thymeleaf)
    • 로깅 SLF4J & LogBack
    • 테스트

📌 참고
스프링 데이터 JPA는 스프링과 JPA를 먼저 이해하고 사용해야 하는 응용기술!



🏷 View 환경 설정

📌 thymeleaf 템플릿 엔진


✔️ HelloController 생성

@Controller
  public class HelloController {
      @GetMapping("hello")
      public String hello(Model model) {
          model.addAttribute("data", "hello!!");
          return "hello";
      }
}

✔️ 실행

thymeleaf 템플릿 엔진을 사용해 hello.html이라는 파일을 만든 후 실행해보자!

➡️ 실행 굿!



🏷 H2 데이터베이스 설치

H2 데이터베이스 설치는, 스프링부트 입문편 강의에서 이미 다룬 바 있으므로 넘어가겠다😉

H2 데이터베이스 설치하기



🏷 JPA와 DB 설정, 동작 확인

✔️ main/resources/application.yml

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/jpashop
    username: sa
    password:
    driver-class-name: org.h2.Driver

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
#        show_sql: true
        format_sql: true

logging.level:
  org.hibernate.SQL: debug
#  org.hibernate.type: trace

spring.jpa.hibernate.ddl-auto: create
➡️ 이 옵션은 애플리케이션 실행 시점에 테이블을 drop 하고, 다시 생성한다.

show_sql
➡️ 이 옵션은 System.out에 하이버네이트 실행 SQL을 남긴다.

org.hibernate.SQL
➡️ 이 옵션은 logger를 통해 하이버네이트 실행 SQL을 남긴다.

🤚🏻 주의
application.yml 같은 yml 파일은 띄어쓰기 2칸으로 계층을 만들기 때문에 띄어쓰기 2칸을 필수로 적어주어야 한다!


✔️ 테스트하기

회원 엔티티와 회원 리포지토리를 만든 후, 테스트 코드를 통해 실행시켜보자!

MemberRepositoryTest생성

import jpabook.jpashop.domain.Member;
import jpabook.jpashop.repository.MemberRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
  
import javax.persistence.EntityManager;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MemberRepositoryTest {
    @Autowired MemberRepository memberRepository;
    
    @Test
    @Transactional
    @Rollback(false)
    public void testMember() {
    
        Member member = new Member();
        member.setUsername("memberA");
        Long savedId = memberRepository.save(member);
        Member findMember = memberRepository.find(savedId);
        
        Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
        Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
        Assertions.assertThat(findMember).isEqualTo(member);
   }
}
 

📌 테스트를 실행했는데 다음과 같이 테스트를 찾을 수 없는 오류가 발생하는 경우!
No tests found for given includes [jpabook.jpashop.MemberRepositoryTest (filter.includeTestsMatching)
➡️ 스프링 부트 2.1.x 버전을 사용하지 않고, 2.2.x 이상 버전을 사용하면 Junit5가 설치된다.
➡️ 이때는 build.gradle 마지막에 다음 내용을 추가하면 테스트를 인식할 수 있다.
➡️ Junit5 부터는 build.gradle 에 다음 내용을 추가해야 테스트가 인식된다.

test {
        useJUnitPlatform()
}

✔️ 꿀팁❗️ 쿼리 파라미터 로그 남기기

스프링 부트를 사용하면 build.gradle에 이 라이브러리만 추가하면 된다!!

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'

➡️ 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다.
➡️ 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다!


백신 니가 먼데..날 울려....나알~.....울려~...ㄹ허...

profile
Backend Developer

0개의 댓글