-
2.2.6 퍼시스턴스 레이어 : 스프링 데이터 JPASpring/웹 개발 101 2022. 4. 11. 01:09반응형
◎ DBC 드라이버 : 자바에서 데이터베이스에 연결할 수 있도록 도와주는 라이브러리
* 테이블 생성, 테이블에 엔트리 추가, 수정, 삭제 등이 웹서비스의 일부로 동작할 수 있기 도와주는 중간매개체
◎ ORM : 데이터베이스 연결 / SQL쿼리 준비 / 쿼리 실행과 같은 일련의 작업을 뜻함
◎DAO(Data Access Object) : ORM 작업을 집중적으로 도와주는 클래스
◎JPA : 자바에서 데이터베이스 접근, 저장, 관리에 필요한 스펙(Specification)
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // 스프링 데이터 JPA를 사용하기 위한 라이브러
package com.example.demo.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Table; import javax.persistence.Id; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; @Builder @AllArgsConstructor @Data @NoArgsConstructor @Entity @Table(name="Todo") public class TodoEntity { @Id @GeneratedValue(generator="system-uuid") //ID자동으로 생성, generator는 어떤 방식으로 ID를 생성할지 지정가능. @GenericGenerator(name="system-uuid", strategy="uuid") private String id; //object의 ID private String userId; // 이 오브젝트를 생성한 사용자의 아이 private String title; // Todo타이틀(예: 운동하기) private boolean done; //true - todo를 완료한 경우(checked)) }
package com.example.demo.persistence; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.example.demo.model.TodoEntity; public interface TodoRepository extends JpaRepository<TodoEntity, String> { }
package com.example.demo.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.example.demo.model.TodoEntity; import com.example.demo.persistence.TodoRepository; @Service public class TodoService { @Autowired private TodoRepository repository; public String testService() { //TodoEntity 생성 TodoEntity entity = TodoEntity.builder().title("My first todo item").build(); //TodoEntity 저장 repository.save(entity); //TodoEntity 검색 TodoEntity savedEntity = repository.findById(entity.getId()).get(); return savedEntity.getTitle(); } }
그렇다면 기본적인 쿼리가 아닌 쿼리는 어떻게 작성할까?
package com.example.demo.persistence; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import com.example.demo.model.TodoEntity; public interface TodoRepository extends JpaRepository<TodoEntity, String> { //?1는 메서드의 매개변수의 순서 위치다. @Query("select * from Todo where t.userId = ?1") List<TodoEntity> findByUserId(String userId); }
총정리
- 퍼시스턴스 레이어 : 데이터베이스와 통신하며 필요한 쿼리를 보내고 해석해 엔티티 오브젝트로 변환해주는 역할
- 서비스 레이어 : HTTP나 데이터베이스 같은 외부 컴포넌트로부터 추상화돼 우리가 온전히 비즈니스 로직에만 집중할 수 있도록 해줌
- 컨트롤러 레이어 : 주로 HTTP 요청과 응답을 어떻게 넘겨받고 리턴하느냐, 즉 외부 세계와 통신하는 규약을 정의함.
반응형'Spring > 웹 개발 101' 카테고리의 다른 글
2.2.5 서비스 레이어 : 비즈니스 로직 (0) 2022.04.10 2.2.4 매개변수를 넘겨받는 방법 (0) 2022.04.08 2.2.3 REST API || 2.2.4 컨트롤러 레이어 (0) 2022.04.07 2.2.2 모델, 엔티티, DTO (0) 2022.04.04 2.2 백엔드 서비스 아키텍쳐 (0) 2022.04.03