Board  ALL

- 이슈
기존에 사용하던 AController를 제거 후, BController를 생성하여 AController에서 사용했던 메서드 및 requestMapping 정보를 적용하여 jenkins를 통해 배포를 시도.
그러나 WAS 기동시 아래와 같이 Exception이 발생.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0' defined in file [/usr/local/tomcat7/webapps/ROOT/WEB-INF/classes/com/config/spring/dispatcher-servlet.xml]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: Cannot map handler 'xxxxController' to URL path [/x/xx/xxx/xxxx]: There is already handler of type [class com.xx.controller.xxxxController] mapped.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:605)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:926)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:477)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:638)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:595)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:652)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:514)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:455)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1230)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1174)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1066)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5393)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5691)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1017)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:993)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2020)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:473)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)
at java.lang.Thread.run(Thread.java:748)


- 문제 원인
WAS에 배포된 ROOT 디렉토리의 classes 디렉토리를 찾아가보니 git repository에서는 삭제한 class 파일이 존재. ㅡ,.ㅡ;
jenkins의 build 폴더에 가서 확인해보니 여기에도 삭제했던 class파일이 존재.
결국 ROOT.war파일을 생성할 때에는 build 디렉토리의 build된 class 파일이 사용되는데 jenkins가 삭제된 파일을 초기화해주지는 않는구나...라는.... 


- 해결
1. mapping url이 서로 겹치지만 않아도 되는 경우라면, RequestMapping의 URL을 변경해준다.

2. 위 문제 원인을 해결하기 위해서는 jenkins의 해당 build job 디렉토리 > build 디렉토리 하위에 위치한, 삭제된 class파일이 실제 존재하는지 확인 후, 존재하면 삭제 후, jenkins build job 실행을 해줄 필요가 있다.


Dev Jinwon's Share
f
t

소스코드 파일을 실행가능한 소프트웨어 산출물로 만드는 일련의 과정을 말한다. 

빌드의 단계 중 컴파일이 포함이 되어 있는데 컴파일은 빌드의 부분집합이라 할 수 있다.

빌드 과정을 도와주는 도구를 빌드 툴이라 한다.

Ref.] 
1. 컴파일과 빌드 차이점 : https://freezboi.tistory.com/39


Dev Jinwon's Share
f
t
원시 코드에서 목적 코드로 옮기는 과정을 컴파일(compile, 순화 용어: 옮김, 번역, 문화어: 콤파일)이라고 한다.
좁은 의미의 컴파일러는 주로 고수준 언어로 쓰인 소스 코드를 저수준 언어(어셈블리어, 기계어 등)로 번역하는 프로그램

- Ref.]
1. 컴파일러 : https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC


Dev Jinwon's Share
f
t
- 디플로이한다는 것은 '전략적으로 넓게 퍼트리거나 또는 배치한다'는 뜻이다. 군사전략의 개념에서 오랫동안 사용되었던 용어이며, 이제는 정보기술 특히 분산 컴퓨팅에서 통용
- 만들어진 프로그램을 서비스 위치로 보내는 작업

ref.]
1. release, deploy, distribute : https://opentutorials.org/course/1724/9836
2
. build 와 deploy 를 좀 자세히 알려주세요. : https://okky.kr/article/131243


Dev Jinwon's Share
f
t

동일한 요청이더라도 누가/언제 요청했는지에 따라 내용이 변하는 페이지.

데이터가 변경되는 거의 모든 웹 페이지가 동적 페이지에 해당한다.

예 : 웹사이트의 마이페이지, 장바구니, 구매목록 등



Ref. 

1. [Web] 웹 애플리케이션 서버 (WAS) : https://includestdio.tistory.com/25





Dev Jinwon's Share
f
t
웹 서버의 주된 기능은 웹 페이지를 클라이언트로 전달하는 것이다.

주로 그림, CSS, 자바스크립트를 포함한 HTML 문서가 클라이언트로 전달된다.

동적인(Dynamic) 페이지 처리가 필요하다면 웹 애플리케이션 서버에 요청을 넘긴다.


Ref : 
1. [Web] Web Server와 WAS의 차이와 웹 서비스 구조 : https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
2
. 웹서버와 WAS의 차이 : https://linkednest.net/share/jwleeDev/view/376
3
. [Web] 웹 애플리케이션 서버 (WAS) : https://includestdio.tistory.com/25
4
. 웹 서버 : https://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%84%9C%EB%B2%84


Dev Jinwon's Share
f
t
- 어떤 데이터를 다른 모양으로 가공한다는 의미
- XML 데이터를 JSON 데이터로 파싱한다는 표현을 한다.
  이 것은 XML 형태의 데이터를 JSON 형태의 데이터로 가공한다는 의미이다.
 



Dev Jinwon's Share
f
t
문제상황
        - Mysql 클러스터링이 깨져 2번 DB 복구 이후, 웹사이트 접속시 데이터가 여러가지 섞여서 나오는 등 불규칙한 상태가 발생.
        - memcached cache 데이터의 동기화 문제인듯 보임.
 
조치방법
  1. 관리 페이지에서 memcached 를 초기화 하였으나 동일 현상 발생
  2. 각 서버의 memcached와 tomcat instance를 재시작 후 문제 해결
                /$ service memcached stop 

                /$ service memcached start

                xxx/tomcat/bin$ ./shutdown.sh

                xxx/tomcat/bin$ ./startup.sh
 
 
 



Dev Jinwon's Share
f
t
java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails



Error Log Msg : 

java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`schema name`.`table name`, CONSTRAINT `FK_aaaaaaaaaaaaaaaaa` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))

Caution : 

자식 테이블에 입력하려는 ID가 부모 테이블에 없는 경우가 존재하였음.


Reference : 

https://stackoverflow.com/questions/5005388/cannot-add-or-update-a-child-row-a-foreign-key-constraint-fails
https://stackoverrun.com/ko/q/3240756



Dev Jinwon's Share
f
t
[tomcat] fail to scan...


mac OS 환경에서 tomcat을 실행시에 file to scan...이라고 하면서 에러 코드가 쭉쭉 출력되는 경우가 있었다.

실행 자체에는 문제가 되는 건 아니지만 거슬렸는데 tomcat 디렉토리의 libs 디렉토리 하위에 '._' 로 시작되는 파일들이 숨어있었고

이 파일들을 tomcat에서는 scan하려다가 메시지를 뱉어낸 것 같다.

삭제해주니 문제는 해결..

Ref.] https://sarc.io/index.php/tomcat/193-tomcat-failed-to-scan-file-from-classloader-hierarchy




Dev Jinwon's Share
f
t