공부/JPA

프로젝트 환경 설정

Stair 2024. 11. 17. 13:31
반응형

https://start.spring.io/

이전처럼 spring프로젝트를 구성해준다.

gradle, java, 메이저 버전을 선택하고, 아래와 같은 dependencies를 구성하여준다.

 

이렇게 설정하면 압축 파일이 하나 생성되는데 압축을 해제하고(원하는 위치, 프로젝트를 만들 위치, 보통 C드라이브 밑에 폴더를 하나 구성하여 만든다.) build.gradle을 인텔리제이를 통해 프로젝트 open을 해준다.

 

롬복에 대한 구성 방법은 아래의 방법을 참고하도록 하자.

https://surrealcode.tistory.com/93

 

의존관계 자동 주입

다양한 의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다.- 생성자 주입- 수정자 주입(setter 주입)- 필드 주입- 일반 메서드 주입  생성자 주입- 이름 그대로 생성자를 통해서 의존관

surrealcode.tistory.com

 

view 환경설정 방법은 다음과 같다.

thymeleaf를 사용하여 구성을 할 건데, 이것또한 간단하게만 보고 넘어가자.

 

템플릿 엔진을 사용하여 렌더링 하려면 resources/templates에 html을 만들어주고, static이라면 resources/static에 html을 만들어 주면 된다.

controller와 thymeleaf에 관한 내용은 아래를 참고하자.

https://surrealcode.tistory.com/85

 

코드는 다음과 같다.

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!!");
        return "hello";
    }
}
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>

 

웹서버의 단점은 html을 수정할때마다 rerun을 시켜야 한다는 점이 문제이다.

이 문제를 해결하기 위해 build.gradle에 dependencies중 아래를 추가해주자.

implementation 'org.springframework.boot:spring-boot-devtools'

 

얘를 넣고  create import 를 하게되면 개발할때 캐시를 없애고 리로딩하는데 도움을 준다.

 

다음은 H2 DATABASE이다.

https://surrealcode.tistory.com/87

 

스프링 회원 관리 예제 2

https://surrealcode.tistory.com/86 스프링 회원 관리 예제이번엔 회원 관리 예제를 만들어보려 한다.기본 환경설정에 관한 내용은 아래를 참고하자.https://surrealcode.tistory.com/85 스프링 입문 - 프로젝트

surrealcode.tistory.com

H2에 관한 내용은 위의 블로그를 참고하자.

설치 자체는 간단하다.

 

DB 설치가 완료되었기 때문에 JPA와 DB설정 및 동작이 정상적으로 이루어 지는걸 확인해야 한다.

 

우선 application.yml파일을 만들고 properties를 삭제해준다.

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
    root: trace
    org.hibernate.type: trace
#    org.hibernate.orm.jdbc.bind: trace

 

DB 커넥이 제대로 동작하는지 Test 코드를 통해 확인해보자.

이때 Junit5가 아닌 Junit4를 통해 검증하였다.

@RunWith(SpringRunner.class)
@SpringBootTest
@Rollback(false)
public class MemberRepositoryTest {

    @Autowired
    MemberRepository memberRepository;

    @Test
    @Transactional
    public void testMember() throws Exception{
        //given
        Member member = new Member();
        member.setUsername("memberA");

        //when
        Long savedId = memberRepository.save(member);

        //then
        Member findMember = memberRepository.find(savedId);
        assertThat(findMember.getId()).isEqualTo(member.getId());
        assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
        assertThat(findMember).isEqualTo(member);
    }

}

    insert 
    into
        member
        (username, id) 
    values
        (?, ?)

 

테스트를 돌려보면 다음과 같이 정상 동작하는 것을 볼 수 있다.

또한 Rollback을 false로 주었기 때문에 h2 DB에 데이터 값이 그대로 들어있는 것을 확인할 수 있다.

이 로그를 좀 더 깔끔하게 보고 싶다면 build.gradl에 아래의 라이브러리를 추가해주도록 한다. 그럼 값이 ?가 아닌 실제 값을 입력하는 것을 볼 수 있다.

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

 

리프레시를 해준 후 다시 동작해보면 콘솔에 다음과 같은 값이 찍히는 것을 볼 수 있다.

insert into member (username,id) values (?,?)
insert into member (username,id) values ('memberA',1);

 

 

반응형

'공부 > JPA' 카테고리의 다른 글

JPA 영속성 관리  (1) 2024.11.28
JPA 설정하기  (0) 2024.11.26
JPA란?  (0) 2024.11.25
애플리케이션 구현(도메인 개발)  (0) 2024.11.21
도메인 분석 설계  (2) 2024.11.18