일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- springboot
- 프로그래머스
- 백준 16235
- java
- spring cloud
- 백준 15685
- sql 기술면접
- 백준 16236
- JPA
- Kotlin
- 백준 17779
- MySQL
- Coroutine
- java 기술면접
- JVM
- Spring
- spring security
- Spring Boot
- 백준 16719
- 백준 파이썬
- 파이썬
- 프로래머스
- with recursive
- 백준 19238
- 백준
- spring oauth
- 백준 17626
- MSA
- 웹어플리케이션 서버
- re.split
- Today
- Total
목록Programming (98)
시작이 반
하나의 API에서 여러개의 외부 API를 호출하고 있을때 어떤 하나의 API가 장애가 발생한다면 해당 API에 엮여있는 모든 API가 장애가 발생하는 것이 맞는 것일까? 아니면 한 페이지에 추천서비스, 검색서비스, 결제 서비스등 여러개의 서비스가 있을때 하나의 서비스가 장애가 발생하면 해당 페이지는 장애가 발생하는 것이 맞는 것일까?. 이상적인 서비스는 장애난 서비스만 장애로 보여지거나 장애가 아닌것 처럼 동작을 해야 한다. 아래와 같이 아마존과 넷플릭스는 MSA로 모든 서비스가 구축되어있으며 모든 서비스가 엮여있다. 하지만 하나의 서비스가 장애가 나더라도 정상적으로 작동한다. 이때 사용하는 것이 Circuit Breaker이다. Circuit Breaker 란? 회로 차단기란 뜻으로 caller에서 c..
https://github.com/tmdrl5779/login-boilerplate Spring Boot Spring Security JWT : Token Redis : For RefreshToken sava Kotlin : Language JPA : ORM H2 : DataBase
Tool : Jmeter 환경 : CPU 4Core 8Thread 1000명의 유저가 30초가 걸리는 api를 동시 호출 TEST1 구성 : netty + coroutine ( context : Dispatchers.IO ) @PostMapping("/api/test") suspend fun testApi():MutableMap = withContext(Dispatchers.IO){ log.info(">>>>>>>>>>>> start suspend") performService.measureTestPerform() } suspend fun measureTestPerform(): MutableMap = withContext(Dispatchers.IO) { val map = mutableMapOf() val..
Kotlin은 비동기 작업을 다룰 수 있는 동시성 라이브러리 이다. 동시성에는 잘못된 사용으로 여러 문제를 발생시킬 수 있는데 공유 데이터가 그중 하나이다. 여러 코루틴이 동시에 공유된 변수나 자료구조에 접근 하는 경우 데이터 경합이 발생할 수 있으며 이럴 때 해결할 수 있는 방법에 대해서 알아보자. 문제 코드 import kotlinx.coroutines.* import kotlin.random.Random import kotlin.system.measureTimeMillis suspend fun massiveRun(action: suspend () -> Unit){ val n = 100 val k = 1000 val elapsed = measureTimeMillis { coroutineScope { ..
여러개의 코드를 동시에 실행시키기 위해서는 Coroutine을 알기 전에는 쓰레드라는 개념밖에 생각나지 않았다. 쓰레드는 다수의 작업을 동시에 처리할 수 있으며, 일반적으로 쓰레드는 선점형으로 멀티태스킹이 가능하다. 하나의 작업이 한 쓰레드에서 발생하고 여러개의 작업을 동시 실행시키기위해 멀티 쓰레드를 사용한다. 멀티쓰레드 환경에서 CPU가 여러 Task를 바꿔 실행하기 위해 Context Switching을 하게 되고 이때 현재 PCB, 다음 PCB등에 대한 정보를 적재시키기는 등 Overhead가 매우 커질 수 있다. Coroutine 또한 여러 작업을 병렬적으로 처리하는 방법으로 비선점형으로 멀티태스킹이 가능하다. suspend와 resume을 사용하여 서브루틴을 구성하고 하나의 쓰레드에서 여러개의..
CoroutineScope CoroutineSocpe는 Coroutine이 실행될 수 있는 범위를 나타낸다. 이 범위는 Coroutine의 라이프사이클과 관련이 있으며 Coroutine이 완료되거나 종료될때 해당 범위가 생성되거나 없어진다. 코루틴 스코프 내에서 실행되는 코루틴은 부모-자식 관계를 가지며 자식의 코루틴이 예외가 발생하면 부모로 전파를 하여 모두 종료가된다. (But, 슈퍼 바이저 잡을 사용하면 예외 전파를 자식에게만 할 수 있다.) 코루틴 스코프를 만드는 방법에는 하위와 같은 방법 등이 있다. 코루틴 스코프 빌더 코루틴 빌더 runBlocking launch coroutineScope async withContext produce supervisorScope actor GlobalScop..
ELK ElasticSearch, Logstash, Kibana의 약자로 로그 데이터를 수집, 저장 분석, 시각화 하기 위한 오픈 소스 플랫폼이다. ElasticSearch 데이터 검색 및 분석 오픈 소스로 분산 아키텍쳐를 통해서 데이터를 색인화 하고 인덱싱 및 검색기능을 제공한다. 이러한 로그 데이터는 Logstash를 통해서 전달 받는다. ElasticSearch는 클러스터링을 하여 사용되는데 Master-node와 Data-node 로 구성된다. Master-node는 하나 이상으로 존재하며 없을 경우 클러스터 작동이 정지된다. 인덱스의 메타 데이터, 샤드 위치와 같은 클러스터 상태 정보를 관리한다. Data-node는 실테 데이터를 저장하고 검색하는 역할을 수행한다. Logstash 로그 데이터를..
JVM기반의 언어를 사용하다가 (Java, Kotlin) 보면 OS에 독립적이라는 말이 나온다. 옛날에는 JVM위에서 동작하기 때문에 OS에 독립적이구나 하고 넘어갔는데 최근에 왜 OS에 독립적인지 정확히 알고싶어 졌다. 자바의 런타임 과정은 아래와 같다. JDK를 통해 바이트코드 생성 ( .java -> .class ) 바이트코드를 JRE에 전달 ( .class ) JRE를 통해 바이트코드를 JAVA 명령어로 실행 이를 JVM이 실행 여기서 JVM이 내부에서 특정 OS에 맞게 자바 언어를 인터프리터나 JIT를 통해 기계어로 변환시켜준다. 때문에 어떤 OS를 사용하든간에 JVM이 JAVA가 실행되는 것을 보장한다. 옜날에는 Java언어는 다른 언어에 비해서 느리다는 말이 나왔었는데 이는 위에 런타임과정에..