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(): 검증 쉬움
❓ 이건 뭐람?
오늘의 미결사항
-
Model - MVC pattern에 대한 공부가 필요하다!
-
EntityManager 마찬가지!