본문 바로가기
메모/ETC

TDD, 프로세스/쓰레드

by 구너드 2023. 9. 25.

TDD

 

테스트 주도 개발.

 

소프트웨어 개발 방법론 중의 하나로, 개발자가 테스트 코드를 먼저 작성하고 이 테스트 코드를 통과시키는 최소한의 코드를 구현하는 과정을 반복하여 소프트웨어를 개발하는 방식.

 

TDD의 주요 단계 테스트 작성 단계

 

Red :아직 구현되지 않은 기능에 대한 테스트를 작성. 해당 기능의 요구사항을 정확히 이해. 테스트는 통과를 기대하는 동작을 명시적으로 기술.테스트는 아직 구현되지 않은 기능이기 때문에 현재는 실패

 

(구현단계)Green : 테스트 코드가 작성되었으니, 이제 해당 테스트를 통과할 만한 최소한의 코드를 구현. 테스트를 통과하는 코드를 작성한 후, 코드가 제대로 동작하는지 확인. 테스트가 통과되면 이 단계는 끝나며, 이때까지의 코드 변경사항은 최소한의 코드만 작성된 상태.

 

(리팩토링 단계) Refactor : 테스트가 성공적으로 통과된 코드를 개선하고, 중복 코드를 제거하고, 가독성을 높이는 등의 리팩토링 수행. 항상 테스트를 수행하여 기능이 올바르게 작동하는지 확인. 테스트가 실패하지 않는 한, 얼마든지 리팩토링을 반복. 이러한 단계를 반복하여 개발을 진행하면서, 코드 품질이 높아지고 버그를 빠르게 발견하고 수정. 또한, 테스트 코드가 있으므로 변경사항이 기존 기능에 영향을 미치는지 쉽게 확인할 수 있고, 새로운 기능 추가에도 기존 기능들이 영향을 받는지 빠르게 인지. 이로 인해 코드 유지보수 비용을 줄이고 안정성이 높은 소프트웨어를 구축하는 데 도움.


프로세스와 쓰레드


프로세스는 컴퓨터에서 실행 중인 프로그램을 의미. 각 프로세스는 독립된 메모리 공간을 가지고 있어서 서로 간섭 X. 

즉, 프로세스 A에서 변수 x에 접근하더라도, 프로세스 B에서는 그 영향을 받지 않음.

따라서 프로세스 간에는 데이터를 주고 받기 위해서는 별도의 통신 매커니즘 (예: 파이프, 파일, 네트워크 등)을 사용해야하는데, 이로 인해 프로세스 간 통신 비용이 비교적 높음.

 

스레드는 프로세스 내에서 실행되는 작은 실행 단위.

한 프로세스 내의 스레드들은 같은 메모리 공간을 공유. 따라서 스레드 간에는 더 쉬운 데이터 교환. 이는 스레드 간 통신 비용이 낮다는 것을 의미.

결국, 스레드를 사용하면 프로세스에 비해 더 효율적으로 데이터를 공유하고 통신이 가능. 그러나 스레드를 다룰 때에는 동기화(Synchronization)와 관련된 문제에 주의. 동시에 여러 스레드가 같은 자원에 접근할 때 데이터 무결성을 유지하기 위한 조치가 필요.

 

 

멀티 스레드

하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것.

 

장점

시스템 리소스 낭비가 감소하여 자원을 할당하는 시스템 콜이 줄어들고 이로 인해 자원을 효율적인 관리

시스템 처리율이 향상되어 스레드 간 데이터를 주고 받는 것이 단순화.

스레드 사이 작업량이 작아 Context Switching이 빠름 (캐시 메모리를 비울 필요가 없음.)

간단한 통신 방법으로 프로그램 응답시간 단축.

스레드는 프로세스 내 스택영역을 제외한 메모리 영역을 공유하기에 통신 비용이 적게 데이터 교환.

 

문제점

자원을 공유하기에 동기화와 관련된 문제가 발생할 수 있기 때문에(병목현상, 데드락 등) 주의 깊은 설계가 필요하고 이에 따른 디버깅의 어려움.

하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받으며 단일 프로세스 시스템의 경우 멀티 스레딩의 효과를 기대하기 어려움.

 

 

멀티 프로세스

두 개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것으로, 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용.

 

장점

독립된 구조로 안전성이 높고 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업속도가 느려지는 손해정도는 생기지만 정지되거나 하는 문제는 발생 X.

여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴.

 

문제점

독립된 메모리 영역이기 때문에 작업량이 많을수록 Context Switching이 자주 일어나서 오버헤드가 발생하고 이에 따른 성능저하로 이어질 수 있음 (Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생.)

 

Context Switching

CPU는 한번에 하나의 프로세스만 실행 가능하고 CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정.

구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업.

두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용

'메모 > ETC' 카테고리의 다른 글

CS - 메모리  (1) 2023.10.23
CS - CPU, Scheduling  (1) 2023.10.21
CS - CPU와 메모리  (0) 2023.10.20
Entity, Dto, Vo  (0) 2023.08.10
클러스터, 클러스터링  (2) 2023.08.08