$("form").submit(function() {
$(":submit",this).attr("disabled", "disabled");
});
이는 W3C가 공식적으로 권고하는 어트리뷰트 설정방식이다
$("form").submit(function() {
$(":submit",this).attr("disabled", "disabled");
});
이는 W3C가 공식적으로 권고하는 어트리뷰트 설정방식이다
REST의 매우 중요한 구성 요소중 하나는 “Resource” 입니다.
“Resource”의 의미는 말 그대로 서비스를 제공 하는 시스템의 자원을 말합니다.
?action=createReservation
?action=modifyReservation
?action=findReservation
?action=removeReservation
명분 없이 단지 “대세”라는 모호한 논리로 맞지도 않은 것을 도입하면
안된다고 생각 합니다.
저희는 개발자이고 아키텍트이기 때문에 “현 Usecase”에 맞는 것인지
냉정한 판단이 필요합니다.
API 333 목표 : 3초만에 API를 이해하고, 30초만에 API 키를 발급 받아서,
3분안에 첫번째 요청이 오도록 해라
코드 와 텍스트 설명이 많기 때문에 직관적으로 이해가 다소 어렵습니다.
문제는 개발자들이 Spring Bean의 멤버변수 또한 멀티쓰레드 환경에서
공유가 된다는 것을 간과한다는 것입니다.
이러한 실수는 “Thread Safe” 한 프레임웍(Servlet, Netty Handler, Camel Router, Spring Controller)들에 대한 오해 때문입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| @Service public class MemberController{ @Autowired private UserRepository userRepository; private Member member = new Member(); public void createUser(String id, String name) throws Exception { member.setID(id); member.setName(name); userRepository.insertUser(member); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| @Service public class MemberController{ @Autowired private UserRepository userRepository; public void createUser(String id, String name) throws Exception { Member member = new Member(); member.setID(id); member.setName(name); userRepository.insertUser(member); } } |
디버깅이 하기가 너무 어렵다는 이유 입니다. 대부분 개발시에는
개발자 환경은 멀티 쓰레드 환경이 아닙니다. 그렇기 때문에
발견이 거의 되지를 않습니다. 대부분 개발 후반에 성능 테스트
할때 발견이 됩니다.
특정 서버가 CPU를 많이 차지 하거나, 메모리 사용률을 많이 점유하면
thread dump를 떠서 확인을 하지만 이렇게 thread간 race condition
깨진 경우는 dump떠서 확인이 힘들고, 특히나 여러 클래스에 그렇게
사용을 하면 더 찾기가 어렵습니다.최악의 경우는 프로젝트 막바지는 “멘붕” 상태이기 때문에 “선무당”이 사람 잡는다고
전체 서버에 JDK를 다른 버전을 설치 하거나, WAS를 다시 설치 하거나, 심지어
OS 커널 또는 버전을 바꿔야 한다든지 더 큰 상황으로 치닫을수 있습니다.또한 수십, 수백명이 이런 코드를 양산될 경우는 더더욱 트러블 슈팅이 어렵습니다.
이점 유념하시고 개발 하셨으면 합니다.