전체 글 46

유저 닉네임 검색 속도 개선 - Postgresql 문자열 검색 빨리하기

먼저 성과부터 보여드립니다. 성과 개선 전 select * from user_table where nickname ilike '코%' order by id desc limit 100 postgresql 의 explain analyze 해본 결과 cost : 114404.84 Execution Time : 2571.743ms 정직한 Parellel Seq Scan 개선 후 select * from user_table where nickname ilike '코%' order by id desc limit 100 postgresql 의 explain analyze 해본 결과 cost : 743 Execution Time : 0.8ms 문제 문제 상황 유저간의 닉네임을 검색해야 했는데, 이 검색 속도가 느렸음 ..

Backend 2024.01.17

Cannot read properties of undefined (reading 'callHandler')

flutter inappwebview 라이브러리 공식 문서를 보면 flutterInAppWebViewPlatformReady 라는 리스너를 달아서 플러터 web 사이에 handler 을 불러올 수 있을때..! 그때가 되었을 때에야..!! flutter_inappwebview.callHandler() 을 호출하라고 명시해두었다. window.addEventListener("flutterInAppWebViewPlatformReady", function(event) { const args = [1, true, ['bar', 5], {foo: 'baz'}]; window.flutter_inappwebview.callHandler('myHandlerName', ...args); }); https://inappwe..

카테고리 없음 2023.05.19

Stable Diffusion : Dreambooth로 무료 셀프 AI Avatar 만들어보기

이 사진들은 모두 AI가 만든 사진입니닷 0. 학습시킬 내 사진을 준비합니다 사진 데이터의 개수는 6개 ~ 16개 까지 해보았는데 다 퀄이 괜찮았습니다 얼굴 이미지를 학습에 사용하기 위해서 512*512px로 사이즈를 수정하고, 파일명은 고유한 변수 + 넘버링 으로 했습니다 e.g. "johamcarat (1)" (이세상에 존재하지 않는 단어인것이 좋음) 사이즈 조정 및 네이밍 변경은 아래 Birme 사이트에서 간편하게 가능합니다 BIRME - Bulk Image Resizing Made Easy 2.0 (Online & Free) About Birme New features in version 2 NEW* Added support for WebP format Now you can adjust the f..

카테고리 없음 2023.02.21

서버 2대중 1대만 특정 태스크를 (알람) 하도록 하는 법

1차 시도 master_server db 를 만들어서 마스터가 될 ip 정보를 넣어두었다 그리고 서버들은 1분마다 아래 체크를 해서 본인이 마스터인지 확인을 했다 @Transactional(isolation = Isolation.SERIALIZABLE) fun checkIfMasterServer(): Boolean { val masterServerEntity = masterServerRepository.findByIdOrNull(1) ?: MasterServerEntity(1) val expireAt = masterServerEntity.expireAt if (expireAt?.isBefore(LocalDateTime.now()) != false) { masterServerEntity.ip = InetA..

Backend 2022.09.14

[에러해결] Unexpected error occurred in scheduled task

Unexpected error occurred in scheduled task org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only 기존에 스프링부트 + JPA 를 사용해서 백엔드를 구축 중이었당 이번에 주기적인 알람 기능을 구현하면서 @Scheduled 어노테이션을 사용하게 되었고 자연스럽게 @Transactional 어노테이션이 붙어있던 트랜잭션에 @Scheduled 어노테이션을 붙여서 사용하게 되었다 그러나 Unexpected error occurred in scheduled task 에러 발생.. 구글링을 ..

error 2022.09.13

Read-Only 함수에 @Transactional 을 붙여야 하는가?

스프링부트 + JPA 를 쓰다보면 @Transactional 어노테이션을 자주 사용하게 된다 어떠한 로직이 동작하면서 DB 값도 바꿔야 하는 상황일때 해당 로직이 실패하면 DB까지 모두 롤백시킬 심산으로 @Transactional 어노테이션을 활용하고는 했다 그런데 어느날 내가 Transactional 어노테이션을 남용하고 있는건 아닐까..? @Transactional(readOnly = true) 어차피 읽기만 할건데.. 롤백 될일도 없는데.. 이 코드가 과연 맞나..? 싶은 의문이 든다.. 두둥 알고보니 Spring JPA repository base class 가 애초에 모든 메소드들을 read-only transaction 으로 생각한다고 한다 저 코드는 필요 없는것! JPA Buddy 그리고 J..

Backend 2022.09.13

DEM? DSM? dxf? 데이터에 대해 알아보져

DEM 이란 무엇인가 Digital elevation model DSM 이란 무엇인가 Digital surface model 아래 이미지는 위키피디아에서 가져온, 화성의 Tithonium Chasma (? 무슨 협곡이라고 함) DEM 데이터를 가지고 3D렌더링을 한 결과물이라고 한다 DEM 데이터는 말그대로 elevation 데이터이기 때문에, 이를 이용해서는 3차원 시각화나, 지형의 평균 경사도 등을 파악해 볼 수 있다 DEM 과 DSM 은 어떤 차이인가? DEM 은 bare earth 를 표현한다고 한다. (인공지물과 식생을 제외) DSM 은 인공지물과 식생을 포함한 지구 표면을 표현한 데이터이다 AW3D30 AW3D30 은 전세계 30m급 DSM 을 무료로 제공하고 있는 데이터셋이다 AW3D30 을..

개발log 2022.01.05

react 프로젝트 clone 후 작업

clone 해온 후 프로젝트 directory 에 들어가서 아래 명령어를 통해 초기 작업을 해주었다 npm install npm install을 하면 package.json에 있는 dependencies 필드 정보를 기반으로 직접 생성한다. node_modules 디렉토리를 공유하면 데이터 낭비가 심하기 때문이다. package-lock.json 은 node_modules 디렉토리 내부의 차이발생을 방지한다. 즉, 특정 버전의 패키지들을 동일하게 설치해준다. 패키지를 공유할 때 정확히 똑같은 패키지 버전을 가져야 잘 작동하는 패키지도 있기 때문이다. npm install 후 뜨는 아래 메세지들을 알아볼 예정이다 1 package is looking for funding 먼저 1 package is loo..

개발log 2021.12.31

nginx 버전이 노출되어 있으면 위험할 수 있다구?

nginx 의 버전을 외부 사용자가 확인할 수 있게 노출시켜두면 위험하다! nginx 버전이 노출되는 대표적인 페이지로는 오류 페이지가 있다 nginx 에서 오류를 응답할때 기본적으로 반환하는 페이지에 버전 정보가 나오게 된다 1. 왜 위험한가 nginx 의 특정 버전의 취약점이 발견되면 이를 이용한 공격이 너무 쉬워진다. 최소한 내 서버의 nginx 버전이라도 모르게 해야한다. 2. 어떻게 대응해야 하는가 nginx 의 기본 오류 페이지가 반환되지 않도록 하거나, 위 기본 오류 페이지에서 버전 정보가 나가지 않도록 조치를 해야 한다 #nginx.conf http{ ... server_tokens off; ... } 위와 같이 옵션을 추가해주면, 아래와 같이 버전정보 없이 오류페이지를 반환한다 3. 요정..

Backend 2021.12.27