PROJECT 4

💡API도 몰랐던 내가, 팀의 개발 문화를 고민하게 되기까지

🧩 첫 프로젝트 – React로 진행한 스터디 올인원 프로젝트개발을 처음 시작했을 때, REST API의 개념조차 제대로 이해하지 못한 상태였습니다.github도 처음 다뤄보는 상황이었기에, API 명세서를 봐도 무슨 말인지 몰랐고,백엔드 팀원에게 물어봐도 “명세서 보면 된다”는 답변만 들었습니다.(아마 그분도 프론트 연동 방식을 모르셔서 그랬던 것 같습니다.)그 결과, 프론트엔드와의 연동 과정에서 큰 어려움을 겪었고,이때 “전체 구조를 이해해야 제대로 개발할 수 있다”는 깨달음으로 백엔드를 공부하기 시작했습니다. 그래도 해당 프로젝트로 교내 SW 대회에서 우수상을 수상하며 첫 성취를 거둘 수 있었습니다.비록 연동에 어려움이 있었지만, 스스로 한계를 인식하고 개선 방향을 찾았다는 점에서저에게는 '개발자..

실시간 채팅에 커서 기반 페이지네이션 도입하기

이 글을 작성하게 된 이유이번 프로젝트에서는 gRPC 기반의 채팅 서비스를 새롭게 구현하면서, 이미지 전송까지 마무리한 뒤 PR을 올리고 뿌듯해하던 중,팀원으로부터 “페이징을 적용해보면 좋을 것 같다”는 코드 리뷰를 받았습니다.사실 저도 페이징을 고려하고 있었기에 “좋은 기회다” 싶어 성능 개선을 목표로 페이징을 직접 적용했습니다.그리고 여러 페이징 기법 중 어떤 방식을 선택했고, 왜 그렇게 결정했는지를 정리해두면 좋을 것 같아 이 글을 작성하게 되었습니다. 페이지네이션이란?검색결과를 가져올 때 데이터를 쪼개 번호를 매겨 일부만 가져오는 기법입니다. 왜 사용했는가?사용자가 채팅방에 들어올 때, 모든 채팅 내역을 한 번에 조회한다면 어떨까요?채팅이 10개, 20개 정도일 때는 큰 문제가 없지만, 내역이 1..

PROJECT 2025.10.18

gRPC 채팅 스트림에서 트랜잭션이 적용되지 않았던 이유(feat. 자기 호출, 프록시)

🧩문제 상황 채팅방 목록을 조회할 때, 각 채팅방에 대해 가장 최근 메시지(latestMessage)와 그 시간(lastestTime)을 함께 보여줘야 했습니다.하지만 실제 화면에서는 최근 메시지가 표시되지 않는 문제가 발생했습니다. 🔍 초기 설계채팅 메시지를 보낼 때, 해당 채팅방의 최근 메시지 정보를 함께 업데이트하도록 설계했습니다.이를 위해 채팅 처리 메서드에 @Transactional을 붙이고, 내부에서 updateLatest()라는 메서드를 호출해 채팅방 정보를 갱신하도록했습니다. ⚠️ 이상 현상하지만 로그를 확인해보니 메시지 저장(INSERT)은 정상적으로 수행되었지만,채팅방의 최근 메시지 업데이트(UPDATE)는 실행되지 않았습니다.아래 쿼리를 보면 메시지를 inser..

PROJECT 2025.10.16

[Spring Security + JWT] 세션 기반 인증에서 JWT로 전환 회고

2025.01.11 15:26 작성 학교 수업 시간에 SpringSecurity를 사용해서 프로젝트를 진행했었다.처음에는 웹으로 프로젝트를 만들고자 세션으로 진행을 하였으나, 프로젝트 주제 상 모바일이 더 적합하다고 느껴 JWT로 전환해보자고 결정했다.왜 SpringSecurity를 사용했는가?Spring 공식 문서에 따르면, Spring Security는 Java 애플리케이션에서 인증과 권한 부여를 모두 제공하는 데 중점을 둔 프레임워크라고 기술되어 있다. 그 핵심은 사용자 정의 요구 사항을 충족하도록 쉽게 확장할 수 있는 점에 있다.Spring Security의 주요 특징은 다음과 같다:인증 및 권한 부여에 대한 포괄적이고 확장 가능한 지원세션 고정, 클릭재킹, 크로스 사이트 요청 위조(CSRF) 등..

PROJECT 2025.10.14