엑셀의 경우, 변경 사항이 발생 하거나 또는 파일 저장 할 때 마다 수식에서 계산되는 값이 갱신 되는데
만약, 수식을 여러 개 설정 한 경우 + 데이터가 많은 경우, 매우 오래 걸려서 작업 속도가 떨어진다.
수식 값 갱신을 수동 처리를 통해서 위와 같은 불편함을 해소 할 수 있다.
* 방법
메뉴 > 수식 > 계산옵션 > 자동->수동으로 변경
모든 작업 후 지금 계산 Icon 클릭 (또는 키보드에서 F9 입력) 하면, 수동으로 수식 값이 갱신 된다!
Excel 2013 기준 화면이며, 버전에 따라서 해당 메뉴의 위치가 다를 수 있습니다.
Eclipse내 Tomcat에서 돌리려고 하니
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
위와 같은 Exception이 발생하면서 tomcat에 project가 deploy 되지 않았다.
Eclipse내 Markers에서 다음과 같은 Error를 확인했다.
Cannot change version of project facet Dynamic Web Module to 2.4
Maven Project 갱신을 위해서 Update Project 진행 후 다음과 같은 Error가 발생되었다.
▶ 해결방안
deployment descripter file(web.xml)를 보면 version=2.4으로 되어있다.
그러나 Project Facets에서는 아래와 같이 Dynamic Web Module Version 2.3 으로 되어있다.
2.3 -> 2.4로 변경하려면 다음과 같이 안된다!!!
그럼 어떻게 변경 가능할까?
해당 project 경로 내에 .settings 로 이동하면 다음과 같은 파일 목록를 찾을 수 있다.
org.eclipse.wst.common.project.facet.core.xml 파일을 연다.
2.3 -> 2.4 으로 변경한 뒤 Update Project 진행한다.
Project Facets를 보면 2.4 변경되어 있음을 확인 할 수 있다.
Dynamic Web Module의 Version은 톰켓 버전에 따라서 servlet spec version이 다르다. 다음 url에서 확인 후 알맞게 지정하자!
http://tomcat.apache.org/whichversion.html
'Web > Spring' 카테고리의 다른 글
Resolvering Views (0) | 2016.07.14 |
---|---|
[STS] encoding 관련 warning 처리 (0) | 2015.09.26 |
java.lang.NoSuchMethodError 오류메시지는 해당 메서드를 찾지 못할 때 발생된다.
본인의 경우는 라이브러리 중 하나의 메소드를 수정한 뒤 test 문제없음을 확인하고
수정된 라이브러리만 운영(production)환경으로 반영했다.
그런데, 해당 라이브러리를 사용하는 타 class에서 java.lang.NoSuchMethodError 오류메시지 발생되었는데
Error 발생된 class file도 아무 수정없이 complie해서 운영(production)환경에 반영하니 문제가 사라졌다.
▶ 발생분석
* 현상 오류메시지 예시
java.lang.NoSuchMethodError: biz.com.dao.member.updateUser(Lbiz/com/vo/User;)V
- 해석
biz/com/vo/User 객체 1개를 파라미터로 받고 반환 값은 없는 biz.com.dao.member.updateUser라는 메서드를 찾지 못했다는 의미
* 소스코드 분석
Error가 발생된 (라이브러리를 사용하는)애플리케이션 코드 수정은 없었으며 라이브러리는 integer값을 반환 되도록 변경되었다.
- 라이브러리를 사용하는 애플리케이션 코드
// UserService.java
...
public void change(User user) {
...
member.update(user);
}
- 변경 전 후 라이브러리 소스코드
// Member.java - 변경 후
public int updateUser(User user) {
return member.update(user);
}
// Member.java - 변경 전
public void updateUser(User user) {
member.update(user);
}
▶ 발생예시 분석
라이브러리를 사용하는 애플리케이션 코드를 새로운 라이브러리로 다시 컴파일하지 않았기 때문이다.
라이브러리를 사용하는 애플리케이션 코드는 이전 라이브러리로 컴파일되었으므로,
반환값이 없는 메서드를 호출하도록 class 파일에 기록되어 있지만,
새로 변경된 라이브러리에서 반환값이 없는 메서드는 없어지고, integer값을 반환하는 메소드만 존재하기 때문이다.
▶ 결과
Java는 바이트코드를 이용해서 배포되며, 바이트코드는 자바 컴파일러에 의해 작성된다.
라이브러리가 변경 되었다면 이를 사용하는 어플리케이션 바이트코드도 다음과 같이 변경되어져야 하므로
어플리케이션 코드도 함께 반영되어져야한다.
biz.com.dao.member.updateUser(Lbiz/com/vo/User;)V -> biz.com.dao.member.updateUser(Lbiz/com/vo/User;)I
▶ 참고문헌
'Programming Language > Java' 카테고리의 다른 글
[도서리뷰]JAVA PERFORMANCE FUNDAMENTAL (0) | 2017.04.07 |
---|---|
Java primitive type, wrapper class and autoboxing (0) | 2016.12.08 |