본문 바로가기

728x90

전체 보기

(111)
[실전 Java 고급 1편] - 5. Executor Framework 에 대하여 Thread Pool 과 Executor Framework 1. 스레드를 정말 직접 생성하며 사용할까? 스레드를 직접 생성하는 것은 자주 발생하진 않는다. 스레드는 단순 자바 객체를 생성하는 것과는 비교할 수 없는 매우 큰 작업이기 때문이다. 메모리 할당 → 물리 메모리 내에서 자신이 사용할 스택 공간 생성이 필요운영체제 자원 사용 → 스레드 생성은 커널 영역에서 이루어진다. 시스템 콜을 통해 처리되며 CPU 및 메모리 소모율이 높다운영체제 스케줄러 설정 → 운영체제가 관리할 스레드가 증가하며 순서 조정이 필요하다 만약 단순한 작업이라면, 오히려 스레드를 준비하는 과정이 더 커서 배보다 배꼽이 더 큰 상황일 수도 있다. 또한, 서버의 CPU 및 메모리는 한정되어 있기 때문에, 요청 당 스레드 할당..
[문제기록] K3s 에서 Airflow 사용 중 Iptables 규칙 과부하로 인한 통신 불가 문제 알아둬야 할 사전 지식  (1) iptables 란  네트워크 담당 직무인 개발자 분들이라면 직접 관리까지 하시겠지만, 앱 개발자로서는 낯설 수 있어 간단히만 짚고 넘어가려 한다. 리눅스 계열 OS 에서 사용하는 방화벽 프로그램이라고 보면 된다. iptables 는 요청 단위가 아닌 개별 패킷 단위로 머신에 적용된 규칙을 확인하고 적용한다. 다음 예시를 살펴보자.  $ sudo iptables -L -n --line numbers  # iptable 에 적용된 규칙들 확인...Chain FORWARD (policy DROP)num target prot opt source destination 1 DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0 2 DOCKER-ISOLATION-STA..
[실전 Java 고급 1편] - 4. CAS와 동시성 컬렉션 CAS, 동기화와 원자적 연산 1. 원자적 연산에 대하여 CS에서 원자적 연산이라 함은, 해당 연산이 더 이상 나눌 수 없는 단위로 수행된다는 것을 의미하며, 중단되지 않고 간섭 없이 완전히 실행되거나 전혀 실행되지 않는 연산이다. 즉, 다른 스레드의 간섭 없이 안전하게 처리되는 연산이라는 뜻이다. 가령, i = 1 은 둘로 쪼갤 수 없는 원자적 연산이다. 하지만, i = i+1 은 원자적 연산이 아니라, i 값을 읽고, 1을 더하고, 더한 값을 i에 대입하는 세가지 순서로 나뉘어진다. 이 모든 것은 CPU 입장에서이다! 원자적 연산이 아닌데 멀티 스레딩이 적용되는 상황에서 우리가 동기화 처리를 해왔던 것이다. 다음 상황을 살펴보자 public class V1BasicInteger implement..
[실전 Java 고급 1편] - 3. 생산자 소비자 문제 (BlockingQueue 만들기까지) 생산자 소비자 문제 1 - Synchronized 심화 1. 소개 생산자 소비자 문제는 멀티 스레딩 세계에서 자주 등장하는 동시성 문제이다. 데이터 생산/소비하는 스레드가 동시에 많을 상황을 다룬다. 생산자는 데이터를 생산하는 스레드들을(파일에서 읽어오거나, 네트워크에서 받아옴) 말하고, 소비자는 이를 출력하거나, 저장하거나, Message Queue 로 활용하는 등 데이터를 소모하는 역할이다. 마지막으로 버퍼는 한정된 크기를 가지고, 데이터가 일시적으로 저장되는 공간이다. 생산자/소비자는 이 버퍼를 중심으로 데이터를 주고 받는다. 문제는 생산/소비 속도가 차이가 심해서, 한 쪽이 대기하는 상황에서 발생한다. 데이터가 생산 속도가 더 빠르면 버퍼에 더 이상 공간이 없으므로, 생산자 스레드는 대..
[실전 Java 고급 1편] - 2. 메모리 가시성과 동기화 메모리 가시성  1. Volatile 에 대하여  public static void main(String[] args) { MyTask task = new MyTask(); Thread t = new Thread(task, "work"); log("runFlag = " + task.runFlag); // 시작은 당연히 True t.start(); ThreadUtils.sleep(1000); log("runFlag를 False 로 변경 시도 : work Thread 중지 예상"); task.runFlag = false; log("실제 runFlag 값 = " + task.runFlag); // main 스레드에서 조회시 False 로 출력됨 (내가 ..
[실전 Java 고급 1편] - 1. Thread 의 제어 프로세스와 스레드 개요  1. 멀티태스킹과 멀티 프로세싱  * 멀티태스킹 - 하나의 CPU 코어가 Time Sharing 기법을 사용하여 동시에 여러 작업을 수행하는 능력* 스케줄링 - CPU 코어에 어떤 프로그램이 얼만큼 실행될지 결정하는 것, 운영체제가 여러가지 최적화를 사용* 멀티프로세싱 - CPU 코어가 둘 이상일 때, 한 컴퓨터 시스템에서 여러 작업을 동시에 처리하는 것  멀티프로세싱은 하드웨어 장비의 관점으로, HW 기반 성능 향상을 말한다. 멀티태스킹은 단일 CPU 코어가 여러 작업을 동시에 수행하는 것처럼 보이게 하는 것으로, SW 기반의 작업이다.   2. 프로세스와 스레드    프로그램은 실행하기 전까지 단순 파일이고, 실행되는 순간 운영체제 안에서 인스턴스가 되며 실행중인 프로그램을 ..
[AWS] Certified Developer - Associate (DVA-C02) 자격증 후기 SQLD 이후로 약 1년만에 또다른 자격증 시험을 보게 되었다. 시험 준비하면서 많은 후기들을 봤지만 대부분 짧게 준비한 것 같다. 나는 블로그 정리한걸 보면 알겠지만 Udemy 강의는 거의 작년 내내 들은 것 같다... 시험 등록하고 본격적으로 Udemy 강의 복습 및 기출 풀이는 3주 정도 한 것 같다. 회사가 여유로운 때라서 정말 다행이였다..  1. 공부  방법  뭐 나도 다른 블로그들과 크게 다를바 없이 공부한 것 같다. 애초에 공부 시작할 때 많은 블로거분들이 뚫어놔주신 길대로 공부했기 때문에...  (1) Udemy 강의 완강 (https://www.udemy.com/course/best-aws-certified-developer-associate/) (⭐)- 제일 오래걸렸다.. 거의 작년 ..
[PV, VG, LV] LV 분할하여 Ubuntu /var 용량 확장하기 프로젝트에서 mongodb 를 사용하던 중, Data Insert 시에 DB 가 down 되는 상황이 발생해서, 로그를 확인해보니 다음과 같았다.   {"s":"F",  "c":"CONTROL",  "id":6384300, "ctx":"ftdc","msg":"Writing fatal message","attr":{"message":"terminate() called. An exception is active; attempting to gather more information\n"}}{"s":"F",  "c":"CONTROL",  "id":6384300, "ctx":"ftdc","msg":"Writing fatal message","attr":{"message":"DBException::toString(..
[CDA] 섹션 30 - AWS 보안 및 암호화 : KMS, SSM Param 스토어 > 시험에서 보안문제 많이 물어봄> 지금까지 종종 나왔지만, 정확하게 이해가 필요함 - KMS , Param Store 등등> 기본적으로 보내기 전에 encrypt 를 하고, 받을 때 decrypt 를 하는 것임> Encryption 을 진행할 때 TLS Certificate (인증서) 가 사용된다 - https 프로토콜을 사용할 때 적용된다> 하는 이유 : 네트워크를 통해 (종종 public network 를 통해) 여러 서버들을 왔다 갔다 하는데, 중간에 공격을 받을 수 있기 때문 - MITM (man in the middle attack)>> 서버로 전송 중인 packet 을 관찰하는 것! 보안화가 필요한 이유>> SSL 을 적용하는 것은 수신하는 서버만이 Client 가 보내는 Data 를 Dec..
[CDA] 섹션 27 - 유저가 누군지 알아보는 Cognito > User 에게 Identitiy (자격 증명) 를 부여, 웹 앱과 상호작용할 수 있도록 함> AWS 계정 외부에서 접근 (일반 유저) 하기 때문에 우리가 모르는 사람들임. > 두가지 기능으로 정리된다 > User Pool>> 사용자들에 대한 로그인 Sign In 기능을 제공>> API Gateway / ALB 와의 Integration 이 매우 유용 > Cognito Identity Pool (Federated Identity)>> 외부 유저들에게 AWS 리소스에 직접 접근할 수 있도록 일시적인 AWS Credential 을 제공하는 것 > Cognito 는 IAM 과는 다르게 외부의 유저들을 인지하기 위한 것으로, Keyword 로는 "수많은 유저", "모바일 유저", "SAML 인증" 등등이 있다..