개발 라이프(338)
-
[에러] javax.management.InstanceAlreadyExistsException: MXBean already registered with name org.apache.commons.pool2:type=GenericObjectPool, name=pool
[Reason] Redis 를 사용하면서 Redis 클라이언트와 소통하기 위해 Jedis를 사용하고자 했고, Configuration을 설정하고 연결한 Jedis를 Bean 객체로 만들어주도록 했다. 이 후 프로그램을 실행 시 위와 같은 에러가 발생하였다. 기본적으로 Spring은 실행하자마자 Bean으로 설정된 모든 객체를 MBean으로 우선 등록하는데, 이에 JedisPool을 MBean으로 등록하고, 이후에 JedisPool의 커넥션으로 설정한 뒤 pool이라는 이름으로 초기화되어 반환하게 되는데 이 때 이미 MBean으로 등록된 JedisPool 객체가 커넥션을 수립 후 반환되어 다시 MBean으로 등록되고자 하여 중복된 MBean이 발생되었다는 에러가 나타난 것이다. [Solution] (1) ..
2024.03.27 -
서비스 요청 시 과도한 시간 소요를 줄이기 위한 노력
프로젝트를 개발하던 도중 1차적으로 완성된 백엔드 api를 개발한 안드로이드 어플리케이션에서 호출할 때 대용량의 데이터를 포함하여 요청 시 얼마나 시간이 걸리고 이에 대한 해결책을 알아보고자 하였습니다. 기존 서비스 요청 시 - 안드로이드 로직 // 테스트 용 스캔 데이터 총 1500개 for (int i = 0; i < 500; i++) { String rfidChipCode = "RFID" + i + "CHIP"; String filteringCode = "CCA2310"; String productCode_ = "A00"; String productSerialCode_ = (i + 1) + "D240313"; if (!productCodeList.containsKey(productCode_)) { ..
2024.03.20 -
[Java] 주키퍼 서버 / 클라이언트 (다운로드 및 설정)
주키퍼는 분산 시스템 설계하는 데에 있어 유요한 도움을 주는 서버 및 도구입니다. 오늘은 이 주키퍼 서버 및 클라이언트를 다운로드 하고 설정하는 방법에 대해서 정리해보겠습니다. 분산 시스템을 어떻게 개발할 것인가? 지금 현재 컴퓨터가 여러 대 있지도 않고 클라우드 기기를 여러 대 사놓고 원격으로 개발하는 일은 매우 불편하고 비용도 많이 듭니다. 하지만 일반적으로 분산 시스템 개발은 정해진 방식으로 진행되는데, 이 방식이 보통 여러분 기기에서 로컬로 진행할 수 있습니다. 따라서 개발환경(IDE)에 맞춰 로컬에서 코드를 작성하고, 디버깅하고, 테스트할 수 있습니다. 일반적으로 로컬에서 개발을 마친 다음에 개발한 프로그램을 검증하기 위해 클러스터 같은 플랫폼에 배포하고 품질 검증을 거칩니다. 그러고 나서 실제..
2024.03.20 -
[Java] 클러스터 코디네이션(주키퍼)과 리더 선출 알고리즘
분산 시스템의 알고리즘과 설계를 진행하기 이전에, 분산 시스템에서 가장 기본적이고 공통적인 두 가지 용어부터 알아보겠습니다. (1) 노드 (node) 노드는 분산 시스템의 일부로 동작하는 시스템에서 실행되는 각 프로세스입니다. 분산 시스템에서는 두 노드 사이에 선분이 존재하면 두 프로세스가 네트워크를 통해 서로 통신할 수 있다는 뜻입니다. (2) 클러스터 (cluster) 클러스터는 서로 연결된 노드의 모음입니다. 한 클러스터의 노드들은 동일한 작업을 수행하며 일반적으로 동일한 코드로 실행됩니다. 보통 우리는 분석해야하거나 복잡한 계산이 필요한 데이터의 양이 매우 많을 경우, 이 작업을 수행하기 위해 노드가 모여 있는 특정 클러스터로 넘기길 원합니다. 여기서 문제는, 어느 노드에서 어떤 작업을 수행할 것..
2024.03.19 -
[Java] Java를 활용한 분산 시스템
분산 시스템은 어디에서나 존재하는 시스템입니다. 영화를 보거나 온라인 쇼핑, 휴대폰으로 차량 공유 서비스들을 이용할 때 인터넷에서 무언가를 검색할 때마다 사실 우리는 앱이나 웹 페이지를 통해 그 뒤에 있는 분산 시스템과 통신합니다. 이런 서비스를 제공하는 모든 기업은 전 세계에 걸쳐 고도로 확장이 가능한 대규모 분산 시스템을 운영하여 매일 수백만명의 사용자와 데이터를 처리하고, 일정하고 원활한 사용자 경험을 제공합니다. 또한, 클라우드에서 호스팅 되는 아주 간단한 웹사이트 조차도 분산 시스템에서 동작합니다. 클라우드는 특별히 기업을 위해 구축된 복잡한 분산 시스템인 만큼 소프트웨어 개발자들이 맡기 때문에 사용자들은 제품에 집중하고 나머지 부분은 클라우드 공급 업체가 처리하도록 할 수 있습니다. 중앙 집중..
2024.03.19 -
[에러] Error Code: 1055. Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column '~~' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 0.015 sec
[Reason] 쿼리를 실행했을 때 발생된 에러이다. 에러를 해석해보면, group by 에 조회 컬럼을 명시하지 않은 채 select 절에 해당 컬럼을 조회하려고 넣었기 때문에 발생된 에러이다. 에러 메세지 중 마지막 부분인 sql_mode=only_full_group_by 부분이 바로 현재 설정이 group by 를 사용할 때 명시하지 않으면 포함하지 않은 컬럼은 조회되지 않는 full group by 설정이 기본으로 설정되어있다는 뜻이다. [Solution] - 해결책 (1) sql_mode를 확인하고, 조회되는 테이블에서 ONLY_FULL_GROUP_BY 를 제외한 나머지 값을 복사한 뒤, set session sql_mode 에 붙여넣어 only_full_group_by 설정을 없애준다. - 해..
2024.03.04