분류 전체보기 27

🚀 [Spring Boot] IoT 헬스케어 시스템의 실시간 데이터 파이프라인 구축기 (SSE + 데이터 샘플링)

📌 1. 들어가며: 쏟아지는 센서 데이터, 어떻게 감당할 것인가?현재 라즈베리파이를 활용한 '실시간 피보호자 헬스케어 모니터링 시스템'의 백엔드를 개발 중이다. 센서로부터 심박수, 호흡수, 낙상 여부 등의 생체 데이터가 1초 단위로 서버에 전송되고 있는데, 여기서 큰 고민에 빠졌다."1초마다 들어오는 데이터를 그대로 DB에 save() 하면, 유저가 늘어날수록 DB I/O 부하가 폭발하지 않을까?"하지만 보호자 앱에서는 1. 1초 단위의 실시간 그래프를 봐야 하고, 2. 긴급 상황 발생 시 즉시 알림이 가야 한다. 이 딜레마를 해결하기 위해 데이터의 목적에 따라 처리 방식을 나누는 '3-Track 데이터 파이프라인'을 설계하고 적용한 과정을 기록해 본다.📌 2. 아키텍처 설계: 3-Track 파이프라..

개발/백엔드 2026.05.10

[백엔드 개발기] 실시간 IoT 헬스케어 생체 데이터 파이프라인 구축 및 아키텍처 설계

1. 도입: 기획 화면을 서버 아키텍처로 번역하다프로젝트의 시작은 팀원이 그려온 기획 화면(사진)들이었다. 스마트워치(Edge 기기)에서 수집된 피보호자의 생체 데이터(심박수, 호흡수, 낙상 여부)를 실시간으로 모니터링하고, 비정상 수치 발생 시 보호자에게 즉각적인 알림을 보내는 시스템을 구축해야 했다.단순한 CRUD 게시판이 아니라 1초마다 쏟아지는 센서 데이터를 어떻게 안정적으로 처리하고 화면에 뿌려줄 것인가? 이 질문에서부터 아키텍처 고민이 시작되었다.2. 데이터 성격에 따른 처리 주체 분리 (Edge vs Server)가장 먼저 고민한 것은 "긴급 상황을 누가 판단할 것인가?" 였다.낙상 감지 (Edge Computing): 초당 수십 번씩 변하는 자이로스코프의 원시 데이터(Raw Data)를 서..

개발/백엔드 2026.05.08

[Spring Boot] IoT 실시간 모니터링: SSE 통신 원리와 Optional 리팩토링 경험기

최근 라즈베리 파이(IoT)에서 수집한 활력 징후(심박수, 호흡수 등) 데이터를 프론트엔드로 실시간 전달하는 백엔드 서버를 개발하고 있습니다. 이 과정에서 SSE(Server-Sent Events)를 활용한 실시간 통신 원리를 깊게 이해하게 되었고, JPA를 사용할 때 Optional을 처리하는 로직을 제 방식대로 깔끔하게 리팩토링한 경험을 공유하고자 합니다.1. SSE(Server-Sent Events) 통신: 헷갈렸던 데이터의 흐름초기에는 라즈베리 파이에서 서버로 데이터를 쏘는 부분(POST /api/vitals)에 프론트엔드로 데이터를 전달하는 로직이 섞여 있어서 통신 방식에 대한 혼란이 있었습니다."클라이언트가 조회를 하려면 무조건 GET 방식을 써야 하는데, 왜 POST 요청 안에서 클라이언트에..

개발/백엔드 2026.04.16

[JPA/Spring] 엔티티 설계의 정석: @NoArgsConstructor(access = AccessLevel.PROTECTED)와 @Builder의 조화

최근 프로젝트를 진행하며 JPA 엔티티를 설계하는 과정에서 왜 특정 어노테이션을 조합해 사용하는지, 그리고 객체 지향적인 설계란 무엇인지 깊게 파고들어 보았습니다. 공부한 내용을 잊지 않기 위해 정리합니다.1. @NoArgsConstructor(access = AccessLevel.PROTECTED)JPA 엔티티를 만들 때 가장 먼저 마주친 의문은 "왜 기본 생성자를 굳이 protected로 막는가?"였습니다.JPA의 요구사항: JPA는 프록시 객체를 생성하기 위해 기본 생성자가 반드시 필요합니다. 하지만 접근 제어자가 private이면 접근할 수 없으므로 최소 protected 이상이어야 합니다.객체 오염 방지: 개발자가 new Member()와 같이 빈 객체를 생성하는 것을 막기 위함입니다. 필수 데..

개발/백엔드 2026.03.11

멀티캠퍼스 [현대 이지웰] 풀스택 개발자 수강 최종 후기

드디어 멀티캠퍼스 [현대이지웰] 풀스택 개발자 과정을 수료하게 되었습니다.처음 시작 했을 때가 7월 초였는데 이제 6개월이 지나 12월이 되었고 크리스마스 얼마 남지 않았습니다.시간이 정말 빠른 것 같습니다. ㅜㅜ 오늘은 후기에 대해서 작성을 해보려고 합니다. 현대 이지웰 과정은 총 6개월입니다.보통 다른 과정들도 6개월이라서 큰 차이는 없습니다. 저는 6회 차를 수강했는데 이번 과정에 약 30명 정도 하는 인원이 듣기 때문에 메인 강사님과 보조 강사님 두 분이 같이 진행하셨습니다.메인 강사님은 모든 과정 수업을 진행하시고 보조 강사님은 질문 같은 것들을 답변해주시면서 진도에 차질 없이 수업을 진행할 수 있었습니다. 현대 이지웰 과정은 기본 HTML, CSS, JavaScript 등 프론트 과정과 J..

카테고리 없음 2025.12.22

멀티캠퍼스 [현대 이지웰] 외부 파일에 이미지 저장 및 불러오기

프로젝트를 하면서 사용자로부터 받은 이미지를 내 컴퓨터에 로컬에 저장을 했습니다.리뷰를 작성하면서 이미지를 업로드하면 로컬 폴더에 저장이 되었습니다. 이제 배포를 하면서 외부 파일을 사용해야 했고, FileZilla를 통해서 aws에 열었던 IP를 사용해 연결을 했습니다.그리고 project 파일에 configure.properties를 넣었습니다. 이 파일은 application.properties에 있던 중요 정보를 옮겨 넣었습니다.그리고 projectImage 폴더를 넣었고 그 안에 리뷰 사진들과 상품 사진들 등 사진들이 저장되는 것을 확인했습니다. 이제 이거를 코드를 사용해서 CRUD를 구현했습니다. 먼저 interface를 만들어 틀을 제공합니다. 그리고 서비스 로직을 구현 합니다.@Value..

개발/Java 2025.12.15

멀티캠퍼스 [현대 이지웰] AWS 활용한 배포 War, tomcat(버전 맞추기 필수!)

AWS에 지금까지 했던 프로젝트를 배포하려고 합니다.AWS에 포트를 활성화 했고, jenkins를 사용해서 빌드를 하려고 했습니다.근데 빌드는 성공했고, tomcat도 잘 올라와 있는데 404 에러가 떴습니다. 프로젝트 build.gradle 보니 war이 아니라 jar이었습니다.JAR 파일- 독립적인 Java 애플리케이션을 패키징할 수 있고, 실행 가능한 JAR 파일로 만들어서 개발자가 쉽게 어플리케이션을 실행할 수 있습니다.- Java 애플리케이션의 진입점인 main 메서드를 포함하고 있어 JVM에서 직접 실행하여 별도의 서버가 필요하지 않습니다. WAR 파일- Java 웹 애플리케이션을 패키징하는 데 최적화 되어 있고, 웹 구성 요소인 JSP, 서블릿, 리스너 등과 웹 어플리케이션을 실행하기 위한서..

개발 2025.12.08

멀티캠퍼스 [현대 이지웰] Spring Boot 활용하여 기본 CRUD 기능 구현

Spring Boot를 활용해서 리뷰의 기본 CRUD 기능을 구현했습니다.어떻게 구성하는지 간단하게 기록해 보도록 하겠습니다. 기본 아키텍처는 Controller 와 Service, Repository, Entity, DTO로 구성되어 있습니다. Repository는 JPA를 활용하여 DB와 직접 소통하는 클래스입니다.Entity를 사용해서 직접 소통하며, JPA는 기본 CRUD를 제공하기 때문에 직접 SQL 쿼리문을 작성할 필요가 없습니다. 만약에 성능 또는 커스텀이 필요하다면 @Query 어노테이션을 사용하여 JPQL 문을 사용하면 됩니다. JpaRepository를 상속받아 사용하고, 타입은 을 입력해 줍니다.직접 메서드 작성을 안 해도 되지만 주석을 사용하여 어떤 메서드를 사용했는지 남겼습니다...

개발/백엔드 2025.12.01

멀티캠퍼스 [현대 이지웰] 인터페이스 기반 프로젝션이란?

인터 페이스 기반 프로젝선(Interface-Based Projecttion)Spring Data JPA에서 엔티티의 전체가 아닌 일부 필드만 선택적으로 조회할 수 있게 해주는 기능입니다. 리뷰를 작성하는 사용자와 다른 사용자가 비슷한 피부 타입을 가지고 있을 때 리뷰를 분석하여 어떤 태그를 사용했는지를 통해다른 사용자가 상품구매를 하기 전 판단을 할 수 있게 하는 기능을 만들고자 했습니다.Tag에 모든 엔티티를 조회하지 않고 필요한 필드만 조회할 수 있는 인터페이스 기반 프로젝션을 사용하고자 했습니다. 인터피에스 기반 프로젝션이란? 기본 개념- 일반적으로 JPA Repository 쿼리는 엔티티 전체를 조회합니다.- 하지만 인터페이스 기반 프로젝션을 사용하게 되면, 원하는 필드만 SELECT 하도록 J..

개발/백엔드 2025.11.24

멀티캠퍼스 [현대 이지웰] Spring 어노테이션 기록하기

Spring을 프레임워크를 이용한 백엔드 개발을 진행하고 있습니다.오늘은 제가 진행한 내용을 기록하고자 합니다. 먼저 dto와 Entity를 먼저 설계하고 Reposiroty와 Service를 구현하고 Controller를 사용해서 클라이언트와 API 통신을 할 겁니다. 먼저 ReviewDto를 살펴 보면어노테이션들이 여러 개를 설정했습니다.@Getter와 @Setter는 각 필드의 get 메서드와 set 메서드를 Spring이 자동으로 만들어 주는 기능을 합니다.그래서 따로 제가 코드를 작성할 필요가 없어 간편하고 길게 코드를 쓰지 않아도 됩니다.@NoArgsConstructor는 매개변수 없는 기본 생성자를 자동으로 생성해 주는 어노테이션입니다.@AllArgsConstructors는 클래스 내 모든 ..

개발/백엔드 2025.11.18