본문 바로가기

소프트웨어-이야기

VirtualThread 아는 체하기 (1) Virtual Thread이란?JDK 21에 추가된 경량 쓰레드이다. OS 쓰레드를 사용하지 않고 JVM 내부 스케줄링을 통해 쓰레드를 생성한다.수십만~수백만개의 쓰레드를 동시에 사용할 수 있다.(2) 일반 Thread이란?기존의 일반 Thread는 OS Thread를 그대로 매핑한 것이다. 이를 Platform Thread라고 한다.Java Thread는 실제로 OS Thread를 사용한 것이다. Thread를 생성할 때 커널 영역에 접근하기 위해, 시스템 콜을 해야한다. 이로 인하여 오버헤드가 발생한다.이러한 배경으로 생성 갯수가 제한적이고, 생성하고 유지하는 비용이 크다.그래서 Thread를 무한히 생성할 수 없기 때문에 Thread Pool으로 관리해왔다.미리 Thread를 만들어두고, 재..
Playwright을 활용한 비주얼 테스트: 스크린샷을 떠서 통채로 비교하기 Visual 테스트란? 애플리케이션 화면을 스크린샷으로 저장하여, 앱의 현재 상태와 비교하는 것을 말한다.E2E 테스트는 뷰의 동작을 검증한다면, Visual 테스트는 화면에 표시된 시각적인 부분을 검증한다. visual 테스트으로 수동 테스트 프로세스를 자동화하면, 브라우저 별로 데이터가 잘 뜨는지 매번 테스트를 하지 않아도 된다. Playwright이란? Playwright을 사용하면 UI를 캡쳐한 이미지 결과를 비교할 수 있다. Playwright 실습편 (1) 프로젝트 폴더를 만든 후, 냅다 설치! # Install node dependenciesnpm install -D @playwright/testnpm install -D typescript# Install playwright browser..
spring boot 3.2에서 HTTP 통신하는 방법 아는 체하기 RestClientRestclient가 등장했다. https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-restclient restclient와 virtual thread 조합을 사용하면, non blocking 통신을 쉽게 구현할 수 있다.  RestClient와 ClientRequestFactoryRestClient는 HttpClient를 사용한다. 그리고 이 값은 ClientRequestFactory으로 조정할 수 있다.ClientRequestFactory와 관련 클라이언트 정보는 다음과 같다. JdkClientHttpRequestFactory: Java’s HttpClientHttpComponents..
시스템 설계 스터디 진행기 최근 커뮤니티를 통해 시스템 설계 스터디를 진행했다.스터디장으로 스터디를 준비하고, 진행했던 과정을 기록하고자 한다.  1. 그라운드룰 정하기 GITHUB PR Template 샘플## Checklist  - [ ] README 파일에 다음 요소가 모두 포함되어있는지 확인합니다.    * Requirements      * Functional      * Non-Functional      * Estimates    * Design    * API      * Reference  - [ ] 해당 기술이 활용되는 사례를 생각해봅니다.   - [ ] 참고하기 좋은 포스팅 사례를 찾아봅니다.   - [ ] 함께 고민해보고 싶은 주제나 키워드를 생각해봅니다. 2. 스터디 주제 선정하기 systemdesignfi..
[Spring] 유틸리티 클래스에 빈 생성자를 만들어야하는 이유 public final class AmericanoUtils { public static boolean isEmpty(String source) { return source == null || source.length() == 0; } } 위와 같은 유틸리티 클래스를 만들면, 소나큐브에서 "add a private constructor to hide the implicit public one" 워닝이 뜬다. 유틸리티 클래스에는 기본 생성자가 만들어져있어야하기 때문이다. 유틸리티 클래스에 왜 기본 생성자를 만들어야할까? 컴파일러는 생성자 코드가 없으면, 자동으로 기본 생성자를 생성한다. new AmericanoUtils(); 이 경우, 예상치 못한 방식대로 코드가 구현될 수 있다. 그래서 소나큐브는 기본..
개발자의 눈으로 이모지 바라보기2 프로그램은 이모지를 어떻게 알아볼까?'유니코드'는 전 세계의 모든 문자를 여러 프로그램에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다. '이모지'는 유니코드로 표현한다. '이모지' 유니코드가 텍스트에 포함된 경우, 각 프로그램은 '이모지' 유니코드를 자신들이 사전에 정의한 '이모지 이미지'로 변경한다. OS / 프로그램 별로 이모지 그림체가 다른 이유는 이러한 배경 때문이다. 이모지 유니코드는 유니코드 사이트에서 확인할 수 있다.(모든 이모지 유니코드 확인하기 👉🏻 https://www.unicode.org/Public/emoji/15.0/) 이모지가 점점 다양해지고 있다! 이모지의 종류가 점점 다양해지고 있다. 그리고 다양성을 존중하는 문화가 자리잡으면서, 이모지를 다양한 피부톤과 성..
kodekloud: devops 온라인 실습 툴 유데미 강의에 실습 링크가 있어서 사용해봤다. 터미널에서 쿠버네티스 명령어를 실행하고, 퀴즈에 답하는 방식으로 해봤는데, 재밌다. 예전에 AWS / Google Cloud hands-on labs는 실습 시간동안 서버를 부여받고, 직접 클라우드 시스템을 설정해보는 방법이었다. 그런데 이건 웹 콘솔이 진짜 콘솔인 것처럼 느껴지게 만든, 가상의 학습 환경이다. AWS / Google Cloud hands-on labs + leetcode가 섞인 실습도구인 것 같다.
개발자를 위한 최소한의 모니터링 지식: spring actuator + prometheus + grafana prometheus이란?prometheus은 시스템 모니터링 시스템이다. prometheus은 시스템의 매트릭을 주기적으로 수집한다. 그래서 시스템에 문제가 발생했을 때, 이를 인지하고 디버깅할 수 있는 기준이 되는 지표를 제공해준다. prometheus를 사용하는 기본 아키텍처는 다음과 같다. spring actuator이란?spring actuator은 실행중인 애플리케이션의 내부 매트릭을 api으로 제공하는 역할을 담당한다.prometheus에서 spring의 매트릭을 수집할 수 있게 하려면, 두 개의 의존성을 추가해야한다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implem..