서버가 클라이언트한테 실시간 데이터를 전송하는 방법 (feat. Polling, SSE, WebSocket)
·
2026
00. 일반적인 클라이언트-서버 구조보통의 클라이언트-서버 구조에서 HTTP 요청은 클라이언트가 원하는 데이터를 받기위해 서버한테 요청한다.그러나 실시간 채팅 알림, 티켓 예매 알림 서비스과 같이 사용자가 구독한 내용이 변경되면 서버가 먼저 데이터를 전달해야 한다. 01. 서버가 클라이언트에게 데이터를 전송하는 방법1. Polling Polling 방식은 우리가 알던 클라이언트-서버 구조 방식과 동일하다.클라이언트가 요청하기 전까지는 서버에는 관련된 이벤트가 발생하여 쌓인다.그리고 클라이언트가 요청하면 발생한 이벤트 데이터를 받을 수 있다. Polling의 특징클라이언트가 먼저 요청하는 클라이언트-서버 구조서버에서 이벤트가 발생해도 클라이언트가 요청을 하지 않으면 확인할 수 없음HTTP 프로토콜의 ..
Ubuntu 24.04 wlp1s0 wifi 연결 오류 해결하기
·
2026
노트북에 우분투 서버를 깔고 무선랜이 연결되지 않는 문제가 발생했다.유선랜을 연결할 수 없는 상황에서 해결한 방법을 남겨본다. (기본 패키지로만 해결했다.) 01. wifi 연결 정보 추가우분투를 설치할 때, 와이파이 정보를 입력했지만 연결이 안돼서 난 넘어갔었다.cd /etc/netplan 으로 이동하면 네트워크 설정 yaml이 존재하는데, 여기에 아래 형식을 추가하면 된다.나는 50-cloud-init.yaml이라는 파일이 존재했고, sudo nano 50-cloud-init.yaml로 설정했다. (vi, vim을 써도 된다.)network: version: 2 renderer: networkd wifis: wlp1s0: dhcp4: true access-points: ..
[2026] Dev History
·
History
2026년 활동을 기록합니다. 1월친절한 SQL 튜닝 2장 읽기서버에서 실시간 데이터를 전송하는 방법 (Polling, SSE, WebSocket) 정리
Spring Boot 멀티 모듈 프로젝트 구성하기 (feat. JDK, Gradle)
·
2025
개발 환경Spring Boot 3.5.8JDK 21Gradle 8.14.3 1. 모듈 생성루트 프로젝트 src 삭제서브 모듈 생성settings.gradle 업데이트gradle 동기화 루트 프로젝트 - 새로 만들기 - 모듈로 모듈을 생성한다. 나는 core-api, core-enum, db-core 이렇게 3개를 생성했다. 다음은 settings.gradle을 업데이트 한다. 나는 core, storage 디렉토리에 모듈을 넣었기에 위와 같이 설정했다. 다음은 gradle 동기화다. 처음에는 생성된 모듈이 루트 디렉토리 외부에 생기는데, 그걸 연결 해제하고 내부에 생성되는지 확인한다. 2. build.gradle 설정루트는 빌드를 안하므로 build.gradle에서 bootJar(실행용), jar(라이브..
[2025] Dev History
·
History
2025년에 습득한 개발 지식을 기록합니다.12월주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 읽기 - Github 정리 링크제미니의 개발실무 - 커머스 백엔드 기본편 강의 보기 - Github 정리 링크
CompletableFuture를 활용한 도서 베스트셀러 저장 성능 개선
·
2024
개요 도서 인사이트 공유 프로젝트 `지성인`에는 베스트셀러 도서를 매일 최신화하는 로직이 존재한다.매일 오전 4시에 베스트셀러 상위 100권 정보를 크롤링하여 서버에 저장한다.처음에는 동기 방식의 HTTP 작업으로 수행하여 시간이 오래걸리는 비효율적인 문제가 발생했다. 그래서 이 문제를 해결하기 위해 CompletableFuture를 활용한 비동기 처리와 병렬 프로그래밍으로 개선을 시도했다.이 글에서는 기존 동기적인 접근 방식에서 겪었던 지연 문제를 어떻게 해결했는지, 그리고 새로운 방법으로 얼마나 개선됐는지 공유해본다. 문제 상황@Component@RequiredArgsConstructorpublic class Yes24Crawler implements Crawler { private final Fe..
RTR 방식과 Refresh Token을 Redis에 저장하는 이유
·
2024
01. Token과 RTR 방식AccessToken사용자가 특정 서비스에 접근할 권한을 증명하는 문자열이다.사용자의 인증 정보를 확인한 후 발급되며, 사용자가 서비스를 이용할 때마다 이 토큰을 사용해 자신의 인증 상태를 증명한다.RefreshTokenAccessToken을 재발급받을 때 사용하는 토큰이다.AccessToken의 만료 시간을 길게 설정할 경우, 탈취 시 악의적인 공격에 악용될 위험이 있다. 따라서 AccessToken은 짧은 만료 시간을 가지도록 하고, 대신 상대적으로 긴 만료 시간을 가진 RefreshToken을 사용해 새로운 AccessToken을 발급받도록 한다. 이를 통해 사용자는 로그아웃하지 않고도 지속적으로 로그인 상태를 유지할 수 있다.Refresh Token Rotation(..
RESTful한 path 설계하기
·
2024
프로젝트를 리팩토링하며 처음에는 신경쓰지 않았던 API path들이 거슬리기 시작했다. 일단 REST API란 HTTP 프로토콜을 기반으로 서버와 클라이언트가 데이터를 주고받는 방식이다.주요 특징은 아래와 같다.리소스 기반HTTP 메서드 사용무상태성 (상태를 저장하지 않으며, 각 요청은 독립적)응답 방식 (JSON / XML) 그래서 도메인 엔티티들의 리소스를 어떻게 명시해야 RESTful하게 설계할 수 있을까 ?내가 고민했던 부분의 path는 다음과 같다. // 시작을 comments로 하는 경우POST /comments/talk-rooms/{talkRoomId} // 대화방에 댓글 작성GET /comments/talk-rooms/{talkRoomId} // 대화방의 모든 댓글 조회// 끝을 comme..
Spring MSA 환경 배포 자동화에 대한 인프라 아키텍처 고민
·
2024
해당 졸업 작품 주제를 구현하면서 겪은 내용을 정리 해보겠다.우리 팀은 밴드 모집/홍보 관련 웹 서비스를 기획하고 개발을 진행했다.하지만 졸업 작품은 클라우드/인프라 아키텍처가 핵심이라 서비스 기능 개발보다는 클라우드 아키텍처 구현에 집중했다.처음에 구상했던 아키텍처는 위 그림과 같다.이런 인프라 아키텍처를 구현해본 경험이 없어서 이상한 부분이 있을수도 있다 !간단하게 아키텍처를 설명해보겠다. 일단 비효율적일수도 있지만 팀원이 3명인지라 모두가 파이프라인을 구현하는 경험을 해보기 위해 Front/Back 레포를 나눴다.각각의 레포는 아래의 로직으로 동작한다.각 레포에 Push/Merge가 발생하면 Webhook으로 Jenkins에 알린다.Jenkins는 지속적 통합(Build, Test, Merge)을 ..
24년 상반기 회고
·
2024
원래 7월에 작성하려고 했지만.. 바빠져서 상반기 회고글을 8월에 작성하게 됐다.많은 일이 있었지만 시작한다면 작년에 했던 동아리 큐시즘부터지 않을까 싶다.큐시즘 수료작년 8월 말부터 활동한 큐시즘에서 11월 밋업데이를 통해 진행해왔던 프로젝트를 마치고 수료했다.밋업데이란 ? 아이디어톤 행사를 통해 발제된 아이디어를 3개월 동안 준비, 구현해서 최종적으로 발표까지 하는 프로젝트다.우리팀은 대학교 제휴사업과 관련된 주제로 프로젝트를 진행했었다. 아쉽게 상은 수상하지 못했지만 함께 달려왔던 길들이 재밌었고 즐거웠다.또한 내가 이 동아리에 이 팀원들을 만나지 않았다면 다시는 해보지 못할 경험들이었다.A+ 팀 팀원들 모두 너무 수고했다. 큐시즘 마지막 행사에는 참여하진 못해서 아쉬운 감정으로 수료하게 되었다...