본문 바로가기
코드이그나이터와 php7와 mysql

크레이의 라라벨 도전기 #5 - 팅커! 팅커벨? PHP콘솔이라네..

※ 이 게시글은 크레이의 IT개발 관련 성장기를 다루고 있습니다. 관련지식이 약간 있어야 이해되실 수 있습니다. 가벼운 마음으로 읽어보시면서 흥미가 생기고 의욕이 생긴다면? 개발자의 자질이 있으신 겁니다 :)

라라벨에는 팅커(tinker)라는 재미있는 도구가 있습니다.


라라벨에서 팅커(tinker)를 처음 접했을 때 어릴 적에 재미있게 읽었던 동화책 피터팬이 생각이 났는데요.
동화 안에서 '팅커벨'이라는 요정이 주인공들의 모험의 여정에 함께 하였기 때문이었습니다.
뭐 그 후로도 영화로든 광고로든 계속 접하면서 되새김질했기 때문에 잊지 않는게 아닐까 생각되네요.

동화속에서 팅커벨(tinker-bell)은 악당은 아니지만 가끔 말썽을 부리며 주인공들을 위험에 빠뜨립니다.

아이러니하게도 tinker는 땜장이의 의미를 갖습니다. 구멍난 냄비를 메우는 직업인데요.
뭐 요즘같은 시대에는 이러한 땜장이는 찾아보기 힘들지만,
프로그램 세계에는 고장난 프로그램이나 웹사이트를 어떻게든 다시 작동하게 하는 땜장이들이 있습니다. 기존에 짜여진 코드와의 조화를 이루면서 말이지요.
사고수습반이랄까요?

크레이도 그런 유형의 프로그램 코드를 다루어 보았는데요.
몇십만라인의 소스코드에서 여러 개발자가 수정했던 흔적, 개발자 각각의 특이한 코딩 스타일, 빈번한 중복된 코드 등.. 이른바 '혼돈의 코드'이지요. 과거에는 개발 방법론같은게 없었기 때문에 대부분 이렇게 개발했습니다.

차라리 처음부터 새로 개발하는게 더 낫겠다 싶을 정도이지만 그러기에는 규모가 크기에 많은 시행착오를 거쳐야 하는 위험 부담도 무시할 수 없습니다. 
그렇기 때문에 에러난 부분이 기존의 코드와 조화를 이루어 잘 작동하도록 수정하는 이른바 '땜빵 코딩'을 하는 방식으로 진행해야 하는 상황이지요. 프로그램 개발 세계에서 '땜장이'란 그런 의미로 통용될 수 있습니다 :)

라라벨의 tinker 는 그러한 땜장이들을 돕기위해 출현한 멋진 도구가 아닌가 생각되는데요.
이는 마치 파이썬이나 자바스크립트 콘솔 등이 연상되기 때문이지요.
크레이가 보기에는 매우 훌륭한 툴이라고 생각합니다. 알고보면 엄청난 '매력덩어리'거든요 :)

라라벨 프로젝트 폴더에서 아래 명령을 실행하면 팅커 콘솔이 실행됩니다.

php artisan tinker

>>> 프롬프트가 표시되었군요. 크레이는 지금 php의 세계에 들어와 있습니다.  와우~

여기서는 리눅스 명령어도 작동하지 않고, 파이썬 명령어도 작동하지 않는데요.
그 대신 PHP  명령어가 작동합니다!
계산을 한번 해볼까요? 123 x 456을 계산해 보았습니다.

123 * 456 <Enter>

정확한 계산 결과가 표시되었군요.
이번에는 PHP 명령을 테스트해보겠습니다.
PHP에서 원주율 파이(π)는 M_PI 라 하여 기본으로 선언되어 있는데요.
콘솔에서 M_PI를 타이핑하면 원주율 3.41592... 값을 보여줍니다.

M_PI

이걸 이용해서 삼각함수의 싸인(sin)값을 산출할 수도 있는데요 ( 파란색이 분모, 빨간색이 분자 )

M_PI 3.14 는 180도이기 때문에 공식과 함께 아래 명령어를 사용하면 sin 45도의 값을 구할 수 있습니다.
( php 내장함수입니다. )

sin(M_PI * 45 / 180)

또한 사용자 함수를 정의해 실행할 수도 있습니다.
1부터 지정한 숫자까지 팩토리얼을 구하는 함수를 정의해 볼까요?
아래 행을 입력하면 프롬프트가 >>> 대신 ... 로 바뀌는데요.

function factorial($n){

이는 중괄호가 아직 열려 있어 입력이 끝나지 않았기 때문예 연속해서 입력을 할 수 있는 상태이기 때문입니다.
아래 내용을 마저 코딩해 넣으면 프롬프트가 >>> 로 바뀌게 되는데

    $base=1;
    for($i=2;$i<=$n;++$i){
       $base*=$i;
    }
    return $base;
}

factorial 함수가 정의된 것입니다.
이 함수가 작동할지 안할지 두근 반, 세근 반하는 마음으로 실행해보면,

factorial(10)

아래와 같이 결과가 노출되는 것을 확인할 수 있지요. 오우~

이번에는 5팩토리얼을 구해볼까요?
여느 콘솔 기능처럼 tinker 또한 히스토리 기능을 지원하는데요.

히스토리는 과거에 입력했던 명령어들을 위아래(↑↓)화살표 키를 이용해 다시 불러오는 기능입니다.
화살표 윗 방향 키를 한번 누르면 금방 입력했던 factorial(10) 문구가 표시됩니다.

10으로 된 숫자 부분만 5로 수정한 다음 Enter 키를 누르면 5팩토리얼을 산출할 수 있습니다.

이 팩토리얼 함수는 팅커를 종료하면 사라집니다. 팅커는 개발을 도와주는 땜빵용 도구일 뿐이지 개발 도구는 아니기 때문이지요 :)

또한 팅커를 실행하면 라라벨 프레임워크에 세팅된 기능을 모두 불러옵니다.
그렇기 때문에 지난 게시글에서 다루었던 데이터베이스 쿼리 명령어도 사용할 수 있는데요.

https://itadventure.tistory.com/605

 

크레이의 라라벨 도전기 #4 - 모델(Model)

※ 이 게시글은 크레이의 IT개발 관련 성장기를 다루고 있습니다. 관련지식이 약간 있어야 이해되실 수 있습니다. 가벼운 마음으로 읽어보시면서 흥미가 생기고 의욕이 생긴다면? 개발자의 자질

itadventure.tistory.com

아래 명령을 실행하면

DB::select("SELECT * FROM books;");

아래 결과를 보여줍니다.

이처럼 tinker 도구는 개발하는 함수나 클래스 메소드의 기능을 하나씩 '단위 테스트'하기 매우 유용합니다.
과거에는 메소드 하나를 테스트하려면 일일히 별도의 테스트 코드를 작성해야 했지만
tinker의 이러한 기능을 이용하면 관련 부분을 진행할 필요가 없어 매우 편리합니다.
그래서 크레이가 이 tinker를 매력덩어리라 부르는 것이지요 :)
이 도구를 잘 사용하면 개발에 소요되는 시간은 엄청나게 향상될 수 있습니다.

오늘은 라라벨의 tinker 에 대해서 알아낸 부분을 공유드렸습니다.
오늘도 방문해주신 모든 분들께 감사드립니다.
아무쪼록 필요하신 분께도 도움이 되셨기를 바라며 이만 크레이는 뿅!