github : https://github.com/BaekGeunYoung/performancereservationapp 최근 spring-boot 와 kotlin을 공부하고 있는데, 기본적인 프로젝트 설정부터 controller, repository, service, dto 등의 개념을 모두 종합해 완결성 있는 백엔드 어플리케이션을 만들어보아야겠다는 생...
github code : https://github.com/BaekGeunYoung/clean-architecture-practice Application Structure image.png Clean Architecture clean.png 말 그대로 '깨끗한' 코드. 유지보수 및 테스트 하기 용이한 코드를 작성하기 위해 고안된 아키텍쳐이다. 클...
캡처.png 1. 10초 후 만료되는 캐시 구현하기 index.js /profile/에 post 요청을 통해 데이터를 보낼 때마다 이 값을 redis server에 저장하도록 하고, 만료되는 시간제한을 10초로 설정함. 테스트 결과 post 요청을 보낸 후 10초가 지나기 전에 /profile/:name 라우트에 get 요청을 보내면 적절한 값을 받...
github code : https://github.com/BaekGeunYoung/rxjs-practice Reactive Programming 이란? 리액티브(Reactive, 반응형) 프로그래밍은 비동기 데이터 스트림(Asynchronous data stream)에 기반을 둔 프로그래밍 패러다임이다. 데이터 스트림이란 연속적인 데이터의 흐름을 말하...
github url https://github.com/BaekGeunYoung/multithreadpractice Focus 멀티스레드 환경을 설정하고, 이를 이용해 빠르게 작업을 수행하는 코드를 작성해본다. 더불어 멀티스레드를 사용하지 않는 일반적인 코드와 수행시간을 비교해 본다. reference : https://dzone.com/articles/...
서론 최근 spring-boot와 kotlin을 공부하고 있는데, spring jpa와 관련한 best practice를 알려주는 좋은 글을 찾아서 직접 해볼 만한 것들을 실습해보기로 했다. 이번에 진행한 실습의 내용 및 학습 목표는 아래와 같다. 내용 사용자 로그인 기능을 구현하되, 아래와 같은 세부 사항을 따른다. 아이디가 잘못되어 로그인이 실패한 경...
서론 12월에는 '멀티스레드 환경에서 다수의 요청을 효율적으로 처리하는 WAS + Background worker 아키텍쳐 구현하기' 프로젝트를 계획했었다. 이 아키텍쳐의 핵심은 뒷단에서 멀티스레드로 원하는 작업을 효율적으로 처리하는 Background worker 부분이었는데, 이 부분을 구현하기 위해 학습한 것들과 실습 내용을 공유하려 한다. 실습 내...
멀티스레드 환경의 문제 race condition.jpg (↑ race condition을 설명하기에 너무나 적절한 사진.) 멀티 스레드는 어플리케이션의 퍼포먼스 측면에서 싱글 스레드에 비해 큰 이득을 가져다주지만, race condition을 적절히 제어하지 않을 경우 데이터의 손실이 발생할 수 있다. race condition이란 여러 개의 스레드...
개요 12월 프로젝트(https://velog.io/@dvmflstm/12%EC%9B%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-ticket-reservation) 에서는 dynamoDB를 사용해보기로 결정했고, 그에 따라 kotlin 및 aws sdk를 활용해 dynamodb를 조작하고 조회하는 방법을 실습해 보았다. dyna...
요새 공부해보고 싶은 것들이 너무 많아 한 두달 정도의 주기로 공부해 나갈 것들을 정리하고 새로 설정해 나가려고 한다. - DDD (도메인 주도 설계) image.png DDD는 TDD나 BDD에 비해 그것이 커버하는 범위가 훨씬 넓고, 보다 더 높은 차원에서 개발자들의 프로세스를 지배하는 설계 패턴이라는 생각이 들었다. 클린 아키텍쳐를 공부하면서 도...
나는 보통 언어나 프레임워크를 처음 학습한 후 전반적인 기능개발에 관한 실습을 해보기 위해서 '공연 예약/등록 어플리케이션'을 만들어보곤 한다. 그 이유는 이 어플리케이션을 만들기 위해서는 보편적인 CRUD 기능이 존재해야 하고 DB 스키마 설계를 어느정도 신경써야 하
프로그래머들에게 코드 재사용이라는 것은 언제나 중요한 이슈이다. 많은 사람들이 자주 사용할 수 있을 만한 코드나, 개인 혹은 단체가 여러 프로젝트에서 공통적으로 사용할 만한 코드는 라이브러리화한다는 것은 익숙한 사실이다.이번에 쿠팡 클론 코딩 프로젝트에서 spring
github 바로가기여러 독립된 프로세스에서 하나의 자원을 공유해야 할 때, 데이터에 결함이 발생하지 않도록 하기 위해서 분산 락을 활용할 수 있다. 분산 락을 구현하기 위해서는 데이터베이스 등 여러 프로세스가 공통으로 사용하는 저장소를 활용해야 하는데, 이번 실습에서
이벤트 소싱은 영속 데이터를 어떤 식으로 저장할 것인지에 관한 것으로, 전통적인 데이터 저장 방법은 현실 세계의 것들을 직접적으로 표현하고 있는 도메인 객체(혹은 DB layer와 domain layer 사이의 간극을 해소하기 위한 DTO 객체)를 db에 담는 방식이었
spring boot와 axon framework 환경에서 SAGA pattern을 활용해 분산 트랜잭션을 구현해보는 실습 코드입니다.모든 아키텍쳐가 그러하듯 MSA에서도 단점과 한계들이 존재하는데, 그 중 하나는 일련의 db access 작업에 대해 atomicity
kotlin + spring webflux + arrow 를 이용해 functional polymorphic한 architecture로 http server를 구축해보는 실습 코드입니다.githubspring webflux가 사용하고 있는 reactor framewor
agar.io 클론 코딩githubScalaAkka Http, Akka Stream, Akka ActorWebsocketspray-json유저는 하나의 원으로 표현되고, 큰 원이 작은 원을 잡아먹음으로써 크기를 키워나가는 게임두 원의 중심 사이의 거리가 큰 원의 반지름
Wiki웹소켓(WebSocket)은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜이다. 웹소켓 프로토콜은 2011년 IETF에 의해 RFC 6455로 표준화되었으며 웹 IDL의 웹소켓 API는 W3C에 의해 표준화되고 있다.웹소켓은 HTTP와
회사에서 ZIO에 대해 소개하는 발표에서 활용했던 자료이다.https://docs.google.com/presentation/d/16vXtZPZ_7gNzMErHmAJ07BkQFqez3AI5TeU5cq4MqSY/edit?usp=sharing
함수형 프로그래의 핵심 중 하나는 description과 evaluation을 분리하는 것이다. description과 evaluation의 분리는 lazy evaluation을 통해서 이루어질 수 있는데, lazy evaluation이란 말 그대로 descriptio