생계유지형 개발자 70

[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..

[리액티브 프로그래밍] User Thread, Daemon Thread의 차이점

사용자 쓰레드(User Thread)와 대몬 쓰레드(Daemon) 사용자 쓰레드와 대몬 쓰레드의 차이점은 메인 쓰레드(Main Thread)가 종료되었을 때 함께 종료되는가, 그렇지 않은가에 있다. 사용자 쓰레드는 메인 쓰레드가 종료되어도 프로세스를 강제로 종료하지 않는다. (종료하는 주체는 JVM이다.) 반면에 대몬 쓰레드는 메인 쓰레드 또는 남겨진 사용자 쓰레드가 종료되면 강제로 프로세스가 종료된다. 아래 예제 소스코드에서 Reactor라이브러리에서 제공하는 Flux 클래스의 Flux.interval() 함수와 단일 쓰레드를 생성하는 Executors.newSingleThreadExecutor() 함수가 정의되어 있다. Flux.interval() 함수는 내부적으로 대몬 쓰레드를 생성하여 로직을 실행..

[MyBatis] 계층형 결과 리스트 생성 (resultMap, collection 활용)

대표적으로 카테고리의 계층형 결과를 조회할 때 이 방법이 사용될 수 있다. 실제로 실무에서 사용 중인 테이블 구조와 소스코드를 필요한 부분만을 예제로 사용했다. 오라클처럼 계층형 쿼리가 있는 dbms라면 좋겠지만, mysql은 쿼리에서 지원되지 않는다. 별도의 함수를 만들거나 with recursive 라는 지시어를 사용하던데 mybatis로 해결이 되는 일이기 때문에 일일이 시도해보지 않았다. 샘플 데이터 계층 구조 데이터의 계층 구조는 다음과 같다. (* 코드명 ... 코드 형식으로 표기) 인사기준 ... L1 출장 ... L1_M1 국내 출장 ... L1_M1_S1 해외 출장 ... L1_M1_S2 퇴직 ... L1_M2 퇴직금 산출기준 ... L1_M2_S1 퇴직금 중간정산 ... L1_M2_S2..

[SpringBoot] 스프링부트 실행 시 톰캣 에러 (내/외부 톰캣 사용 문제)

# 오류 2021-02-19 10:48:50.749 ERROR 26881 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(To..

[ios] UITextField 사용할 때 키보드 타입 변경

iOS에서 텍스트필드에 문자를 입력할 때 노출가능한 키패드의 종류는 enum 타입으로 정의되어 있고, 소스코드에서 변경 가능하다. Swift @IBOutlet var keywordInput: UITextField! override func viewDidLoad() { super.viewDidLoad() keywordInput.keyboardType = .default } enum UIKeyboardType: int default - Specifies the default keyboard for the current input method. asciiCapable - Specifies a keyboard that displays standard ASCII characters. numbersAndPunctu..

[Spring5] WebFlux + Thymeleaf + Kotlin

스프링 부트 초창기에 Spring MVC 에서 Thymeleaf를 사용해보았는데, WebFlux 에서 사용하기는 처음이었다. 더군다나 코틀린 언어도 처음 접해보는 거라서 많이 낯설었다. 기존에 알던데로 application.yml에 설정을 작성하고, viewResolver를 추가하고, addResourcesHandler를 추가하고.... Spring MVC에서 하던대로 했는데 아무리 해도 templates/index.html을 뷰리졸버가 찾지 못했다. 구글 검색에서 나오는 많은 예시들을 따라해봤는데 여전히 안 되더라.. 폭풍 검색 끝에 실행되는 소스코드를 찾았다. (나중에 webflux에 익숙해지면 이 포스트를 보며 한심하게 느껴지려나....) 프로젝트 명: 두끼 (Dookki) * 그 떡볶이 맞음 bu..