스파르타 "웹개발의 봄, Spring" 둘째주

H2 database 설치 (2-3)

환경설정

  1. src>main>resources>application.properties
    에 아래와 같이 입력
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
  1. 브라우저: localhost:8080/h2-console

  2. console url: 1번 두번째 코드 url
    jdbc:h2:mem:testdb


Spring 과 MySQL 비교 (2-4)

SpringMySQL
DomainTable
RepositorySQL
  • Domain 패키지 내부의 Entity 는 table 과 동일시 하면 됨

JPA, interface (2-4)

  • JPA는 Repository를 통해서만 사용할 수 있습니다.
  • 인터페이스는 클래스에서 멤버가 빠진, 메소드 모음집이라고 보시면 됩니다.

JPA 사용시 SQL문 보이게 하는 설정 (2-5)

src>main>resources>application.properties 에다가 아래와 같이 입력 추가

spring.jpa.show-sql:true

TimeStamped class(JPA) (2-6)

  1. domain 패키지아래 TimeStamped class 생성
@Getter // 
@MappedSuperclass // 상속했을 때, 컬럼으로 인식 -> table(=Entity) 의 칼럼요소로 인식
@EntityListeners(AuditingEntityListener.class) // 생성/수정 시간을 자동으로 반영하도로 설정
public abstract class TimeStamped {

    @CreatedDate // 생성일자
    private LocalDateTime creadtedAt;

    @LastModifiedBy  // 마지막 수정일자
    private LocalDateTime modifiedAt;
}
  1. Week02Application 에 @SpringBootApplication 과 함께 @EnableJpaAuditing 입력

  2. Course 클래스 TimeStamped 상속 받음 -> DB 에 자동으로 CREATED_AT, MODIFIED_AT coulumn 생성


CRUD - JPA 메소드 (2-6)

내용JPA메소드 위치
Createrepository.save(object)repository 객체
Readrepsotory.findById(id)
repository.findAll()
repository 객체
Updateservice.update(id, object)entity에 생성, 서비스에서 이용
Deleterepository.deleteById(id)
repository.deleteAll()
repository 객체

Service: update, delete (2-6)

스프링의 3영역

영역내용
Controller가장 바깥쪽 부분, 요청/응답을 처리함, 자동응답기?
Service중간 부분, 실제 중요한 동작이 많이 일어나는 부분
Repository가장 안쪽 부분, DB와 맞닿아 있음

udpdate() 메소드는 Entity(Course.class) 내부에 작성


사용중인 Lombok annotation (2-7)

@Getter: getter 만들기

@NoArgsConstructor: 기본생성자 만들기
예) pubic ClassName() {}

@RequiredArgsConstructor: service 에서 생성자(constructor)를 통해 final 변수(repository)를 초기화한다.


DTO (Database Transfer Object) (2-8)

데이터를 update 할 때는 직접 Entity 접근하지 않고,
DTO 라는 매개객체를 이용하여 update 한다.

  • DTO 에 필요한 Lombok annotation
  1. @Getter: 당연히 필요
  2. @Setter: data 를 수정해야 하기 때문에 필요
  3. @RequiredArgsConstructor
package com.sparta.week02.domain;

import lombok.Getter;

@Getter
public class CourseRequestDto {

    private final String title;
    private final String tutor;

}

REST (2-9)

👉 REST란, 주소에 명사, 요청 방식에 동사를 사용함으로써 의도를 명확히 드러냄을 의미합니다.

  • 여기에 쓰이는 동사는 우리가 JPA 시간에 배운 CRUD를 지칭합니다.
    - 즉 A에 대해 생성(POST)/조회(GET)/수정(PUT)/삭제(DELETE) 요청을 하는 것이죠.
  • 주의사항
    - 주소에 들어가는 명사들은 복수형을 사용합니다.
    - /course
    - 주소에 동사는 가급적 사용하지 않습니다.
    - /accounts/edit

좋은 웹페이지 즐겨찾기