web
Typescript 헷갈리는 부분 정리
Any vs Object vs Unknown - typescript에서 모든 타입은 any type의 서브 타입들이다. 그래서 어떠한 제약도 없는 모든 타입을 받아서 사용할 수 있다. - object non privitive type으로 undefined, string, boolean, symbol같은 primitive type을 허용하지 않는다. 대신 null은 허용된다. (null은 태생이 object) - unknown 타입은 any 타입처럼 어떤값도 넣을 수 있다. 하지만 ts compiler는 unknown 타입에 대한 어떤 오퍼레이션도 허용하지 않는다. 게다가 unknown 타입은 오직 any 타입만 할당 할 수있다. 자료형 캐스팅 방법 - let strLength: number = (some..
Redis에서 Pub/Sub 방식 소개 및 Spring Boot에서 구현해보기
redis에 추가된 SUBSCRIBE, UNSUBSCRIBE 그리고 PUBLISH는 Publish/Subscribe 메시지 패러다임을 구현한 기능이다. sender(publisher)들은 특별한 receiver(subscriber)에게 값을 전달하는게 아니라 해당 채널에 메시지를 전달하면 그 메시지를 구독하고 있는 subscribe에게 메시지를 전송한다. subscribers는 하나 또는 그 이상의 채널에 구독을 요청하고 publisher가 누구인지 상관 없이 해당 채널에 들어온 모든 메시지를 읽게된다. 이 subscriber와 publisher의 decoupling은 확장성있는 성장을 가져올 수 있다. Redis-Cli로 기능 사용하기 subscriber redis-cli를 열고 SUBSCRIBE 채널..
Spring5 리액티브 스트림 정리 및 api 전달 방식 정리
리액티브 또는 리액티브 스트림은 오늘날 spring framework에서 뜨거운 토픽으로 자리잡고 있다. 그래서 나도 이전 포스팅에서도 정리도 하고 했었는데 아직 확실히 개념이 서질 않아서 다시 정리해봤다. 리액티브 스트림 (Reactive Stream) 이란? 리액티브 스트림은 무엇인가? 정확하게 공식문서에는 다음과 같이 기록되어 있다. (https://www.reactive-streams.org/) Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure.This encompasses efforts aimed at runtime enviro..
Spring boot 모니터링 Actuator 소개 및 설치
spring acturator를 통해서 스프링 애플리케이션의 작동여부등을 체크해보자. 설정 우선 gradle 라이브러리를 추가한다. compile 'org.springframework.boot:spring-boot-starter-actuator' 그리고 기존에는 application.properties나 yml에 아래 옵션을 설정해줘야 했지만 기본적으로 설정이 되어있다. endpoints.health.enabled=true 하지만 이는 Spring boot 2.0에서 다음으로 변경되었다. (https://stackoverflow.com/questions/48900892/how-to-enable-all-endpoints-in-actuator-spring-boot-2-0-0-rc1) How to enable..
ffmpeg로 동영상 정보 추출 및 썸네일 가져오기
ffmpeg로 동영상 정보 추출과 썸네일을 가져올 수 있다. 간단하게 설치하고 cli를 통해 진행해보자. 설치 우선 mac os인경우 brew install ffmpeg로 설치하고 linux인 경우 sudo apt-get install ffmpeg로 설치하면 되다. 동영상 정보 가져오기 (ffprobe) ffmpeg에서 ffprobe를 이용해서 동영상 정보를 추출 할 수 있다. print_format옵션을 사용하여 json 형태로 출력이 가능하다. 만약 프로그램에서 사용 시 node에서는 child_process를 이용해서 실행 수 결과를 받아서 사용하면 된다. ffprobe -v quiet -print_format json -show_format -show_streams wedul.mp4 썸네일 만들기..
Intellij에서 spring boot multi module 사용시 jsp 못찾는 이슈 해결방법
기존에 공부삼아서 개발중이던 wedulpos에 spring batch를 추가해보려고 했다. 그래서 공통으로 mono 프로젝트로 되어있던 wedulpos를 multi module로 수정했다. 그랬더니 이상하게 servlet context에서 jsp를 로드하지 못했다. 그래서 계속해서 ServletException not include... jsp 또는 ServletException not jsp found 오류가 발생했다. 그래서 엄청난 구글링을 2틀동안했다. 집에서 그리고 약속장소에서 기다리면서 노트북으로 그리고 퇴근하고 오늘.. 정말 가지가지한 방법을 다해봤었다. 기본적으로 embed-tomcat의 경우 jasper를 가지고 있지 못해서 별도의 모듈을 추가하고 servlet jspl 추가했고, comp..
heroku 에서 spring boot jar파일 deploy시 Web process failed to bind to $PORT within 90 seconds of launch 에러 처리
heroku에 코드를 올리지 않고 바로 jar 파일을 deploy하기 위해서 heroku cli를 이용하여 올리는데 자꾸 Web process failed to bind to $PORT within 90 seconds of launch가 발생했다. 이유를 몰라서 계속 알아보던 중 heroku에서 spring boot를 실행시키기 위해서는 Procfile을 작성하고 port를 지정해줘야 한다. 우선 application.yml 설정 server: port: ${port:8080} Procfile 설정 - Procfile은 확장자 없이 만들어야한다. - 포트는 8080이나 원하는 걸로 지정해 주고 profile까지 작성해주고 나머지 depoly를 위한 내요을 작성한다. web: java -Dspring.se..
creating bean with name 'webMvcRequestHandlerProvider' defined in URL 에러처리
Spring 시작 시 creating bean with name 'webMvcRequestHandlerProvider' defined in URL에러가 발생했다. 이유는 spring context관련 설정이 중복되어 발생한 문제였다. @EnableWebMvc를 사용하는곳에서는 @Configuration을 지워주면 문제가 해결되었다.
node.js에서 multer 사용하여 이미지 업로드 및 텍스트 파일 다루기
Multer는 파일 업로드를 위해서 사용되는 multipart/form-data를 다루기 위한 node.js 미들웨어이다. busyboy를 기반으로 하고 있다. 자세한 내용은 https://github.com/expressjs/multer/blob/master/doc/README-ko.md 이곳에서 참고하면 된다. 그럼 간단하게 multipart/form-data로 올린 이미지 파일과 텍스트파일을 request post로 받아서 처리하는 코드를 만들어보자. 우선 multer를 설치한다. npm i multer 그리고 이미지 파일을 특정 경로에 저장해놓고 사용할 수 있지만 나는 메모리 스토리지를 사용해서 조작하는 방식으로 진행해보겠다. multer 라이브러리를 선언하고 memoryStorage를 사용할 수..
[번역] shared message queues와 publish-subscribe 방식에 Custom Group 방식을 더한 Kafka 소개
전통적으로 메시지 모델은 Shared Message Queue, Publish-subscribe로 구분된다. 두 가지 모델 모두 그들만에 pros and cons를 보유하고 있다. 하지만 이 두개의 모두 최초 디자인 제한 때문에 큰 데이터를 다루기에는 부족했다. Apache Kafka는 두 모델 중 publish-subscribe 메시징 모델을 구현한 모델로 부족했던 부분을 수정하고 실시간 분석을 위한 스트리밍 데이터를 처리할 수 있도록 가능해졌다. kafka는 LinkedIn에서 2010년에 방대한 데이터 처리를 위해서 개발되었다. Apache Kafka는 전통적인 메시징 모델이 달성하지 못한 격차를 해소했다. Kafka는 두 모델의 개념을 구현하여 단점을 극복하고 동시에 두 가지 방법론을 모두 통합 ..