[Spring Boot] TIL - 4 스프링부트 실전 공부 세팅하기 (실전! 스프링 부트와 JPA 활용1 - 섹션 1 프로젝트 환경설정)

하이초·2022년 9월 7일

Spring_Boot

목록 보기
4/11
post-thumbnail

1. 프로젝트 생성

🥨 프로젝트 생성 도구: https://start.spring.io/

  • GroupId: 큰 틀 cf.회사명
  • ArtifactId: 작은 틀 cf.서비스명
  • Spring Web, Thymeleaf, Spring Data JPA, H2 Database, Lombok, Spring Boot DevTools 정도는 기본으로 깔고 가는게 좋다!
    - 세세한 거는 나중에 더 공부하자 ㅠㅠ

🍯 허니팁

  • lombock 사용 시 preferences에서 'annotation processors' -> 'Enable annotation processing' 꼭 체크 해줘야 함!

2. 라이브러리 살펴보기

🥨 의존관계 확인 방법

  • 터미널: ./gradelw dependencies
  • 인텔리제이: 오른쪽 gradel에서 확인 가능

🥨 주요 의존관계들

  • tomcat, jdbc, hikariCP, hibernate, spring-jpa, logging(logback, slf4j..), spring-core, spring-context 등등
  • test쪽은 assertj등이 들어있음

🥨 핵심 라이브러리

  • 스프링 MVC
  • 스프링 ORM
  • JPA, 하이버네이트
  • 스프링 데이터 JPA

🥨 기타 라이브러리

  • H2 데이터베이스 클라이언트
  • 커넥션 풀: 부트 기본은 HikariCP
  • WEB(thymeleaf)
  • 로깅 SLF4J & LogBack
  • 테스트

❓ 이건 뭐람?

  • hibernate: JPA의 구현체로, JPA 인터페이스를 구현하며 내부적으로 JDBC API를 사용

3. View 환경 설정

🥨 템플릿엔진: Thymeleaf, Apache Freamarker, Mustache, Groovy Templates 등을 주로 사용함

  • Spring은 Thymeleaf를 밀어주는 중!

🥨 spring.io/guides를 잘 확인하면 아주아주아주 좋다!

🥨 controller

  • @GetMapping: 해당 URL로 오면 이 컨트롤러를 실행 시키겠다!
  • model: model 객체에 data를 실어서 view에 보낼 수 있음
  • return: 페이지의 이름..?! (늘 그건가?)
    - 어떻게 이걸로 templates에 있는 페이지들을 찾아갈까?
    • 그게 스프링이니까..(끄덕) 이거 바꾸고 싶으면 설정에서 이 부분을 바꿔주면 된다

🥨 Resource

  • static: 정적인 페이지
    - 여기에 index.html은 알아서 메인으로 연결되나보다
  • templates: 동적인 페이지
  • Model: 얘에 data를 실어서 view에 보낼 수 있다

❓ 이건 뭐람?

  • Model
    - request.setAttribute()와 비슷한 역할을 한다
    - 파라미터로 설정만 해주면 변수를 따로 만들 필요가 없다 스프링이 해준다
    - mvc 패턴 공부하며 더 자세하게 알아보자..

4. H2 데이터베이스 설치

🥨 설치 후 콘솔에서 db 파일 경로 설정 가능

5. JPA와 DB 설정, 동작확인

🥨 application 파일은 yml이 나중에 설정이 더 쉽다

🥨 datasource

  • MVCC=TRUE: 넣어주면 개발환경에서는 도움이 된다

🥨 jpa

  • hibernate
    - ddl-auto: create: 자동으로 테이블을 만들어주는 모드, 내가 가지고 있는 엔티티를 다 지우고 새로 생성

🥨 logging

  • jpa.hibernate.show_sql: sout에 찍힘, 실 운영 환경에서는 날려야 함!
  • logging.level.org.hibernate.SQL: debug: 로거를 통해서 찍음

🥨 이런 설정은 다 spring 메뉴얼에 있다!!!! 참고하자!!!!

🥨 활용

  • Repository: 엔티티들을 찾아주는 것으로 DAO와 비슷
  • EntityManager
    - PersistenceContext 어노테이션을 쓰면 주입이 됨
  • 설계 시 command와 query를 분리하라 cf.db에 객체 저장 후 객체 반환이 아닌 객체의 id를 반환하여 해당 객체를 사용하고 싶을 때 id값을 통해 참조할 수 있도록

🥨 테스트 클래스

  • @RunWith(SpringRunner.class): junit에게 알려주기
  • @SpringBootTest: SpringBoot 환경에서 돌리기 위한 어노테이션
  • @Autowired: 의존성 주입
  • 인텔리제이 설정에서 live templates를 통해 단축키 설정 가능(꿀팁)
  • 모든 transaction은 entity manager를 통해서 이루어져야 함
  • @Transactional: spring꺼 사용!
  • 같은 transaction 안에 있으면 캐시에서 가져올 수 있음

쿼리 파라미터 로그 남기기

  • 외부 라이브러리 사용
  • 실 운영 시에는 성능 확인 필수, 개발 시에는 편하게 사용

🍯 허니팁

  • shift + cmd + T: test class 생성
  • option + cmd + v: 인스턴스명 적절히 생성해 줌
  • Assertions.assertThat().isEqualTo(): 검증 쉬움

❓ 이건 뭐람?

  • EntityManager: 공부하자...

오늘의 미결사항

  1. Model - MVC pattern에 대한 공부가 필요하다!

  2. EntityManager 마찬가지!

profile
개발국대가 되는 그 날까지. 지금은 개발 응애.

0개의 댓글