해당 포스팅은 해당 게시글을 토대로 서술되었습니다. Java 8 에서는 컬렉션을 데이터 스트림으로 쉽게 반복할 수 있는 Stream API를 도입했습니다. Stream은 병렬로 실행할 수 있고 여러 프로세서 코어를 사용하는 것도 매우 쉽습니다. 그에 따라 더 많은 코어에 작업을 할당하여 나누는 것이 항상 더 빠르다고 생각하기 쉽습니다. 하지만 그렇지 않은 경우도 있습니다. 해당 포스팅에서는 순차 스트림과 병렬 스트림의 차이점에 대해서 살펴보겠습니다. 먼저 병렬 스트림에서 사용하는 default fork-join pool을 살펴보겠습니다. 또한, 메모리 지역 및 분할/병합 비용을 포함하여 병렬 스트림 사용의 성능 영향을 다뤄보겠습니다. 마지막으로 순차 스트림을 병렬 스트림으로 변환하는 것이 합리적인 경우를..
해당 포스팅은 해당 게시글을 번역한 포스팅임을 명시합니다. 문제 어떻게 레거시 모놀리스 애플리케이션을 마이크로서비스 아키텍처로 마이그레이션합니까? 해결방법 레거시 애플리케이션을 중심으로 새로운(srangler) 애플리케이션을 점진적으로 개발하여 애플리케이션을 현대화합니다. 이 시나리오에서 srangler 애플리케이션에는 마이크로서비스 아키텍처가 있습니다. 해당 그림은 전체적인 모놀리스 어플리케이션의 사이즈를 줄여감으로써 도메인 별 서비스로 쪼개놓고 신규 기능은 신규기능의 서비스로 분리하여 점차 모놀리스 어플리케이션을 말라 죽이는 방법입니다. Strangler 어플리케이션은 두가지 서비스 유형으로 되어있습니다. 첫째, 이전에 모놀리스 어플리케이션에서 사용되던 기능을 가진 서비스 둘째, 새로운 기능을 도출해..
안녕하세요. 오늘은 Spring Boot 서버가 종료될 경우 클라이언트의 요청에 대해서 응답받지 못한 이슈에 대해 공유하고자 합니다. 클라이언트는 별도의 spring boot 서버였고 서버A라 지칭하겠습니다. 네트워크 타임아웃에 대해서 30초의 간략한 시간으로 설정해두었습니다. 서버는 마찬가지로 별도의 spring boot 서버였고 서버B라 지칭하겠습니다. 서버A에 의해 다수의 요청을 받는 환경에서 서버B를 종료했을 경우, 서버A에서 네트워크 타임아웃이 발생하였습니다. 그 이유는 바로 서버B의 종료가 급격하게 이루어짐으로써 몇개의 요청에 대한 응답이 유실되었기 때문인데요. 이것은 서버의 종료(shutdonw) 속성이 IMMEDIATE 으로 되어있었기 때문입니다. 해당 속성은 서버가 종료될 때, 들어온 요..
MSA를 준비하는 도중에 도메인 분리를 해야하는데..! 그러기 위해서는 Dababase에 있는 테이블들부터 우선 구분을 할 필요가 있었다..! 따라서 전체 테이블이 800개가 넘어가는 모놀리틱한 데이터베이스의 전체 테이블을 파일로 저장하기 위해서 아래의 쿼리를 확인해보았더니 SELECT * FROM pg_catalog.pg_tables; 전체 schema의 테이블이 조회되어 시스템 테이블도 함께 조회된다. (pg_catalog) 따라서 where절에 다음과 같은 조건을 붙여 결과를 확인했다. SELECT * FROM pg_catalog.pg_tables where schemaname = 'public'; 그러니 현재 관리하고 있는 모든 데이터베이스 테이블의 목록을 구할 수 있었다!
안녕하세요. 개발하다가 너무 datagrip의 인터페이스로 제공되는 ddl을 많이 사용하는 것 같아서 개인적으로 스키마를 sql only로 처리하려고 노력하고 있는데..(누군가는 필요없다고 생각할 수 있지만 개인적인 챌린지입니다!) mysql보단 postgresql을 많이 사용했다보니 개인 프로젝트 할 때 mysql의 테이블을 수정하거나 컬럼을 수정할 때 자주 찾아보게되는 것보다 제 블로그에 정리해놓는 것이 더 좋을 것 같아서 이를 정리하고자 합니다. 먼저 예제로 사용할 테이블을 만들어 보겠습니다. 테이블 생성 create table room( seq bigint primary key, type varchar(100), status varchar(100) ); 단순한 구조의 예제 테이블을 생성했습니다. ..
안녕하세요. 오늘은 스프링 프레임워크를 사용할 때, 반드시 숙지해야되는 개념인 DI(Dependency Injection), 의존주입에 대한 이야기를 진행해보려고 합니다. 우선 DI라는 개념은 스프링에만 존재하는 개념은 아닙니다. 기존에 다른 프레임워크에서부터 발전해온 개념으로 IOC를 구현하기 위해 사용되던 방법으로 DI를 써왔는 흐름으로 알고 있습니다. 따라서 Spring에서 봤던 DI와 기존 DI간의 매치가 아직 안되신분들이 있을 것 같아서 그것부터 바로잡아 보겠습니다. Dependency Injection 우선 기존의 의존주입을 보기전에, 의존이라는게 어떤 것인지부터 알아야합니다. Spring MVC를 토대로 개발을 해왔던 분이시라면 충분히 아시겠지만 다시 정리하는 차원에서 의존이란 아래의 코드를..
최근 프로그래머스 백엔드 데브코스 혹은 간혹 개발자 고민상담 관련 이메일을 받다보면 많이 받는 질문중에 하나입니다. 데브코스의 경우에는 제가 직접 대화하면서 코드리뷰도 해주고 있으니까 그렇게 어렵지 않게 저의 메시지를 전달할 수 있지만 이메일로 전달받게되는 경우 제가 모르는 블랙박스 영역이 너무 많다보니 가끔 메시지가 잘못 전달되는 경우도 있었을 것 같아요. 다만 저는 해당 질문을 하는 심경과 듣고 싶은 답은 정해져 있다고 생각이 들어요. 자신 있는 사람은 나는 자신이 있고 준비가 되었으니까 얼른 취업전선에 뛰어들어서 원하는 목표를 쟁취하고 싶다! 이런 생각이 대부분일 것이고 그걸 확인하는 답변을 듣고 싶은 거겠지요. 자신 없는 사람은 용기의 답변을 듣고 싶거나 실제로 자신의 부족한 부분을 채워가고 싶은..
2022년 8월 26일 인프런 컨퍼런스에 다녀와서 벨로그를 개발하신 벨로퍼트님의 발표세션을 들었습니다. 개발 블로그를 쓰고 있는 사람으로써 혹은 컨텐츠를 만드는 사람으로써 들어보면 좋을 것 같았습니다. 아무래도 전체 인프콘의 타겟층 자체가 취준생 혹은 저연차 주니어에 초점을 맞춰지다보니 강연 내용이 전체적으로 어려운 아키텍쳐를 다룬다기보다는 모든 개발자들에게 인사이트를 줄 수 있을만한 자연스러운 혹은 현실적인 개발 아키텍쳐에 초점이 맞춰있었다고 생각이 들었습니다. 이처럼 벨로퍼트님의 셀프브랜딩 강연도 마찬가지로 다소 가볍게 준비하셨던 느낌이 들었고 본인께서도 발표당시 떨리지 않는다고 하셨으니 이미 수십 수백번은 전달했던 내용이 아닐까 생각합니다. ㅎㅎ 모든 블로그를 준비하는 개발자 혹은 컨텐츠를 준비하는..