block / non-block / sync / async
제어권 - 함수의 자신(코드)를 실행할 권리 같은 것
- 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다.
결과값을 기다린다는 것
- A함수에서 B함수를 호출했을 때, A함수가 B함수의 결과값을 기다리느냐의 여부를 의미한다.
Blocking(블로킹) Non-blocking(넌블로킹)
A함수가 B함수를 호출했을 때, 제어권을 어떻게 처리하느냐에 따라 달라진다.
1) 블로킹
A함수가 B함수를 호출하면, 제어권을 A가 호출한 B함수에 넘겨준다.
1. A함수가 B함수를 호출하면 B에게 제어권을 넘긴다.
2. 제어권을 넘겨받은 B는 열심히 함수를 실행한다.
A는 B에게 제어권을 넘겨주었기에 함수 실행을 잠시 멈춘다.
3. B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.
2) 논블로킹
A함수가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.
1. A함수가 B함수를 호출하면, B함수는 실행되지만, 제어권은 A함수가 그대로 가지고 있는다.
2. A함수는 계속 제어권을 가지고 있기 때문에 b함수를 호출한 이후에도 자신의 코드를 계속 실행한다.
Synchronous(동기)와 Asynchronous(비동기)
호출되는 함수의 작업 완료 여부를 신경쓰는지의 차이이다.
1) 동기
함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴값을 계속 확인하면서 신경쓰는 것이 동기이다.
2) 비동기
함수 A가 함수 B를 호출할 때, 콜백함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행한다.
함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다.
Sync-Blocking
함수 A는 함수 B의 리턴값을 필요로 한다(동기).
그래서 제어권을 함수 B에게 넘겨주고,
함수 B가 실행을 완료하여 리턴값과 제어권을 돌려줄때까지 기다린다(블로킹).
Sync-Nonblocking
A 함수는 B 함수를 호출한다. 이 때 A 함수는 B 함수에게 제어권을 주지 않고, 자신의 코드를 계속 실행한다(논블로킹).
그런데 A 함수는 B 함수의 리턴값이 필요하기 때문에, 중간중간 B 함수에게 함수 실행을 완료했는지 물어본다(동기).
즉, 논블로킹인 동시에 동기인 것이다.
Async-Nonblocking
A 함수는 B 함수를 호출한다.
이 때 제어권을 B 함수에 주지 않고, 자신이 계속 가지고 있는다(논블로킹). 따라서 B 함수를 호출한 이후에도 멈추지 않고 자신의 코드를 계속 실행한다.
그리고 B 함수를 호출할 때 콜백함수를 함께 준다. B 함수는 자신의 작업이 끝나면 A 함수가 준 콜백 함수를 실행한다(비동기).
Async-blocking
Async-blocking의 경우는 사실 잘 마주하기 쉽지 않다.
A 함수는 B 함수의 리턴값에 신경쓰지 않고, 콜백함수를 보낸다(비동기).
그런데, B 함수의 작업에 관심없음에도 불구하고, A 함수는 B 함수에게 제어권을 넘긴다(블로킹).
따라서, A 함수는 자신과 관련 없는 B 함수의 작업이 끝날 때까지 기다려야 한다.
I/O란?
I/O는 입력(Input)/출력(Output)의 약자로, 컴퓨터 및 주변장치에 대하여 데이터를 전송하는 프로그램, 운영 혹은 장치를 일컫는 말이다.
파일 읽기/쓰기와 같은 파일 시스템 처리와 데이터베이스로 데이터를 전송/조회하는 일과 같은 네트워크를 통한 요청이 이에 속한다.
Microsoft Azure SQL 데이터베이스
Microsoft Azure 의 일부로 제공 되는 관리형 클라우드 데이터베이스( PaaS ) 입니다.
SSMS
SQL Server에서 Azure SQL Database까지 모든 SQL 인프라를 관리하기 위한 통합 환경입니다.
SSMS는 SQL Server 및 데이터베이스의 인스턴스를 구성, 모니터링 및 관리하는 도구를 제공합니다.
NSSM
서버가 뻗거나 서버의 장애문제로 종료된 프로그램을 다시 실행시켜야 할때 NGNIX의 경우 서버를 재부팅하고,
또 다시 실행해야 하는 번거로움이 생겨 윈도우 서비스에 등록을 시켜 서버가 재부팅시 자동 재 실행을 시켜 좀더 스마트하게 일할수있는 방법에 대해서 공유하고자 합니다
기본적으로 NGNIX는 윈도우의 서비스에 해당되지않아 난감한데요,
이때 사용하는건 NSSM에서 지원하는 프로그램을 통해 서비스에 올려 자동으로 실행시킬수 있도록 지원합니다.
NGNIX(엔진X)
웹서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹서버, 리버스 프록시 및 메일 프록시 기능을 가진다.
2017년 10월 기준으로 실질적 사용되는 웹 서버 소프트웨어 순위 1. 아파치(44.89%), 엔진엑스(20.65%), 구글 웹 서버(7.86%), 마이크로소프트 IIS(7.32%)
2017년 6월 Nginx는 대한민국의 전체 등록 도메인 중 24.73%에서 사용되고 있다.
Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다.
이것은 아파치 HTTP 서버의 스레드/프로세스 기반 구조를 가지는 것과는 대조적이다.
이러한 구조는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해준다.
Proxy Server(프록시 서버)
클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용프로그램을 가리킨다.
서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 프록시,
그 중계 기능을 하는 것을 프록시 서버라고 부른다.
CLIENT(브라우저) > WEB SERVER(아파치) > WAS(SPRING) > DB(SQL)
CLIENT(브라우저) < WEB SERVER(아파치) < WAS(SPRING) < DB(SQL)
TDD(Test Driven Development) 테스트 주도 개발
반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.
짧은 개발 주기의 반복에 의존하는 개발 프로세스이며, 애자일 방법론 중 하나인 eXtream Programming(XP)의 'Test-First'개념에 기반을 둔 단순한 설계를 중요시한다.
이 기법을 개발했거나 '재발견'한 것으로 인정되는 Kent Beck은 2003년 TDD가 단순한 설계를 장려하고 자신감을 불어넣어 준다고 말하였다.
깔끔한 코드를 작성할 수 있다.
장기적으로 개발 비용을 절감할 수 있다.
개발이 끝나면 테스트 코드를 작성하는 것은 귀찮다. 실패 케이스면 더욱 그렇다.
Unit Test 단위테스트
코드를 수정하거나 기능을 추가할 때, 수시로 빠르게 검증 가능
리팩토링 시, 안정성 확보
개발 및 테스팅에 대한 시간과 비용 절감
좋은 테스트의 특징
Fast : 테스트는 빠르게 동작하여 자주 돌릴 수 있어야한다.
Independent : 각각의 테스트는 독립적이며 서로 의존해서는 안된다.
Repeatable : 어느 환경에서도 반복 가능해야 한다.
Self-Validating : 테스트는 성공 또는 실패로 bool 값으로 결과를 내어 자체적으로 검증되어야 한다.
Timely : 테스트는 적시에 즉, 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다.
| log4j2 설정 이해(loggers, level) (0) | 2023.06.26 |
|---|---|
| Cashing, Fetch (0) | 2023.06.23 |
| FTP TCP SFTP FTPS (0) | 2023.06.23 |
| DOM 객체, 계층 구조 (0) | 2022.12.07 |
| 동기 (Synchronous)와 비동기(Asynchronous) (0) | 2022.11.22 |