[JPA] 1. 프로젝트 환경설정
·
BE/SpringBoot
1. 프로젝트 생성스프링 부트 스타터(https://start.spring.io/)Project: Gradle - Groovy Project사용 기능: web, thymeleaf, jpa, h2, lombok, validationgroupId: jpabookartifactId: jpashop롬복 적용Lombok: 반복적인 Java 코드를 간단한 어노테이션으로 자동 생성해주는 라이브러리@Getter, @Setter, @Builder, @NoArgsConstructor 등 어노테이션만 붙이면 필수 메서드나 생성자 코드를 자동으로 만들어주기 때문에 코드가 깔끔해진다.1. Settings > plugin > lombok 검색 실행 (재시작)2. Settings > Annotation Processors 검색 >..
[Spring] 7. AOP
·
BE/SpringBoot
AOP가 필요한 상황모든 메소드의 호출 시간을 측정하고 싶다면?공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern)회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?package hello.hellospring.service;@Transactionalpublic class MemberService {/*** 회원가입*/ public Long join(Member member) { long start = System.currentTimeMillis(); try { validateDuplicateMember(member); //중복 회원 검증 memberRepository...
[Spring] 6_4. 스프링 DB 접근 기술 - JPA
·
BE/SpringBoot
JdbcTemplate으로 바꾸고 나니까 중복되는 코드가 확! 줄었다. 그럼에도 불구하고 아직도 SQL 쿼리도 개발자가 직접 작성해야한다. . .JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다.JPA를 사용하면 개발 생산성을 크게 높일 수 있다.여기서는 JPA로 코드를 작성하는 방법을 간단하게 알아볼거고, 이후 JPA 1 강의를 보며 JPA로 코드를 작성해볼 예정이다!build.gradle 파일에 JPA, h2 데이터베이스 관련 라이브러리 추가dependencies { implementation 'org.springframework.boot:spring-b..
[Spring] 6_3. 스프링 DB 접근 기술 - 스프링 JdbcTemplate
·
BE/SpringBoot
순수 Jdbc와 동일한 환경설정을 하면 된다.스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해준다. 하지만 SQL은 직접 작성해야 한다.RowMapper란?RowMapper는 SQL 결과의 각 행을 Java 객체로 변환하는 "매핑 도구"private RowMapper memberRowMapper(){ return (rs, rowNum) -> { Member member = new Member(); member.setId(rs.getLong("id")); // DB 컬럼 "id" → 객체 필드 member.setName(rs.getString("name")); // DB 컬럼 "name" →..
[Spring] 어노테이션 정리
·
BE/SpringBoot
1. @Transactional메소드나 클래스 단위로 트랜잭션을 적용하는 어노테이션해당 메소드가 정상적으로 완료되면 커밋되고,예외(Exception)가 발생하면 자동으로 롤백(Rollback)주로 DB를 다루는 서비스 계층에 붙여 사용기본적으로 RuntimeException 또는 Error가 발생할 때만 롤백(SQLException 같은 체크 예외는 별도로 설정해야 롤백)테스트 케이스에 이 어노테이션이 있으면 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다.import org.springframework.transaction.annotation.Transactional;import org.springfr..
[Spring] 6_2. 스프링 DB 접근기술 - 순수 JDBC
·
BE/SpringBoot
애플리케이션에서 DB에 연동하여 메모리가 아닌 DB에 쿼리를 날리는 것(JDBC) → 20년 전 방식package hello.hello_spring;import hello.hello_spring.repository.JdbcMemberRepository;import hello.hello_spring.repository.MemberRepository;import hello.hello_spring.repository.MemoryMemberRepository;import hello.hello_spring.service.MemberService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.contex..
[Spring] 5. 회원관리 예제(웹 MVC 개발)
·
BE/SpringBoot
회원 웹 기능 - 홈 화면 추가홈 컨트롤러 추가@Controllerpublic class HomeController { // localhost 8080으로 들어오면 home()이 호출된다. @GetMapping("/") public String home(){ return "home"; }}회원관리용 홈 Hello Spring 회원 기능 회원 가입 회원 목록 실행하고 localhost:8080에 들어가면 이전에 만들어둔 index.html이 아닌 home.html이 뜬다. 왜일까?index.html 은 컨트롤러 매핑이 아예 없을 때 자동으로 뜨는 화면Spring Boot는 reso..
[Spring] 4. 스프링 빈과 의존관계
·
BE/SpringBoot
컴포넌트 스캔과 자동 의존관계 설정회원 컨트롤러에 의존관계 추가package hello.hello_spring.controller;import hello.hello_spring.service.MemberService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;@Controllerpublic class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { ..
[Spring] 3_2. 회원 관리 예제 - 회원 레포지토리 테스트 케이스 작성 / 서비스 개발 / 서비스 테스트
·
BE/SpringBoot
회원 레포지토리 테스트 케이스 작성개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해서 실행하거나, 웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다. 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다. 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다.package hello.hello_spring.repository;import hello.hello_spring.domain.Member;import static org.assertj.core.api.Assertions.assertThat;import org.junit.jupiter.api.Test;public class Memory..
[Spring] 3_1. 회원 관리 예제 - 비즈니스 요구사항 정리 / 회원 도메인과 레포지토리 생성
·
BE/SpringBoot
비즈니스 요구사항 정리 - 가상의 시나리오- 데이터: 회원ID, 이름- 기능: 회원 등록, 조회- 아직 데이터 저장소가 선정되지 않음일반적인 웹 애플리케이션 계층 구조컨트롤러: 웹 MVC의 컨트롤러 역할서비스: 비즈니스 도메인 객체를 활용한 핵심 비즈니스 로직 구현ex) 회원은 중복가입이 되지 않는다리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리도메인: 비즈니스 도메인 객체ex) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨클래스 의존관계아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메..