webapp framework 와 thread safety

아래 쓴 글 Servlet 의 동작방식과 thread safety 에서 응용편이다.

그러면 framework를 사용한 webapp 의 controller는 thread safe 할까?

결론부터 얘기하면 thread safe 하지 않다.

thread safe 한 코드를 짜기 위한 일반 원칙을 모두 지켜야 한다.

 

아래 참고사항은 잠들기 전 100번씩 암기해야 한다. 뭔말인지 모르겠어도 100번씩 외우고 자라.

thread safe 한 code 작성을 위한 일반 원칙

  1. thread 간 공유하는 resource가 존재하지 않는다.
  2. thread 간 공유하는 resource가 immutable 하다.
  3. thread 간 공유하는 resource가 mutable 하나, atomic 하다.
  4. thread 간 공유한느 resource가 mutable/non-atomic 하나, synchronized 하다.

 

spring이 되었든, struts 가 되었든, play 나 django가 되었든,

Servlet context 에 존재하는 resource를 접근하는 abstraction을 제공하게 되고, 여기서 접근되는 모든 데이터는 thread safe 하여야 한다.

당연히 framework 제작자는 상기 원칙대로 code를 생성하였기 때문에 framework는 멀티쓰레드 환경에서 안정적으로 동작하게 설계되어 있다.

항상 문제는 application(이라고 쓰고 bug라고 읽어라)을 만드는 개발자 놈들에게 있다.

 

아래 참고사항은 이닦기 전 1000번씩 암기해야 한다. 암기 못하면 이닦지 마라.

thread safe한 framework 코드 작성 원칙

  1. controller / action 등등등 Httprequest handler implementation에는 절대로 member variable 생성하지 마라.
  2. 만일 controller가 반드시 interface를 해야 할 일이 있다면, member variable 생성하는 대신 method parameter로 passing 하여 처리하라. 허나 좋은 설계를 하였다면 이런 일이 없어야 한다.
  3. 만일 2번으로 문제 해결이 되지 않는다면 너는 140% 잘못된 방향으로 개발을 하고 있다. 지금껏 니가 짠 코드를 지워라. 그게 프로젝트를 살리는 길이다.

요약

controller에 절대로 member 변수 만들지 마라.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중