전체 글 182

[운영체제] Deadlock, 교착상태의 개념과 조건

교착상태(Deadlock)란? 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태. 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다. 교착상태 발생의 4가지 조건 교착상태가 발생하기 위해서는 다음의 네가지 조건이 충족되어야 하는데, 이 네가지 조건중 하나라도 충족되지 않으면 교착상태가 발생하지 않는다. 상-점-비-환 상호배제 : 자원은 한 번에 하나의 프로세스만 사용할 수 있어야 한다. 점유대기 : 이미 자원을 사용중인데, 다른 프로세스가 사용중인 자원을 사용하기 위해 대기하고 있는 상태의 프로세스가 존재해야 한다. 즉, 미리 줄 서있어야 한다. 비선점 : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다. 즉, 새치기 금지! 환형대기(순환대기) : 공유자원을 사용하기..

Computer Science 2022.02.28

[운영체제] CPU Scheduler, Scheduling Algorithm

CPU Scheduling 단기 스케쥴링이라고도 한다. 단기 스케쥴러(CPU Scheduling)을 리마인드 해보자 메모리와 CPU 사이의 스케쥴링을 담당하는 것으로 어떤 프로세스를 실행(Running) 상태로 전환할 지 결정하는 것이다. 선점과 비선점 선점 (Preemptive) : 자리 뺏기 가능, 누가 앉아서 먼저 자리에 앉아서 작업하고 있는데 그게 끝나든 안끝나든 상관없이 자리를 뺏어서 내 작업 실행하기 즉, 새치기 가능한 방식 비선점 (Non-Preemptive) : 절대 안뺏기는 방식 즉, 새치기 절대 불가능 CPU Scheduing Algorithm First-Come, First-Served (FCFS) 먼저 온 놈 먼저 처리 세상에서 가장 많이 사용 꼭 좋은 성능을 보장하는 것은 아님 C..

Computer Science 2022.02.27

[운영체제] Scheduler, 스케쥴러

스케쥴러란? 시스템이 실행하고자 할 때 CPU를 프로그램에게 할당하는 과정 프로세스(작업) 실행을 위한 일종의 계획표다. 계획표의 종류는 3가지이다. Scheduling Queue(스케쥴링 큐)란? 스케쥴링을 위한 큐. 즉, 프로세스를 관리하기 위한 큐 Job Queue (Batch Queue): 현재 시스템 내에 있는 모든 프로세스의 집합 Ready Queue : 현재 메모리 내에 존재하면서 CPU를 점유해서 실행되기를 기다리는 프로세스의 집합 Device Queue : Device I/O(Input, Output) 작업을 대기하고 있는 프로세스의 집합 스케쥴러의 종류 장기 스케쥴러, Job Scheduler *degree of multiprogramming의 제어 : degree of multipro..

Computer Science 2022.02.26

[TFAE] JAVA SE, EE, ME 차이가 뭐야?

자바면 자바지, SE는 뭐고 EE? 그리고 ME? 뭐지..라는 생각에 적어보는 오늘의 포스팅. 한 줄 요약 : 자바의 플랫폼 종류이고, 플랫폼 별(SE, EE, ME)로 사용하는 목적에 차이가 있다. 조금 더 자세히 알아보자. JAVA SE (Java Platform Standard Edition) 데스크톱, 서버, 임베디드시스템을 위한 표준 자바 플랫폼. 자바 가상머신 규격 및 API집합을 포함한다. JAVA EE,ME는 목적에 따라 SE를 기반으로 기존의 일부를 택하거나 API를 추가하여 구성된다. SE는 가장 일반적으로 사용된다. JDBC나 기본적인 기능이 모두 포함되어 있기 때문에 Android개발할때 주로 SE를 사용한다. JAVA EE (Java Platform EnterPrise Editio..

[TDD] 자바와 JUnit을 활용한 실용주의 단위 테스트 - 1

자바와 JUnit을 활용한 실용주의 단위 테스트 - YES24 『실용주의 프로그래머』의 앤디 헌트와 데이브 토마스가 알려주는실용주의 단위 테스트!클린 코드의 핵심인 단위 테스트, 어디서 어떻게 시작해야 할까? 책에서는 단위 테스트의 개념과 작성 www.yes24.com 책을 읽고, 코드를 리뷰하고 정리하기 위한 포스팅입니다. 왜 하는가? 근본적인 질문을 한 마디로 요약을 해보자면, 테스트 코드를 잘 만들 수 있어야 애플리케이션의 안정성을 확보할 수 있다. 예를 들어, 스프링 프로젝트에서 간단한 기능 하나를 추가했을 때 이 기능이 잘 동작하는지 일일이 톰캣 서버를 내렸다가 다시 켜고를 반복할 수는 없을 것이다. 그것도 규모가 조금 작은 프로젝트인 게시판, To-do list 만들기와 같은 환경에서나 통하는..

Programming/TDD 2022.02.21

[TFAE] 스프링부트 프로젝트 GitHub Action CI&CD연대기 - 2

[TFAE] 스프링부트 프로젝트 GitHub Action CI&CD연대기 - 1 현재의 상황 아일랜드에 거주하는 한국인 유학생들을 대상으로 한 거래 플랫폼을 제작중이다. 일명 아-거 . 열심히 코드를 작성하고, 이것 저것 테스트를 마치고 이제 세상에 선보여야 할 때가 supreme-ys.tistory.com 2편을 시작하기에 앞서서, 1편을 꼭 봐주시고 오시면 좋을 것 같네요! 지난 1편에서의 문제를 요약하자면 다음과 같다. - 깃헙에 application.properties, application.yml 파일을 업로드하면 안된다. - 그러면 파일을 제외하면 되잖아! - 그럼 빌드가 안되잖아. - 엌ㅋㅋ 미안 우리는 고민했다. 약 100시간이 넘는 시간동안. 고민했고, 많은 방법을 시도해보았다. 먼저, ..

[TFAE] 스프링부트 프로젝트 GitHub Action CI&CD연대기 - 1

현재의 상황 아일랜드에 거주하는 한국인 유학생들을 대상으로 한 거래 플랫폼을 제작중이다. 일명 아-거 . 열심히 코드를 작성하고, 이것 저것 테스트를 마치고 이제 세상에 선보여야 할 때가 왔다. 첫 번째 문제 만든 프로젝트가 세상에 나오려고 알을 깨려는데, 껍질이 꽤 두껍다. 배포가 잘 안되었다. 배포가 안되는 이유는 여러가지 이유가 있었다. 첫 째로, CI 도구의 선택이다. Jenkins, Travis, Circle CI 등등. 굉장히 많은 CI 도구들이 있었고, 어느 것을 선택해야 할지 몰랐다. 단 한 번도 써본적이 없었기 때문이다. 배포라고 해봤자, EC2에 Github Repository에서 가져온 다음 EC2 환경에서 빌드하는 수준? 딱 그 정도 였다. 물론, 이 것도 당시에는 굉장한 큰 기쁨으..

[Docker] 도커(Docker)란 무엇인가

개념적으로 정리를 한 번 해놓으면 앞으로 사용하는데 있어서 도움이 될 것 같아서 남기는 포스팅입니다. 이 글을 초보를 위한 도커 안내서 글을 참고하여 작성한 글입니다. 먼저, 도커란 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 단어를 하나씩 살펴보자, 먼저 컨테이너는 위에 그림에서 직관적으로 느낄 수 있는 그 느낌과 같다고 보면된다. 무언가가 담겨있는? 혹은 담을 수 있는 공간이다. 그렇다면 오픈 소스는 무엇인가, 오픈 소스는 말 그대로 공개되어 있어서 누구나 사용할 수 있는 것이다. 다음으로 가상화이다. 가상화는 실제 환경이 아닌 가상의 환경으로 만드는 것이다. 플랫폼은 실행가능한 무언가로 간단하게 정리를 해볼 수 있다. 한 줄로 풀어서 정리를 해보면, 가상의 환경을 만들어 컨테이너에 담아 실행가능한 ..

Note 2022.02.08

[Spring] BeanDefinition

[Spring] 스프링 빈 조회 스프링 빈을 조회하는 다양한 방법에 대해 코드로 살펴보자. * BeanFactory BeanFactory는 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 메서드를 제 supreme-ys.tistory.com 이 전 포스팅에 대한 답에 대한 포스팅이다. 스프링은 xml이나 annotation을 통해 빈을 등록할 수 있다. 빈을 등록할 때 스프링은 어떤 구조로 되어있길래 종류에 상관없이 빈을 등록할 수 있는지가 질문이었다. 그에 대한 답은 BeanDefinition에서 찾을 수 있다. BeanDefinition은 추상화이다. 역할과 구현을 개념적으로 나눈 것인데, BeanDefinition은 Xml을 읽거나, 자바 코드를..

Programming/Spring 2022.02.07

[Spring] 스프링 빈 조회

스프링 빈을 조회하는 다양한 방법에 대해 코드로 살펴보자. * BeanFactory BeanFactory는 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 메서드를 제공한다. * ApplicationContext BeanFactory의 기능을 모두 상속받아서 사용한다. ApplicationContext가 BeanFactory를 상속받아서 사용한다면 그 둘의 차이에 대해 알아보자. ApplicationContext는 BeanFactory에서 제공하는 빈 관리, 조회 기능 뿐만 아니라 어플리케이션 개발에 필요한 부가 기능들을 제공한다. -> 국제화 기능, 환경 변수, 이벤트, 리소스 조회 등등! 즉, ApplicationContext = BeanFacto..

Programming/Spring 2022.02.07