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을 붙여야 함
'Spring Boot 프로젝트' 카테고리의 다른 글
Spring Boot 프로젝트 (11.11) - Fly.io PostgreSQL 클러스터 접근 (0) | 2024.11.11 |
---|---|
Spring Boot 프로젝트 (11.11) - 프록시 (0) | 2024.11.11 |
Spring Boot 프로젝트 (11.06) - Fly.io설치, 배포 (1) | 2024.11.08 |
Spring Boot 프로젝트 (11.06) - 도커 파일 생성, 도커 이미지 생성, 도커 컨테이너 생성 (4) | 2024.11.07 |
Spring Boot 프로젝트 (11.05) - Jackson, Lombok, Docker (3) | 2024.11.05 |