항해 13일차
1. RDBMS
- RDBMS(Relational DataBase Management System)은 컴퓨터에 정보를 저장하고 관리하는 기술
2. JPA
JPA는, SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기
- JPA가 자바로 DB를 사용하도록 도와준다.
domain(table) 패키지안에 java 클래스를 만들어준다.
@NoArgsConstructor // 기본생성자를 대신 생성해줍니다. @Entity // 데이터베이스 기준으로 테이블임을 나타냅니다. public class Course { @Id // ID 값, Primary Key로 사용하겠다는 뜻입니다. @GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다. private Long id; @Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다. private String title; @Column(nullable = false) private String tutor; public String getTitle() { return this.title; } public String getTutor() { return this.tutor; } public Course(String title, String tutor) { this.title = title; this.tutor = tutor; } }
setter를 설정해주지 않는 이유는 이후 Repository 자동으로 해준다.
3. 생성일자, 수정일자
"생성일자"와 "수정일자"를 필드로 가지는 것은 DB에서 기본중의 기본.
@MappedSuperclass // 상속했을 때, 컬럼으로 인식
@EntityListeners(AuditingEntityListener.class) // 생성/수정 시간을 자동으로 반영하도록 설정
public class Timestamped {
@CreatedDate // 생성일자
private LocalDateTime createdAt;
@LastModifiedDate // 마지막 수정일자
private LocalDateTime modifiedAt;
}
- pplication 클래스에 추가
- @EnableJpaAuditing // 생성, 수정일자 자동 업데이트
4. CRUD
CRUD란? 정보관리의 기본 기능
→ 생성 (Create)
→ 조회 (Read)
→ 변경 (Update)
→ 삭제 (Delete)
- 데이터 저장(Create) & 조회(Read)
// 데이터 저장하기 repository.save(new Info("홍길동", "서울특별시"));
// 데이터 전부 조회하기
List
for (int i = 0; i < list.size(); i++) {
Information info = list.get(i);
System.out.println(info.getId());
System.out.println(info.getName());
System.out.println(info.getAddress());
}
// 데이터 하나 조회하기
Infomation info = repository.findById(1L).orElseThrow(
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
); // id는 Long형으로 1L이라고 표현
- 데이터 변경(update) & 삭제(delete)
>먼저 다루어야 하는 개념 Service
1. Controller : 가장 바깥 부분, 요청/응답을 처리함. / 응답기
2. Service : 중간 부분, 실제 중요한 작동이 많이 일어나는 부분 / 업데이트
3. Repository(Entity) : 가장 안쪽 부분, DB와 맞닿아 있음.
```java
// 데이터 업데이트 하기
Information new_info = new Information("이순신", "경기도");
informationService.update(1L, new_info);
list = infomationRepository.findAll();
for (int i=0; i<list.size(); i++) {
Information info = list.get(i);
System.out.println(info.getId());
System.out.println(info.getName());
System.out.println(info.getAddress());
}
// 데이터 삭제하기
informationRepository.deleteAll();
5. Lombok, DTO
5-1. Lombok
Lombok은 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메소드/생성자 등을 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리
- Getter -> @Getter 로 별도로 Getter를 클래스내에 작성하지 않아도 된다.
- 기본 생성자 대신 - > @NoArgsConstructor로 별도로 기본 생성자 코드를 작성하지 않아도 된다.
- Service에서 생성자를 작성하지 않고 @RequiredArgsConstructor로 생성자 코드를 작성하지 않아도 된다.
5-2. DTO
테이블을 막 건드려도 될까?
= read, update할 때 메인DB 클래스를 직접 수정,삭제 하는게 아닌
완충재로 활용하는 것이 DTO(Data Transfer Object)이다.
@Getter // Getter 자동 생성
@Setter // Setter 자동 생성
@RequiredArgsConstructor // 기본 생성자 자동 생성
public class CourseRequestDto {
private final String name;
private final String address;
}
- 데이터 조회(update) 데이터 삭제(delete) 시 변경 사항
- Information 클래스 -> InformationRequestDto
- new_info -> requestDto
6. API
클라이언트 - 서버 간의 약속
클라이언트가 정한대로 서버에게 요청(Request)을 보내면,
서버가 요구사항을 처리하여 응답(Response)을 반환.
- REST
REST란, 주소에 명사, 요청 방식에 동사를 사용함으로써 의도를 명확히 드러냄을 의미
-여기에 쓰이는 동사는 CRUD를 지칭
-생성(POST)/조회(GET)/수정(PUT)/삭제(DELETE) 요청
- 예시
- GET /informations
→ 전체 목록 조회 요청 - GET /informations/1
→ ID가 1번 조회 요청 - POST /informations
→ 강의 생성 요청 - PUT /informations/3
→ ID가 3번 수정 요청 - DELETE /informations/2
→ ID 2번 삭제 요청
- GET /informations
@RequiredArgsConstructor
@RestController
public class InformationController {
private final InformationRepository informationRepository;
@GetMapping("/api/intformations")
public List<Information> getInformations() {
return informationRepository.findAll();
}
}
6-1 API - GET(데이터조회)
@RequiredArgsConstructor
@RestController
public class InformationController {
private final InformationRepository intformationRepository;
@GetMapping("/api/informations")
public List<Information> getInformations() {
return intformationRepository.findAll();
}
}
6-2 API - POST, PUT, DELETE
@PutMapping("/api/informations/{id}")
// {id} id값이 유동적이기에 @PathVariable 어노테이션을 사용한다.
public Long updateInformation(@PathVariable Long id, @RequestBody InformationRequestDto requestDto) {
return informationService.update(id, requestDto);
}
'TIL' 카테고리의 다른 글
[TIL] 항해99 Day 18 (0) | 2024.04.11 |
---|---|
[TIL] 항해99 Day 17 (1) | 2024.04.11 |
[TIL] 항해99 Day 16 (0) | 2024.04.11 |
[TIL] 항해99 Day 15 (0) | 2024.04.11 |
[TIL] 항해99 Day 12 (0) | 2024.04.11 |