ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA & SpringBoot 개념 및 정리
    Spring & SpringBoot 2023. 3. 24. 13:35

    * '스프링부트와 AWS로 혼자 구현하는 웹 서비스' 를 공부하며 정리한 내용입니다.

     


    ㅁ JPA 는 "인터페이스"이므로 구현체가 필요함

    : 대표적으로 JPA  Hibernate ← Spring Data JPA

     Hibernate 를 직접 쓰지 않는 이유는 구현체, 저장소가 교체될 때 유용하려고


    ㅁ Entity 클래스에 Setter 메소드를 무작정 생성하지 말 것.

    -> 해당 필드의 값 변경이 필요하면 @Builder 를 통해 지정하여 변경하기.


    Spring 웹 계층

     

    Web 계층 

    : 컨트롤러(@Controller) 와 JSP 등의 뷰 템플릿 영역

    : 필터, 인터셉터, 컨트롤러 어드바이스 등 외부 요청과 응답에 대한 전반적인 영역

     

    Service 계층

    : @Service 에 사용되는 서비스 영역

    : 일반적으로 Controller, Dao 중간 영역에서 사용

    : @Transactional 이 사용되어야 하는 영역.

    즉 , 트랜잭션과 도메인 간의 순서만 보장!!! 

     

    Repository 계층

    : Database 등 데이터 저장소에 접근하는 영역 (Dao)

     

    Dtos 계층

    : 계층 간 데이터 교환을 위한 객체의 영역

    : 뷰 템플릿 엔진에 사용될 객체 & Repository Layer에서 결과로 넘겨준 객체 등

     

    Domain Model 계층

    : 도메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화 시킨 것

    : @Entity 가 사용된 영역 

    : 무조건 database 의 테이블과 관계가 있어야하는 것은 아님. 


    JPA 데이터 영속성 컨텍스트

    : 엔티티를 영구 저장하는 환경

    : JPA의 엔티티 매니저가 활성화된 상태로 (Spring Data Jpa를 쓴다면 기본 옵션임) 트랜잭션 안에서 데이터베이스에서 데이터를 가져오면 이 데이터는 영속성 컨텍스트가 유지된 상태임

    → 이 상태에서 데이터 값을 변경하면 트랜잭션이 끝나는 시점에서 해당 테이블에 변경분을 반영함

    즉, Entity 객체의 값만 변경하면 별도록 update 쿼리를 날릴 필요가 없음 : 더티 체킹

    : 객체 지향적인 특성

     

    Service

    @Transactional
        public Long update(Long id, PostsUpdateRequestDto requestDto){
            Posts posts = postsRepository.findById(id).orElseThrow(
    ()-> new IllegalArgumentException("해당 게시글이 없습니다. id : " + id ));
            posts.update(requestDto.getTitle(), requestDto.getContent());
            return id;
        }
    

    Entity

    @Getter
    @NoArgsConstructor
    @Entity
    public class Posts {
    // 중략
    	public void update(String title, String content){
            this.title = title;
            this.content = content;
        }
    }
    

    이렇게 쿼리를 날리지 않아도 값이 update 된다.

     


    서버 템플릿 엔진 VS 클라이언트 템플릿 엔진

    템플릿 엔진이란?

    : 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어 

     

    서버 템플릿 엔진

    : 서버에서 JAVA 코드로 문자열을 만든 뒤에 이 문자열을 HTML로 변환하여 브라우저로 전달

    ex) JSP, Freemaker, Thymeleaf, mustache

     

    클라이언트 템플릿 엔진

    : 브라우저에서 화면을 생성. 즉 서버에서 이미 코드가 벗어난 경우

    서버에서 Json / Xml 형식의 데이터만 전달하고 클라이언트에서 조립한다.

    ex) React, Vue 

    'Spring & SpringBoot' 카테고리의 다른 글

    로그에서 sql 쿼리 파라미터 확인 하는 법  (1) 2023.10.22
Designed by Tistory.