Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

Ruff! Ruff!

[Spring Boot] - API, Lombok, DB, JPA, LogBack 본문

Java/Spring Boot

[Spring Boot] - API, Lombok, DB, JPA, LogBack

maeng-kim 2024. 3. 2. 21:44

본 게시물은 유튜브 채널 '어라운드 허브 스튜디오'의 스프링 부트 강의를 들으며 작성한 게시물입니다.
https://youtube.com/@around.hub.studio?si=wB1YEVq-ulj1r4Ao

 

어라운드 허브 스튜디오 - Around Hub Studio

우리에게 필요한 정보를 담는 '어라운드 허브 스튜디오'입니다! 📌 영상은 매주 수요일 7시 업로드 중입니다. [ 정보 ] 알고 싶은 컨텐츠, 동영상 건의 👉 around.hub.official@gmail.com 도서 판매 👉 서

www.youtube.com


12 ~  16강 내용

 

<12 - PUT, DELETE API 작성법>

  1. Put API
    • 해당 리소스가 존재하면 갱신하고, 리소스가 없을 경우에는 새로 생성해주는 API
    • 업데이트를 위한 메소드
    • 기본적인 동작 방식은 Post API와 동일
  2. Delete API
    • 서버를 통해 리소스를 삭제 하기 위해 사용되는 API
    • 일반적으로 @PathVariable을 통해 리소스 ID 등을 받아 처리
    • ex. 회원 탈퇴(id, password일치되면 탈퇴처리,, )
  3. ResponseEntity
    • Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스를 상속받아 사용하는 클래스
    • 사용자의 HttpResponse에 대한 응답 데이터를 포함
    • <포함하는 클래스>
      • HttpStatus : 404 등등의 에러(status)를 좀 더 디테일하게 알려주는 클래스
      • HttpHeaders
      • HttpBody

 

 

 

<13 - Lombok 라이브러리>

- Lombok: 반복되는 메소드를 어노테이션을 사용하여 자동으로 작성해주는 라이브러리

- VO, DTO, Model, Entity에서 자주 사용됨

- 많이 사용되는 어노테이션

  • @Getter : 해당 클래스에 선언되어 있는 필드 기반으로 자동으로 getter, setter가 생성됨
  • @Setter
  • @NoArgConstructor :파라미터가 없는 생성자 생성
  • @AllArgConstructor : 모든 필드값을 파라미터로 갖는 생성자 생성
  • @RequiredArgsConstructor : 필드값 중 final이나 @NotNull인 값을 갖는 생성자를 생성 → 많이 사용하진 않음
  • @Data : 해당 어노테이션을 사용하면, 앞서 나온 기능들을 한번에 추가해줌
    • getter, setter, RequiredArgsConstructor, ToString, EqualsAndHashCode
  • @ToString : toString 메소드를 자동으로 생성
  • @EqualsAndHashCode : quals, hashCode 메소드를 자동으로 생성
    • equals : 두 객체의 내용이 같은지 동등성을 비교하는 연산자
    • hashCode : 두 객체가 같은 객체인지 동일성을 비교하는 연산자
    • callSuper 속성을 통해 메소드 생성시 부모 클래스의 필드까지 고려할지 여부 설정 가능
      • -callSuper = true ⇒ 부모 클래스 필드 값들도 동일한지 체크

사용법 : pom 파일에 디펜던시 작성

Lombok하면 뭐 다른 걸 건드릴 수 있어서 완전한 정답은 아님.

상황 by 상황..

사용할 DTO나 등등 클래스에 어노테이션 추가하고 우클릭해서 리팩터에서 디롬복해서..

함수 보이게 추가할 수 있음. → 근데 그냥 어노테이션으로 추가해서 코드를 단축시키는 것도 좋다.

 

 

 

<14 - DB적용하기_Entity, DAO, Respository, DTO>

  • 클라이언트 : 프론트 부분
  • Controller ~ DAO : 스프링부트 작업
  • Client, DB → Entity
  • Controller~DAO → DTO
  • Service, DAO를 만들 때 보통 class로 만드는 게 아니라 인터페이스로 만듦.
    • 실체화된 로직이 들어가 있는 부분은 이를 상속받은 implement clsss객체가 비지니스 로직을 갖게 됨. (Impl → 붙여서 클래스를 만들게 됨)
  • Entity(Domain)
    • 데이터베이스에 쓰일 컬럼과 여러 엔티티 간의 연관관계를 정의
    • 데이터 베이스의 테이블을 하나의 엔티티로 생각해도 무방
    • 실제 데베 테이블과 1:1로 매칭됨
    • 이 클래스의 필드는 각 테이블 내부의 칼럼(column)을 의미함
  • Repository
    • 엔티티에 의해 생성된 데베에 접근하는 메소드를 사용하기 위한 인터페이스
    • 서비스와 데베를 연결하는 고리의 역할을 수행
    • 데베에 적용하고자 하는 CRUD를 정의하는 영역
  • DAO (Data Access Object)
    • 데베에 접근하는 객체르르의미함
    • 서비스가 데베에 연결할 수 있게 해주는 역할
    • 데베를 사용하여 데이터를 조회하거나 조작하는 기능을 전담
    • 레포지토리를 활용해서 이용함
    • 본질은 레포지토리, 활용은 DAO
  • DTO (Data Transfer Object)
    • DTO는 VO(Value Object)로 불리기도 함. (이젠 그냥 같은 의미) 계층간 데이터 교환을 위한 객체를 의미 (클라이언트 → 컨트롤러/ 컨트롤러 → 서비스 각 계층간 데이터를 옮겨주는 역할)
    • VO의 경우 Read Only의 개념을 가지고 있음
    • 엔티티랑 다른 점: 엔티티는 데베와 동일하게 만들어진 class
    • DTO는 서비스에서 더 추가하거나 빼는 걸 할 수 있음 → 데베의 컬럼과 다름

 

 

 

 

<15 - ORM, JPA, Spring JPA 적용하기>

  1. ORM
    -ORM이란?
    어플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미
    -> 자바의 데이터 클래스와 관계형 데이터베이스의 테이블을 매핑
    객체지향 프로그래밍과 관계형 데이터베이스의 차이로 발생하는 제약사항을 해결해주는 역할을 수행
    대표적으로 JPA, Hibernate 등이 있음(Persistent API)

스프링부트의 클래스 -> 데이터베이스의 테이블을 연결해주는 역할 = ORM

 

- 장점

  1. sql 쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있음
    sql 쿼리를 짜지 않아도 됨
  2. 재사용 및 유지보수가 편리
    ORM은 독립적으로 작성되어 있어 재사용이 가능
    매핑정보를 명확하게 설계하기 때문에 따로 데이터베이스를 볼 필요가 없음
  3. DBMS에 대한 종속성이 줄어듬 (클래스 형태로 작성되기 때문에)

-단점

  1. 복잡성이 커질 경우 ORM만으로 구현하기 어려움
  2. 잘못 구현할 경우 속도 저하 발생
  3. 대형 쿼리는 별도의 튜닝이 필요할 수 있음

 

2. JPA(Java Persistent API)
-JPA란?

JPA는 Java Persistance API의 줄임말이며, ORM과 관련된 인터페이스의 모음

자바 진영에서 표준 ORM으로 채택되어 있음

ORM이 큰 개념이라고 한다면, JPA는 더 구체화 시킨 스펙을 포함하고 있음

ORM은 개념적인 내용

JPA는 구체화

 

-Hibernate
ORM Framework 중 하나

JPA의 실제 구현체 중 하나, 현재 JPA 구현체 중 가장 많이 사용됨

(EclipseLink, Hibernate, DataNucleus 가 있음)

 

-Spring Data JPA

스프링 프레임워크에서 JPA를 편리하게 사용할 수 있게 지원하는 라이브러리

 

-CRUD 처리용 인터페이스 제공

-Repository 개발 시 인터페이스만 작성하면 구현 객체를 동적으로 생성해서 주입

-데이터 접근 계층 개발시 인터페이스만 작성해도 됨

Hibernate에서 자주 사용되는 기능을 조금 더 쉽게 사용할 수 있게 구현

루즈 커플링 → service를 인터페이스와 클래스로 구분하여 작성하는 것

→ 컨트롤러와 서비스 등등의 각 객체들 간 의존성을 줄여주는 형식으로 작성

→ 루즈커플링 사용 안 하고 클래스에서 구현하면서 작성하면 데이터베이스를 변경 (마리아 db → 포스트그레db)할 때 다른 클래스를 호출하지 않고 호출하는 객체 자체는 인터페이스로 잡고 각각 어울리는 프로퍼티값을 설정해서 변경을 할 수 있게끔, 상황에 맞는 객체를 불러오게끔

 

 

 

<16 - 로깅 프레임워크 LogBack 적용하기>

  1. Logback이란?
    -log4j에 비해 약 10배 정도 빠른 퍼포먼스, 메모리 효율성 증대
    -Log4J를 기반으로 개발된 로깅 라이브러리
  2. 특징
    -로그에 특정 레벨을 설정할 수 있음(Trace → Debug → Info → Warn → Error)