본문 바로가기

전체 글

(121)
Ktor Application 빌드 오류 시 (Shadow Plugin) Ktor Application을 IntelliJ에서 실행할 땐 잘되는데 gradle로 단순히 빌드하고 실행하면 오류가 발생해요. 이게 오류 그대로 jvm에서 jar 파일의 main 메소드를 찾지 못했다는 오류입니다. main 메소드는 manifest에 있기 때문에 no main manifest attribute라는 문구로 알려줍니다. no main manifest attribute, in build/libs/ktor-sample-0.0.1.jar 해결 방법은 다양한대요. 구글링해보시면 build.gradle.ts 에 Main 클래스를 정의해줌으로써 간단히 해결이 가능합니다. 크게 문제될 일은 없지만 추천하는 방법은 아닙니다. Ktor 문서에서 위의 문제를 해결하기 위한 가이드를 제공합니다. Gradle ..
Ktor Framework 프로젝트 생성 Ktor Framework 알게된 후부터 지켜보기만 하고 있었어요. 귀찮아서 프로젝트도 만들어 본 적이 없었죠.. 여기저기서 쓰고 좋다는 평이 많아서 일단 세팅하고 써보려고 합니다. 툴은 IntelliJ를 사용할거에요. IntelliJ에서 하셔도 되고 아래 URL에서 프로젝트를 세팅하실 수도 있어요. https://start.ktor.io/ Generate Ktor project start.ktor.io 기본적인 프로젝트 정보입니다. 그 다음에 이런저런 플러그인들이 나오는데 스프링 부트를 써보셨으면 대강 머가먼지 이해가 쉬우실거에요. 그래도 먼가 애매해서 선택안하고 완료해봅시다. 패키지 구조 이런 모습입니다. 제가 무언가를 잘못한 건 없는 것 같은데 .gitignore 파일은 안 만들어주는 것 같네요? ..
맥 터미널 기록 삭제 (MacOS Terminal History) MacOS에서 터미널을 이용할 때 위에 화살표를 누르면 이전 command가 나와요. 지금까지의 command 이력을 삭제하는 법을 알아볼게요. 간단합니다. 히스토리 파일을 삭제해주면 되요. bash를 사용하는 경우 rm ~/.bash_history zsh를 사용하는 경우 (macOS Catalina부터 기본 Shell) rm ~/.zsh_history
MySQL 스토리지 엔진 (InnoDB, MyISAM, 그외...) InnoDB vs MyISAM What's different? InnoDB MyISAM Locking Level Row Table Foreign Key Yes No Transaction Yes No Clustered Index Yes No Full-Text Index Yes (MySQL 5.6~) Yes Geospatial Index Yes (MySQL 5.7~) Yes Storage Limit 64TB 256TB InnoDB 높은 신뢰성과 고성능의 균형을 이루는 범용 스토리지 엔진입니다. 많은 기능을 제공하여 상대적으로 무겁습니다. Row level locking 지원으로 INSERT,UPDATE,DELETE에 유리합니다. write가 많은 서비스에서 유리합니다. 테이블과 인덱스를 테이블 스페이스에 저..
JVM 구조와 GC 종류 간단 정리 JVM Java byte code를 실행할 수 있는 주체 byte code를 OS에서 동작할 수 있도록 기계어로 변환하여 실행 JVM 언어 byte code는 다른 언어로도 만들 수 있음 - Java, Kotlin, Groovy, Scala, Clojure 특징 java byte code를 타켓 플랫폼에 상관없이 JVM 위에서 동작시켜 플랫폼 독립성 보장 스택 기반의 VM 가비지 컬렉션 (GC) 구조 Class Loader Runtime Data Area에 Java Class를 로드 로드(Loading) → 링크(Linking) → 초기화(Initialization) Runtime Data Area OS로부터 할당받는 메모리 영역 [JVM 메모리 구조] - Method Area: 클래스의 메타 정보, 모..
FFmpeg m3u8 to mp4 https://www.ffmpeg.org/ FFmpeg Converting video and audio has never been so easy. $ ffmpeg -i input.mp4 output.avi News June 19th, 2021, IRC We have a new IRC home at Libera Chat now! Feel free to join us at #ffmpeg and #ffmpeg-devel. More info at contact#IRCChannels April 8th, 20 www.ffmpeg.org ./ffmpeg -i "https://gofnrk.tistory.com/video.m3u8" -c copy -bsf:a aac_adtstoasc "video.mp4"
Spring Webflux ExceptionHandler Functional Endpoints Webflux에서 Annotated Controllers 패턴에서는 주로 MVC와 비슷하게 @ControllerAdvice 어노테이션과 @ExceptionHandler 어노테이션을 이용하는데요. Functional Endpoints 패턴에서는 주로 ErrorWebExceptionHandler을 활용합니다. 해당 인터페이스를 구현한 AbstractErrorWebExceptionHandler를 사용해볼거에요. AbstractErrorWebExceptionHandler 해당 생성자가 Deprecated 되었습니다. (Deprecated since 2.4.0 for removal in 2.6.0 in favor) @Deprecated public AbstractErrorWebExceptionHandler(Err..
Spring Boot ReactiveRedisTemplate<String, Integer> ReactiveRedisTemplate에서 value의 타입을 정하는 설정 코드에요. Java @Configuration public class RedisConfiguration { @Bean public ReactiveRedisTemplate numberRedisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { StringRedisSerializer keySerializer = new StringRedisSerializer(); GenericToStringSerializer valueSerializer = new GenericToStringSerializer(Integer.class); RedisSerializationContext.Redis..