전체 글 196

Server to Server 동기/비동기

A B C 서버가 있다. B 는 A로부터 dto를 받아 DB에 저장하는 서버고, C는 클라이언트에게 직접 웹소켓 메세지를 보내는 서버이다. A -> B -> C 로 흐름이 진행되는데, 내가 B 서버를 맡게되었다. 기존엔 비동기로 B -> C로 호출을했는데, 문제가 발생했다. C에서 나온 에러를 A에게 보내주지 못한다는것이었다. ( 비동기이기 때문에 C에서 response 받기전에 A에게 response 보냄) 따라서 동기로 바꾸려고 보니, C 서버가 느리면 어떡하지? + C 서버가 만약 에러를 뱉으면 B에서 저장했던 DB는 다시 롤백을 해야하는가 에 대한 고민을 하다가. 결국 동기로 바꿔서 처리해보려고 한다 .TODO

TIL 2023.04.06

인그레스..서비스..가상서비스..

배포를 해야한다. Local 실환경 Stage 환경(배포) 으로 크게 3가지로 개발이 진행되는데, 현재 로컬과 실환경은 되었는데 stage 환경에 배포하려니 뭐가 뭔지 모르겠다. 우선 쿠버네틱스 용어부터 내말로 '정리' 하려고 한다. Pod, Deployment, Service, Ingress, Container, Cluster 에 대한 개념을 정립하려고한다. 인그레스 : -> 입구. ( 스프링으로 치면 컨트롤러 느낌) 라우팅 규칙 ? -> 인그레스 yaml을 보면 아래와 같이 yml 설정칸이 있다. host에 맞추어서 서비스 -> 서비스 메쉬의 가상 서비스 가 있고, 네트워크 칸의 서비스 가 있어서 서비스가 뭐지? 하고 고민했는데, 네트워크 -> 서비스가 서비스와 파드를 연결해주는 설정이고 디플로이먼트..

TIL 2023.03.21

복합키 vs 대표 PK

난 PK 가 2개 이상이면 관리하기 힘들다고 생각했다. 이유로는 @IdClass , @Embedded 같은 어노테이션 같은 걸 생각하고 클래스를 만드는것 자체가 부담이었고, JPA Repository에서 findById 를 할때에도 Long 형 하나가 필요한 게 아니라 PK를 또 만들어야하기 때문이었다. 하지만 코드가 그렇게 되어있는 부분이 있었고, 더 설득할만한 이유를 알아야 할 것 같아서 찾아봤다. 대표 PK 사용하는 게 좋을 경우 : 1. 데이터 식별할 수 있는 컬럼의 조합이 유니크하지 않을 떄 ( ex : 이름 + 저자 + 출판사 로는 책 식별 불가할수 있음. ) 2. 클라이언트 쪽에서 복합키의 정보를 "모두" 알지 않아도 간편하게 리소스 관리가 가능. 3. 식별가능한 복합키의 값이 변경 가능할 ..

카테고리 없음 2023.03.15

@SessionAttribute란

주의 : @SessionAttributes 가 아니라 @SessionAttribute 입니다! 스프링에서 제가 보고 있는 코드중, 컨트롤러 내부에 @PutMapping("") public ResponseEntity func1 ( @SessionAttribute("userId") String userId) { ... } 이런 코드가 있었는데, 세션을 찾고, 세션에 들어있는 데이터를 찾는 과정을 대신 해주는 과정임. 마ㅓㄴ약 저게 없다면, public String func1(HttpServletRequest request, Model model) { // 세션이 없으면 home HttpSession session = request.getSession(false); if (session == null) { r..

카테고리 없음 2023.03.08

Pageable vs PageRequest

스프링에서 findByXX같은 JPA의 메소드를 사용하기 위해서, 뒤에 매개변수에 Pageable을 사용했었는데, 기존 코드는 PageRequest를 사용했었다. 하지만 왜인지 내가 돌릴때는 pagenation이 안돌아간다..!! 기존처럼 pageable로 바꾸니 됨.! 두가지의 차이를 알고자 보니까 PageRequest가 Pageable보다 더 구체적인 구현체인것 같다. BUT Pageable이 동작하니까 pageable 사용하는걸로!! Pageable : It provides methods for specifying the page number, page size, and sort order of the results. PageRequest : is a concrete implementation of..

TIL 2023.02.28

pvc 란 , 쿠버네틱스 볼륨이란

배포시에 PVC yaml 파일을 달라는 요청이 와서.. 대체 뭐가뭔지 몰랐다. PV ( Persistence Volume): 볼륨 자체. 클러스터 안에서의 자원. 파드와는 별개로 관리되며, 별도의 생명주기가 있음. PVC (Persistence Volume Claim): 사용자가 PV에 하는 요청. 사용하고 싶은 용량은 얼마인지 , 읽기/쓰기는 어떤 모드로 설정하고 싶은지 등을 정해서 요청함. https://kimjingo.tistory.com/153 [k8s] Volume - PV/PVC(퍼시스턴트 볼륨과 퍼시스턴트 볼륨 클레임) 쿠버네티스에서 볼륨(Volume)을 사용하는 구조는 PV라고 하는 퍼시스턴트 볼륨(PersistentVolume)과 PVC라고 하는 퍼시스턴트 볼륨 클레임(Persistent..

TIL 2023.02.23

RestTemplate vs WebClient

둘다 스프링에서 HTTP 통신을 할때 사용하는 방법이다. 스프링 5.0 버전 전에는 RestTemplate을, 그 후에는 WebClient를 사용해 HTTP 통시늘 한 RestTemplate : 비동기 불가 WebClient : 비동기 가능 ( 동시에 처리) 동기 vs 비동기 비동기 : 동기 / 비동기 vs blocking /non-blocking 차이는? 결과가 없다면 바로 return한다. 결과가 있으면 바로 결과를 return 한다. (결과가 생길때까지 계속 완료 되었는지 확인) https://tecoble.techcourse.co.kr/post/2021-07-25-resttemplate-webclient/ RestTemplate과 WebClient 이 글은 자바에서 HTTP 요청을 써봤거나 써보려..

카테고리 없음 2023.02.20