Skip to main content

· 5 min read

옵시디언과 도큐사우르스를 연동하려는 이유?

기존에 도큐사우르스를 통해서 글을 작성하려면

일단 피씨를 켜셔 vscode를 실행시키고

도큐사우르스를 npm run start를 실행시켜서 개발 환경을 띄우고

포스팅 관련 마크다운 파일을 만들고 등등 이런 일련의 과정이 너무 귀찮았다

티스토리나 네이버 블로그처럼 그냥 글쓰기 버튼 눌러서 바로 글쓰면 편할 것을

소스파일이 있고 개발환경이 세팅이된 컴퓨터를 켜서 글작성하는 것 자체가 불편했다

좀 더 편한 방법이 없을까 고민을 하다가

내가 자주 사용하고 있는 옵시디언 앱과 git plugin을 이용하면 좀 더 편하게 글을 작성할 수 있지 않을까 연구 중이다

옵시디언은 메모는 로컬의 파일을 사용하고

마크다운 문법을 사용한다는 것을 이용해서

도큐사우르스 프로젝트 폴더를 옵시디언에 올려서

포스팅은 마크다운 형식으로 만들어서 git으로 푸시만 해주면 되는 거라

아이폰에서도 글을 바로 올릴 수 있고 어떤 컴퓨터에서든 쉽게 글을 작성할 수 있다

방법

기존의 도큐사우르스에서 git으로 관리를 하고 있다고 가정을 하고

옵시디언 보관소 폴더 열기

옵시디언 보관소 설정1

해당 프로젝트의 루트 폴더를 선택해서 열기

커뮤니티 플러그인 탐색에서 Git 설치 및 활성화

git plugin에 옵션은 따로 건들이지는 않고 기본 설정

지금은 수동으로 커밋과 푸시를 할 것임으로 따로 설정을 만지지는 않습니다

cmd + p 단축키를 눌러서 명령창을 띄워서 Git: Commit all changes를 통해서 커밋

cmd + p 단축키를 눌러서 명령창을 띄워서 Git: Push를 통해서 푸시

cmd + p 단축키를 눌러서 명령창을 띄워서 Git: Open history view를 통해서

git log를 볼 수 있는 화면이 오른쪽 탭에 열립니다

옵션

옵시디언에서 이미지를 첨부를 할때 기본적인 설정은

이미지 파일은 최상위 폴더에 업로드가 되고

![[첨부한이미지명]]

이런 형태로 마크다운이 자동으로 입력이 될텐데

옵시디언에서는 이미지가 보이지만 도큐사우르스에서는 보이지가 않을 것이다

이유는 옵시디언의 고유의 마크다운 언어라서 도큐사우르스가 인식을 하지 못하는 문제이다

옵션 > 파일 및 링크에서

1. [[wikilink]] : 비활성화
2. 새 첨부 파일을 만들 위치 : 현재 파일과 동일한 폴더

이렇게 2가지를 설정을 해주면 옵시디언과 도큐사우르스 둘 다 이미지가 보인다

보완

  1. ios에서 git repository 설정 하는 방법
  2. 다른 컴퓨터에서 repository 설정을 쉽게 하는 방법

· 3 min read

증상

hadoop-clinet resourceConfig error log

java spring boot과 hadoop에 연동하는 기능을 구현을 하는데

hadoop-client를 사용하여 개발을 정상적으로 완료하고

서버에 배포하여 실행시키는 과정에서 해당 에러가 발생

...
org.apache.catalina.core.ContainerBase.startInternal A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:873)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:921)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:419)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:186)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)
... 21 more
Caused by: java.lang.NoClassDefFoundError: com/sun/jersey/api/core/ResourceConfig
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at
....

사용한 hadoop-client

implementation group: 'org.apache.hadoop', name: 'hadoop-client', version: '3.3.6'

개발하는 과정에서는 에러 로그를 발견하지를 못했습니다 (개발환경은 intellij, spring boot 내장 톰캣)

서버에 배포하고 실행을 시키면 에러가 발생하며 톰캣 서비스 자체가 뜨지 않고 종료가 됐습니다 (서버환경은 tomcat 9, war 빌드)

원인

Caused by: java.lang.NoClassDefFoundError: com/sun/jersey/api/core/ResourceConfig
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)

톰캣의 로그가 쌓이는 곳에서(logs/catalina.out) 에러 로그를 보니

com/sun/jersey/api/core/ResourceConfig 클래스를 찾지 못해서 발생하는걸로 파악했습니다.

해결

implementation 'com.sun.jersey:jersey-bundle:1.19.4'

jersey-bundle 라이브러리를 추가하여 해결하였습니다.

의문 & 피드백

개발할때는 정상적으로 동작을 했는데 톰캣에 war로 배포를 했을때는 안되는 이유가 무엇일까?

에러 로그에서 Caused by: java.lang.NoClassDefFoundError 이부분을 보지 않고

위쪽에 있는 다른 에러 로그를 보고 파악하느라 시간과 삽질을 너무 많이 들었다

에러 로그를 좀 더 꼼꼼하고 명확하게 봐야 삽질을 줄일 수 있을 것 같다.

· One min read

첫 포스트 입니다