개요 📝A 사에서 진행하는 x 프로젝트에서는 기존에 A 사에 구축된 시스템과 연동을 통해 데이터를 받아오는 로직이 존재했었다. 새롭게 A 사에서 수주한 y 프로젝트는 x 프로젝트가 받아오는 데이터가 필요했으나, x 프로젝트와 같이 A 사 시스템과의 연동은 보안 문제로 허용되지 않는 상황이었다. 결국 x 프로젝트에서 A 사와 연동해 가져온 데이터를 y 프로젝트 쪽 DB로 넘겨주는 방안이 필요했고, 이를 위해 메시지 브로커인 Kafka를 사용하게 되었다. 내용 📌앞에서 설명했듯이, 나는 데이터를 주고받는 중계자의 역할로서 Kafka를 활용하게 되었다. API 가 아닌 외부 브로커인 Kafka를 사용했던 이유는 데이터 송수신 간 아래와 같은 장점이 있기 때문이었다:Kafka를 사용하는 애플리케이션 인스턴스..
FCM 이란?Firebase Cloud Messaging 의 줄임말로, 메시징 기능을 클라우드 서버에서 제공해주는 구글의 서비스이다. 개요프로젝트를 하는 도중에 FCM 을 사용해 볼 수 있는 기회가 생겼다. 용도는 특정 알림 기능을 모바일 단말에 푸시로 전달하는 것이었다. 기존에 구현되어 있는 기능이었으나, 최근에 FCM Legacy API 가 만료됨에 따라 V1 으로 마이그레이션하는 작업을 하게 되었다.FCM 동작 플로우프로젝트 생성먼저 FCM 은 위에서 언급한대로 클라우드 서버에서 기능을 제공하기 때문에, 어떤 프로젝트 하위에서 푸시를 주고받을 건지 정해야 한다. 그래서 프로젝트를 생성하면 아래와 같은 페이지로 관리가 가능하다: 관리자 페이지는 프로젝트별로 생성이 되고, 프로젝트 정보는 아래 항목들..
새로운 프로세스 구현하기앞서 레디스 활용기 - 1 는 어떻게 레디스를 활용하기로 결정하게 되었는지에 대한 내용이었다면, 이번에는 그 구체적인 구현 방식을 소개해 보고자 한다.레디스의 특징구현을 하기 위해 학습해야 했던 레디스 (Redis) 의 몇몇 특징은 다음과 같다: 레디스는 key-value 형태로 데이터를 저장한다.value 는 hkey-value 형태 또는 그냥 문자열이다.key 가 문자열인 데에 반해, hkey 는 해시 값으로 인식된다.여러 명령어를 통해 key / hkey / value 를 다룰 수 있다. 몇 가지 자주 사용되는 명령어들은 아래와 같다:get {key 이름} : key-value(문자열) 인 경우에 {key 이름} 에 해당하는 value 를 반환한다.hget {key 이름} {..
📌 개요현재 사물 또는 사람에게 부착된 IoT 기기로부터 BLE 신호 형태로 수신되어 정제된 데이터를 RDB 에 쓰고, 다시 읽어서 상태 (위치 등) 를 모니터링 할 수 있는 소프트웨어 개발 및 운영에 참여하고 있는 중이다.사업은 병원들을 위주로 전개하고 있으며, 각 클라이언트마다 서로 다른 요구사항들을 갖고 있다.약 3년 전 이 모니터링 소프트웨어를 설치하여 지금까지 개발 및 유지보수를 해주고 있는 Y 병원에서 한 달 전쯤 이슈제기를 해왔다:방문자 출입기록과 로그 데이터가 일치하지가 않습니다! 방문자 출입기록은 말 그대로 병원에 각기 다른 목적으로 방문하는 다양한 사람들의 현황을 IoT 기기 (Y 병원에서는 스마트폰 앱) 를 이용하여 파악하고 정리한 기록이다. 회사에서 개발 중인 모니터링 소프트웨어..
...which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 위 에러가 발생해서, 확인해보니 full_group_by 옵션이 켜져 있어 group by 절에 없는 컬럼은 어느 부분에 표시해야 할 지 정하지 못해서 발생하는 문제라고 한다. full_group_by 옵션을 끄기 위해, 구글링을 해봤다. 먼저 아래 쿼리로 full_group_by 옵션이 설정되어 있는지 확인했다:쿼리: select @@sql_mode;결과 (@@sql_mode 컬럼의 값): ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DAT..
1. 컴포넌트와 모듈의 차이 ① 컴포넌트: 런타임 개체 단위 ② 모듈: 실질적으로 구현이 된 단위 ※ 서버 / 클라이언트 구조에서 서버 1개 · 클라이언트 100개라면? → 모듈: 서버 1 + 클라이언트 1 = 2개 → 컴포넌트: 서버 1 + 클라이언트 100 = 101개 2. 자바란? "Write once, Run anywhere" 라는 특성의 객체지향 언어 3. 자바의 구동원리 ① 컴파일러가 코드를 검증하고 JVM이 읽는 바이트 코드 (.class) 로 변환한다. ② JVM 으로 바이트 코드를 가져온다. ③ 바이트 코드가 올바른지 검증한다. ④ 인터프리트한다. ⑤ 바이트 코드를 바이너리 코드로 변경하고 JVM 의 클래스 영역에 저장한다. ⑥ 런타임 과정에서 클래스들의 static 변수를 자동으로 초기..
스프링 프레임워크 핵심은 IOC (제어의 역전), DI (의존성 주입) 이다. 스프링 빈 스프링 빈의 특징 스프링 빈은 Singleton 으로 생성해 메모리나 성능 최적화에 유리하다. IOC (제어의 역전) 객체의 제어권을 다른 대상에게 위임한 것으로, 개발자 (또는 애플리케이션 코드) 가 아닌 프레임워크가 객체의 생성부터 소멸까지 관리하게 되는 것을 말한다. DI (의존성 주입) 한 클래스와 다른 클래스 사이의 의존 관계를 컨테이너가 빈을 가지고 자동으로 연결해주는 것을 말한다. AOP (관점 지향 프로그래밍) 프록시 패턴 기반의 구현체를 사용한다. 중복 제거, 객체 간 복잡도 증가에 대한 해결책이 될 수 있다. POJO 마틴 파울러는 EJB 에서 돌아서서 POJO 로 돌아와야 한다고 이야기했다. 비즈..
- Total
- Today
- Yesterday
- JPA
- JOIN FETCH
- spring
- FCM
- 역직렬화
- docker
- json web token
- DTO
- Java Data Types
- 알고리즘
- 코테
- Jackson
- 인증/인가
- LazyInitializationException
- @RequestBody
- 실시간데이터
- 깃랩
- 프로그래머스
- 기지국 설치
- Firebase
- 지연 로딩
- ci/cd
- N+1
- Spring Boot
- 가상 서버
- gitlab
- DeSerialization
- JPQL
- 도커
- google cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |