-
Notifications
You must be signed in to change notification settings - Fork 11
유지보수를 힘들게 하는 것들(SDS)
-
발표자 : 정상혁
-
Action servlet(Controller)에 Business Logic이 있는 경우
web-tier에 business logic이 있을 경우 안 좋은점
-
business component 만의 테스트가 어려워짐
-
transaction 관리 등이 어려움
-
원격 EJB환경의 경우 원격호출의 비용을 증가시킴 (참고:session-facade pattern)
In a well-designed J2EE Web application, the web tier will be very thin. It will only contain code that’s necessary to invoke middle-tier business interfaces on user actions and to display the result.
-J2EE Design and Development, Rod Johnson
-
View layer에 business 로직을 넣을 경우 화면마다 중복된 로직이 들어가서 로직의 변경시에 관련 view layer를 모두 변경
-
변경의 유연성, 배포독립성 떨어뜨림.
-
Component?
-
독립적으로 배포가능- 기능이 명세화 (Interface)
-
부적절한 API 사용
-
JSTL, Struts, Systemier에 대한 API문서를 찾지 않고 있는 코드에서 copy&paste만함. 예시
-
Systmier Query service : 동적쿼리나 페이징쿼리를 꼭 필요하지 않은 경우에도 사용 2.
-
jstl: c:url 태그 미활용
-
-
<a href="<%= request.getContextPath() %>/servlet/info.UserInfo"> → <c:url value="/servlet/info.UserInfo"/>
-
<%session.getAttribute("aaa")%> → <c:out value='${aa}' scope="sessoin"/>
-
Struts: html태그 미활용
-
표준에서 jsp내에서 scriptlet (<% %>)을 사용하지 않기로 했으나 사용
-
==== Java 언어 자체의 부적절한 사용
-
예시
-
block안에서만 사용하는 temp variable을 block밖에 선언 객체를 항상 블럭 시작점에 선언
참조: Effective java 항목29. 지역변수의 유효범위를 최소화하라,
지역변수의 유효범위를 최소화하는 가장 좋은 방법은 쓰기 바로 전에 선언하는 것이다.
-
Exception 을 그냥 버리는 것
==== 언어를 초월해서 바람직하지 못한 코드
===== 중복된 코드
-
수정비용, 오류가능성을 높임
-
중복의 종류 : 실용주의 프로그래머 2장, 앤드류 헌트, 데이비드 토마스
-
강요된 중복 - 표준이나 환경에 의한 중복
-
부주의한 중복 - 설계시 실수
-
참을성 없는 중복 - copy&paste가 편하다고 느꼈을때
-
개발자간의 중복 - 의사소통의 부족
-
===== 상수 선언되어 있지 않은 코드값
자신이 쓴 코드를 한번 살펴보라. 0과 1을 제외한 숫자를 직접 사용한 곳이 있는가? 있다면 빨리 고치도록 하라.
김익환, 대한민국에서는 소프트웨어가 없다.
void method (PlanVO pvo){ pvo.set(3); //? 무슨 코드라는 거지? dao.update(pvo);
}
-
환경설정파일이나 Java 5 이상이라면 enum형을 이용하는 것도 좋음
===== 마음에 안 드는 코딩콘벤션, 이름
-
Java의 코딩 Convention에 맞지 않는 코드 예) 대문자로 시작하는 메소드명, 상수필드가 아닌데 대문자로 쓴것 JLS(Java Language Specification) 6.8 http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307
Code Conventions for the JavaTM Programming Language http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html Effective Java (Joshua Bloch) 항목 38 참조
-
프로젝트 표준에 맞지 않는 코드 프로젝트 표준이 정해져 있다면 Java의 권장 Coding Convention보다 우선적. 예)영문약자를 쓰는 것이 표준인데 gubun, gbn과 같은 변수명
=== 유지보수자에 마음가짐
내가 잘 못 짠 코드도 아닌데..
개선시도
-
개발초기의 코드리뷰, 짝 프로그래밍 API에 대한 지식, 코드정리 기술을 서로 전파
-
비지니스 Component의 Unit test 작성 유도
완전한 테스트를 실행시키지 않는 것보다는 불완전한 테스트라도 작성하고 실행시키는 것이 더 낫다.