전체 글 7

가상 쓰레드 (Virutal Thread)

이번에 회사에서 진행하고 있는 프로젝트에서 가상 쓰레드를 사용했는데 동료들과 이야기하다 보니 팀원분이나 다른 팀 동료분들이 알려달라고 하셔서 작은 세미나를 진행하게 됐다. 가상 쓰레드는 JDK 21에 정식기능으로 막 나왔을 때는 한창 핫했지만 JVM 내부의 synchronized 동작 방식으로 인한 pinning 이슈와 서드 파티 라이브러리들의 내부 구현 방식으로 인한 pinning들로 인해 짜게 식은 느낌이었지만, JDK 24 때 JEP 491로 인해 JVM 내부의 synchronized 동작 방식이 변경되며 해당 이슈가 해결돼서 그런지 LTS인 JDK 25에선 꽤 쓸만하게 올라온것 같다. JDBC 드라이버들도 내부 구현도 JDK 21이 막 나왔을 때의 버전보다 virtual thread 친화적으로 개..

개인용 클라우드 구축 (3) - WoL, 공유기 및 DDNS 설정

지난글에 이어서 하드웨어 조립은 완료했고 이젠 공유기를 통해 원격제어 및 네트워크 환경 구성을 해보려고 한다 WoL(Wake on LAN) 먼저 WoL을 통해 원격 부팅 세팅부터 해보려고 한다 보드에 랜포트가 두개인데 둘 다 공유기에 꽂아준다. 하나는 DMZ용, 다른 하나는 내부망용으로 쓰려고 한다 일단 WoL 기능을 사용하기 위해서 설정해줘야 하는 부분은 세 가지가 있는데 메인보드 바이오스 설정 OS 설정 공유기 설정 을 해줘야 한다. WoL은 메인보드가 해당 기능을 지원해줘야 사용 가능한데 다행히 이 중국산 메인보드도 해당 기능을 지원해주더라 먼저 BIOS 부터 진입한다 BIOS 설정 제조사별로 WoL을 부르는 명칭이 다를 수 있고 검색하면 나오겠지만 요 메인보드 제조사의 바이오스 정보는 따로 검색할..

개인용 클라우드 구축 (2) - 하드웨어 조립

지난 글에선 하드웨어 선정 및 가격을 알아보았다 이번 글에선 하드웨어 조립기(삽질기)를 정리해보겠다 (하드웨어 조립은 너무나도 좋은 글들이 많기 때문에 필요한 부분만 정리하겠다) 준비물 Windows 부팅 USB Linux 부팅 USB (서버로 쓸거니까) CMOS 배터리 정밀 전동 드라이버 (있으면 진짜 편하다) 일단 조립한 모습은 이렇다 (케이스 핀 보드연결 아직 안함) 먼저 쿨러 사이의 공간에 2번 CPU (1번이 앞쪽)의 쿨러에 앞쪽 쿨링팬이 없는 것을 확인할 수 있다 해당 쿨러 제품의 팬이 저 두께에는 맞지 않아서 좀 더 얇은 팬을 구매해야한다 (앞쪽 팬 크기는 140이 아니므로 더 작은걸 선택해도 된다 대충 130? 정도 되는 듯) 일단 중국산 X99 보드들은 램소켓 불량 등의 이슈가 있었으므로..

개인용 클라우드 구축 (1) - 하드웨어 마련하기

퍼블릭 클라우드의 프리티어는 제공하는 리소스가 너무 적기 때문에 이것저것 모델을 만들어 보려면 개인적인 서버가 필요할 것 같아서 글을 쓰게 되었다. 나 같이 돈없는 주니어 개발자인데 개인적인 환경에서 워크스테이션을 마련해보고 싶은 사람들을 위해 정보 공유해보고자 A-Z까지 정리해본다. (피드백은 너무나도 환영합니다!) 블로그 첫글인데 글솜씨가 없어도 양해 부탁드립니다 일단 내가 생각한 개인적인 서버환경 구성은 실제 서비스 환경처럼 구성해놓고 사용하는 것이 목표라 그 구성은 아래와 같다. Internet - DMZ | Firewall | Internal Subnet DMZ와 내부망을 크게 VM으로 두개 띄우는 것이 1차 목표고 추후 세팅하며 안에 인증서버, G/W, DNS 서버 등 추가할건데 이에 따라 대..

GoF 23 디자인 패턴

구조 패턴 (Structural Patterns) 💡 구조 패턴은 구조를 유연하고 효율적으로 유지하면서 객체들과 클래스들을 더 큰 구조로 조립하는 방법 어댑터 패턴(Adapter) 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 한다. 또는 Wrapper로도 불린다. 어댑터 패턴(Adapter) 브릿지 패턴(Bridge) 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조(추상화 및 구현)로 나눈 후 각각 독립적으로 개발할 수 있도록 한다. 브릿지 패턴 (Bridge) 복합체 패턴(Composite) 객체들을 트리 구조들로 구성한 후, 이러한 트리 구조들이 개별 객체들인 것처럼 작업할 수 있도록 하는 디자인 패턴이다. 복합체 패턴 (Composite) 데코레이터 패턴(De..

SOLID 원칙

로버트 마틴이 자기 책에서 5가지 원칙들을 소개했음. 당연히 유연한 사고로 받아들여야지 원칙에 얽매이면 이상해진다. 단일책임 → 개방/폐쇄 → 리스코프 → 인터페이스 분리 Single Responsibility Principle (단일 책임 원칙) 클래스는 한 가지 이유로 변경되어야 한다. 각각의 클래스가 프로그램이 제공하는 기능의 한 부분을 책임지도록 하라. 그 후 이 책임을 완전히 캡슐화하여 클래스 내부에 숨겨라 해당 원칙의 주목적은 복잡성을 줄이는 것이다. Open/Closed Principle (개방/폐쇄 원칙) 클래스들은 확장에는 열려있어야 하지만 변경에는 닫혀 있어야 한다. 해당 원칙의 주목적은 새로운 기능을 구현할 때 기존 코드가 깨지지 않도록 하는 것이다. Open(개방) 예시 클래스를 확..

디자인 패턴이란?

일종의 설계 기법이며, 설계 방법이다. 디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책이다. GoF(Gang of Four) 현재 사용되는 기본적인 23가지 디자인 패턴을 정리한 아저씨들 에릭 감마, 존 블리시디스, 랄프 존슨, 리처드 헬름 디자인 패턴의 분류 디자인 패턴은 복잡성, 상세도 및 설계 중인 전체 시스템 등의 적용 범위에 따라 분류된다. 모든 패턴은 패턴의 의도 또는 목적에 따라 분류할 수 있다. 이디엄(idiom) 가장 기본적인 하위 레벨의 패턴. (low-level pattrern) 일반적으로 하나의 프로그래밍 언어에만 해당함. 이디엄은 주어진 언어의 기능을 사용해서 컴포넌트들 혹은 컴포넌트들 간 관계의 특정 측면을 구현하는 방법을 서술한다. 아키텍처..