일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 서블릿
- 프리코스
- 의존성
- 트랜잭션
- 미션
- yml
- AOP
- 우아한테크코스
- 백준
- 코드리뷰
- AWS
- 프로그래머스
- 우테코
- HTTP
- REDIS
- 우아한세미나
- 레벨2
- 세션
- 스프링부트
- Paging
- JUnit5
- Spring Batch
- mock
- 자바
- JPA
- Level2
- MSA
- CircuitBreaker
- Docker
- 스프링 부트
- Today
- Total
목록백앤드 개발일지/웹, 백앤드 (18)
늘
게이트웨이를 운영하던중 첫 적립 api를 호출했을때 아래의 예외가 터졌다.java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 1000ms in 'contextWriteRestoringThreadLocals' (and no fallback has been configured)게이트웨이 구성은 spring cloud gateway로 구성되어있고 아래 zipkin에서 보면 response-time이 1s가 넘어가자 exception을 던지는 것으로 확인했다. 다만 gateway에서 response-timeout설정을 1s보다 길게 잡아두었는데 1000ms에서 예외가 터지는게 의아했다.원인 찾기1. 일..
spring batch 5는 이전 버전과 많이 변경되었다. 기본적인 스프링배치부터 스프링 배치 5.0은 어떻게 달라졌는지 직접 실무에 적용해보면서 느꼈던 경험을 적어본다. Architecture 공식문서에 나온 아키텍처이다. Application, Core, and Infrastructure 로 구성되어있다. Application: 애플리케이션에는 Spring Batch를 사용하여 개발자가 작성한 모든 배치 작업과 사용자 정의 코드가 포함되어 있다. Batch Core: 배치 작업을 시작하고 제어하는 데 필요한 핵심 런타임 클래스가 포함되어 있습니다. JobLauncher, Job, and Step이 포함되어있다. Batch Infrastructure: 애플리케이션과 코어는 모두 공통 인프라 위에 구축..
스터디를 하면서 실무에 적용하기 좋은 챕터라고 생각되어 따로 정리해둡니다. 유연하고 재사용 가능한 퍼블릭 인터페이스를 만들기 위한 원칙과 기법을 살펴보는 것이 주제이다. 우선 협력과 메시지에 대해 알아보자. 협력 관계를 설명하는 전통적인 메타포는 클라이언트-서버 모델이다. 협력은 클라이언트가 서버의 서비스를 요청하는 단방향 상호작용이다. 그리고 객체는 클라이언트와 서버의 역할을 동시에 수행한다. 협력의 관점에서 객체는 두 가지 종류의 메시지 집합으로 구성된다. 하나는 객체가 수신하는 메시지의 집합이고 다른 하나는 외부의 객체에게 전송하는 메시지의 집합이다. 협력에 적합한 객체를 설계하기 위해서는 외부에 전 송하는 메시지의 집합도 함께 고려하는 것이 바람직하다. 용어정리 메시지는 객체들이 협력하기 위해 사..
RPC 원격 프로시저 호출(Remote Procedure Call)은 네트워크의 세부 사항을 이해하지 않고도 한 프로그램이 네트워크의 다른 컴퓨터에 있는 프로그램에 서비스를 요청하는 데 사용할 수 있는 소프트웨어 통신 프로토콜이다. RPC는 클라이언트 - 서버 모델이다. 요청하는 프로그램은 클라이언트이고, 서비스를 제공하는 프로그램은 서버이다. 로컬 프로시저 호출과 마찬가지로 RPC는 원격 프로시저의 결과가 반환될 때까지 요청 프로그램을 일시 중지해야 하는 동기 작업이다. 그러나 동일한 주소 공간을 공유하는 경량 프로세스 또는 스레드를 사용하면 여러 RPC를 동시에 수행할 수 있다.(+ grpc를 사용하면 비동기식으로 사용할 수 있다.) API를 설명하는 데 사용되는 사양 언어인 IDL(인터페이스 정의 ..
본 게시글은 지속적으로 학습하면서 업데이트할 예정입니다. 동작원리 컨테이너 빌드(nginx, payment, batch …) 사용자가 docker push hub.example.com/nginx 와 같이 docker hub에 저장해둔다.(사내, docker.com 등) 이후, 쿠버네티스 명령어를 통해 저장해둔 컨테이너가 실행하도록 한다.(yaml or kubectl 명령어로 실행 가능) 명령어를 실행하면, 마스터 노드(Control-plane)에 요청이 간다. 마스터 노드는 API서버가 있어서 쿠버네티스관련 요청을 받는다. 스케줄러에게 어떤 워커 노드에 nginx를 실행하면 좋을지 물어보면, 스케줄러가 워커 노드의 상태를 보고 적절한 노드를 응답해준다.(REST API서버에게) API서버는 할당받은 워커..
일반적으로 분산 시스템에서 메시지를 주고받는 방법으로는 크게 2가지가 있다. API를 통한 통신 즉각적인 요청과 응답을 주고받는다. 간단한 개발 메시지 큐를 통한 통신 비동기, 배치 처리와 함께 적용하기 좋다. 일반적으로 publisher가 데이터를 큐에 넣으면 consumer가 큐에서 데이터를 꺼내서 데이터를 가공한다. 복잡한 개발 분산 시스템에서는 모든 데이터가 네트워크를 타면서 이동하므로 지연, 유실 등의 문제가 발생할 수 있다. 따라서 아래의 3가지 방식을 통해 데이터 전달을 보장하는 방법이 있다. 1. At most once producer가 최대 한 번만 송신하고 consumer가 최대 한 번만 수신한다. 간단한 구현 & 개발이지만 데이터 유실 가능성이 높다. 대용량 메세지 전송할 때 편하다...
톰캣은 was로서 내부에 웹 서버와 웹 컨테이너(서블릿 컨테이너)로 이루어져 있다. 예전에는 정적인 페이지만 줬었기 때문에 웹서버만 있으면 됐다. 하지만 동적인 페이지를 요구하기 시작했고 CGI(Common gateway Interface)가 나왔다. 하지만 CGI는 요청마다 프로세스를 생성해서 처리해 줬고 요청이 많아지니 메모리 용량에 한계가 있다. 따라서 자바에서는 서블릿을 통해서 해결했다. 서블릿은 프로세스가 아닌 스레드를 생성해서 처리한다. 또한 자바로 이루어져 있어서 GC로 인해 메모리 누수를 걱정하지 않아도 되었다. 이런 서블릿을 관리하는 게 서블릿 컨테이너고 톰캣의 was가 이 서블릿 컨테이너로 이루어져 있다. 서블릿은 init → service → destroy의 생명주기를 갖는다. 톰캣 ..
jwt 토큰이란 JWT(JSON Web Token)는 당사자 간에 정보를 JSON 객체로 안전하게 전송하기 위한 토큰이다. 이 정보는 디지털 서명되어 있으므로 확인하고 신뢰할 수 있습니다. JWT는 HMAC 알고리즘을 사용하거나 RSA 또는 ECDSA 를 사용하는 공개/개인 키 쌍을 사용하여 서명할 수 있습니다. 한가지 오해 처음에 jwt를 공부할 때, 어차피 디코딩하면 헤더에서 토큰 타입이나 알고리즘을 알 수있는데 왜 서명을 하는가였다. 그이유를 설명하자면 jwt의 서명의 목적을 생각해야한다. 디지털 서명되어 신뢰할 수 있는 이유는?(서명하는 이유) JWT 토큰은 자체적으로 토큰 유효성 검사가 가능하다! 즉, HMAC또는 RSA와 같은 공개 또는 비대칭키를 통해 서명하기 때문이다. 단순히 JWT토큰을 ..
인텔리제이에서 지원하는 .http라는 파일을 만들면 포스트맨을 대체하여 매우 편리했던 경험이 있었다. 이러한 경험을 글로 정리해서 공유해보려고 한다. 장점 포스트맨을 사용했을 때는 매번 테스트 해볼때마다 복붙을 했었지만, .http라는 파일로 관리하여 저장할 수 있다. Code highlighting이 가능해서 더욱 직관적이다. 코드 자동 완성의 기능들이 있다. 단점 음..굳이 뽑자면 파일이기 때문에 관리를 해야 한다? 인 것 같다. POST 요청 위 처럼 POST로 요청을 보낼 때, Content-Type을 명시해주고 한 칸 띄우고 json형식으로 입력해주면, 테스트용 디비에 아래처럼 잘 들어간 것을 확인할 수 있다. 그리고 로그인에 성공을 하면, accessToken도 잘 나오는 것을 확인할 수 있다..
단방향 해시 함수(one-way hash function)의 다이제스트(digest) 보통 단방향 해시 함수는 수학적인 연산을 통해 원본 메시지를 변환하여 암호화된 메시지인 다이제스트를 생성한다. 원본 메시를 안다 -> 암호화된 메시지를 알 수 있다. 암호화된 메시지를 안다 -> 원본 메시지를 모른다. 한쪽으로만 알 수 있으므로 이와 같은 처리를 '단방향성'이라고 한다. 단방향 해시 함수는 예를 들어 비밀번호가 asd일 때, 해시 알고리즘인 SHA-256을 이용하여 암호화할 때, f52bvs32c2f3f86kk88vc6c490628285a482af15ascb19541d54saz526a3f6c7 와 같이 나온다면 asd1을 암호화하면 fb8c2e2b85ca81eb4350199faddd983cb26af306..