목록분류 전체보기 (261)
Coding Planet
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/NKcHn/btsFEgO0tDl/udjfKKN30HbKGzXqymgwLk/img.png)
이전 포스트에서 설치했던 workerNode에 Docker을 설치하고자한다. 터미널을 열고 리눅스 환경에 도커를 설치하는 명렁어를 그대로 따라가면 된다. 도커 설치시 계정생성시 설정한 비밀번호가 필요하다. 과정 중 디스크 사용에 대한 허가요청에는 모두 Y로 하면 된다. 실행환경 : Ubuntu 22.04.3 LTS 1. 우분투 시스템 패키지 업데이트 sudo apt-get update 2. 필요한 패키지 설치 sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 3. Docker의 공식 GPG키를 추가 curl -fsSL https://download.docker.com/linu..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/XdXJi/btsFB7FuyaA/R1rMYx6WpJsbq5qalzDCqK/img.png)
Docker Swarm은 Docker 엔진을 기반으로 하는 컨테이너 오케스트레이션 도구다. 여러 대의 도커 호스트들을 클러스터링하여 관리하고, 컨테이너들을 이들 호스트에 걸쳐 분산시켜 실행할 수 있게 해준다. 이를 통해 개발자와 시스템 관리자는 대규모의 컨테이너화된 애플리케이션을 쉽게 배포, 관리 및 확장할 수 있다. 또한 쿠버네티스에 비해 간단하므로 배우기 쉬운 장점이 있다. Docker Swarm의 노드들은 워커노드와 오케스트레이션을 담당하는 매니저노드로 나뉘는데 기본적으로 설치 방식은 동일하다. Docker Swarm 실습을 위해 VM VirtualBox를 통해 가상머신에 우분투를 설치하고 각각 독립적인 Docker 실행 환경을 만들었다. Oracle VM VirtualBox와 우분투 설치파일(IS..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xoNZJ/btsFAt1sbiV/U0MGMvbVkOusPQJ1EXRonk/img.png)
자바 입문 레벨에서 개발자 문서를 보거나 github의 다른 코드들을 보다 보면 Box와 같은 낯선 형태의 문장을 만나게 된다. 이러한 것들이 지네릭스인데 남궁성 저자의 자바의 정석을 참고하여 입문수준에서 간단하게 살펴보고자 한다. 어렵다면 강조된 내용만 봐도 대충 감을 잡을 수 있다. | 지네릭스란? 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시 의 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안전성을 높이고 형변환의 번거로움이 줄어든다. -자바의 정석 1. 컴파일 시 의 타입체크(compile-time type check) 지네릭스를 사용하면, 컬렉션에 저장되는 객체의 타입을 컴파일 시점..
람다식에 관한 개괄적인 포스트는 아래 참조! https://sharonprogress.tistory.com/330 람다식(Lamda expression) 총정리와 활용예제 아래 포스트의 예시 및 내용은 남궁성 저자의 자바의 정석을 많이 참고했다. | 람다식이란 람다식은 간딘히 말해서 메서드를 하나의 '식(expression)'으로 표현한 것이다. 자바 8부터 등장한 개념으 sharonprogress.tistory.com 앞 선 포스트에서 설명한대로 람다식은 메서드를 하나의 식으로 표현해 간략하면서 명확하게 식으로 표현할 수 있도록하는 표현식이다. 이에 더해 람다식이 하나의 메서드만 호출하는 경우에는 '메서드 참조(method reference)'라는 방법으로 람다식을 더욱 간략하게 쓸 수 있다. | 메서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/brc158/btsFuLVR5s2/YG1AMG5utLeJOzQIU8q5n0/img.png)
아래 포스트의 예시 및 내용은 남궁성 저자의 자바의 정석을 많이 참고했다. | 람다식이란 람다식은 간딘히 말해서 메서드를 하나의 '식(expression)'으로 표현한 것이다. 자바 8부터 등장한 개념으로 객체지향언어인 자바에 함수형 활용을 더해주었다. 람다식은 메서드의 매개변수로 전달되어지는 것이 가능하고, 메서드의 결과로 반활될 수도 있다. 람다식으로 인해 메서드를 변수처럼 다루는 것이 가능해진 것이다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로 람다식을 '익명함수'라고 하기도 한다. 아래 식에서 (i) -> (int)(Math.random()*5+1) 부분이 람다식이다. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3VCpv/btsFofYcSab/LWNdUt8DTr5Tr5MyyUkbz0/img.png)
| 자바의 정석(남궁 성 저자) 발췌 전통적으로 프로그래밍에서 함수라는 이름은 수학에서 따온 것입니다. 수학의 함수와 개념이 유사하기 때문이죠. 그러나 객체지향개념에서는 함수(function)대신 객체의 행위나 동작을 의미하는 메서드(method)라는 용어를 사용합니다. 메서드는 함수와 같은 의미이지만, 특정 클래스에 반드시 속해야 한다는 제약이 있기 때문에 기존의 함수와 같은 의미의 다른 용어를 선택해서 사용한 것입니다. 그러나 이제 람다식에서는 메서드가 하나의 독립적인 기능을 하기때문에 함수라는 용어를 사용하기도 합니다. | 컴퓨터 언어 내에서 메서드와 함수의 차이 컴퓨터 프로그래밍에서 "메서드(method)"와 "함수(function)" 용어는 종종 혼용되지만, 그들 사이에는 명확한 차이점이 있다...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/L4KmW/btsFjUNRwWC/zXtXmcxQXJAreLo1GRKVaK/img.png)
ConCurrentHashMap과 HashTable을 공부하면서 경쟁조건과 Lock이 주요 키워드로 등장했다. 스레드를 공부하면서 빈번하게 등장하기 때문에 두 개념 모두 어렴풋이 알고 있긴 하지만 이번 기회에 정리하고 가야겠다. | 경쟁 조건 (Race Condition)과 Lock 경쟁 조건은 멀티 스레드 프로그램에서 두 개 이상의 스레드가 데이터나 자원에 동시에 접근하려고 할 때 발생하는 문제이다. 이러한 상황에서 스레드들의 실행 순서에 따라 프로그램의 결과가 달라질 수 있으며, 이는 데이터의 일관성과 정확성을 해칠 수 있다. 경쟁 조건을 방지하기 위해 동기화 메커니즘(대표적으로 Lock)을 사용하여 스레드들이 자원에 안전하게 접근할 수 있도록 해야한다. Lock은 동시에 여러 스레드가 같은 자원에 ..
HashMap / HashTable / ConCurrentHashMap은 Java의 Map 인터페이스 구현체이다. | HashMap / HashTable / ConCurrentHashMap 비교하기 특징/구현체 HashMap Hashtable ConcurrentHashMap 동기화 (Synchronization) 동기화되지 않음 동기화됨 부분 동기화(세그먼트 락) Null 허용 키와 값 모두에 null 허용 null 허용하지 않음 null 허용하지 않음 성능 빠름 느림 HashMap보다 느리지만, Hashtable보다는 빠름 Iterator fail-fast fail-safe가 아님 fail-safe 멀티 스레드 환경 적합하지 않음(동기화 추가 필요) 적합하지만 성능 저하 적합하며 성능 최적화됨 용도 단..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Mnp5v/btsFjX4B9PH/zIj2vv3OLK1ufmAqK3Xi00/img.png)
|ThreadLocal이란 ThreadLocal은 Java의 스레드 로컬 변수를 관리할 수 있도록 하는 기능이다. 지금까지 변수들은 클래스, 메서드 레벨에서 관리되었는데 스레드별로 저장되고 관리할 수 있는 것이다. 즉, 한 스레드에서 설정한 ThreadLocal 변수의 값은 다른 스레드와 공유되지 않으며, 각 스레드는 해당 변수의 자신만의 독 립적인 값을 유지하게 된다. 이를 통해 스레드 간 데이터 격리가 이루어져 스레드 안전성(thread-safety)을 확보할 수 있다. 더 간단히 설명하자면 threadLocal변수를 선언하면 멀티 스레드 환경에서 각 스레드마다 독립적인 변수를 가지게 되고 각 값은 get(), set() 메서드를 통해 접근할 수 있게 된다. **thread-safety 멀티 스레딩 ..