CRUD 에 들어가기에 앞서 데이터를 다루는 객체 들의 개념을 미리 정리 하고 들어가고자 한다.
Form
폼 객체는 페이지에서 Controller 로 데이터를 넘기기 전 데이터를 입력받고 입력 받은 데이터를 저장하고 있는 객체 를 말한다.
사진에 보다시피 form 태그 안에 input 태그 통해 Controller로 넘길 데이터들을 입력받는다.(벨로그 에서 < > 이거 안에 쓰면 자꾸 사라지는데 어떻게 써야 될까요?)
form 태그의 메소드들의 대해서 알아보자면
1.action -> action 메소드는 입력받은 데이터를 넘길 Controller 메소드 의 url 이다.
2.class -> form 태그 의 css 스타일 을 지정한다.
3.method -> api의 타입을 지정 한다.
DTO
Data Transfer Object 데이터 전송객체 이다 .
DTO는 form 에서 넘어오는 데이터를 가장 먼저 수신하고 entity 타입으로 변환 하는 역활을 한다 .
코트에서 몆가지 빠진것들이 보이는데 롬북 때문이니 지금은 넘어가도록 하자.
form 에서 넘어오는 데이터들의 타입을 지정해준다. 그렇게 되면 form 의 데이터를 가지고 있는건 ArticleForm 클래스 가 될것이다. -> 롬북 안쓰면 생성자 써야함.
그리고 Article 타입의 toEntity 메소드를 통해 form이 가지고 있는 데이터를 Entity 타입의 데이터로 변환 한다
여기서 말하는 Article 타입 은 Entity 에서 정의 되게 되는데
바로 밑에서 알아봅시다.
Entity
Entity를 정확히 뭐라 설명 해야 될지 모르겠으니 gpt한테 물어보자
"엔티티(Entity)"는 소프트웨어 시스템에서 어떤 개체, 개념 또는 데이터에 대한 추상적인 표현입니다. 엔티티는 주로 데이터베이스나 소프트웨어 애플리케이션의 핵심 구성 요소 중 하나로 사용되며, 이러한 엔티티는 시스템 내에서 식별하고 관리해야 하는 중요한 정보나 개념을 나타냅니다.
라고 한다.
맞는 말이긴 하나 이해하기는 난해 하다 .
쉽게 생각해서 엔티티 = 테이블 이다. 물론 이렇게 말하면 안된다. 정확히 는 엔티티와 테이블이 가지고 있는 구조가 같다. 다만 테이블은 실제 데이터 베이스 에 실존하는 데이터 이고 엔티티는 실존 하지 않는 가상의 테이블 이다.
우리가 폼에서 데이터를 받아와서 엔티티로 변환을 하고 매개변수에 저장을 했다면 그것은 실제 데이터 베이스가 가지고 있는 실존하는 테이블 이 아니다 .
엔티티 데이터를 repository 통해 데이터 베이스에 저장을 해야 실존하는 테이블이 된다.
예시를 보자
엔티티를 정의 하는 클래스 이다 .
이것은 엔티티를 사용하는 Controller 메소드 이다 .
두번째 사진에 보면 우리는 ArticleForm 이라는 dto 를 form 이라는 매개변수를 통해 가지고 왔다.
그리고 위에서 정의 한 Entity인 Article 이라는 타입을 가진 article 매개변수에 form.toEntity() 를 불러와 Entity 로 변환 된 데이터를 넣어준다
Repository를 통해 db에 저장하기 위해서는 메모리에 올라가있는 form.toEntity() 데이터가 아니라, article 이라는 매개변수에 저장된 데이터가 필요하다 .
즉 폼에서 입력된 데이터가 db에 들어가지 전까지 불리는 이름이 엔티티 라고 생각하면 된다.
아까 부터 Repository 하는데 그게 뭐냐구요 ?
밑에서 알아봅시다.
Repository
직역하면 저장소 인데 스프링에서는 데이터 베이스와 상호작용하기 위한 매개 모듈 이라고 생각하면 쉽다.
음.. 데이터 베이스와 상호작용을 도와주는 모듈들이 몇가지가 있다.
다만 여기서는 spring JPA라는 것을 사용할것이다 .
우선 Repository를 사용하기 위해서 정의가 필요하다.
이것이 Repository를 정의하는 클래스 이다 .
사진을 자세히 보면 import org.springframework.data.repository.CrudRepository;
라는 부분이 있다 .
즉 인터페이스로 선언된 ArticleRepository 는 CrudRepository<Article, Long> 로 부터 상속 받고 있다는 뜻이다.
그렇게 상속을 받은 ArticleRepository는 Controller 에서 의존성 주입을 통해 인터페이스 구현체를 받아오게 된다.
Di(의존성 주입) 에 관해서는 추후 더 자세히 다뤄볼 예정이다.
의존성을 주입받은 articleRepository 는 CrudRepository 가 가지고 있던 메소드를 그대로 상속받아 db와 상호작용 하여 CRUD 를 구현 할수있다.
종합
지금까지 정리한 내용들을 종합적으로 말해보자면
form 에서 데이터 입력
dto가 수신
form에서 Controller로 요청
Controller 는 dto를 매개변수로 가져옴
5.Controller 는 Article article = form.toEntity();를 통해 Entity 타입으로 변환된 데이터를 저장
6 articleRepository 를 통해 db에 저장
'SpringBoot' 카테고리의 다른 글
[Spring Boot 3] 롬복 과 리팩토링 (0) | 2024.07.09 |
---|---|
[Spring Boot 3] CRUD (2) | 2024.07.09 |
[Spring Boot 3] MVC 패턴 과 View 탬플릿 (0) | 2024.07.09 |