###어떤 것들이 있어야 할까? - 2 (제어문) + 번외
수업자료는 Slide Share에 업로드 되어져 있습니다.
3차시에서는 제어문에 대한 설명과 실습. 그리고 PHP 에 대한 실제 설정을 주로 해볼 예정입니다.
반복문/제어문 실습에 관한 답안은 같이 업로드를 해놓았다. 주석도 같이 있으니 참고하기 바란다.
제어문은 정말 많이 쓰인다. 그래서 먼저 제대로 된 시작전에 짚고 넘어간 부분이고, 나름 중요하게 언급을 했다. 조건문(분기문)과 반복문이 있는데, 조건문과 반복문은 연습을 통해 많이 익혀야 한다.
강의중에 foreach 에 관해서 건너뛰게 되었는데, foreach 가 되게 유용하게 쓰이는 상황이 많을 것이다. for, while 에 관해서 우리는 배웠었다. do while 문도 있고, 더 여러가지가 있는데 적게 배워도 많은 곳에 쓸 수 있게 하기 위해서 for, while, if else 세 개를 가르쳐 준 것이다. 분명히 더 제대로 배우고 싶은 사람도 있을 것이라 생각하고 여기에 추가적으로 언급을 한다.
foreach 는 인덱스 없이 배열(변수들을 여러개 모아놓은 것을 의미한다.)을 하나씩 받아와서 실행하는 반복문이다. 인덱스를 따로 쓰지 않고도 사용할 수 있다는 점에 대해서 큰 이득이 있다.
자세한 설명은 php.net에 잘 설명되어 있으므로, php.net을 참고하기 바란다.
이 역시 if 만큼은 아니지만 조건문 중에서 상당히 많이 쓰이는 조건문 중 하나다. 하지만 if 로 대부분 대체가 가능하기에 빠르게 교육하기 위해서 건너 뛴 부분이다. 역시 설명과 예제는 php.net에 잘 나와있으므로 생략한다.
증감연산자는 반복문에서 많이 볼 수 있는 문법이다. 많은 언어에서 지원을 하고, 유용하게 쓰이는 만큼, 개발을 하려면 꼭 짚어주어야 하는 부분이라고 할 수 있는데, 쓰는 방법은 --
나 ++
를 변수 앞 뒤로 붙여주면 된다. 앞에 붙이는 증감연산자는 전위 증감 연산자. 뒤에 붙이는 증감연산자는 후위 증감 연산자 라고 하는데, 뒤의 예제를 보자.
<?php
$variable = 10;
$variable2 = 10;
echo ++$variable."\n";
echo $variable2++."\n";
?>
이 예제들을 보면 두가지의 차이점을 명확히 알 수 있을 것이다. 결과값은
11 10
인데, 먼저 하나하나 세부적으로 풀어보자.
전위는 statement 가 실행이 되기 전에 먼저 연산이 된다. 그러니까
echo ++$variable."\n";
같은 경우에는 variable 이 먼저 한번 더해지고 나서 출력이 된다는 소리다. 앞에 붙여주면 이런 특징이 있다.
후위는 statement 가 실행이 되고 나서 연산이 된다. 그 경우는
echo $variable2++."\n";
이 문장이 실행되는 과정은 다음과 같다.
$variable."\n";
를 출력한다.- variable 변수를 1 더해준다.
수업에서 초과, 미만, 이상, 이하에 대해서 교육을 했었다. 그러나 그 외에도 다양한 방법의 비교연산자를 지원하고 있다. 같은 것, 같지 않은 것, 변수의 타입 비교 등등의 연산자를 지원하고 있고, 그러한 비교연산자는 php.net 비교연산자에서 쉽게 알 수 있다.
먼저, Thread Safe 버전은 Apache 모듈이고, Non Thread Safe 버전은 php 독립모듈으로 생각하시면 편합니다.
자세히 설명을 하기 위해서 윈도우에 대한 설명부터 들어가보면 윈도우는 멀티쓰레드방식입니다. (그에 반해 유닉스/리눅스는 태스크개념을 채택하고 있죠.) 반면, PHP는 멀티 프로세스 방식입니다. 유닉스/리눅스 계열에 적합하죠. 그래서 그런 PHP 를 윈도우로 포팅하는 과정에서 멀티 쓰레드 방식으로 개발을 했는데, PHP 모듈들은 멀티 프로세스 방식입니다. 그래서 자주 다운되는 현상들이 일어났고, 안정적으로 사용하기 위해서 퍼포먼스를 일정 부분 포기하더라도 Thread Safe 한 버전을 만들어내게 되었습니다. 그래서 안정적이나, 약간 퍼포먼스가 너무 떨어집니다.
그리고 멀티쓰레드 방식으로 개발하면서 하나 더 문제인 것은 PHP 는 서드파티 프로그램이라는 것입니다. 문제는 "다운이 되면 다운이 덜 되게 하면 되는데, 왜 Thread Safe 하게 만들었냐." 라는 건데, 왜냐면 PHP 는 서드파티라서 안정성이 핵심입니다. 특정 프레임워크 위에서 돌아가는 서드파티 라이브러리라서, 완전히 나뉘어진 쓰레드로 실행이 되어야 안정적이게 되는데, 그게 Thread Safe 방식입니다.
근데 퍼포먼스 문제가 너무 부각되고, 꼭 특정 프레임워크 위에서 돌아갈 필요도 없어지고(로컬에서 tcp 통신으로 모듈을 돌림) 그래서 thread safe 방식에서 탈출하게 됩니다. 그게 non thread safe 방식이고 nginx 와 연동시킬 때 흔히들 사용하실 것입니다.
요점정리를 하자면, 특정 프레임워크 위에서 서드파티로 돌아갈 필요가 있다면 Thread Safe, 로컬에서 자신의 메모리 위에서(php 만의) 돌아간다면 non thread safe 버전을 받으시면 됩니다.