터미널 입력 이슈
터미널 입력 크기 제한????
☝🏻 "터미널은 1024 바이트까지만 입력 받을 수 있다...!"는 사실을 알았다.
상황
select, epoll 에코 서버 코드를 리뷰하고, kqueue 에코 서버를 클론 코딩하며 서버가 클라이언트의 요청을 어떻게 처리할 수 있는지 개념을 이해했다.
요청을 어떻게 주고 받는지 확인하기 위해 서버와 클라이언트 프로그램을 생성해서 실행했고, 클라이언트에서 서버로 1025 바이트 이상의 데이터를 보내봤다.
그런데... 입력이 들어가지 않았다. 엔터를 쳐도 입력이 안들어가는 것이다. 1바이트를 지워서 1024 바이트이를 입력하니 이때는 잘 들어갔다.
왜 그럴까 고민해봤을 때 경우의 수는 아래 2가지였다.
1. 클라이언트의 버퍼가 1024 로 설정되어 있어서?
2. 서버의 버퍼가 1024 로 설정되어 있어서?
그래서 버퍼 값을 1025, 2000 등으로 변경해봤다. 하지만 여전히 터미널에서 입력을 넘기지 못했다...!
💡 버퍼를 1024 바이트 이하로 조정했을 때는 데이터를 쪼개서 보냈다. 예를 들어 클라이언트 또는 서버의 버퍼를 100 으로 정하고, 클라이언트에서 1024 를 보내면 100 씩 10 번 보내고 24 를 마지막에 보낸다는 의미이다.
결론
다 같이 chatGPT 에게 물어봤다..! 물어보니 터미널이 입력을 받을 수 있는 바이트 수가 제한되어 있었던 것이다..!
🅀 터미널에 입력할 수 있는 버퍼 크기를 제한한 이유가 있을까?
🄰 네, 터미널에 입력할 수 있는 버퍼 크기를 제한하는 이유는 여러 가지가 있습니다.
첫째로, 터미널 입력 버퍼 크기를 제한함으로써, 터미널과 프로그램 간의 데이터 전송이 원활하게 이루어질 수 있습니다. 만약 입력 버퍼의 크기가 무한정 커진다면, 터미널에서 입력한 데이터가 프로그램으로 넘어가는데 걸리는 시간이 길어지며, 이는 사용자 경험을 저하시키고, 프로그램의 성능에도 영향을 미칠 수 있습니다.
둘째로, 입력 버퍼를 제한함으로써, 잘못된 입력이나 공격 코드로부터 시스템을 보호할 수 있습니다. 만약 입력 버퍼의 크기가 무한정 커진다면, 악성 사용자가 대량의 데이터를 입력함으로써 시스템을 공격할 수 있는 위험이 있습니다. 입력 버퍼 크기를 제한함으로써, 시스템을 보호할 수 있습니다.
셋째로, 입력 버퍼를 제한함으로써, 메모리 사용량을 절약할 수 있습니다. 터미널 입력 버퍼의 크기가 매우 크다면, 많은 메모리를 사용할 수밖에 없으며, 이는 다른 프로세스나 작업에 영향을 미칠 수 있습니다. 따라서, 입력 버퍼의 크기를 제한하여 메모리 사용량을 줄이는 것이 좋습니다.
마지막으로, 터미널 입력 버퍼의 크기를 제한하는 것은 터미널 사용자의 입장에서도 이점이 있습니다. 만약 입력 버퍼의 크기가 매우 크다면, 사용자는 입력한 명령어나 데이터가 실제로 처리되기까지 많은 시간이 걸릴 수 있습니다. 따라서, 적절한 입력 버퍼 크기를 유지하여, 사용자 경험을 개선하는 것이 중요합니다.