분류 전체보기 145

java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags

# 오류 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project demoShop: Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags -> [Help 1] # 원인 스프링부트 2.0.2, Lombok 버전을 1.16.x 사용 중이었다. 원인은 모르겠으나 Lombok 버전을 변경하니까 컴파일 성공했다. # 해결 org.projectlombok lombok 1.18.12 provided ※ 참고 vocado.tistory.com/1..

[Tomcat] Unrecognized VM option 'PrintGCDateStamps'

# 오류 톰캣 실행경로(/bin)에 setenv.sh 를 생성하고 JVM 옵션을 추가로 부여했다. (아래 CATALINA_OPTS) 톰캣을 실행하니 Unrecognized VM option 'PrintGCDateStamps' 가 발생한다. [irteam@dev-1784smartcontrol-ncl bin]$ ./catalina.sh run Using CATALINA_BASE: /home1/irteam/apps/tomcat Using CATALINA_HOME: /home1/irteam/apps/tomcat Using CATALINA_TMPDIR: /home1/irteam/apps/tomcat/temp Using JRE_HOME: /home1/irteam/apps/jdk Using CLASSPATH: /ho..

[Gradle] war 실행 시 Exploded war 생성하기 (Groovy, Kotlin DSL)

Groovy 문법 build.gradle task explodedWar(type: Copy) { into "$buildDir/exploded" with war } Kotlin DSL 문법 build.gradle.kts val explodedWar by tasks.register("explodedWar") { into("$buildDir/libs/exploded") with(tasks.war.get()) } tasks.war { finalizedBy(explodedWar) } gradle war 실행 프로젝트에서 사용하는 문법에 따라 위의 내용을 gradle 설정파일에 추가하고 war 작업을 실행한다. gradle war [options]... [프로젝트 경로]/build/exploded 또는 [프로젝트 ..

식목일 기념 삽목, 분갈이 하기

언제부터 키웠더라... 작년 8월이었나.. 분명 바질 씨앗 4개를 심었는데 바질이 아니라 콩나무였나보다. 자라난 수준 잭과 콩나무 ㄹㅇ;; 삽목 해야지~ 해야지~ 하면서도 여태 안했는데 드디어 식목일을 기념해서 미뤘던 작업들을 했다. 허브 삽목하고 스투키 분갈이하고 남은 화분에는 페퍼민트 씨앗을 심었다. 준비완료 먼저 바질을 삽목했다. 맨 윗부분 줄기를 자른 후 약 30분동안 물에 꼽아두어야 해서 먼저 진행했다. 요로코롬 귀엽게 잘라서... 받아놓은 물통에 쏙- 와.. 뿌리가 엉키고 엉켜서 흙을 넘 꽉잡고 있어서 그냥 저대로 버렸다. 흙 재활용 불가 ㅠ 다음은 스투키를 분갈이했다. 뽑아서 흙 다 털어내니까 어? 웬.. 대파? 요즘 비싸다며..? 스투키 뿌리부분은 처음 봤는데 완전 대파가 따로 없다.요녀석..

[Vue] Vue CDN으로 사용 시 this가 window를 가르킬 때

Vue 프로젝트가 아닌 html에서 CDN 방식으로 사용할 때 종종 this.데이터 또는 this.메소드가 동작하지 않을 때가 있다. this가 vue가 아닌 전역 글로벌 객체인 window를 가르킬 때 이다. 특히 자주 쓰이는 axios 비동기 호출을 한 후 콜백처리할 때 this를 사용해도 vue가 동작하지 않는 것이 대표적이다. 아래 샘플코드처럼 getMyList 메소드 내에서 this는 vue를 가르키지만, axios.then() 콜백함수의 this는 window를 가르킨다. new Vue({ el: '#container', data: { mylist: [] }, methods: { getMyList() { this.mylist = Array()// this -> vue axios.get("/v1..

[Spring5] Thylemeaf Layout Dialect 적용하기

Thymleaf layout dialect 라이브러리를 사용해서 Thymleaf를 , , 등 모든 페이지에서 공통으로 사용하는 영역에 대해서 별도의 파일로 분리가 가능하다. 그리고 각각의 페이지에서 필요한 script나 style을 정의해 사용할 수도 있다. 이를 위해 사용되는 지시자로 fragment, layout, replace 등이 있다. 1) Thymleaf Layout Dialect 라이브러리 추가 (build.gradle.kt) /** Thymeleaf */ implementation("org.springframework.boot:spring-boot-starter-thymeleaf") /** Thymeleaf Layout Dialect */ implementation("nz.net.ultra..

[Spring5] Thymeleaf + Vue CDN 혼용하기

WebFlux와 Kotlin 언어를 사용했지만, 프레임워크나 개발언어무관하다. 단지 Thymeleaf와 Vue.js(CDN 방식)를 혼용하는 방법을 포스팅한다. templates/index.html {{val.name}} 1. Controller 또는 RouterFunction이 index 화면을 렌더링하면 thyList 라는 데이터를 반환할 것이다. 그러면 th:each에 정의한 대로 thyList 데이터를 사용해 div 목록을 생성할 것이다. 2. 하단에는 vue를 cdn 방식으로 정의하고 inline 스크립트에서 Vue 인스턴스를 생성했다. Vue 데이터 정의 부분에서 Thymeleaf 문법으로 vueList에 thyList를 주었다. 따라서 v-for 반복문에 따라 div 목록을 생성할 것이다. ..

[Spring5] Spring MVC vs WebFlux

아래 블로그에서 개념적으로 그리고 기초적으로 두 프레임워크의 차이점이 무엇인지 잘 정리한 것 같다. kimyhcj.tistory.com/343 Spring WebFlux Spring5에 도입된 WebFlux Spring MVC 는 Java EE의 Servlet Spec에 기반하여 만들어 졌고 본질적으로 Blocking + 동기방식입니다. Spring Framework 3.x부터 비동기 방식을 지원하고 있지만 S.. kimyhcj.tistory.com

[리액티브 프로그래밍] About Webflux, Mono

WebFlux에서 Controller의 요청처리 과정 (Mono 실행 시점) WebFlux에서 Mono.just() 를 사용해 기본적인 Controller를 구현했다. @GetMapping("/mono") fun mono(): Mono { logger.log("print 1") val m: Mono = Mono.just(generateHello()) .doOnNext { logger.log("doOnNext() => $it") } .log() logger.log("print 2") return m } fun generateHello(): String { logger.log("method generateHello()") return "Hello Mono" } * 위 소스에서 logger.log()는 Slf..