일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MDC
- 오어스
- Gateway
- Thread
- spirng
- 우테코 5기
- 테스트코드
- Transactio
- tomcat
- AOP
- 최종 합격
- circuitbreaker
- Kotlin
- resilience4j
- HikariCP
- DispatcherServlet
- oauth
- 트랜잭션
- 커넥션 풀
- 우아한테크코스
- Spring Batch
- 우테코
- 톰캣
- Spring cloud gateway
- Elk
- 동시성문제
- 살아남았다.
- JWT
- 우아한 테크 코스
- redis
- Today
- Total
목록분류 전체보기 (51)
코딩은 내일부터
이번 포스팅은 무중단 배포에 대해서 알아보겠다.개발을 하다 보면 배포되어 있는 구버전을 신버전으로 교체해야 할 때가 있다.위의 사진과 같이 실행중인 버전의 프로세스를 종료하고 새로운 버전의 서비스를 빌드해서 배포하는 도중 서비스를 이용할 수 없는 다운타임이 생긴다.이러한 다운타임이 발생하면 서비스를 사용하고 있는 사용자는 서비스를 사용할 수 없고, 극단적으로 해당 유저는 서비스를 이탈하는 상황이 발생할 수 있을 것이다.그러면 이러한 다운타임 없이 어떻게 배포를 할 수 있을까?무중단 배포(Zero-downtime Deployment)무중단 배포는 위에서 말한 다운타임이 없는 즉, 중단하지 않은 상태로 배포를 한다는 것이다.이러한 무중단 배포에도 여러 가지 방법이 존재하는데 이 중 가장 널리 알려진 세 가지..
서버가 실행되고 있는 상태에서 서버를 종료시키면 어떻게 될까? 이번에는 Spring Boot서버가 어떻게 종료되고 더 나은 방향으로 개선하는 방법을 알아보겠다. Graceful shutdown Graceful shutdown란 프로그램을 종료할 때 최대한 side effect가 없도록 로직들을 처리하고 종료하는 걸 말한다. 저번에 블루 그린배포를 하면서 Docker가 자동으로 Graceful shutdown을 해주는 걸로 잘못 알고 있었다. 이번에는 내부구조와 어떻게 돌아가는지 알아보겠다. 시나리오 1 - 일반적인 종료 밑에 사진을 보면 Thread sleep으로 해당 메소드가 30초 소요되도록 작성했다. 이렇게 로직을 실행하고 프로그램을 종료하면 log에 start만 찍히고 end는 안 찍히는 걸 볼 ..
JVM이란? JVM은 Java Virtual Machine의 약자로 자바 애플리케이션이 수행되는 런타임 엔진을 의미 JVM은 JRE(Java Runtime Environment)의 일부분에 속함 Java는 os에 종속적이지 않다는 특징을 가지고 있다. OS 위에서 Java를 실행시킬 무언가가 필요한데 그게 JVM이다. 다시 말해서 JVM을 이용해서 Java는 OS에 종속적이지 않고 실행할 수 있는 것이다.. Java 소스코드(.java)는 CPU가 인식하지 못해서 기계어로 컴파일해줘야 한다. 여기서 Java는 바로 기계어로 이루어진 binary code로 변환하는 게 아닌 JVM이 인식할 수 있는 byte code(.class)로 변환한다. 자바 컴파일 절차 Java compiler는 JDK에 있는 ja..
곽두철 프로젝트를 하면서 Riot API를 사용해야 하는데 1초의 20번, 2분에 100번 요청 제한이 있다. 이번 글에서는 어떤 방식으로 그리고 어떤 라이브러리를 사용했는지 알아보겠다. 대표적으로 다음과 같은 라이브러리가 존재한다. Guava: 다양한 핵심 Java 라이브러리를 제공하지만, 단순히 Rate Limiting 기능만을 위해 사용하기에는 다소 무거운 느낌이다. Resilience4j: 서킷 브레이커를 제공하는 라이브러리로 Rate Limiter 기능도 포함되어 있지만, 마찬가지로 단순히 Rate Limiting 기능만을 위해 사용하기에는 다소 무거운 느낌이다. RateLimitj: 슬라이딩 윈도우 알고리즘을 기반으로 하는 Rate Limiter 구현체이다. 하지만 더 이상 개발을 하지 않고 ..
소개현재 진행 중인 곽두철 프로젝트(롤 과외)는 수업에 대한 효율적인 관리를 위한 다양한 기능을 제공합니다. 이번 포스팅에서는 수업 관리 시스템의 핵심 요구사항과 그 구현 과정을 포스팅하겠다.요구사항수업 신청 알림수업 10분 전 알림수업 종료 알림수업 종료 후 수업 횟수 차감수업 철회@Async를 사용해 알림 처리보내야 될 알림이 많을 때 동기적으로 처리를 하게 되면 사용자가 받아야 할 시간에 알림이 늦게 도착하는 경우가 발생한다.예를 들어 수업 10분 전에 알림이 울려야 하는 상황에 너무 많은 알림 요청으로 알림을 전송받는 게 늦어버리게 되면알림이라는 기능을 제대로 수행했다고 볼 수 없다.그래서 이를 통해 응답 시간을 최소화하고, 동기적 처리로 인한 지연을 방지할 수 있다.@Async는 어떻게 동작하나..
서버와 클라이언트(브라우저) 사이에서 데이터가 이동할 때 인터넷을 통해서 데이터가 이동한다. 이번에는 위와같은 그림에서 더 자세하게 들어가 어떻게 데이터가 이동하는지 알아보겠다. 그러면 클라이언트에서 server로 데이터를 보내는 상황에서 설명해 보겠다. 1) 사용자 데이터 보내기 클라이언트에서 입력한 사용자의 정보는 메모리에서 해당 데이터는 소켓을 통해 데이터를 TCP/IP 쪽으로 넘긴다. 그림과 같이 Buffer에 넘어온 데이터를 저장하고 IP와 Port를 그리고 순서 등등 의 데이터를 담고 있는 Segment라는 단위로 청크 된다. Segment를 배송할 물건이라고 한다면 계층을 거치면서 Segment는 Packet이라는 택배상자에 감싸지고 Frame이라는 운동차량으로 감싸지게 된다. 그러면 이 운..
이번에 프로젝트를 하면서 MSA에 gateway를 적용해 보았고 적용하면서 알게 된 내용을 정리해 보겠다. API Gateway가 뭔가요? msa환경에서 초기 서비스의 개수가 3개였는데 나중에 서비스가 커져 50개로 늘어났다고 가정을 했을 때 50개의 서비스 대다수가 인증/인가, 로깅 등등 중복적인 로직이 들어갈 때 문제가 발생할 수 있다. 이러한 문제를 해결하기 위해 API Gateway라는 하나의 서비스로 묶어서 처리해 줄 수 있다. 또한 요청을 받은 API Gateway는 설정에 따라 각 엔드포인트로 클라이언트를 대신하여 요청하고, 응답을 받으면 다시 클라이언트에게 전달하는 프록시(proxy) 역할을 하는 등등 다양한 이점을 가질 수 있다. (하지만 단일 진입점의 이점이 있을 수 있지만 SPOF문제..
분산 서비스 환경에서 로깅을 하는 방법과 중앙 집중형 로그 관리 하는 법까지 포스팅할 예정입니다. 로깅(Logging)란? 우리의 시스템이 어떻게 동작했는지에 대한 기록하는 것이다. 개발환경에서는 System.out.print을 사용해서 시스템의 동작 또는 값을 확인할 수 있지만, 배포환경에서 동작 상태를 확인하려면 System.out.print과 같은 방법으로는 한계가 있다는 것을 알아차릴 거다. 이러한 한계를 극복하고 시스템의 동작상태, 장애등을 기록할 수 있는 방법이 로깅프레임워크를 활용하는 것이다. 어떤 프레임워크가 있나요? Spring Boot에서는 Slf4j를 기본적으로 로깅 추상화 라이브러리로 사용하기를 채택했다. Slf4j는 추상화 라이브러리이기 때문에 개발자가 구현체를 설정해 줘야 사용하..