본문 바로가기

전체 글52

[알고리즘] 순열(Permutation)과 조합(Conbination) 순열과 조합순열과 조합은 무슨 상황에서 쓰이는 개념일까?우리는 일상에서 자주 "경우의 수"를 셉니다.자물쇠 비밀번호를 설정할 수 있는 경우의 수는?친구 5명 중에서 2명을 줄 세우는 방법은?8명 중에서 4명을 골라 팀을 만드는 방법은?"선택" + "배열" 문제를 푸는 수학적인 도구가 바로 순열과 조합입니다.순열 (Permitation)순열은 순서를 고려한 나열 방법입니다. 좌석 배치: A, B, C가 앉는 순서는 ABC, ACB, BAC .. 로 전부 다릅니다.비밀번호: 1, 2, 3의 숫자를 사용하면 123, 231, 312은 모두 다른 비밀번호입니다.nPr = n! / (n - r )! 예시 (Java)1, 2, 3 중 2개를 순서 있게 뽑는 경우의 수-> (1, 2), (2, 1), (1, 3), .. 2025. 7. 3.
[docker] 도커(docker) 실무 관점으로 생각해보기 도커는 왜 필요한가?가장 먼저 도커가 필요한 이유를 생각해보았다. 프로젝트를 진행하면서 개인 PC에서 잘 돌아가는 프로그램이 서버에 올리면 안되는 경우가 있었다. 로컬과 서버에서 차이가 일어나는 이유는?윈도우, 리눅스 환경 차이인가?Python, Node 등 버전 차이가 문제인가?이러한 문제들이 반복되다보니 환경 차이라는게 얼마나 복잡한지 느낄 수 있었다. 도커의 핵심은 환경 통일이다.운영체제 버전, 의존성, 라이브러리 차이를 제거한다.VM은 OS 전체를 가상화하기 때문에 무겁고 느린 반면, 도커는 커널 공유로 가볍다.운영 환경 / 개발 환경이 항상 동일하게 만들 수 있다.팀 협업 시에 새로 합류한 개발자가 docker-compose up 한 방으로 개발환경 완성이 가능하다.배포할 때 도커 이미지만 올리.. 2025. 6. 11.
[Java21] Virtual Threads (가상 스레드)란? Java 21부터 정식으로 등장한 Virtual Threads (가상 스레드)는 기존 Java의 동시성 프로그래밍 방식을 크게 바꾸는 기술 Virtual Thread (가상 스레드) ?Virtual Threads는 JVM이 직접 관리하는 초경량 스레드로, 기존 OS 기반 플랫폼 스레드보다 훨씬 가볍고 대량의 병렬 처리를 가능하게 함 기존 Platform Thread vs Virtual Thread항목Platform ThreadVirtual Thread관리 주체OS (커널 스레드)JVM생성 비용무거움 (메모리, 리소스 큼)매우 가벼움동시성수천 개 이상은 힘듦수십만 개도 가능코드 스타일비동기 권장 (ex: CompletableFuture)동기 코드 그대로 사용 가능주요 용도CPU 직얍 작업I/O 집약 작업 .. 2025. 4. 30.
[MoveWave#6] Java 17에서 21로 업그레이드(Virtual Threads, ZGC) Java 17에서 21로Java 17은 2021년에 나온 안정된 LTS 버전이다. 많은 프로젝트들이 17을 기준으로 안정적인 서비스를 운영하고 있다.하지만 2023년, Java 21이 새 LTS 버전으로 등장하면서 몇 가지 게임 체인저급 기능들이 추가됐다. 그 중에서도 특히 주목할 만한 변화는 가상 스레드(Virtual Threads)와 ZGC(가비지 컬렉터) 개선이다.가상 스레드 (Virtual Threads)Java 17기존에는 운영체제(OS) 스레드에 1:1로 매핑되는 플랫폼 스레드만 존재많은 동시 요청을 처리하려면 많은 스레드를 생성해야 했고, 스레드 수가 늘어날수록 메모리 소모와 컨텍스트 스위칭 비용이 커짐Blocking I/O (ex: 외부 API 요청 등)이 많은 서비스에서는 스레드 낭비가 .. 2025. 4. 28.