본문 바로가기

Spring Boot 프로젝트

Spring Boot 프로젝트 (11.21)

endpoint 메서드 하나에 내부

@GetMapping

DTO

-> postman에 노출되는 내용들은? 무엇일까?

내용의 일부를 노출하는 것은 안될 거 같아 그러면? 어떻게 해야하지 @JsonIgnore을 걸어준다. 보여주고싶은건 보여줄 수 있고, 빼고싶은건 뺄 수 잇다.
내용의 이름을 바꾸어 보내줄때에는 어떻게 ?\

entity를 노출시키는 것은 지양해야한다.

json이 만나는 놈은 객체(엔티티)지 이거를 DTO로 한번 전달하여 바꾸는 과정이 필요하다.

엔티티는 외부에 바로 노출

==================================

entity가 그대로 노출되면 안돼, @JsonIgnore -> 눈가림용 왜? entity의 컬럼명이나, 메서드명을 고치지 못하기 때문에 보이는 내용이 변할 수 있음

  • 엔티티는 직접적으로 노출되면 안됨
    -> @JsonIgnore가 있지만 임시방편
    -> 엔티티의 칼럼명을 바꾸지 못함
    -> 프론트엔드 앱에서 오류가 발생
  • DTO가 필요하다
    -> 엔티티는 API를 통해서 노출될 때 무조건 DTO로 변경 되어야 함
    -> DTO는 엔티티를 포함하면 안됨
    -> DTO 객체는 엔티티 객체로부터 만드는게 일반적이다.
    -> DTO는 엔티티와 구조가 거의 비슷하다.
    -> Member author 는 분리해서 적절한 필드로 변경
    - `long authorId
    - String authorName

======================================

Spring boot 와 DB를 엄청 많이 연결을 해놓는데 이를 운영하는 방식을 DBCP

연결된 것 중 하나를 가져다가 사용하는 것이다.

DB 커넥션도 세션이라고 부른다.

DBCP

DB 커넥션은 공유 자원
커넥션 풀은 이미 많이 연결되어있는 구조
DBMS 구조상 다 작업이 되는 것

DB 커넥션이 다 연결되어잇는 것은 낭비다 전과정에서는 사용할 필요가 없지 않나

OSIV를 끈다 가 목적? 그래야 효율적으로 움직일 수 있다.
-> 필요할때만 잠깐 불러다가 사용할 수 있게된다.

이건 어ㄸ허게 해주면 되나.... yml에서 jpa -> open-in-view를 false로 하면된다.
-> 어떤 요청을 했다고 해서 DB 커넥션이 자동으로 속해지지 않는다.
-> 필요할때 와주세요를 따로 설정을 해주어야한다. (@Transactional(readOnly=true)) -> transactional을 모든 컨트롤러에 붙여야한다.

이런 작업을 하지 않으면 비효율적인 통신을 하게되어서 이런 작업을 해주어야한다.

=============

타임리프

JSP

osiv를 끄지 않아

ResT API -> 끄는게 좋다

DBCP

  • 스프링부트에서 DB와의 통신 회선을 미리 여러개 만들어 둔다.
  • 요청이 몰릴 때를 대비하여 미리 해놓 것
  • OSIV
    • 기본적으로 켜져있음
    • 이로 인해 하나의 요청이 시작될 때 DBCP에서 DB 커넥션 하나가 배정된다.
    • 응답이 완료되면 그 때 DB 커넥션이 회수된다.
    • 이 방식은 비효율적이다. 대신 코딩이 편하다.
  • REST API에서는 OSIV 끄기
    • 스프링부트로 타임리프나 JSP로 MPA를 만드려는게 아니고, REST API를 구현하는게 목표라면 보통 끈다.
    • 대신 컨트롤러의 액션메서드마다 @Transactional을 붙여야 함