분류 전체보기 258

비트코인 '소유'의 개념

현재 우리는 자산에 대한 소유권을 증명하려면 제 3자의 기관이 있어야 한다. 예를들어 주식, 계좌, 부동산 모두 허가받은 사업자들을 통해 나의 소유권을 인정 받아야지만 이 자산이 내 것임을 증명할 수 가 있다. 내가 자산을 가지고 있는 것만으로는 내 것임을 증명할 수 가 없기에 소유권에 대한 증명이 필요한 것이다. 이러한 자산들은 중개자인 은행을 통해 인플레이션이 발행하면 가치가 하락할 수도 있다. 뿐만 아니라 내 자산을 합벅적으로 빼앗길 수, 가치가 하락할 수도 있는 리스크가 생기는 것이다. 그래서 '이 자산의 소유권이 온전히 나에게 있다.'라고 말 할 수 없다. 하지만 비트코인의 경우 내가 가지고 있는 것만으로도 소유권이 증명된다. 제3자에게 맡기지 않고도 우리가 직접 보유할 수 있게되는 것이다. 가..

코루틴(Coroutine) 기초

코루틴을 사용하기 전 의존성을 추가해야한다. dendendcies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.3") testImplementation(kotlin("test)) } runBlocking 코루틴을 생성하는 코루틴 빌더. runBlocking으로 감싼 코드는 코루틴 내부의 코드가 수행이 끝날 때까지 스레드가 블록킹된다. fun main() { runBlocking { println("hello") println(Thread.currentThread().name) } println("world") println(Thread.currentThread().name) } // Hello // main @coroutine#..

스프링 웹플럭스의 코루틴 지원

코루틴 코루틴(Coroutine)은 코틀린에서 비동기-논브로킹 프로그래밍을 명령어 스타일로 작성할 수 있도록 도와주는 라이브러리이다. 코루틴은 멀티 플랫폼을 지원하여 코틀린을 사용하는 안드로이드, 서버 등 여러 환경에서 사용할 수 있다. 코루틴은 일시 중단 가능한 함수(suspend function)을 통해 스레드가 실행을 잠시 중단했다가 중단한 지점부터 다시 재개(resume) 할 수 있다. 코루틴을 사용한 구조적 동시성 예시 suspend fun combineApi() = coroutineScope { val res1 = async { getApi1() } val res2 = async { getApi2() } return ApiResult ( res1.await() res2.await() ) } 리..

Spring/Webflux 2024.01.29

스프링 웹 플럭스 (Spring Webflux)

프로젝트 리액터 프로젝트 리액터는 리액티브 스트림의 구현체 중 하나로 스프링의 에코시스템 범주에 포함된 프레임워크이다. 리액티브 스트림 사양을 구현하고 있으므로 리액티브 스트림에서 사용하는 용어와 규칙을 그대로 사용한다. 리액터를 사용하면 애플리케이션에 리액티브 프로그래밍을 적용할 수 있고 비동기-논블로킹을 적용할 수 있다. 함수형 프로그래밍의 접근 방식을 사용해서 비동기-논블로킹 코드의 난해함을 어느정도 해결한다. 백프레셔를 사용해 시스템의 부하를 효율적으로 조절할 수 있다. 모노와 플럭스 리액터는 리액티브 스트림의 Publisher 인터페이스를 구현하는 모노(Mono)와 플럭스(Flux)라는 두 가지 핵심 타입을 제공한다. 모노는 0..1개의 단일 요소 스트림을 통지하는 발행자이다. 플럭스는 0..N..

Spring/Webflux 2024.01.28

리액티브 프로그래밍이란

리액티브 프로그래밍이란 데이터 또는 이벤트의 변경이 발생하면 이에 반응해 처리하는 프로그래밍 기법을 말한다. 리액티브 프로그래밍은 비동기 프로그래밍을 처리하는 새로운 접근 방식. 리액티브 프로그래밍은 데이터의 통지, 완료, 에러에 대한 처리를 옵저버 패턴에 영감 받아 설계되었고, 데이터의 손쉬운 비동기 처리를 위해 함수형 언어의 접근 방식을 사용. 리액티브 프로그래밍이 나오기 전 비동기 프로그래밍은 대부분 콜백 기반의 비동기 처리 방식을 사용했다. fetch("/api/users/me") { user -> fetch("/api/users/${user.id}/followers") { followers -> fetch("/api/users/${user.id}/likes") { likes -> fetch("/..

Spring/Webflux 2024.01.27

Thread, Future, CompletableFuture 란

Thread 스레드가 하나인 경우를 싱글 스레드, 하나 이상인 경우를 멀티 스레드라 부른다. 멀티 스레드를 사용하면 애플리케이션에서 여러개의 작업을 동시에 할 수 있다. 멀티 스레드를 사용하면 스케쥴링 알고리즘에 의해 스레드가 전환되면서 작업을 처리하는데 이를 컨텍스트 스위칭이라 부른다. 하나의 프로세스에는 최소 하나 이상의 스레드가 존재하고 프로세스 내에 스레드들은 동일한 메모리를 공유한다. 스레드가 무한정 많아지면 메모리 사용량이 높아져 OOME 가 발생할 수 있고 동시 처리량을 요구하는 시스템에서는 스레드를 생성하면서 발생하는 대기 시간 때문에 응답 지연이 발생한다. 이러한 문제를 해결하기 위해 스레드 풀을 사용해야 한다. 스레드 풀을 사용하면 애플리케이션 내에서 사용할 총 스레드 수를 제한할 수..

Spring/Webflux 2024.01.27

hardhat 환경세팅 (feat. VSCode)

hardhat? ethereum 개발을 할 때 compile, deploy, test를 모두 진행할 수 있는 개발 프레임워크 1) VSCode 설치 2) VSCode -> 확장 탭 -> solidity 설치 3) node 설치 npm 설치 목적, npm 을 통해 hardhat 을 설치할 것이다. 터미널 -> node -v 정상적으로 설치되었는지 확인 4) hardhat 설치 https://hardhat.org/hardhat-runner/docs/getting-started Hardhat | Ethereum development environment for professionals by Nomic Foundation Hardhat is an Ethereum development environment. C..

솔리디티 란

솔리디티? - 스마트 컨트렉트를 작성하기 위해 고안된 언어 - EVM 에서 작동하게 디자인된 언어 - 컴파일시 변수의 타입이 결정되는 정적 타입 언어 - 튜링 완전 언어 EVM? 솔리디티 코드를 통해 스마트 컨트렉트에 배포 및 실행과 같은 특정 작업을 수행하려 할 때 코드를 실행시켜주는 가상의 컴퓨터 이더리움에 정의된 규칙에 따라 코드가 정상적으로 완료되면 상태를 변경하여 스마트 컨트렉트가 블록체인 데이터에 영향을 주도록 한다. 블록체인 데이터가 무분별하게 스마트 컨트렉트에 의해서 수정되지 않게 보호하는 역할도 해준다. 솔리디티 작성 -> 컴파일하여 이더리움 바이트 코드로 변환 (EVM 이 인식할 수 있도록 하기 위한 컴파일) -> EVM 이 해당 코드 실행하여 통과되면 블록체인에 반영 정적타입? 변수 ..

디파이 란

암호화폐 시장에서 부의 원천 1. 기대감 어떤 목적을 이룰 것이라는 기대, 다른 사람들이 구매할 것이라는 기대 심리로 인해 신규 자금이 유입 2. 서비스에 대한 사용료 암호화폐를 전송할 때 지불하는 네트워크 사용료 등 3. 이자 빌리고자 하는 사람과 빌려주고 이자를 받고자 하는 사람은 늘 있었음. 이자를 약속대로 받을 수 있다는 보장을 스마트 컨트랙트로 가능하게 함. 이런 탈중앙 금융을 디파이라고 부름. 디파이 시장 시총 (TVL, Total Value Locked) 은 2021년 11월 기준 1,780억 달러 (한화 231조원)을 기록하였다. 디파이 란 DeFi = Decentralized + Finance 의 합성어로 탈중앙화된 금융 시스템이라 부른다. DeFi 는 중앙 통앙 통제 기관 없이 스마트 ..

웹소켓 이란

웹 소켓 이란 웹소켓은 실시간, 양방향 통신을 가능하게 하는 웹 통신 프로토콜이다. 기존 HTTP 프로토콜은 Client 가 Server 에 요청을 보내고, Server 가 응답을 반환하는 단방향 통신만 가능했다. 예를들어, 채팅 앱의 경우 Server 가 새로운 메세지를 즉시 Client 에게 알려야 하는데 HTTP 만으로는 어려움이 존재한다. 웹소켓을 이용하면 Server 와 Client 가 하나의 오픈된 연결을 유지하게 되어 데이터를 즉시 전송할 수 있다. 통신 과정 1. HTTP 요청 (HandShake 시작) : 클라이언트가 서버에 HTTP 요청을 보낸다. 이 때, 헤더에 Upgrade: websocket 정보가 포함되어 있다. 2. HTTP 응답 (HandShake 완료) : 서버가 이 요청을..

Spring/WebSocket 2023.09.15