메모 & 삽질기록보관소

메모 & 삽질기록보관소

[자바] 자바 데이터 마이그레이션 툴 개발기

2년차 백엔드 개발자로 스타트업에서 일하고 있던 중, 이기종 DB간의 데이터를 동기화하는 모듈 개발을 진행하게 되었다. 예를 들면 Mysql의 특정 테이블에서 Postgresql의 특정 테이블로 데이터를 동기화 하는 것. 프로젝트는 내 주언어인 자바로 진행하게 되었고, 프로젝트에 대한 아키텍처가 전혀 없는 정말 맨바닥 단계부터 진행하게 되어 초반부터 많은 고민들과 삽질 을 하게 되었다. 이 글은, 프로젝트를 진행하면서 했던 기술적인 고민들을 기록하기 위한 글이다. (회사와 관련된 민감한 정보들은 최대한 누락하고 작성할 예정... 이지만 차후 문제가 생길 경우 글이 내려갈 수 있다...) 프로젝트 첫 날 ~ 샛째 날 프로젝트 요구사항을 분석했다. 요구사항의 개략적인 맥락은 크게 세 단계로 보였다. 1. 소..

메모 & 삽질기록보관소

[자바] MXBean already registered 에러 핸들링

발단 회사에서 커넥션 풀 시스템을 개발하고 있었는데, 개발을 마친 시스템이 동작하지 않았다. 어제 퇴근할 때쯤 개발이 끝나서 스프링부트 프로젝트에 올려 모든 과정이 정상적으로 동작하는 걸 확인했는데 오늘 아침에 출근을 해보니 스프링 프로젝트가 구동되지를 않는다. 에러로그를 쫓아보니 어제 내가 개발한 풀 시스템 쪽에서 에러가 나는건 확실한데... 왜 에러가 나는지 도저히 감이 잡히지 않는다. 아니 어제 정상적으로 동작하는 거 확인 했었단 말이야! 상황 개략적인 상황은 다음과 같았다. 스프링부트로 구동 중인 프로젝트가 하나 있고, 풀링 시스템이 동작하는 라이브러리가 하나 있다. 풀링 시스템 라이브러리는 내가 만든 라이브러리였고, GenericObjectPool이라고 하는 아파치의 JDBC 관련 풀 객체를 ..

메모 & 삽질기록보관소

MQTT 공부 중 참고할만한 문헌 모아두기

MQTT 설계 아키텍처 관련 https://www.joinc.co.kr/w/man/12/MQTT/MultiChat MQTT를 이용한 Push 서비스 개발 MQTT를 이용한 Push 서비스 개발에서 MQTT 설치와 함께, 간단한 채팅 애플리케이션을 만들었다. 한발 더 나아가 MQTT기반의 푸쉬(push) 서비스를 기획해 보려한다. 개발이 아니고 기획이라고 하는 이유 www.joinc.co.kr Facebook 메신에서 사용하는 MQTT https://d2.naver.com/helloworld/1846 MQTT 브로커 모스키토 관련 자료 https://mosquitto.org/ Eclipse Mosquitto Eclipse Mosquitto is an open source (EPL/EDL licensed) ..

메모 & 삽질기록보관소

[데이터베이스] MySQL과 MariaDB의 차이점?

발단 회사의 동료 개발자가 퇴직을 함에 따라, 동료 개발자가 들고 있었던 유지보수 프로젝트 하나가 나에게 넘어왔다. 입사 초, 프로젝트 구축 초기에 잠시 참여해 포인트, 출석체크 기능을 만든 적이 있었던 프로젝트인데 이후에는 별다른 작업에 참여하지 않아 히스토리를 전혀 모르는 상황이었다. 며칠 전, 클라이언트로부터 게시판의 고정글 기능이 제대로 작동하지 않는 것 같다는 문의가 왔다. 우리 회사 고정글 기능은 특정 날짜를 입력하면 그 날짜에 속하는 일자에 고정글이 게시되고, 그 일자 이전 혹은 이후에는 고정글이 내려가도록 되어 있었는데 확인을 해보니 해당 기능이 동작하지 않았다. 회사 cms에 기본적으로 탑재되어 있는 기능인데 왜 동작을 하지 않을까 의문을 가지며 디버깅을 시작했다. 문제의 대략적인 형태 ..

메모 & 삽질기록보관소

[strapi] NginX 리버스 프록싱 관련 이슈

먼 옛날 옛날 최근 회사에서 스프링 기반의 애플리케이션 이외의 Headless cms 기반의 애플리케이션에 대해 고민하기 시작하며 회사 개발자 중 유일하게 node.js를 (사용해봤다고 말하는 게 민망하긴 하다만...) 사용해 본 경험이 있는 나를 자연스레 담당 개발자로 두게 되었다. 아직 Headless에 대해 분명하고 명확하게 이해하고 있는 부분은 아니나, 내가 알고 있는 Headless의 요점은 백엔드와 프론트엔드의 분리, 즉 내부 서버 로직이 특정 뷰에 종속되지 않고 api를 이용해 다양한 형태의 클라이언트에게 서비스를 제공할 수 있는 부분이었다. 나는 어디까지나 자바 개발자였기 때문에 node.js 생태계에 대한 이해가 넓지 않았고, 그런 우리가 선택한 서버 구축용 프레임워크가 있었으니, 바로 ..

메모 & 삽질기록보관소

[JPA] 스프링이 엔티티를 인식하지 않는 것 같습니다!

개발환경 JDK 1.8 MySQL 스프링부트 version 2.4.5 발단 JPA를 사용하는 사내 스프링부트 프로젝트를 진행하며 내가 만든 엔티티가 데이터베이스에 반영되지 않는 현상이 발견되었다. 사내 프로젝트는 Mybatis와 JPA를 혼용해 사용하기 때문에 ddl-auto 옵션을 update로 설정해두고 개발을 진행하고 있었는데도 엔티티가 데이터베이스에 반영되지 않았다. 컴파일러가 실행되며 애플리케이션이 구동될 때 어떠한 에러도 발견되지 않았고 서버도 정상적으로 실행되는데... 왜 엔티티가 반영되지 않는거지? 마치... 내가 만든 엔티티가 단 한순간도 존재하지 않았던 것처럼 스프링 프로젝트가 내가 만든 엔티티를 철저히 무시하고 있다는 생각이 들었다. 원인 당시에는 원인을 몰라 정말 많은 시도(라 쓰고..

메모 & 삽질기록보관소

[윈도우 11?] Mybatis - Password Not Matched!!!

3줄 요약 새로운 노트북을 사고 윈도우 11 os를 설치함 윈도우 10에서는 잘 열리던 스프링(maven, mybatis) 프로젝트가 열리지 않음 노트북에 윈도우 10을 깔고 다시 돌리니 정상적으로 작동함. 발단 기존에 사용하던 노트북이 회사 프로젝트를 돌리기에 성능상 버거운 점이 많아서 최근 새로운 노트북을 한대 장만했다. 새로운 노트북이니까 윈도우 11 os를 탑재시키고 이전 노트북보다 더 좋은 CPU(와 그래픽카드)로 열심히 코딩(과 게임)을 할 생각에 마음이 들떴다. 새로 산 노트북을 들고 개발환경을 갖춘 후(java, tomcat, intellij 등 자바 스프링 개발을 위한 개발환경) 회사 프로젝트를 로컬서버로 구동했다. 그리고 마주한 에러. ibatis.exceptions.persistenc..

메모 & 삽질기록보관소

[jqeury] ajax에서의 parse error | 스프링과 자바스크립트의 부조화

발단 회사 프로젝트를 하면서 뷰단에서 실시간으로 데이터를 업데이트 할 일이 있어 ajax를 사용하게 됐다. 예를 들어 아래처럼 버튼을 만들고, 버튼이에요 버튼을 누르면 ajax가 작동해 서버에 데이터를 전송할 수 있도록 말이다. $.ajax({ url: "please/insert/target/url", type: "POST", dataType: "JSON", data: { a: something, b: somethingElse } } 문제가 없어 보였다. 서버를 돌리고 iamButton을 눌러보았다. 아무 응답이 없었다. 마치 아무것도 하지 않은 것처럼. ... 뭐지? 원인 이 문제를 해결하려고 근무시간 중 꼬박 2시간을 쏟았다. 한두시간 투자하면 구현하고도 남겠다 싶었던 기능이 두어시간동안 제대로 시작..

메모 & 삽질기록보관소

[메모] 배포 관련 리눅스 명령어

리눅스가 익숙치 않아서.. 프로젝트 진행시 자주 사용했던 명령어를 적어둔다. 1. 실행중인 포트 pid 죽이기 fuser -k [port]/tcp ex) 8080 포트를 사용하는 pid를 죽이고 싶어! -> fuser -k 8080/tcp 2. 경로 내 모든 파일 삭제 rm * 3. 배포 nohup java -jar /home/ec2-user/[이하 경로 - 프로젝트 위치까지]/build/libs/[빌드한 파일명].jar & nohup을 쓰면 터미널이 끊켜도 실행한 프로세서가 계속 실행된다고 한다! 뒤에 &를 붙이는 이유는 백그라운드로 실행시키기 위함이라고 함! 참고로 nohup을 실행시키면 (아마도 명령어를 실행한 위치에?? 정확하지 않음) nohup.out이라는 파일이 생성되는데, 여기에 로그가 찍힘..

메모 & 삽질기록보관소

[EC2 - 서버 배포] TemplateInputException

프로젝트를 완성해 EC2에 서버를 배포했다. 깃허브를 연동해 EC2 리눅스에 프로젝트를 내려 받고 성공적으로 JAR 파일을 빌드하는데 성공했다. (여기까지도 2-3시간 걸린듯 하다. gradle이 빌드시에 롬복을 인식하지 못하는 상황이 발생해서 build.gradle에 아래와 같이 조치를 취한 후 아래와 같은 명령어로 빌드를 수행했다.) /** 에러가 발생하는 build.gradle */ ... implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' ... /** 빌드 시에 롬복을 발견하지 못하는 에러를 해결한 build.gradle */ ... implementation 'org.springframework.boot:spring-..

석이
'메모 & 삽질기록보관소' 카테고리의 글 목록