[TIL] 항해99 Day 13

woonie·2022년 1월 22일
0

TIL

목록 보기
12/64
post-thumbnail

항해 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<Informainon> list = repository.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());
}

// 데이터 하나 조회하기
Infomation info = repository.findById(1L).orElseThrow(
        () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
); // id는 Long형으로 1L이라고 표현
  • 데이터 변경(update) & 삭제(delete)

먼저 다루어야 하는 개념 Service
1. Controller : 가장 바깥 부분, 요청/응답을 처리함. / 응답기
2. Service : 중간 부분, 실제 중요한 작동이 많이 일어나는 부분 / 업데이트
3. Repository(Entity) : 가장 안쪽 부분, DB와 맞닿아 있음.

// 데이터 업데이트 하기
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번 삭제 요청
@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);
}
profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.

0개의 댓글