Spring/스프링 입문 13

AOP가 필요한 상황, 사용법

1) 상황 발생 '각각의 함수의 측정 시간을 알고 싶다' 요청 우리는 여기서 핵심 프로세서와 공통 관심사항 2개로 나눠지게 된다. 함수 측정 + 프로세서 로직으로 아래 예시를 보자. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util..

스프링 데이터 JPA & 통합 테스트

스프링 데이터 JPA를 사용하면 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있다. 사용법을 알아보자. 1) SrpingDataJpaMemberRepostiory 인터페이스를 생성 SrpingDataJpaMemberRepostiory 인터페이스에 extends JapRepository , MemberRepostiory로 상속받는다. 상속을 받게되면 Spring Jpa가 JpaRepostiory를 상속받는 클래스의 구현체를 자동으로 만들어주고, 만들어진 구현체를 토대로 스프링 빈에 자동으로 등록을 해준다. 우리는 이제 SpringConfig에서 등록된 MemberRepository를 사용하면 된다. package hello.hellospring.repository; import hel..

스프링 JPA & 통합 테스트

JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다. JPA를 사용하면 개발 생산성을 크게 높일 수 있다. 1) build.gradle을 통한 외부라이브러리 임포트 기존에 사용했던 jdbc를 주석 처리후 data-jpa를 작성해준다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' //implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'o..

스프링 JDBCTemplate & 통합 테스트

스프링 JdbcTemplate으로 구현해보자. 1) JdbcTemplate JdbcTemplate은 Template Method 패턴을 사용해서 이름이 작명되었다. 부연설명 : Template Method pattern은 추상 클래스에 공통되는 Process를 작성한 후 구현 클래스에서 부모 클래스에서 사용되는 함수들을 만들면 부모 클래스의 프로세스를 중심으로 해당하는 기능들을 만드는 것이다. url : https://github.com/qkrxodud/object_pratice/tree/main/lib/TemplateMethodPatten GitHub - qkrxodud/object_pratice Contribute to qkrxodud/object_pratice development by creati..

스프링 통합 테스트

지금까지의 기능들을 테스트해보자! test > java > hello.hellospring > service > MemberServiceIntegration.java를 생성 @SpringBootTest : Spring부팅을 시작해 준다. @Transactional : DB(데이터 베이스) 테스트 중 insert, update, delete 되는 기능을 확인 후에 롤백시켜준다. 테스트를 지속적으로 할 수 있게 유지시켜준다. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import org.assertj.core.api.Ass..

순수 JDBC 사용 및 연동

1) JDBC 연동 Jdbc를 연동하기 위해서는 예전 시간에 만들어 놓았던 SrpingConfig.java 파일이 필요하다. DataSource는 spring이 application.properties의 환경설정 값을 토대로 스프링 컨테이너에 빈으로 등록하기 때문에 아래와 같이 Autowired로 DI의존성 주입을 받을 수 있다. package hello.hellospring; import hello.hellospring.repository.MemoryMemberRepository; import hello.hellospring.service.MemberService; import org.springframework.beans.factory.annotation.Autowired; import org.spr..

h2 데이터베이스 설치 및 연동

h2 데이터를 설치하고 Spring에 연결하자. 다운로드 url : https://www.h2database.com/html/download-archive.html Archive Downloads www.h2database.com 1) version : 1.4.200 을 설치 2) 설치 파일을 압축을 풀은 후 h2.bat 파일을 실행 3) JDBC url을 프로토콜로 연결하자. 4) 멤버 테이블 생성 CREATE TABLE member( id bigint generated by default as identity, name VARCHAR(255), primary key (id) ); 5) Spring H2 DataBase 연동 build.gradle의 dependencies에 implementation을..

회원 웹 기능 - 등록, 출력

1) Index 페이지 구성 기본 url 페이지로 접근 시 Index페이지로 접근 가능하게 화면 구성 resource > templates > home.html Hello Spring 회원 기능 회원 가입 회원 목록 2) 회원 등록 폼 신규 회원을 등록할 수 있는 폼을 만들고, 레파지토리에 연결하자. resource > templates > members > createMemberForm.html 이름 등록 3) 회원 출력 페이지 구성 thymeleaf를 통해서 each Loop를 통해서 리스트 페이지를 구현할 수 있다. # 이름 3) HomeController 작성 인덱스 페이지와, 회원등록 페이지로 이동할 수 있게 @GetMapping 작성 Post 방식으로 넘어오는 값을 받기위해 @PostMappi..

자바 코드로 직접 스프링 빈 등록하기

자바 코드로 직접 스프링 빈 등록하기 상황 발생 : 정해지지 않은 DB 해결 방법 : SpringConfig로 빈을 직접 등록, DB가 선택됬을때 SpringConfig의 MemoryMemberRepository만 수정하면된다. SpringConfig 생성 main > java > hello.hellospring > SpringConfig.java 생성 package hello.hellospring; import hello.hellospring.repository.MemoryMemberRepository; import hello.hellospring.service.MemberService; import org.springframework.context.annotation.Bean; import org.s..

컴포넌트 스캔과 자동 의존관계 설정

스프링 빈을 등록하고, 의존관계 설정하기 회원 컨트롤러가 회원서비스와 레포지토리를 사용할 수 있게 의존관계를 설정하자 컴포넌트 스캔 스프링이 시작되면 스프링 컨테이너가 생성이 된다. 이후 스프링이 @Componet을 사용하는 클래스들을 스캔한 후 빈형식으로 스프링 컨테이너에 올려놓다. 이를 스프링 빈을 등록한다고 한다. 빈을 등록하게 되면 싱글톤 형식으로 사용자가 원하는 곳에 스프링이 DI를 통해서 직접 넣어준다. 위 그림은 스프링 컨테이네어 빈(완두콩) 형식으로 Cotroller가 올라가져 있는 것을 볼 수 있는데, 이는 @Service, @Controller, @Repository의 내부에 @Componet가 있기 때문에 등록될 수 있는 것이다. 내부에 @Componet를 통해서 스캔해 등록하는 것이..