php의 코드를 분석하는 도중에, 버퍼를 사용해 일종의 안전장치로 활용하는 경우를 봤다.
버퍼란 무엇이고 어떤 방식이길래 안전장치로 활용한다는 것일까?
버퍼란, 임시 저장 공간이다.
[출처] : http://www.tcpschool.com/cpp/cpp_io_streamBuffer
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
버퍼의 장단점은 아래와 같다.
버퍼 사용 장점
- 문자를 하나씩 전달하는게 아니라 묶어서 한 번에 전달하므로, 전송 시간이 적게 걸려 성능이 향상된다.
- 또한, php와 같은 언어에서 디버깅을 위해 echo나 print를 사용하고 실수로 지우지 않았을 경우 안전장치로 사용할 수 있다.
버퍼 사용 단점
- 빠른 반응이 요구되는 프로그램에서는 버퍼 사용이 적절하지 않다.
이러한 장단점들 중에, 버퍼를 안정장치로 활용하는 경우는 어떤 경우일까? 아래 코드를 통해 알아보자.
<실행 코드>
<실행 결과>
4096바이트를 chunk_size로 정하고, 4095바이트만 사용해서 echo명령어를 사용해 버퍼에 담으면, 버퍼안의 데이터를 ob_clean()이라는 메서드를 이용해 지우면 바로 출력되지 않고 지워진다.
하지만, 아래 그림과 같이 chunk_size인 4096바이트 이상을 버퍼에 담으면 버퍼를 비우는 ob_clean()메서드를 쓴다고 하더라도 최대 청크 사이즈에 도달했기 때문에 바로 출력된다.
<실행 코드>
<실행 결과>
→ 따라서, 버퍼를 활용해 일종의 안전장치로 활용할 수 있다.
→ 어떤 방식으로 활용할 수 있을까?
만약 클라이언트 → 서버로 API 요청을 하는 과정을 거친다고 가정해보면,
JSON으로 리턴하든 XML으로 리턴하든 서버는 요청에 맞는 응답 값을 클라이언트에 전달해줘야 한다.
서버는 이 과정에서 공통적인 로직을 작성하는 부분이 있을 것이고 그곳에 코드의 요청을 받은 직후, 응답을 내리기 직전에 아래와 같이 작성해 줄 수 있다.
<요청을 받은 직후>
<응답을 내리기 직전>
정리하자면, 개발자가 만약 xdebug같은 모듈을 사용하지 않고, 디버깅을 echo나 print로 해버리는 경우 버퍼의 청크사이즈 이상으로 데이터를 버퍼에 넣으면 바로 출력이 되지만, 청크사이즈를 나름 큰 사이즈인 4096바이트로(char형이 1바이트 이므로 .(1바이트)이 4095개까지 들어가는 것) 설정해 둔다면, 4096 미만의 echo나 print를 사용한다 하더라도 코드에서 봤던 것처럼 버퍼에 쌓아두고 일정 최대 크기에 도달하지 않을때까지 바로 출력이 되지 않는다.

'Dev > PHP' 카테고리의 다른 글
[PHP] JSON 출력 시 문자열 설정하기 (0) | 2023.03.08 |
---|