2020. 4. 30. 17:42

 

 

서버가 실행된 상태에서 HTTP 요청을 받으면

미리 기록해놓은 텍스트 혹은 스크립트 파일을 HTTP 리스폰스 형식으로 되돌려주는 간단한 서버다

제작 도중까지는 더 복잡한걸 생각했는데 생각해보니까 복잡하게 만들어봤자 귀찮고 좋을것도 없을것 같아서 이렇게 됏다.

한번에 여러개의 포트를 열어서 사용할 수 있고

지원하는 스크립트는 파이썬, 쉘, 배치 이렇게 3가지 종류이다.

이런 스크립트 파일이나 지정된 메세지를 보내려면 이 프로그램 자체 스크립트를 작성해야 한다.

자체 스크립트로 할 수 있는것은 포트별로 다른 요청을 주거나 HTTP 리스폰스의 컨텐츠 타입이나

서버가 실행된 상태에서 브라우저를 이용하여 스크립트파일에 요청을 보내면

서버에서 스크립트가 실행된 다음 스크립트에서 리턴한 텍스트 메세지를 클라이언트에게 돌려준다.

또한 리퀘스트로 전달한 GET, POST 파라미터를 스크립트에 전달하는 기능도 있기 때문에

파라미터에 따라 스크립트의 동작을 다르게 하거나 리턴되는 메세지를 다르게 할 수도 있을것이다.

그리고 내가만든 로거 라이브러리를 사용해서 로그도 잘남기게 만들어놨다.

기본 실행하면 실행 로그랑 클라이언트 접속 로그만 남지만

디버그모드로 실행하면 클라이언트가 전송한 메세지, 클라이언트에게 전송한 메세지까지 전부 다 남긴다.

서버 구조도 나름 신경써서

소켓 연결만 하는 네트워크 스레드와

HTTP 메세지를 처리하는 워커스레드로 구성했는데

워커스레드의 개수는 최소 한개 최대 CPU 논리코어수 -1 개가 만들어지도록 했다.

스레드간 통신은 메세지 큐 방식으로 만들었고

코드도 최대한 C++ 표준 코드를 사용하여 만들려고 노력했는데 쉽지는 않아서

결국 리눅스 환경에서 컴파일되는 코드랑 윈도우 환경에서 컴파일되는 코드를 따로 구분하는 방식으로 만들었다.

그래서 리눅스 환경에서도 컴파일이랑 동작이 잘 되는걸 확인했고

아직 개선하야 할 점이 많이 있기는 하지만 틈틈히 만들어서 이정도 만들어진게 기뻐서

1.0 버전으로 릴리즈해서 올렸다

사실 톰캣이랑 비슷한 기능이기도 한데 톰캣과 비교해서 장점은

별다른 설정이 필요 없고 API에 대한 테스트를 해볼 때 별도의 웹 컴포넌트를 작성할 필요가 없다는 장점이 있다.

그리고 이 서버 프로그램으로 현재 바이너리 파일 전송이 안되는데

바이너리 파일 전송기능을 넣을까 하다가 API 테스트용 프로그램에 그런 기능이 필요할까 싶어서 일단 안넣었다.

그래서 브라우저에서 아이콘 파일을 요청할경우 경로상에 아이콘파일이 존재해도 응답을 보낼 수가 없다.

혹시라도 나중에 생각이 바뀌면 넣어야겠음

 

윈도우 콘솔에서의 실행 방법 -g는 디버그모드로 실행하는 명령어다

 

브라우저로 서버에 접속해서 받은 응답
sample 스크립트 파일 형식

 

로그파일이 이렇게 남았다.

 

 

 

 

https://github.com/AhatLi/AhatDummyServer

 

AhatLi/AhatDummyServer

Contribute to AhatLi/AhatDummyServer development by creating an account on GitHub.

github.com

 

 

지금 와서 보니까 개선할점이 많이 보이는것 같다...

나중에 여유가 된다면 개선을 해봐야겠다.

+ Recent posts