본문 바로가기

전체 글39

[데이터베이스] 데이터베이스 정규화 - Database Normalization 프로젝트의 데이터를 저장하기 위해 관계형 데이터베이스를 설계해야 할 때면 항상 나오는 정규화(Normalization). 정규화를 왜 해야하는 지는 위키백과를 보면 알 수 있다. 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. 정규화의 의의는 데이터의 불필요한 중복을 없애고, 잘 조직된 관계를 구성하는 데에 있다. 정규화의 단계는 1NF, 2NF, 3NF, BCNF, 4NF, 5NF.. 등등이 있으며, 숫자가 올라갈 수록 잘 정규화 되었다고 볼 수 있다. 1NF - First Normal Form 제 1 정규화는 이러한 규칙을 .. 2020. 9. 19.
[프로그래밍] TDD - Test Driven Development 프로젝트를 개발할 때, 여러가지 개발 방법론이 있다. 에자일, 폭포수, TDD 등등... 요즘은 TDD 방법론을 많이 쓴다고 들었다. 나도 인프런을 통해서 스프링 부트 강의를 들을 때, 기능을 하나 개발하고, 테스트 코드를 작성, 테스트를 수행하는 구조의 과정이 있었는데 지금와서 생각해보니 딱 TDD.... 왜 테스트 주도 개발이 나왔냐고 하니, 소프트웨어 개발은 너무 유동적이고, 요구 사항 또한 계속 바뀌고, 프로젝트 자체가 하나의 거대한 작업이 되어버리면서 소프트웨어 위기(Software Crisis)에 봉착하는 경우가 많다고 한다. TDD(Test Driven Development) - 테스트 주도 개발은 3가지 과정이 담겨 있고, 이 과정은 짧은 사이클을 반복하면서 나아간다. 먼저 어떤 기능에 대.. 2020. 9. 18.
[OS] CPU 스케쥴링 CPU 스케쥴링은 무엇일까? CPU 스케쥴링은 한정된 자원으로 최대한의 효율을 내기 위해 사용하는 기법이다. 대부분의 경우 I/O 작업이나, 입력 장치, 출력 장치의 작업 수행이 이루어질 때, CPU는 아이들 상태에 놓이게 된다. 스케쥴링은 낭비되는 자원을 좀 더 효율적으로 사용하기 위해 쓰는 방법. 또한 단일 CPU의 경우, 한 가지의 일을 한번에 밖에 처리하지 못하지만 우리는 노래도 들으면서 웹서핑까지 동시에 할 수 있다. 이런일이 가능한 것은, 스케쥴링 덕분이다. 현재의 운영체제들은 이러한 이론을 기반으로 프로세스 스케줄링(Process Scheduling)을 적용하고 있다. 스케줄링 상태 스케줄링은 크게 5가지의 상태를 가진다. 생성(create) : 프로세스가 생성되는 중이다. 실행(runnin.. 2020. 9. 18.
[OS] 데드락 - Deadlock 데드락 하면 교통체증을 떠올린다. 서로의 차들은 먼저 가고 싶어하고, 그럴수록 차로는 지체돼, 아무것도 할 수 없게 되는 것이다. 정확히 말하면, 그림과 같이 4거리에서 각자의 교통체증이 해결될 때까지 기다리기만 하는 상태이다. 더 자세한 정의를 보면, 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 가리킨다. 결국 작업은 자동차고, 도로는 리소스, 그리고 이러한 교통 체증이 교착 상태, 즉 데드락(Deadlock)이 되는 것이다. 작업을 수행해야 하는 프로세스가 계속 대기 상태에만 머무는 것이다. 이러한 데드락 문제는 다중 프로세스 환경에서 발생하며 최대한 예방을 하더라도 교착 상태는 발생하게 된다. 교착 상태에 운영체제가 포함 되.. 2020. 9. 18.