플러터 강의와 함께 개발을 진행했었던 앱을 release 시켜 휴대폰에 설치하는 과정을 진행했습니다. 갤럭시 S22플러스 모델을 사용중이어서 안드로이드 플랫폼으로 타겟팅해서 빌드를 진행했습니다. release apk 파일 생성을 위한 명령어는 다음과 같습니다. flutter build apk --release --target-platform=android-arm64 휴대폰을 직접 연결해서 flush install 명령어를 통해 설치도 가능하나 클라우드 개발 환경이어서 구글드라이브로 apk 파일을 올린 후에 공유 기능을 통해 다운로드 설치를 하는 과정을 진행하려 했습니다. 그런데 설치 과정에서부터 아래와 같은 오류를 마주하게 됩니다. Target aot_android_asset_bundle failed: ..
작업개요 전자정부 스프링 프레임워크로 개발된 레거시 프로젝트를 상위 버전으로 마이그레이션 작업을 하게 되었습니다. 스프링 부트로 옮겨가고 싶었으나 스프링 3.0.5 버전으로 작성된 오래된 버전이어서 일단은 4.x 대로 올리는 작업을 우선하게 되었으며 제법 많은 시행착오를 거치면서 진행했기에 시간을 많이 할애하게 되었습니다. 전자정부 프레임워크 공식 사이트에서 버전간 마이그레이션 가이드 문서가 제공되고 있으니 해당 문서를 참고해서 작업 하시는걸 추천드립니다. 첨에 이 문서를 제대로 보지 않고 진행해서 더 헤맸던것 같습니다. 제가 작업한 전자정부프레임워크 실행환경 버전은 중구난방이어서 딱히 버전을 몇으로 올렸다라고 말하기 힘드네요. 최신 실행환경의 버전이 4.1인데 스프링 버전은 5.3.20을 쓰고 있는걸 ..
전자정부 스프링프레임워크 하에 개발을 진행중이시라면 프론트엔드 쪽은 jsp 페이지로 구성할텐데요. 최근에 스프링부트 마이그레이션 진행하면서 타임리프를 쓴다는걸 배웠으나 러닝커브가 가파르다는 얘기를 듣고 jsp를 버리기는 어렵겠구나 하는 생각을 해보았습니다. 새로운 언어의 문법을 익히는 데에도 시간이 소요되며 마이그레이션을 진행한다해도 어느 세월에 완료될지 알 수 없기에 그대로 jsp 를 고수하면서 개발을 진행하기로 합니다. 그러던 와중에 'is exceeding the 65535 bytes limit' 이러한 오류 문구를 발견하게 됩니다. 찾아보니 톰캣 서버가 jsp 페이지를 허용하는 크기를 넘어섰을 때 나타내는 오류 문구였습니다. 쉽게 말해 JSP 페이지 용량초과, 다른 말로 풀어낸다면 한페이지에 너무..
전자정부 프레임워크 버전이 너무 오래된 관계로 업그레이드 작업을 진행했습니다. 굉장히 많은 시행착오를 거쳤는데 스프링 프레임워크에 대한 이해가 부족한 무지에서 온 삽질의 연속이었습니다. 표준 프레임워크 업그레이드 가이드 문서가 있었음에도 검색능력의 부족으로 문서존재조차 몰라 맨땅에 헤딩하면서 진행했지만 결국 업그레이드에 성공하긴 했습니다. 스프링 프레임워크 3.x 버전에서 4.x 로 올리면서 전자정부 프레임워크도 업그레이드를 진행했는데 아래 가이드 문서를 참고하시면 좋을듯 합니다. 오늘은 프레임워크 업그레이드 작업중에 리포지토리 변경하는 작업이 필요했었는데 그 절차를 포스팅해보려 합니다. 아파치 메이븐 공식 홈페이지에 이미 소개되어 있는 방법이며, 이클립스 환경설정에서 진행이 가능합니다. 전자정부 프레임..
앞서 springboot 프로젝트에 액츄에이터를 활성화 시켜서 docker 에 올리는 작업을 진행했습니다. 이제 프로메테우스(prometheus)와 그라파나(grafana)를 설치해 스프링부트 서버 모니터링 환경을 구성해보려 합니다. 프로메테우스는 스프링부트에서 제공해주는 메트릭스 정보를 수집하는 서버이고 그라파나는 이 데이터를 시각화 해서 보여주는 시각화툴입니다. 프로메테우스(prometheus) 설치 먼저 프로메테우스를 설치하기 위해 config 파일을 작성해줍니다. prometheus.yml 파일을 만들어 아래 내용을 작성해줍니다. 전역으로 15초 인터벌로 데이터를 수집하도록 설정이 되었으며 scrape_configs 내 접근 대상 정보를 기입해줍니다. job_name 으로 프로메테우스와 스프링액츄..
카카오봇 UDP 서버를 도커에 올렸는데 서버 시간이 맞지 않아서 이상동작을 하는 것을 확인했습니다. 확인해보니 서버 시간이 9시간 전으로 잡혀있더군요. 타임존을 셋팅해주지 않아서 디폴트로 다른 ZONE 시간대로 설정된 것으로 파악하였습니다. 서버 시간을 변경하는 방법은 직접 도커 컨테이너에 접속해서 시간 설정을 변경해주면 됩니다. 하지만 이렇게 하게 될 경우 이렇게 하게 될 경우 컨테이너를 재생성하거나 재실행 시 또 시간을 바꿔주어야 하는 문제가 발생합니다. 그래서 위 방법은 서버를 재실행하기 어려운 상황에서 임시방편으로 사용할 수 있는 방법입니다. 그래서 1회성이 아닌 도커 컨테이너 실행 시점부터 정상적인 시간대로 맞춰주기 위해 때 TIMEZONE 정보를 넣어주고 도커 이미지를 생성해주면 됩니다. 서버..
앞서 카카오톡 메신저봇 챗봇 서버를 돌리기 위해 윈도우11에 docker desktop 환경을 구축했었습니다. [docker] docker desktop 설치, 챗봇 서버 이미지 배포 테스트 윈도우에 WSL2 docker 설치 후 테스트 서버로 시운전까지 마쳐주고 설치해준 도커 서버는 삭제를 해주었습니다. 좀 더 편리한 환경을 위해 Docker Desktop을 설치해서 운용해보기로 합니다. 먼저 Docker D quantrader.tistory.com 이제 추가적으로 모든 개발 환경을 docker 에 올리기로 합니다. 단일 tomcat 을 띄워서 구동하는 방식보다 여러모로 장점이 있는 듯 합니다. 아직은 더 경험해보아야 하는 부분이지만 일단 한번 시작한 스터디는 끝을 봐야 할듯 합니다. spring bo..
리액티브 시스템 - 비동기 메시지 기반 통신으로 동작해야 하고 높은 응답성을 지녀야함 선언현 프로그래밍 방식 명령형 프로그래밍 방식 데이터 소스의 변경이 있을때마다 데이터를 전파, 스트림 형태로 구독하는 방식 리액티브 프로그래밍 코드는 코드의 간결함과 가독성에 유리한 메서드 체인의 형태로 표현 목표 함수의 형태 Publisher : 입력으로 들어오는 데이터를 Subscriber에 제공하는 역할 Subscriber : Publisher 로부터 전달받은 데이터를 사용하는 역할 Data Source : Publisher 의 입력으로 전달되는 데이터를 의미 Operator : Publisher 와 Subscriber 중간에서 데이터를 가공하는 역할 업데이트 중
이클립스 사용중에 CTRL+ALT+R 단축키를 이용하면 파일명 검색을 할 수 있는 Open Resource 창이 뜹니다. 보통 여기서 찾고자하는 jsp, js, xml, .do java파일등을 검색하는데 가끔 여기서 파일을 찾아서 수정을 하고 반영을 시켜도 원래대로 돌아가는 현상이 발생하곤 합니다. 빌드된 target 폴더 내 동일 파일명에 접근해서 수정을 하는 바람에 이런 현상이 나타나는 거라서 미연에 방지함이 좋습니다. target 폴더 내에 검색되는 파일은 검색결과에서 제외될 수 있도록 설정을 변경해보겠습니다. 먼저 이 설정은 프로젝트 별로 설정이 되는 부분이라서 왼쪽 Project Explorer 내 프로젝트 타이틀에 마우스 우클릭 팝업 메뉴를 이용해 Properties 에 접근해줍니다. 아래와 ..
Flutter 앱 개발 강의 3주차를 진행중에 있습니다. 여유만 있다면 모든 강의를 다 독파 할 수도 있겠지만 직장인이 그게 어디 쉬울까요. 주말과 야간을 이용해서 짬내서 계속 진행중에 있습니다. 내일배움카드라는 필살기가 있어서 참 좋네요 3주차에는 메모장 앱을 개발해보는 중입니다. 현재까지 학습한 부분을 기록하면서 복습해보는 시간으로 이 포스팅을 진행해봅니다. 메모장 답게 제공하는기능은 다음과 같습니다. 메모 리스트 조회/출력, 메모 쓰기/수정/삭제, 파일로 저장하기/불러오기 등입니다. 개발환경은 MacOS 상에서 안드로이드 스튜디오로 진행했습니다. 비주얼스튜디오코드가 좋다고는 하는데 아직 익숙해지지 않아서 쓰기가 불편합니다만 강사님께서 쓰는 화면을 보고 있노라니 Visual Studio Code 가 ..
개요 메신저봇r을 이용해서 카카오봇을 만들어온게 몇일 안된거 같은데 여러모로 활용할 수 있는 방안을 만든것 같습니다. 이번에는 역시나 핫한 openAI의 chatGPT api를 이용해보려 하는데요. 구글의 bard 가 치고 올라오고 있어서 활용하는 입장에서는 두 ai 엔진을 번갈아 가며 좀 더 결과물이 좋은 쪽을 택하는게 좋지 않나 생각합니다. 바드로 진행할까 하다가 일단은 chatGPT를 이미 제가 개발해둔 카카오봇에서 활용중이라서 이 코드를 활용해 chatGPT를 내장하는 방법을 알려드리겠습니다. 본문 개발중인 카카오봇에 chatGPT를 내장하는 방법은 정말 간단합니다. 사실 내장하는 방식을 아름답게 변경한다고 하면 서버쪽으로 호출해서 응답을 소켓으로 받거나 콜백 url을 남겨서 받거나 하는 비동기 ..