라라벨은 시맨틱 버저닝을 사용하지 않는다

최근에 라라벨 책을 저술하신 두 저자분 께서 라라벨이 마이너 업데이트 되었는데 예제 소스코드가 정상적으로 작동하지 않아서 고생하신 것을 본 적이 있습니다. 이와 관련하여 정광섭님이해할 수 없는 라라벨의 릴리스 관리 정책 이란 글을 올리기도 하셨고, 또 김주원님도 관련하여 비판을 하셔서 다른 사람들은 어떻게 생각하나 좀 찾아봤습니다. 여러 사람들이 라라벨 제작자에게 시맨틱 버저닝을 사용하는지 물어보기도 하고, 또 왜 안쓰냐고 따지기도 했던거 같습니다. 이에 대해 아래 보시는 것과 같이 라라벨 제작자인 테일러 오트웰이 직접 라라벨은 시맨틱 버저닝 대신 독자적인 버저닝 시스템을 가지고 있다고 답변하는 걸 발견했습니다.

컴포저(Composer)가 시맨틱 버저닝을 사용하기 때문에, 라라벨도 당연히 시맨틱 버저닝을 사용할거라 생각했는데 의외네요.

스크린샷 2016-06-05 오전 2.55.32

위의 대화 이전에 라라벨 5.0을 발표하기 전에 시맨틱 버저닝을 도입하는 것에 대해 의견을 물은 것 같더군요. 여튼, 시맨틱 버저닝을 사용하지 않고 독자적인 버저닝 시스템을 사용하기로 한 것 같습니다.

스크린샷 2016-06-05 오전 2.57.55

See guzzles discussion on this 라고 해서 찾아봤는데, 이게 맞나 모르겠습니다. 이 링크에서 확인되는 Guzzle 의 버저닝 규칙은 다음과 같습니다.

Essentially, the current versioning scheme works like this

현재(글이 쓰여진 시점인 2013년) 버저닝 제도는 이렇게 작동합니다

 

: For a given version number X.Y.Z,

버전 넘버 X.Y.Z 에서

 

X represents fundamental or paradigm changes to the project,

X 는 프로젝트에 근본적이거나 패러다임의 변화가 있음을 나타냅니다.

 

Y represents major changes or feature additions (possibly including backwards-incompatible changes), and

Y 는 주된 변화나 기능 추가(하위 호환성이 지켜지지 않는 변화를 포함할 수 있음)를 나타내고,

 

Z represents minor changes and fixes that are backwards-compatible.

Z 는 하위 호환성이 보장되는 미미한 변화나 버그 수정을 나타냅니다.

라라벨이 Guzzle 과 같은 버저닝 규칙을 따른다면, 라라벨에서의 Y 는 SemVer 의 X 인 셈입니다. Y 가 변경된 경우, 시맨틱 버저닝일거라고 생각하고 안심하고 업데이트 하다가는 애플리케이션이 갑자기 돌아가지 않는 황당한 경험을 하실 수 있으니 유의하세요.

[참고]

시맨틱 버저닝에 대해 궁금하신 분은 Semantic Versioning 소개 나 공식 문서(한글)를 읽어보세요.

leaderboard-728x90

팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들

 

신입에게 권해주는 책이 있다면 그 책에는 어떤 내용이 포함되었으면 좋겠는지 8분의 팀장급 개발자분들께 여쭤보았습니다.

6명 중복 대답

  • Composer
  • PSR

5명 중복 대답

  • HTTP
  • 시큐어 코딩

4명 중복 대답

  • IDE
  • 코딩컨벤션

3명 중복 대답

  • 비즈니스에 대한 이해
  • PDO
  • MVC 패턴(최소한 로직과 표현 분리)
  • Namespaces
  • 인코딩
  • Traits
  • SPL
  • register globals 끄기
  • 매직메소드
  • 경고 메시지를 무시하지 말기

 

leaderboard-728x90

 

인수테스트 중 랜덤하게 발생하는 403 에러의 원인은 낡은 Xdebug 였다

Codeception 으로 인수테스트를 씐나게 돌리다가 보니, 방금 전에 잘 통과되던 테스트가 갑자기 통과가 안되는 현상이 발생했다. 에러 메시지는 too many open files 였다. ulimit 을 이용하여 열 수 있는 파일의 수를 늘렸는데, 이번에는 랜덤하게 403 응답이 나오는 현상이 발생했다.

찾아보니 Xdebug의 버그가 원인이었으며, 현재는 버그가 수정되었다고 한다. 하지만 MAMP가 사용하는 Xdebug가 버그 패치 이전 버전이기 때문에 이를 업데이트 해줘야 한다. MAMP의 Xdebug를 업데이트 하니 403 에러가 랜덤하게 발생하는 문제 뿐만 아니라 too many open files 문제까지 해결되었다(ulimit 으로 다시 열 수 있는 파일 수를 줄인 후 테스트를 돌려봤는데 문제 없이 작동했다.).

 

<참고자료>

  1. “Too many files open” on Mac OSX after running apache in PHP with XDebug for some time
  2. [SOLVED] Update XDebug in MAMP to work with Netbeans (Mac OS X)

 

leaderboard-728x90

 

XECON 2015 Learning Laravel 발표자료

최근에 좋은 튜토리얼들이 쏟아져나와서 학습 전략이라는 말이 다소 무색해지긴 했지만 그래도 궁금해하시는 분들이 계실 수 있을 것 같아 발표자료를 공유해봅니다.

 

leaderboard-728x90

테스트하기 어려운 코드라는 6가지 신호

최근에 의존성 주입을 알게되어서 (신나서?) 마구마구 의존성을 주입하다보니 한 클래스를 생성하는데에 너무 많은 의존성을 주입하는 경우가 생기더군요. 가장 많은 건 13개까지… 그래서 과연 내가 잘하고 있는 것이 맞나 싶어 궁금해하고 있었는데, 오랜만에 들춰본 Laravel Testing Decoded 에서 명쾌하게 ‘아니다’ 라고 얘기해주고 있네요. 참고가 되실까 싶어 책의 내용을 일부 공유해봅니다.

테스트하기 여려운 코드라는 6가지 신호

  1. New Operators
    • 클래스 내부에서 다른 클래스를 생성하는 경우.
  2. Control-Freak Constructors
    • 생성자에서 의존성 주입 역할 이외에 다른 행위을 하는 경우.
  3. And, And, And
    • 클래스가 단일책임원칙을 지키지 않는 경우.
  4. Too Many Paths? Polymorphism to the Rescue!
    • switch 문이 있다면 더 작은 클래스들로 쪼개는 편이 테스트하기 쉬워진다.
  5. Too Many Dependencies
    • 의존성이 너무 많은 경우.(4개 이상이면 리팩토링이 필요하다고 합니다)
  6. Too Many Bugs

책에 다음과 같은 구절도 있으니, 앞으로는 어떻게 하면 의존성과 파라미터 사용을 줄일 수 있을지도 더 생각하면서 코딩해 버릇해야 겠습니다.

“Each time that you remove a dependency or parameter, you’re improving the code.”

JeffreyWay. ‘Laravel Testing Decoded.’

 

leaderboard-728x90

 

ORM 좋네요 좋아

Eloquent ORM을 이용하여 아래의 데이터를 조회하기 위한 코드를 작성했습니다.

  • A가 가진 모든 B들과
  • 그 B들이 가진 모든 C들 중 A와 관련 있는 것만 추린 것들과
  • 그 C들이 가진 모든 D들

그 결과 아래와 같은 코드가 나왔어요. ORM에 익숙한 분들은 이게 뭐? 하시겠지만 저는 굉장히 놀랬습니다 하하. 새삼 ORM에 더 익숙해지면 정말 편리해지겠구나 하는 생각이 드네요.

 

$a = A::find($id);

$a->load([
    'b',
    'b.c' => function($query) use ($a)
        {
            $query->where('a_id', $a->id);
        },
    'b.c.d'
]);

return $a;

 

+
‘b’, 가 없어도 똑같이 동작하네요!

 

leaderboard-728x90

 

대중가요는 앞으로 더욱 찾기 힘들어질것이다

대중가요가 있긴 한가 라는 글을 읽고 든 생각을 적어본다.

대중가요는 대중매체의 결과물이다. 요즘 이 분이 말하는 대중가요가 없는건 더이상 대중매체의 시대가 아니기 때문일 뿐인거다. 지금은 예전과 달리 모든 사람이 지상파 3사만 보고 살지 않는다. 채널은 수십 수백개로 늘었고, 본방사수 할 필요도 없다. 이제 사람들은 원하는 것을 원하는 시간에 골라서 본다. 앞으로 사람들은 더 다양한 매체를 비동시적으로 이용하게 될것이다. 더이상 대중가요는 기대하지 않는게 맞다.

그리고, 아직도 음반 판매량을 운운하는건 시대에 한참 뒤쳐진 의견으로 보인다. 음악시장이 줄어든게 아니라 음반시장이 줄어들었을 뿐이다. 음반은 음악을 전달하는 방법의 일종일 뿐이다. 아무도 워크맨과 시디피를 들고 다니지 않고, 전축으로 음악 듣는 사람도 극히 적은데 왠 음반 판매량 타령인가 싶다.

MyISAM을 쓰면 좋은 경우

스토리지 엔진 선택
– 로그 고속기록에는 MyISAM 에 이름과 시간이 있는 컬럼을 만들어서 기록하는 것이 유리.
– 읽기 전용 테이블에는 MyISAM 이 절대적으로 빠르다.
– 트랜잭션에는 InnoDB 추천

MySQL 퍼포먼스 향상 (1) 아키텍처 중 발췌

1.INSERT 와 SELECT 구문을 주로 사용하는 경우
2.ROLLBACK 트랜잭션을 사용하지 않는 경우
3.테이블을 대규모로 동시에 읽고 쓰지 않는 경우
4.InnoDB 가 제공하는 특별 기능을 사용하지 않는 경우
5.FULLTEXT 인덱스를 사용하는 경우
6.공간적인 컬럼 타입을 사용하는 경우

이런 경우에 MyISAM이 좋습니다.

MyISAM과 InnoDB가 어떻게 다른가요? 중 발췌

하… 로그 데이터베이스는 MyISAM이 더 좋겠군요. InnoDB로 되어있는데 ㅠ
leaderboard-728x90

 

git 사용시 커밋하지 않은 변경사항들을 다른 브랜치에 커밋하기

오늘 한참 작업을 하고 나서 보니, master 브랜치에서 작업을 하고 있었더군요. 뜨어! 지금까지 작업한 내용을 다른 브랜치(제 경우에는 develop 브랜치)에 커밋할 순 없나 찾아보니 다행히 방법이 있었습니다. stash를 사용하는 방법입니다.

git stash // 커밋하지 않은 변경사항을 임시로 저장한다.
git checkout develop // develop 브랜치로 변경한다.
git stash pop // 임시로 저장한 변경사항을 복원한다.

도움을 얻은 글은 How to commit my current changes to a different branch in git [duplicate] 입니다.
stash에 대한 더 자세한 사항은 Git 도구 – Stashing 에 잘 안내되어 있으니 참고하세요.
 

leaderboard-728x90