기초, 생성과 환경설정

Jaca·2021년 8월 31일
0

서론

스프링 핵심원리 - 기본자바 ORM 표준 JPA - 기본 까지 수강하고
스프링 부트와 JPA 활용1 편으로 들어왔다.

1장..? 의 프로젝트 환경설정 까지 들었지만 강의의 성격이 실전, 실무 느낌으로 넘어갔고, 이제 앞선 강의들을 잘 수강했다는 전제로 이론의 내용은 많이 생략하신다고 하시니 정리의 방향도 바뀌어야 할거같다.

이제부턴 이론적인 설명도 적을테니 강의를 들어서 붙여넣는 식으로는 유의미한 정리는 될거같지않고, 큰 흐름과 해당 코드, 구조내에서 모르는, 중요한 부분을 짧게 정리하는 식으로 가보려고한다.

아마 이러한 편이 모르는 것도 한번 더 알아보게 되고 좀 더 유의미한 시간을 가질 수 있지않을까..? 속도는 느려져도 ㅠ

프로젝트 생성

  • 사용한 Dependency :
    web, thymeleaf, jpa, h2, lombok, validation, devtools

  • Test Unit : Junit 4

라이브러리

  • Spring Web :
    WEB MVC를 사용하여 웹 애플리케이션을 만드는데 필요한 스프링부트
    Tomcat 서버를 내장하고 있음.

  • thymeleaf :
    텍스트, HTML, XML, Javascript, CSS 그리고 텍스트를 생성할 수 있는 템플릿 엔진
    순수 HTML로 템플릿을 작성할 수 있다.
    Spring boot 권장

  • Spring Data Jpa :
    스프링에서 ORM을 쉽게 사용할 수 있게 Spring data로 추상화 시켜둔 것
    구현체는 Hibernate를 사용하며 JPA는 Entity Manager로 감싸서 사용

  • Lombok :
    생성자, getter, setter 등을 자동으로 붙혀주는 라이브러리

  • H2 Datebase :
    JPA와 연동할 데이터베이스, 개발시에 용이

  • Validation :
    데이터에 대한 유효성 검증을 효과적으로 도와줌

  • devtools :
    개발에 용이한 여러가지 기능을 제공
    Property Defaults, Automatic Restart, Live Reload, Global Settings ,Remote Applications
    아직은 뭔지 잘 모름 ~_~ 알아가보자아아앙

초기 설정

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

아직 .yml.properties 의 차이까지는 잘 모르겠다.
좀 더 성장하면 알아볼 기회가 생기겠즹. 근데 yml이 좀 더 보기 편한거 같다.
하위 계층과는 띄어쓰기 2칸으로 계층 구분을 나눈다는 점.

기본 동작 확인

Member

MemberRepository

고런데.. Repository가 무엇이었더라,,,,? DTO와 뭐가 다르단 말인가
짧게 정리하려고했는데 안될꺼같다.

@PersistenceContext
대충 이름을 보니 느낌은 오지만 처음본다 무엇일까.

영속성 관리를 위해 스프링이 처음 시작할 때, Entity manager를 만들어서 빈으로 등록을 해둔다.
Entity manager는 @Autowired가 아니고 특별하게 @PersistenceContext라는 어노테이션으로 주입을 해줄 수 있다.

MemberPepositoryTest

@Transactional
스프링에서는 간단하게 어노테이션 방식으로 @Transactional을 메소드, 클래스, 인터페이스 위에 추가하여 사용하는 방식이 일반적이다. 이 방식을 선언적 트랜잭션이라 부르며, 적용된 범위에서는 트랜잭션 기능이 포함된 프록시 객체가 생성되어 자동으로 commit 혹은 rollback을 진행해준다.

@Rollback(false)
@Transactional 테스트에서 사용하면, 테스트를 실행할때마다 트랜잭션을 시작하고, 테스트가 끝나면 트랜잭션을 강제로 롤백한다.

롤백을 원하지 않으면?

@Rollback(false) 를 하면, 테스트수행후 롤백되지 않는다.
실제로 SQL 쿼리를 보고 추적하고 싶다면, rollback 옵션을 꺼야한다.
이 어노테이션과 @Transactional의 rollback 옵션의 차이는 테스트 레벨인지 아닌지..의 차이랄까

profile
I am me

0개의 댓글