전체 글119 스프링MVC 입문20 스프링 통합 테스트 스프링 컨테이너와 DB까지 연결한 통합 테스트를 진행 MemberServiceIntegrationTest package com.danny.learningspring.service; import com.danny.learningspring.domain.Member; import com.danny.learningspring.repository.MemberRepository; import com.danny.learningspring.repository.MemoryMemberRepository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.T.. 2022. 11. 14. 스프링MVC 입문19 순수 JDBC 환경 설정(build.gradle) implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' 스프링부트 2.4부터는 "spring.datasource.username=sa"를 꼭 추가해주어야 함 Jdbc 리포지토리 구현 JDBC API로 직접 코딩하는 것은 20년 전 이야기이다. 따라서 고대 개발자들이 이렇게 고생하고 살았구나 생각하고 정신건강을 위해 참고만 하고 넘어가자 Jdbc 회원 리포지토리 package com.danny.learningspring.repository; import com.danny.learningspring.domain.Member; import .. 2022. 11. 14. 03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자06 JPA Auditing으로 생성시간/수정시간 자동화하기 JPA Auditing을 사용하는 이유 보통 Entity에는 해당 데이터의 생성시간과 수정시간을 포함 데이터가 언제 생성/수정 되었는지 등은 차후 유지보수에 있어서 굉장히 중요한 정보이기 때문 매번 DB에 삽입/갱신하기 전에 날짜 데이터를 등록/수정 하는 코드가 여기저기 들어가면 귀찮고 코드가 지저분해지기 때문에 JPA Auditing을 사용 LocalDate 사용 Java8 부터 LocalDate와 LocalDateTime이 등장 스프링부트 1.x버전을 쓴다면 별도로 Hibernate 5.2.10버전 이상이 필요 스프링부트 2.x버전을 사용하면 별다른 설정 없이 바로 적용됨 Domain 패키지에 BaseTimeEntity 클래스 생성 package.. 2022. 11. 14. 03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자05 톰캣을 실행해서 H2 DB로 조회하기 웹 콘솔 옵션 활성화하기 application.properties에 spring.h2.console.enabled=true 추가 http://localhost:8080/h2-console로 접속하기 교재에서는 JDBC URL에 "jdbc:h2:mem:testdb"를 입력하라고 했는데 Connection이 안됨 not found Error 버전 문제이기 때문에 다음과 같이 경로를 잡아준다. "jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL" Connect이후 위와 같이 POSTS테이블이 정상적으로 노출되어있어야 함 정상적으로 컬럼 조회도 가능 정상적으로 INSERT 성공 정상적으로 조회까지 성공 Success 2022. 11. 14. 03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자04 수정/조회 기능 만들기 PostsApiController에 수정/조회 Controller 추가 @PutMapping("/api/v1/posts/{id}") public Long update(@PathVariable Long id, @RequestBody PostsUpdateRequestDto requestDto) { return postsService.update(id, requestDto); } @GetMapping("/api/v1/posts/{id}") public PostsResponseDto findById(@PathVariable Long id) { return postsService.findById(id); } PostsApiController에 수정/조회 Controller 추가 PostsR.. 2022. 11. 14. 03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자03 등록 기능 만들기 PostsApiController를 web 패키지에 PostsSaveRequestDto를 web.dto 패키지에 PostsService를 service.posts 패키지에 PostsApiController package com.danny.makewebalone.web; import com.danny.makewebalone.service.posts.PostsService; import com.danny.makewebalone.web.dto.PostsSaveRequestDto; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @RequiredArgsConstructor @RestC.. 2022. 11. 14. 03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자02 API를 만들기 위한 3개의 클래스 Request 데이터를 받을 Dto API 요청을 받을 Controller 트랜잭션, 도메인 기능 간의 순서를 보장하는 Service Service는 트랜잭션, 도메인 간 순서 보장의 역할 비지니스 로직 처리는 Domain Spring웹 계층 Web Layer 흔히 사용하는 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역 이외에도 필터(@Filter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice) 등 외부 요청과 응답에 대한 전반적인 영역을 이야기 Service Layer @Service에 사용되는 서비스 영역 일반적으로 Controller와 Dao의 중간 영역에서 사용 @Transactional이 사용되어야 하.. 2022. 11. 11. 03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자01 JPA란? 자바 표준 ORM(Object Relational Mapping)기술 MyBatis, iBatis는 ORM이 아니고 SQL Mapper임 왜 JPA를 쓰나? 관계형 데이터베이스와 객체지향 프로그래밍 언어의 패러다임이 서로 다른데, 객체를 데이터베이스에 저장하려고 하니 여러 문제가 발생 -> 패러다임 불일치 서로 지향하는 바가 다른 2개 영역(객체지향 프로그래밍 언어와 관계형 데이터베이스)을 중간에서 패러다임 일치를 시켜주기 위한 기술 실무에서 JPA 실무에서 JPA를 사용하지 못하는 가장 큰 이유는 높은 러닝 커브 즉, JPA를 잘 쓰려면 객체지향 프로그래밍과 데이터베이스를 둘 다 이해해야 하기 때문 프로젝트에 Spring Data Jpa 적용하기 build.gradle에 의존성들을 등.. 2022. 11. 11. 02장. 스프링 부트에서 테스트 코드를 작성하자 (단위)테스트 코드를 작성하는 이유 개발단계 초기에 문제를 발견하게 도와줌 개발자가 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있음(예, 회귀테스트) 기능에 대한 불확실성을 감소시킬 수 있음 시스템에 대한 실제 문서를 제공함. 즉, 단위 테스트 자체가 문서로 사용할 수 있음 단위 테스트를 사용하기 전의 개발방식 코드를 작성 프로그램(Tomcat) 실행 Postman과 같은 API 테스트 도구로 HTTP 요청 요청 결과를 System.out.println()로 눈으로 검증 결과가 다르면 다시 프로그램(Tomcat)을 중지하고 코드를 수정 여기서 2~5는 매번 코드를 수정할 때마다 반복해야함 왜 계속 톰캣을 내렸다가 다시 실행하는 일을 반복할까? 이는.. 2022. 11. 11. 이전 1 ··· 7 8 9 10 11 12 13 14 다음