AOP : Aspect Oriented Programming공통 관심 사항(cross-cutting concern) VS 핵심 관심 사항(core concern) 분리 한 가지의 상황을 예를 들어보자면..이 전에 만든 회원 관리 프로젝트에서모든 메서드의 호출 시간을 측정하고 싶다고 할 때..또는 회원 가입 시간, 회원 조회 시간을 측정하고 싶다고 할 때..스프링 컨테이너의 메서드에 전부 시간 측정 로직을 구현해 줘야 됩니다.. 기존 MemberService 메서드 여기서 회원가입(join) 메서드와 회원 조회(findMembers) 메서드의 기능 시간을 측정하는 코드로 수정해 줍니다.. 조회할 때 시간이 콘솔로 찍히는 걸 확인할 수 있습니다.. (오른쪽은 웹브라우저 짤린거입니다 ㅋㅁㅋ) 자 다시 돌..
스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA를 사용하면리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있습니다.따라서 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있습니다. 이전의 JPA 설정을 그대로 사용하고.. SpringDataJpaMemberRepository>> package hello.hellospring.repository;import hello.hellospring.domain.Member;import org.springframework.data.jpa.repository.JpaRepository;import java.util.Optional;public interface SpringDataJpaMemberRepository extends JpaRe..
JPA와 MyBatis 두 개를 놓고 보면,외국에선 MyBatis에 비해 JPA가 압도적으로 사용량이 많습니다.한국은 반대지만, 그 추세가 바뀌고 있다고 하더라고요..그래서 왜 같은 DB 접속 기술인데 JPA를 사용하는지 궁금했어요..JPA와 더 친해지고 싶어서.. 게시판을 하나 만들어봤어요..만들다 보니 조금은 알겠더라고요 쿼리문을 직접 안 써도 된다는 장점이 얼마나 큰지..!!서론이 길었네요.. 먼저 결과부터 보자면..Create>> Read(Delete)>> Update>> 요구사항으론 Create, Read, Update, Delete 기능이 있는 게시판입니다.. 예상되는 로직은..요청 -> Controller -> Service -> Dao -> Service -> Controller -> ..
JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해 줍니다..SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있습니다..또한 개발 생산성을 크게 향상시킵니다.. 바로 JPA를 사용해 보죠먼저 bungle.gradle 파일에 JPA와 DB 관련 라이브러리를 추가합니다. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 저는 기존에 쓰던 JDBC 라이브러리를 주석 처리하고 H2 데이터베이스를 사용했습니다.추가하고 꼭 Gradle을 새로고침 해주셔야 됩니다.. application.properties에선 JPA 설정을 추가해 줍니다. spring.jpa.show-sql=tr..
스프링 JDBCTemplate는 기존의 JDBC와 동일한 환경설정을 해줍니다.JDBCTemplate나 Mybatis와 같은 라이브러리는 JDBC의 반복 코드를 대부분 제거해 줍니다.하지만 쿼리문은 직접 작성해 줘야 됩니다.. 개방-폐쇄의 원칙에 따라..기존에 MemberRepository 인터페이스를 JdbcMemberRepository를 구현체로 사용했다면JdbcTemplateMemberRepository를 구현체로 한 개 더 만든 뒤,스프링 빈 객체로 사용하도록 할게요.. JdbcTemplateMemberRepository>> package hello.hellospring.repository;import hello.hellospring.domain.Member;import org.springframe..
이전에 단위 테스트를 했다면,이번엔 스프링을 실제로 띄우고 DB 연동까지 하는 통합 테스트를 해보겠습니다..순수 자바 코드를 통해서 테스트를 하지 않고 스프링을 구동해야 되는 경우@SpringBootTest 어노테이션을 사용합니다.그리고 테스트 과정에서 쿼리문을 실제 commit 시키지 않고 테스트가 끝난 뒤에 Rollback시키려면@Transactional 어노테이션을 사용합니다. MemberServiceIntegrationTest>> package hello.hellospring.service;import hello.hellospring.domain.Member;import hello.hellospring.repository.MemberRepository;import org.assertj.core.a..