개발자는신이야
The first step
개발자는신이야
전체 방문자
오늘
어제
  • 분류 전체보기 (114)
    • 🍃웹개발 Spring (15)
    • ❓내 질문 (4)
    • 🔥웹개발종합반 (11)
    • 💻개인프로젝트 (5)
    • 😕error (2)
    • 💡알고리즘 (3)
    • 📖혼자공부하는자바 (22)
    • 📑WIL (2)
    • 🥸 CS 면접 스터디 (13)
    • 🤓천재교육 풀스택 1기 노트 (21)
    • ⏰정처기 공부 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • IntelliJ
  • database
  • Spring
  • db
  • 기초
  • 변수
  • boot
  • dependencies
  • SQL
  • CRUD
  • repository
  • Java
  • CSS
  • jquery
  • Lombok
  • API
  • JPA
  • style
  • HTML
  • Controller

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
개발자는신이야

The first step

[Spring] JPA심화 (CRUD)_2, SpringBoot 서비스 구조
🍃웹개발 Spring

[Spring] JPA심화 (CRUD)_2, SpringBoot 서비스 구조

2022. 9. 27. 14:20

JPA로 CRUD중 Uplaod를 할려면 Service의 개념을 알아야한다. (Create, Read, Delete는 Repository만으로 구현 가능)

.

.

 

출처: 어라운드 허브 스튜디오 유튜브

스프링의 구조는 총 3가지의 영역으로 나눌 수 있다.

Controller, Service, Repository(DAO)

 

사이사이의 DTO, Domain(Entity)은 정보를 전달해주는 매개체이다

 

스프링의 구조에 대하여

Controller:

0. 가장 바깥부분, 요청/응답을 처리한다.

1. 클라이언트(사이트)에서 입력되는 정보들을 받아와 해당 정보들이 어떤 용도로 사용되는지 찾아낸다.

2. 찾아낸 정보들을 용도에 맞는 Service로 보내준다.

 

Service:

0. 중간 부분, 실제 중요한 작동이 많이 일어나는 부분이다.

1. Client(사이트)에서 받지 않은 정보들 (ex: 생성일자, 수정일자, 회원등급, 고유객체번호 등)을 추가해준다.

2. 각자 용도에 맞게 분류된 Controller에서 받아온 정보들, 추가된 정보들의 기능을 구현시킨다.

3. Repository로 보내는 entity(domain)라는 객체를 생성한다.

 

Repository(DTO):

0. 가장 안쪽부분, Service와 DB를 연결하는 고리의 역할이다.

1. Entity에 의해 생성된 데이터베이스에 접근하는 메소드를 사용하기 위한 인터페이스이다.

2. 데이터베이스에 적용하고자 하는 CRUD를 정의하는 영역이다.

 

매개체에 대하여

DTO (Data Transfer Object):

0. DTO는 VO(Value Object)로 불리기도 한다

1. DTO는 계층간 데이터 교환을 위한 매개체이다.

2. VO의 경우 Read Only의 개념을 가지고 있다.

 

Entity(Domain):

0. 데이터베이스에 쓰일 컬럼과 여러 엔티티  간의 연관관계를 정의한다.1. DB의 table을 하나의 엔티티와 같다고 생각해도 된다.2. 실제 DB의 Table과 1:1 매핑이 되게끔 설계를 해주어야 한다.3. 이 클래스의 필드는 각 Table 내부의 컬럼(데이터)를 의미한다.

 


Service(Upload) 구현

0. Course.java 클래스에 update 메소드 추가

public void update(Course course) {
    this.title = course.title;
    this.tutor = course.tutor;
}

1. src > main > java > com.filename > service 패키지(파일) 생성

2. CourseService.java 만들기 (ClassnameService.java)

3.

@Service // 스프링에게 이 클래스는 서비스임을 명시
public class CourseService {

	// final: 서비스에게 꼭 필요한 녀석임을 명시
    private final CourseRepository courseRepository;

    // 생성자를 통해, Service 클래스를 만들 때 꼭 Repository를 넣어주도록
    // 스프링에게 알려줌
    public CourseService(CourseRepository courseRepository) {
        this.courseRepository = courseRepository;
    }

    @Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
    public Long update(Long id, Course course) {
        Course course1 = courseRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
        );
        course1.update(course);
        return course1.getId();
    }
}

 

Delete 구현

CourseRepository.deleteAll(); //테이블 전부 삭제
CourseRepository.deleteByID(1); //1번 테이블 삭제

해당 코드는 Repository 인터페이스를 생성해줘야 구현 가능. -> 링크

'🍃웹개발 Spring' 카테고리의 다른 글

[Spring] API - GET  (0) 2022.09.27
[String] Lombok이란  (0) 2022.09.27
[Spring] JPA심화 (CRUD)_1  (0) 2022.09.27
[Spring] JPA 상속(extends)  (0) 2022.09.26
[Spring] JPA 기초(Domain, Repository)  (1) 2022.09.26
    '🍃웹개발 Spring' 카테고리의 다른 글
    • [Spring] API - GET
    • [String] Lombok이란
    • [Spring] JPA심화 (CRUD)_1
    • [Spring] JPA 상속(extends)
    개발자는신이야
    개발자는신이야
    첫발을 내디딘 초보 개발자입니다.

    티스토리툴바