반응형 분류 전체보기171 [JPA] JPA 프로젝트 설정 JPA란? Java Persistence API의 약자로, 자바의 ORM 기술의 표준이다. 즉, JPA는 ORM을 위한 인터페이스 같은 개념이고, 이 인터페이스를 구현만 하면 JPA로 사용할 수 있다. 예를 들자면, 우리가 아는 대표적인 JPA 구현체로는 Hibernate가 있지만, EclipseLink나 DataNucleus 같이 JPA 인터페이스를 구현한 다른 구현체들도 Hibernate 대신 교체해서 쓸 수 있는 것이다. JPA 프로젝트 생성 [File] - [New Project] 를 선택하고 Maven 또는 Gradle 프로젝트를 생성한다. 그 후 JPA를 사용하기 위해 Dependency를 추가해준다. 이번 프로젝트의 경우 JPA의 구현체 중 Hibernate를 선택하도록 하겠다. Maven .. 2022. 2. 26. [Spring Boot] Infinite recursion (StackOverflowError) 오류 날 때 Intro Spring Repository에서 객체를 조회하는 도중에 아래의 에러가 발생했다. 2022-02-23 10:44:22.914 ERROR 58164 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion .. 2022. 2. 23. [Spring Boot] AOP 적용해보기 Intro AOP는 Aspect Oriented Programming의 약자로, 관점 지향 프로그래밍이라는 뜻을 갖고 있다. 여러 모듈들에서 공통 관심 사항을 묶어 핵심 관심 사항과 따로 분리시켜버리는 것이다. 예를 들어 모든 함수의 실행시간을 측정하고 싶다고 할 때, 원래는 함수 하나하나 들어가서 아래와 같이 시간 측정 코드를 넣어줘야 한다. private void function() { long start = System.currentTimeMillis(); try { //기존 코드 } finally { long finish = System.currentTimeMillis(); long timeMs = finish - start; System.out.println("Total time: " + tim.. 2022. 2. 15. [Spring Boot] Spring Data JPA 써보기 Intro 이전 시간에 JPA를 사용해서 DB와 연결해봤다. JDBC에서 JPA로 대체하는것 만으로도 코드가 엄청 많이 줄었는데 여기서 더 줄이는 방법이 있다고 한다. 바로 Spring Data JPA를 사용하는 것이다. Spring Data JPA 써보기 우선 SpringDataJpaMembeRepository 인터페이스를 만들어주고, JpaRepository랑 이전에 만든 MemberRepository를 상속시켜주자. SpringDataJpaMemberRepository.java package com.devjaewoo.hellospring.repository; import com.devjaewoo.hellospring.domain.Member; import org.springframework.data.. 2022. 2. 15. [Spring Boot] JPA로 JdbcTemplate 대체하기 Intro JPA는 Java Persistence Api의 약자로, SQL을 직접 작성하지 않고도 객체를 통해 DB를 구성해준다. JPA를 사용하면 SQL과 데이터 중심 설계에서 객체 중심 설계로 패러다임 전환이 가능하기 때문에 개발 생산성을 크게 높일 수 있다. JPA 테스트케이스 작성 JPA를 사용하기 위해 Dependency를 추가해주자. JPA에서 JDBC를 포함하기 때문에 원래 있던 JDBC Dependency를 지우고 아래의 코드를 넣어주면 된다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' //implementation 'org.springframework.boot:spring-boo.. 2022. 2. 15. [Spring Boot] 스프링 통합 테스트 케이스 만들기 Intro 이전에 JdbcTemplate를 이용해 데이터를 메모리가 아닌 DB에 접근하도록 변경했다. 그렇기 때문에 기존의 테스트는 스프링과 상관없이 순수 Java 코드를 이용한 테스트였는데, 이제부터는 DB 서버 URL, 설정 등을 스프링이 갖고 있기 때문에 서버를 올려 테스트를 진행해야 한다. 테스트 케이스 작성 우선 서비스의 기능은 같기 때문에 이전에 만들었던 MemberServiceTest를 복사해서 가져오자. MemberServiceIntegrationTest.java package com.devjaewoo.hellospring.service; import com.devjaewoo.hellospring.domain.Member; import com.devjaewoo.hellospring.repo.. 2022. 2. 15. [Spring Boot] JdbcTemplate로 MemoryRepository 대체하기 Intro 데이터가 메모리에 저장돼 서버를 껐다 켜면 데이터가 날아가는 현상을 방지하기 위해 JdbcTemplate를 사용할 것이다. JdbcTemplate를 사용하면 기존 JDBC의 반복 코드를 대부분 제거해 SQL과 결과 처리에 집중할 수 있도록 지원해준다. JDBCTemplate 적용 JdbcTemplate를 사용하기 위해 gradle 파일에 JDBC를 implement 해줘야 한다. build.gradle dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-jdbc' ... } 이제 MemberRepository를 구현하는 JdbcTemplateMemberRepository 클래스를 만들고, JdbcTemp.. 2022. 2. 14. [Spring Boot] h2 Database 설정하기 h2 Database 설정하기 DB 접근 코드를 작성하기에 앞서 h2 DB부터 설치해주자. 우선 gradle에서 h2 관련 dependency를 추가한다. build.gradle dependencies { ... runtimeOnly 'com.h2database:h2' ... } 이제 DB 서버를 열 차례다. 아래의 사이트에서 다운로드 받거나, application.yml (application.properties)를 수정해서 서버를 열 수 있다. 난 다운로드 받지 않고 application.yml을 조금 더 수정하는 방식으로 했다. https://www.h2database.com H2 Database Engine (redirect) H2 Database Engine Welcome to H2, the f.. 2022. 2. 14. [Spring Boot] h2 DB에 TCP 접근 시 SocketTimeoutException 뜰 때 h2 DB SocketTimeoutException 해결방법 h2 콘솔에서 JDBC URL에 TCP를 넣어 연결할 경우 Timeout이 발생하는 경우가 있다. h2 Database가 기본적으로 TCP 연결을 허용하지 않아 생기는 오류로, 서버가 열릴 때 아래의 같이 TCP 관련 옵션을 추가해서 열어주도록 하면 해결된다. java -jar .\hello-spring.jar -tcp -tcpAllowOthers 2022. 2. 14. 이전 1 ··· 8 9 10 11 12 13 14 ··· 19 다음 반응형