눈송이의 개발생활
[SpringBoot]GDSC Toy Project(1) - JPA 본문
3주차
- 수정 기능 API
- JPA Audting으로 생성시간/수정시간
- 버튼 클릭 시 삭제 가능하도록 삭제 API 코드 작성
개념 공부
1. JPA
- JPA : 자바 표준 ORM(Object Relational Mapping), 인터페이스
- ORM : 객체를 매핑하는 것
- ↔ SQL Mapper : 쿼리를 매핑하는 것
- 객체지향 언어와 관계형 데이터베이스 중간에서 패러다임 일치를 시켜주기 위한 기술
2. Spring Data JPA
- JPA ← 구현체(Hibernate, Oracle 등) ← Spring Data JPA(모듈)
- 구현체 교체의 용이성 : 내부에서 구현체 매핑 지원해주기 때문에 쉬움
- 저장소 교체의 용이성 : 관계형 데이터베이스가 아닌 NoSQL DB로 변경 쉬움
3. API
- Web : 뷰템플릿 영역. 외부요청과 응답에 대한 영역(ex. @Controller)
- Service : Controller와 Dao의 중간 영역에서 사용. (ex. @Service, @Transactional)
- Repository : Database에 접근하는 영역. (≈Dao)
- Dtos : 계층간에 데이터 교환을 위한 객체(Dto)의 영역.
- Domain Model : 도메인을 모든 사람이 같은 관점에서 볼 수 있게 단순화한 모델.
Domain→비즈니스 처리 담당 - Entity 클래스를 Request/Response 클래스로 사용하면 안됨!
→ Entity는 DB와 맞닿은 클래스. 변경되면 여러 클래스에 영향 끼침. - Entity와 Controller에 쓸 Dto 꼭 분리해서 쓰기
구성 설명
- 📂 패키지
- domain : SW 요구사항 or 문제 영역 담는 공간 (게시글, 댓글, 회원, 정산 등)
- 📄 파일
- Posts : 실제 DB 테이블과 매칭되는 Entity class
- PostsRepository : Interface. Posts 클래스 DB에 접근할 수 있게 해줌
- PostsService : 트랜잭션과 도메인 간의 순서 보장 영역
- PostsApiController : API를 요청받는 컨트롤러로 요청을 받는 영역 (등록, 조회, 수정 API 작성)
- PostsResponseDto : 조회 기능을 위한 Dto로 데이터 교환, 변경을 위한 영역
- PostsSaveRequestDto : 등록 기능을 위한 Dto로 데이터 교환, 변경을 위한 영역
- PostsUpdateRequestDto : 수정 기능을 위한 Dto로 데이터 교환, 변경을 위한 영역
- BaseTimeEntity : 모든 Entity 클래스의 상위 클래스. Entity클래스들의 createDate, modifiedDate 자동으로 관리
개발 과정
게시글 수정 (update)
//PostsApiController.java
@PutMapping("/api/v1/posts/{id}") // 수정 API
public Long update(@PathVariable Long id, @RequestBody PostsUpdateRequestDto requestDto){
return postsService.update(id, requestDto);
}
- 수정하기 전 데이터 모습
- get으로 받은 data put으로 수정하기 전 postman
- 데이터베이스 바뀐거 확인할 수 있음
JPA Auditing으로 생성/수정시간 자동화
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate; //생성 시간
@LastModifiedDate
private LocalDateTime modifiedDate; //수정 시간
}
- 처음 글 posting 했을 때 DB 모습
- 수정한 뒤에 DB. 수정시간이 바뀐 것을 볼 수 있음
삭제 API
//PostsApiController.java
@DeleteMapping("/api/v1/posts/{id}") // 삭제 API
public Long delete(@PathVariable Long id){
postsService.delete(id);
return id;
}
- 삭제를 위한 데이터 생성 postman + h2DB
- 삭제 성공
'Server > Spring' 카테고리의 다른 글
[SpringBoot]MySQL & JPA 연동하기 (1) | 2022.04.04 |
---|---|
[SpringBoot]IntelliJ에 프로젝트 생성하고 Github 연동하기 (0) | 2022.03.30 |
Comments