전체 글153 [Kotlin] 코틀린에서 변수와 타입, 연산자 1. 코를린에서 변수를 다루는 방법 1 - 1. 변수 선언 키워드 - var 과 val의 차이점 Java long number1 = 10L; final long number2 = 10L; Long number3 = 1_000L; Person person = new Person("김지수"); Java에서 long과 final long 의 차이점은 변수가 가변인가, 불변인가의 차이점이 있습니다. Kotlin fun main() { var number1 = 10L val number2 = 20L number1 = 20L number2 = 20L // error } var 키워드는 가변으로 새로운 값을 할당할 수 있지만 val 키워드는 불변으로 재할당을 못한다. 1 - 2. 코틀린에서의 Primitive Typ.. Kotlin 2023. 11. 14. Thread (4) - 락킹 기법과 데드락 DeadLock 교착상태라고 불리며 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리는 상태를 말합니다. 예제 코드로 살펴보겠습니다. public void Thread1() { lock(A) lock(B) task unlock(B) unlock(A) } public void Thread2() { lock(B) lock(A) task unlock(A) unlock(B) } 스레드 1이 lock(A)를 겁니다. 스레드 2이 lock(B)를 겁니다. 스레드 1이 B에 접근하려고 하자 락이 걸려있어 대기를 합니다. 스레드 2이 A에 접근하려고 하지만 락이 걸려있어 대기를 합니다. 위와 같이 스레드1과 스레드2가 서로 대기 상태에 빠지는것을 데드락, 교착상태라고합니다. 데드락이 일어나는 이유 상호배제 .. Java/Thread 2023. 11. 9. Thread (3) - 스레드 간 데이터 공유의 문제점 및 해결 방법 멀티 스레드 환경의 애플리케이션에서 스레드 간 데이터 공유를 하면 어떤 문제점이 생기고 해결하는 방법에 대해 소개해보겠습니다. 예제 코드 예를 들어 메서드를 호출할 때마다 게임 아이템을 하나씩 늘리고 줄이는 로직 있다고 가정합니다. public class Main { public static void main(String[] args) throws InterruptedException { InventoryCounter inventoryCounter = new InventoryCounter(); IncrementingThread incrementingThread = new IncrementingThread(inventoryCounter); DecrementingThread decrementingThread.. Java/Thread 2023. 11. 7. Thread (2) - 스레드 사용법 및 스레드 간 데이터 공유 스레드의 다양한 생성 방법과 스레드를 연결하는 멀티 스레드를 사용하는 법 및 스레드 간 데이터 공유에 대해 글을 작성해 보겠습니다. 스레드 생성 스레드는 메인 스레드가 종료되어도 실행되고 있는 스레드와 메인 스레드 배경에서 실행되는 데몬 스레드가 있습니다. 즉 일반 스레드는 메인 스레드의 종료를 막고, 데몬 스레드는 막지 않습니다. 익명 클래스사용 Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("Hello thread : " + Thread.currentThread().getName()); } }); thread.start(); 람다식 사용 Thread thread = new Threa.. Java/Thread 2023. 11. 7. Thread (1) - 운영체제 관점에서의 멀티 스레드 운영체제 관점에서의 스레드는 프로세스 위에서 동작하는 task(일)라고 생각할 수 있습니다. 즉 자바 애플리케이션(프로세스)에서 실행되는 코드, 동작하는 일을 스레드라고 할 수 있습니다. public class Main { public void main(String[] args) { System.out.println("Hello World!"); } } 위의 메인 메인 메서드를 실행 시키면 우리는 Hello Wrold라는 출력문을 볼 수 있습니다. 이것은 메인 쓰레드가 위의 코드를 실행시키면서 출력된 것입니다. 이렇게 단일 스레드로도 충분히 애플리케이션을 실행시킬 수 있는데 멀티 스레드는 왜 사용할까요? 멀티 스레드의 사용 이유 멀티스레드의 사용이유에는 크게 두 가지를 생각할 수 있습니다. 병행성 성능 .. Java/Thread 2023. 11. 7. 제어할수 없는 것에 의존하지 않기(테스트하기 좋은 코드) https://www.youtube.com/watch?v=DJCmvzhFVOI 위의 세미나를 유튜브로 시청한뒤 회사에서 마침 적용한 부분이 있어서 사례를 작성해 보려고 합니다. 1. 투표 기능 2. 외부 API 연동 1. 특정 날짜에 의존하지 않기 (투표 기능) 어느날 투표 기능을 할 수 있는 API를 추가해야 된다고 했을때 다음과 같은 요구 사항이 있다고 가정하겠습니다. 1. 해당 투표는 특정한 요일에만 정상 작동 되어야 한다. 그러면 다음과 같이 코드를 작성할 수 있습니다. 기존 코드 public class VoteService { public String vote() { LocalDateTime now = LocalDateTime.now(); if (now.getDayOfWeek() == DayOf.. Spring Boot 2023. 11. 5. [docker] 컨테이너 오케스트레이션 docker swarm cluster Docker swarm mode Docker swarm은 도커 컨테이너를 위한 분산 환경 클러스터링 및 스케줄링 도구다. Docker는 단일 호스트, Docker swram mode는 다중 호스트 기반의 컨테이너 기반 애플리케이션 관리 도구다. -> Orchestration tools 여러 대의 노드 기반의 클러스터를 구축하여 별도의 추가 비용 없이 swarn mode를 초기화하여 사용한다. 기본적으로 도커는 오케스트레이션 기능을 탑재하고 있습니다. 위와 같이 docker info 명령어를 통해 Swram이 inactive 상태로 사용하지 않고 있습니다. 이것을 init을 통해 active 상태로 바꿀 수 있습니다. Docker swarm mode 주요 기능 Docker 엔진과 통합된 multi host.. docker 2023. 10. 29. [docker] Docker compose를 사용해보자 docker compose는 쿠버네티스와 같이 컨테이너 오케스트레이션 및 컨테이너화된 애플리케이션에 사용되는 도구입니다. 지금까지 도커 CLI를 통해 실행시키는 컨테이너는 단일 컨테이너 서비스였습니다. 도커 컴포즈는 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구이고 특이점은 yaml 파일을 사용하여 애플리케이션을 수행한다는 것입니다.-> 선언적 구성 이후에는 docker compose CLI를 통해 서비스의 라이프 사이클을 관리합니다. Docker compose 기본적으로 도커 컴포즈는 응집력 있는 애플리케이션으로 함께 작동하는 여러 컨테이너를 실행하려는 로컬 개발 및 테스트 환경을 위해 설계된 도구입니다. 여기서 응집력있는 애플리케이션은 하나의 웹 애플리케이션을 생성하는 3-Tier 환.. docker 2023. 10. 28. [Docker] Dockerfile IaC(Infrastructure as Code)가 필요한 이유 IaC(Infrastructure as Code) 코드형 인프라가 필요한 이유는 커맨드 기반의 인프라 구성시 사용자 실수 등의 인적 오류 가능성이 높다. 각종 환결 설정 정보와 설치 프로그램을 요구사항에 맞게 따져야 하며 설치 이후에도 잘못된 부분이 있다면 수정해야하고 재설치도 불가피하다. 이러한 수고로움을 하나의 이미지로 만들어 두고, 수정사항은 언제든 코드 변경이 용이하다면 개발 업무에만 집중할 수 있다. "코드형 인프라"는 탄력성, 확장성, 반복성을 부여하게 되어 눈송이 서버가 아닌 동일한 환경을 보유한 서버(컨테이너)를 수십~수백대를 운영, 관리하게 해준다. Dockerfile Dockerfile은 Docker에서 동작하는 컨테이너의.. docker 2023. 10. 26. [Docker] 컨테이너 리소스 모니터링 모니터링을 해야 하는 이유 모니터링은 시간의 흐름에 따른 시스템 및 여러 구성요소의 동작과 출력등을 관찰하고 확인하는 작업을 통해 자원의 효율적인 사용을 식별, 평가한다. 모니터링은 활용률 및 처리량 같은 Metric(지표)에 중점을 두고 시스템 전반의 성능을 알 수 있다. - 메모리 사용량 급증, 캐시 적중률 감소, CPU 사용량 증가 cadvisor google에서 제공하고 관리하는 오픈소스 컨테이너 모니터링 도구이다. Docker 컨테이너와 다른 컨테이너 플랫폼에도 기본적으로 지원 가능 HostOS에서 실행 중인 컨테이너에 대한 정보를 수집하고 해당 데이터를 처리한 후 내보내는 단일 컨테이너 데몬으로 구성 이전 리소스 사용량, 리소스 격리 매개 변수 및 각 컨테이너 머신 전체에 대한 네트워크 통계 .. docker 2023. 10. 24. [docker] Volume Volume 기술 이해 - Docker에서 제공하는 볼륨 기술은 컨테이너 애플리케이션에서 생성되고 사용되는 데이터를 유지, 보존하기 위한 메커니즘을 제공한다. 컨테이너가 삭제되어도 볼륨은 독립적으로 운영된다. - 볼륨은 Docker HostOS와 컨테이너에서 직접 접근 가능하다. - 일반적으로 컨테이너 내부의 데이터는 컨테이너의 생명주기와 연관되어 종료시 삭제되지만, 이를 지속적(persistent)으로 보존하기 위한 방법으로 volume 기술을 사용한다. 볼륨 방식은 3가지가 있다. bind mount, volume, tmpfs mount Bind Mount - Bind Mount 기법은 디렉터리 뿐만 아니라 파일 mount도 가능하다. " 호스트 파일 시스템 절대 경로" : "컨테이너 내부 경로" .. docker 2023. 10. 23. [Docker] Docker 로그인 방법 Dokcer 로그인하기 Docker에 로그인 하기 위한 방법에는 3가지가 있다. 기본적으로 https://hub.docker.com/ 에 회원 가입이 된 상태에서 진행된다. 1. 아이디와 비밀번호로 로그인 하기 터미널에서 docker login을 하면 Username과 Password를 입력하는 커멘드가 나온다. 올바른 Username, Password를 입력했다면 내 암호가 저장되어 있는 경로를 보여준다. /?/?/.docker/config.json 파일은 base64로 인코딩 되어 있다. 인코딩 : echo '비밀번호' | base64 디코딩 : echo '비밀번호' | base64 -d 로그아웃은 docker logout을 하면 된다. 2. 액세스 토큰으로 로그인하기 오른쪽위의 Account set.. docker 2023. 10. 21. 이전 1 2 3 4 5 ··· 13 다음