https://school.programmers.co.kr/learn/courses/30/lessons/176962?language=python3 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 하..문제 잘못이해해서 몇시간을 날렸다.예제테케는 모두 통과해서....뭘 잘못한건지 한참을 고민했다.대체뭐가틀린거지!?!?!너무 억울해서ㅜ기록을 남겨보려한다.처음 푼 코드는 아래와같다.from collections import dequedef solution(plans): answer = [] tmp = [] idx=0 for name, start..
⬛ Lock ConditionReentrantLock과 Condition을 사용하여 생산자와 소비자가 서로 독립적인 대기 집합을 사용하도록 분리한다. 이는 효율적인 대기를 가능하게 하여 불필요한 스레드 깨어남을 방지한다. ReentrantLock 은 내부에 락과, 락 획득을 대기하는 스레드를 관리하는 대기 큐가 있다.condition.await(): Object.wait()와 유사하며, 현재 스레드를 대기 상태로 보관하면서 ReentrantLock에서 획득한 락을 반납한다.condition.signal(): Object.notify()와 유사하며, 대기 중인 스레드 하나를 깨워 대기 상태에서 빠져나오게 한다. 기존 코드를 ReentrantLock과 Condition을 사용하도록 바꾸면 아래와 같다. 🔶..
본 섹션은 쿠버네티스가 실무에 꼭 필요한 이유에 대해 다룬다.또한 직접 실습해보며 쿠버네티스의 장점을 알아본다.◼️ 쿠버네티스 선택 기준쿠버네티스 생태계는 끝이없다.따라서, 쿠버네티스 생태계에서 함께 사용하는 앱들 중, 어떤 것을 포함하고 제외할지 결정하는 과정이 필요하다. 🟢 제외 기준쿠버 관련 교육 파트너 업체는 제외.카오스 엔지니어링은 핵심 영역이 아니므로 제외.CNCF 멤버 여부는 제품의 품질과는 무관하므로 비멤버라도 영향력 있는 제품이 존재.Graduated: 성숙한 프로젝트.Incubating: 성숙해가는 프로젝트.Archived: 비활성화되어 기술 지원이 없는 프로젝트는 제외.SandBox: 실험 단계의 프로젝트는 제외.그 중에서 Github Star가 적은 Graduated 프로젝트는 제..
◼️ 쿠버네티스 무게감 있게 설치하기🟢 컨테이너기반 App 배포 과정컨테이너 빌드자바 애플리케이션(jar 파일)을 실행하기 위한 Docker 이미지를 만듦.컨테이너 OpenJDK 이미지 다운로드DockerHub에서 OpenJDK 이미지를 다운로드해 자바 환경을 준비.이미지 업로드빌드된 Docker 이미지를 DockerHub에 업로드해 다른 서버에서도 사용할 수 있게 준비.Jenkins에서 pod 생성 요청Jenkins가 Kubernetes에 pod(컨테이너 실행 단위)를 생성해달라고 요청하고, 그 요청에 이미지 주소를 첨부.Kubernetes에서 이미지 다운로드Kubernetes는 이미지 주소를 통해 DockerHub에서 이미지를 다운로드.컨테이너 실행Kubernetes는 다운로드한 이미지를 사용해 c..
◼️ 리눅스 흐름으로 이해하는 컨테이너🟢 정리주로 사용하는 리눅스에는 Debian과 RedHat 계열이 있다.쿠버네티스 설치도 크게 이 두 가지 계열을 지원한다.RedHat 계열의 하나인 CentOS는 곧 종료가 된다(됐다).Rocky Linux는 CentOS의 대체재 중 하나다.결론: Rocky Linux는 쿠버네티스 설치할 때 Redhat 계열을 보면 된다. 🟢 컨테이너 오케스트레이션App을 컨테이너에 담아서 배포한다.시스템 운영 노하우를 많이 가지고 있다.⚪️ 정리Kubernetes는 현재 표준을 넘어 여러 분야에서 활용되고 있다.Kubernetes는 컨테이너를 더 쉽게 사용 할 수 있게 해준다.컨테이너는 Kubernetes와의 인터페이스가 중요하다.◼️ 쿠버네티스 흐름으로 이해하는 컨테이너?..
⬛ 동시성 컬렉션이 필요한 이유원자적 연산; 여러 스레드가 동시에 접근해도 안전하다.그럼 아래에서 add(..) 는 원자적 연산일까?public class SimpleListMainV0 { public static void main(String[] args) { List list = new ArrayList(); // 스레드1, 스레드2가 동시에 실행 가정 list.add("A"); //스레드1 실행 가정 list.add("B"); // 스레드2 실행 가정 System.out.println(list); }} 위의 add(...)를 자세히 들여다보고, 다시 질문에 대답해보자. 아래는 원자적 연산인가?public void add(Object e) { elementData[size] = e; ..
⬛ 생산자 소비자 문제🟢 생상자 소비자 문제 (producer-consumer problem)생산자 스레드와 소비자 스레드가 특정 자원을 함께 생산하고, 소비하면서 발생하는 문제 🟢 주요 개념생산자(Producer): 데이터를 생성하는 스레드로, 예를 들어 파일에서 데이터를 읽거나 네트워크에서 데이터를 받아오는 역할소비자(Consumer): 생산된 데이터를 사용하는 스레드로, 데이터를 처리하거나 저장하는 역할버퍼(Buffer): 생산자가 생성한 데이터를 임시로 저장하는 공간으로, 크기가 한정되어 있으며 생산자와 소비자가 이 공간을 통해 데이터를 주고받음⬛ 예제1 - 기본적 생산자 소비자 문제구현:BoundedQueueV1이라는 한정된 버퍼를 사용 버퍼에 데이터가 가득 차거나 비어 있을 때, 특별한 처..
⬜ 섹션2 스프링 부트 소개◼️ 스프링 프레임워크 등장 배경스프링 프레임워크는 2000년대 초반에 자바(Java) 개발자들이 경험한 문제들을 해결하기 위해 등장했다.1. 복잡한 엔터프라이즈 자바 개발 (EJB 문제) 🥵2000년대 초반, 자바로 대규모 기업 애플리케이션을 개발할 때 주로 EJB(Enterprise JavaBeans)기술을 사용했다. 하지만, EJB는 너무 복잡하고 사용하기 어려운 부분이 많았다.개발자들은 많은 설정과 복잡한 코드를 작성해야 했기 때문에 시간이 많이 걸리고 오류 발생 가능성이 높았습니다.2. 더 쉬운 방법에 대한 요구 🤨개발자들은 복잡한 EJB 대신, 더 간단하고 효율적인 방법으로 애플리케이션을 개발하고자 했다. 특히, 자바의 장점을 살리면서도 코드가 깔끔하고 유지보수가..
⬛ LockSupport🟢 synchronized 단점무한 대기: BLOCKED상태는 락이 풀릴 때까지 무한대기공정성: 락획득 랜덤.특정 스레드가 너무 오랜기간 락획득 못할수도 있다. 🟢 LockSupport 기능park(): 스레드를 WAITING 상태로 변경unpark(): 스레드를 WAITING → RUNNABLE 상태로 변경public class LockSupportMainV1 { public static void main(String[] args) { Thread thread1 = new Thread(new ParkTask(),"Thread-1"); thread1.start(); //잠시 대기하여 Thread-1이 park상태에 빠질 시간을 준다. ..
https://www.acmicpc.net/problem/2357 이 문제에서 주의할점트리 초기화때 minTree,maxTree전체를 무한대 초기화함에 주의하자.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { static int N, M, K, treeSize; static int[] minTree; static int[] maxTree; public static void main(String[] args) throws IOException { BufferedRead..