동기 프로그래밍 동기(Synchronous)방식의 프로그램에서 작업의 실행 흐름은 순차적으로 동작한다. fun main() { // 실시간 주식 정보를 가져온다. val stock: StockDto = getRealtimeStockData("APPLE") println("주식 심볼 : ${stock.symbol}") println("시가 : ${stock.price.open}") println("종가 : ${stock.price.close}") println("시가총액 : ${stock.price.marketCap}") } 순차적으로 동작하는 프로그램은 코드를 파악하기 쉽고 결과를 예측하기 쉬우므로 디버깅이 쉽다. 특정 작업을 실행하는 동안에는 다른 작업을 할 수 없다는 단점이 존재한다. 비동기 프로그래..
Thread & Multi Thread 쓰레드는 한 프로세스 내에서 실행되는 동작(function)의 단위이다. 각 쓰레드는 속해있는 프로세스의 Stack 메모리를 제외한 나머지 memory 영역을 공유할 수 있다. 멀티 쓰레드란, 하나의 프로세스가 동시에 여러 개의 일을 수행할 수 있도록 해주는 것이다. 즉, 하나의 프로세스에서(실행된 하나의 프로그램) 여러 작업을 병렬로 처리하기 위헤서 멀티 쓰레드를 사용한다. 멀티 쓰레드에서는 한 프로세스 내에 여러 개의 thread가 있고, 각 쓰레드들은 Stack 메모리를 제외한 나머지 영역(Code, Data, Heap) 영역을 공유한다. Stack memory & PC Register 쓰레드가 함수를 호출하기 위해서는 인자 전달, Return Address ..
동시성 문제 스프링은 기본적으로 싱글톤 빈을 등록한다. 지역변수는 쓰레드마다 각각의 다른 메모리 영역이 할당되기 때문에 동시성 문제가 발생하지 않지만, 싱글톤으로 등록된 인스턴스의 필드를 여러 쓰레드가 동시에 접근하는 경우 문제가 발생한다. 또한 동시성 문제는 값을 읽기만 해선 발생하지 않고, 어디선가 값을 변경하기 때문에 발생한다. 아래와 같은 경우는 동시성 문제가 발생하는 코드이다. 코드를 살펴보며 문제를 확인해보자. FieldService 클래스 @Slf4j public class FieldService { private String nameStore; public String logic(String name) { log.info("저장 name={} nameStore={}", name, nameS..
- Total
- Today
- Yesterday
- Algorithm
- 백준
- 노마드
- Real MySQL
- 코틀린
- MySQL
- webflux
- 자료구조
- 데이터베이스
- 북클럽
- 스프링 부트
- 릿코드
- spring boot
- mysql 8.0
- Spring
- 리팩토링
- 알고리즘
- 스프링부트
- 구현
- leetcode
- 인프런
- 파이썬
- 김영한
- 노마드코더
- 문자열
- kotlin
- 정렬
- 스프링
- 그리디
- 코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |