[라라벨을 활용한 PHP7 웹 프로그래밍 CAMP/강사인터뷰] “바뀌려고 하지 않는 개발자는 고립될 수 밖에 없다.” 김주원/이현석 강사님

여전히 국내 웹 프로그래밍에서 많이 사용되는 PHP 개발!
그러나 PHP에 대한 인식은 낡고 보안이 취약한 언어로 저평가되고 있습니다.
라라벨(Laravel) 프레임워크의 등장과 2015년 PHP7 이 발표됨에 따라 높은 생산성을 유지하면서
빠르고 간결하게 개발이 가능하게 되었지만 여전히 많은 개발자와 회사들은 구 버전의 PHP에서 벗어나지 못하고 있습니다.

과거의 레거시 개발 방법에서 탈피하여 Modern PHP 의 세계로 이끌어 줄 [라라벨을 활용한 PHP7 웹 프로그래밍 CAMP]의 김주원, 이현석 강사님을 만나보았습니다.

라라벨 프레임워크와 PHP7으로 Modern PHP 세계로 입문하고 싶다면? ▼

[라라벨을 활용한 PHP7 웹 프로그래밍 CAMP] 바로가기 >>

 

main

 


 

안녕하세요. 자기소개 부탁드립니다.

(김주원)
‘라라벨로 배우는 실전 PHP 웹 프로그래밍(제이펍, 2016. 11)’ 저자 appkr(김주원)입니다.
저는 1997년부터 C와 Perl로 웹 개발을 시작했고 현재는 물류 회사에서 개발자로 재직 중입니다. 현재 주력으로 쓰는 언어는 PHP, Ruby, JavaScript 이고 다양한 웹 프레임워크도 경험했습니다.

(이현석)
안녕하세요. 코딩 명소를 지향하는 일공공카페를 운영하고 있는 이현석입니다.
저는 경영학과 출신으로 웹서비스를 만들겠다고 창업했는데 개발을 모르니까 일이 제대로 진행이 안되더군요. 그래서 창업한 그 해에 회사 문 닫아놓고 PHP에 입문하게 됐습니다. 더 잘하고 싶어서 커뮤니티에 적극 참여했고 현재는 모던 PHP 유저 그룹을 운영자로 활동하고 있습니다.

 

 

처음 PHP를 접하셨을 때와 지금의 PHP는 많은 차이가 있을 것 같습니다. 이전 PHP와 현재의 Modern PHP는 어떻게 다른가요?

(김주원)
제가 PHP를 처음 접한 것은 2000년 즈음으로 기억합니다. C나 Perl로 웹 프로그래밍을 해보신 분은 많지 않을 것 같은데, 저에게 PHP는 신세계였습니다. 지금은 나쁜 코딩 습관으로 인지되지만 PHP 태그로 감싸지 않은 나머지는 모두 그냥 출력되기에 HTML과 로직을 하나의 파일에 구현할 수 있다는 점과 HTTP 요청을 쉽게 파싱 할 수 있다는 점이 굉장히 마음에 들었습니다. 하지만 프로젝트를 한 번 진행한 뒤 한동안 PHP를 사용하지 않았었습니다.

PHP를 다시 사용하게 된 것은 거의 10년이 지난 2012년이었습니다. 루비온레일즈(Ruby on Rails)에 견줄 만큼 쓸만한 PHP 프레임워크를 찾다가 만난 녀석이 라라벨 3(출시된 지 1년 후)였고, 그 이후 계속 라라벨을 쓰고 있습니다.
제 3자 라이브러리를 가져다 쓸 수 있는 의존성 관리자부터 시작해서, 클래스 문법과 네임스페이스 등등, 10년 전과 후를 비교하면 이루 다 말할 수 없을 정도로 많은 발전을 했습니다.

(이현석)
저는 2009년 정도에 처음 PHP를 접했습니다. 당시와 현재 사이에는 세 가지의 큰 변화가 있었다고 생각합니다. 2009년의 HP 5.3 출시, PHP FIG의 결성, 2012년 컴포저의 등장입니다.
세 가지 변화를 기준으로 차이를 비교해보면 당시에는 현재에 비해 아래와 같은 면에서 차이가 있었다고 보입니다.

1. 바퀴의 재발명
2. 표준의 부재

1. 바퀴의 재발명
컴포저가 등장하기 전에는 복잡한 의존성을 다루기가 쉽지 않았습니다. 그래서 다른 사람들의 작업물을 활용하더라고 아주 제한적으로 활용할 수밖에 없었습니다. 다른 사람들의 작업물을 안심하고 활용할 수 없었기 때문에 누군가가 이미 해결해놓은 일을 다시 해결하는 이른바 바퀴를 재발명하는 일이 전 세계에서 일어나고 있었습니다.
지금은 컴포저 덕분에 다른 사람들이 만든 패키지를 안심하고 사용할 수 있게 됐습니다. 덕분에 아주 작은 단위의 일을 제대로 해결하는 패키지들이 계속해서 완성도를 높일 수 있었고, 수많은 외부 패키지에 의존하는 거대한 패키지들이 등장할 수 있게 되었습니다. 이제는 심지어 다른 사람들이 만든 패키지들을 조합해서 간단하게 나만의 프레임워크를 만드는 것도 가능한 시대가 되었습니다.
한편 컴포저는 PHP 5.3에 추가된 네임스페이스 기능 덕분에 등장할 수 있었습니다.
요약하면 2009년 경에는 저 수준의 라이브러리를 개인적으로 만들어서 사용하던 시절이었다면, 현재는 고 수준의 패키지를 기반으로 더 빠르게 개발할 수 있게 되었습니다.

2. 표준의 부재
2009년에 프레임워크들이 서로 호환되지 않아 많은 사람들의 노력이 하나의 프레임워크 안에 갇히는 비효율적인 문제를 해결하기 위해 프레임워크 상호 운용 그룹이 만들어지게 됩니다. 이후 FIG를 통해 PHP 표준 권고안이 나오게 되는데, 표준 권고안은 코딩 스타일 가이드부터 부터 시작하여 오토 로드가 되기 위한 네임스페이스 규칙 등을 제안했고, 최근에는 HTTP 요청 처리에 대한 인터페이스를 제안하는 등 표준 제안 범위를 계속해서 늘려가고 있습니다.
2009년 경에는 표준이 없어 사람들마다 자신의 스타일로 코드를 작성했다면, 현재는 표준이 있어서 읽기 쉽고 호환성 있는 코드를 더 편리하게 작성할 수 있게 되었다고 생각합니다. 예를 들어 요즘에는 IDE에서 단축키를 한 번 누르면 표준 코딩 스타일 가이드에 맞게 코드 모양을 자동으로 수정해줍니다. 표준 인터페이스에 맞춰 작성된 패키지 끼리는 쉽게 교체가 가능합니다.

 

php2

 

많은 사람들이 아직까지 PHP를 경시하는 이유가 무엇일까요?

(김주원)
몇 가지 이유가 있을 텐데요.
1) 우선 바뀌려고 하지 않는 개발자들의 관성이 가장 크다고 봅니다. PHP를 쓰면서 제가 주변 개발자들을 통해 본 좋은 점 중의 하나는 버전 간 호환성입니다. 옛날 방식으로 짜도 PHP는 불평을 안 할뿐더러, 옛날 코드를 최신 PHP 엔진에 올려도 문제없이 돌아가고, 그래서 레거시 개발 방법론도 밥 먹고 사는데 아무런 지장이 없다는 점이죠.

2) 호스팅 업체의 인프라도 문제가 있다고 봅니다. 앞서 말한 개발자들 또는 레거시 코드로 서비스를 운영하는 업체들 때문에 호스팅 업체가 쉬이 새 버전의 엔진으로 서비스를 전격 마이그레이션 하지 못 했던 점 말입니다. 일례로 국내 1위 소호 쇼핑몰 서비스 ***샵과 같은 대형 고객은 아직도 10년 전 버전을 사용하는데, 호스팅 업체도 어쩔 수 없었을 겁니다.

3) 마지막은 양질의 PHP 교재 및 교육 프로그램의 부재를 꼽고 싶습니다. 앞서 말한 이유로 모던 개발 방법론을 필요로 하는 수요처는 많지 않기 때문에 굳이 모험을 할 저자는 없었을 테고, 교육 기관은 강의를 만들 이유는 없었을 것입니다. 제가 느끼는 PHP 분야에서의 국내외 간극은 5년 이상인 듯합니다.

결국 모든 것은 “경제성의 논리”라고 생각합니다.

제가 느끼는 동인 순으로 언급했는데, 결국은 PHP라는 편안함에 사로잡혀 개발자들은 스스로 자기 자신을 세상의 변화로부터 고립시켰습니다. 이 때문에 동시대를 살아가는 많은 동료 개발자들이 PHP 개발자와 그 집단뿐 아니라 언어까지 경시하는 풍조가 만연했다고 생각합니다. 결론적으로 이 대열에 합류하려는 새로운 개발자들을 밀어내고, 스스로를 고립시키는 결과를 초래한 것 아닐까요?

PHP뿐만 아니라 레거시 개발 방식을 고수하는 개발자/회사들에게 “언제까지 빚쟁이 인생을 사실 겁니까?” 라고 묻고 싶습니다.

(이현석)
김주원 강사님께서 말씀하신 것처럼 오래된 코드들이 여전히 남아있고 사용되기 때문인 것 같습니다. PHP는 웹 초기부터 굉장히 인기 있었고, 많이 사용된 언어입니다. PHP는 실용성을 중요하게 생각하기 때문에 버전 업데이트를 하면서도 하위 호환에 신경을 씁니다. 다른 언어들에서 종종 찾아볼 수 있는 사례처럼 언어의 버전이 올라갔다고 프로그램을 완전히 새로 짜야 하는 일은 PHP에서는 발생하지 않았습니다. 2000년대 초반에 PHP로 작성된 웹 사이트들도 유지 보수를 하면서 지금까지도 비즈니스를 하고 있는 곳도 많습니다.
10년 전 사진을 꺼내보면 당시에는 최신 유행하던 스타일이 지금 보면 굉장히 촌스럽게 느껴집니다. 코드도 마찬가지입니다. 새로 개발하는 것이 아니라면 기존에 작성된 코드를 기반으로 작업을 하게 될 텐데 PHP에는 유독 오래된 코드가 많이 있을 가능성이 높습니다. 어찌 보면 너무 친절해서 욕먹는 케이스라고 볼 수도 있는 것 같습니다.

 

 

흔히 PHP는 쉽다. 따로 강의로 배울 필요까지는 없다.라고 하는데 이에 대해 솔직히 어떻게 생각하시나요?

(김주원)
다른 언어에 비해 상대적으로 진입 장벽이 낮은 것은 사실입니다.
그런데, 우리가 학교에서 영어를 배울 때를 생각해보면 알파벳을 배우고 단어를 배우고 문법을 배웁니다. 다음은 어법을 배우지만 이것으로도 부족해서 몸소 영어를 쓰는 사람들의 사고방식과 문화를 접하기 위해 어학연수를 가죠?

PHP도 마찬가지입니다. 문법을 배우는 것은 쉽습니다. 이미 다른 언어에 대한 실무 경험과 도메인 지식이 있다면 PHP를 사용하는 것은 쉽습니다(반대로 PHP 지식을 가지고 다른 언어에 진입하는 경우도 마찬가지입니다). 그런데 문법만 안다고 PHP를 잘한다고 말할 수는 없습니다. 언어의 완성은 문화를 배우고 스스로의 철학을 가지는 것입니다.
쉽기 때문에 배울 필요가 없다는 것은 말이 안 됩니다. PHP를 통해 배운 지식이 Java나 Scala를 배우는 데 아무런 도움이 되지 않을까요? 일반적으로 한국말 잘 하는 사람이 영어도 잘 합니다.

감히 말씀드리면, “배움이란 내가 모르는 것이 많다는 것을 배우는 과정”이라 생각합니다.

(이현석)
진짜 쉽습니다. 하지만 중요한 것은 ‘잘’하는 것이고 잘하는 것은 어렵죠.
언어의 기초 사용법을 익히는 건 어떤 언어든 크게 어렵지 않다고 생각합니다. https://learnxinyminutes.com/ 같은 웹사이트에 가보면 PHP를 포함한 대부분의 언어를 수분 안에 익히는 튜토리얼이 있습니다.
PHP를 배우는 목적은 결국 웹 애플리케이션을 만들기 위함인데, 좋은 웹 애플리케이션을 만들기 위해서는 PHP 사용법 외에도 좋은 설계 방법이나 시큐어 코딩같이 배워야 할게 굉장히 많습니다. 어떻게 보면 문법이 쉽다는 것은 빠르게 언어를 익힌 뒤, 개발을 잘하기 위해 실무에서 필요한 다른 제반 지식을 더 풍부하게 접해볼 수 있기 때문에 오히려 더 좋은 것 같습니다.

 

 

php3

 

구 버전 PHP에 비해 Laravel 과 PHP7이 갖는 기술적인 장점이 있다면 무엇일까요?

(김주원)
과거 버전에 비해서 PHP7은 언어적인 완성도나 견고함, 그리고 성능 측면에서 많이 향상되었습니다. 특히 라라벨 프레임워크는 루비온레일즈나 스프링부트 대비 전혀 뒤지지 않는 생산성과 자유도를 제공합니다.

(이현석)
PHP7이 이전 버전에 비해 갖는 장점은 익히 알려진 대로 코드를 바꾸지 않고 PHP 5.x에서 PHP7로 바꾸기만 해도 속도가 30% 이상 향상되는 장점이 있고, 타입 힌팅(Type Hinting)이 강화되어 더 엄격하게 코드를 작성할 수 있습니다. 새로운 연산자들이 추가돼서 코딩하기 더 편리해지기도 했고요.

라라벨은 풀스택 프레임워크라는 이름에 걸맞게 복잡한 기능을 빠르고 편리하게 구현할 수 있게 해주고, 좋은 구조를 갖고 있습니다. artisan 커맨드라인 도구, 마이그레이션 및 시딩, 옐로퀀트 ORM, 이벤트 시스템, 스케쥴링 등 생산성을 향상시켜주는 기능들이 잘 되어 있고 테스팅 기능도 훌륭합니다.
기본적으로 라라벨이 제공해주는 기능들도 훌륭하지만 외부 컴포넌트들과 연계가 잘 되도록 설계되어 있기 때문에 라라벨용 패키지 개발도 굉장히 활발히 이루어지고 있다는 장점도 있습니다.

 

 

이런 장점들이 있음에도 불구하고, 아직 구 버전의 PHP를 많이 사용하기 때문에 아래와 같은 희화된 이미지가 많이 회자되고 있는 것 같습니다. 이미지에 공감하는 사람들에게 해주고 싶은 이야기가 있으신가요?

phpprogramming
(김주원)
개인차는 있겠지만 저도 부정하지는 않습니다.
다만, “PHP라는 언어로 무엇을 할 거냐?” 라는 질문을 먼저 하고 싶습니다. 저는 서비스를 제때에 개발하고 주어진 요구 사항과 문제점을 정확하게 해결하고자 하는 개발자이지 코드 레벨의 완벽함이나 고고함을 추구하는 과학자가 아닙니다.

우선 레거시는 논외로 하더라도, 경험으로 극복해야 하는 PHP 언어 자체의 비일관성이 있을 수 있습니다.
가령 해시맵(딕셔너리) 데이터 구조가 없고 리스트와 해시를 모두 배열로 취급하기 때문에 json_encode([])는 []를 출력하고, json_encode([‘foo’ => ‘bar’])는 {“foo”:“bar”}를 출력합니다.
json_encode((object) [])로 해결할 수 있습니다. 대신 $foo = [‘foo’ => new Class, ‘bar’ => 1] 와 같은 것이 가능합니다(like Generic). 익숙해지고, 잘 쓰면 엄청난 생산성과 자유도의 경지에 이를 수 있습니다(예를 들면 라라벨의 IoC Container).

이 그림에는 PHP가 나왔지만, 예술을 할 것이 아니라면 결국은 경제성의 논리로 생각하는 것 맞다고 봅니다. 그 언어가 무엇이든 상관없습니다. 저도 내일 당장 Go나 Python을 이용하는 회사 프로젝트에 투입될 수도 있습니다. 바꾸어 말하면, 누구든 개발 밥을 먹다 보면 PHP 프로젝트에 투입될 수도 있다는 말입니다.

국내는 전자정부 프레임워크 이후로 공공/금융 프로젝트를 하려면 Java를 해야 합니다. 그럼에도 불구하고, 우리가 아는 꽤 많은 서비스, 예를 들어 쿠팡(최근 Java 전향 완료), 위메프, 티몬, 야놀자, 배달의 민족 등 전부 메인 서비스가 PHP로 구성되어 있습니다. 한국을 제외한 국외에는 PHP 개발자도 꽤 대우받을뿐더러, 전 세계 HTTP 트래픽의 80%를 PHP 서버가 차지하고 있습니다. 페이스북, 워드프레스, 위키피디아를 얘기하면, “또”라고 반문하겠지만, 알리바바, 타오바오, 슬랙 모두 백엔드를 PHP로 구현했습니다. 제가 현재 Ruby보다 PHP를 더 많이 쓰는 이유이기도 합니다.

 

(이현석)
사실 저는 별 생각이 안드네요. ^^ 다만, PHP는 여전히 가장 많은 웹 사이트에서 사용되고 있고 꾸준히 개선되고 있으며, 꽤 쓸만하니 한 번 경험해보는 건 어떻겠냐고 말씀드리고 싶네요. 그리고 이왕 익힐 거면 Modern PHP를 가장 제대로 활용하고 있는 라라벨과 같은 모던 프레임워크를 통해 학습하길 권장 드리고 싶습니다.

 

 

이번 강의를 통해 수강생들에게 꼭 전하고 싶은 한 마디를 말씀해주세요!

(김주원)
짧고 굵게 한 말씀드리겠습니다.
먹고 사는데 도움이 될 수 있도록 제가 아는 지식과 경험을 최대한 나누어 드리겠습니다.

(이현석)
PHP는 과거 스타일을 허용하기 때문에 본인이 스스로 노력하지 않으면 현대적이지 않은 코드를 작성하게 됩니다. 단순히 할 줄 아는 단계를 벗어나 더 잘하는 것은 어떤 것인지, 그러기 위해선 어떻게 해야 하는지도 알려드리기 위해 노력하겠습니다.

 


 

thumbnail

라라벨 프레임워크와 PHP7으로 Modern PHP 세계로 입문하고 싶다면? ▼

[라라벨을 활용한 PHP7 웹 프로그래밍 CAMP] 바로가기 >>

Recent Posts