본문 바로가기

전체 글17

[Spring] WebSocket 이벤트 발행 ApplicationEventPublisher 적용기 배경토이 프로젝트 중 WebSocket STOMP 기반 실시간 통신 기능을 구현하면서, 방 입장/퇴장 시 참여자들에게 실시간으로 상태 변경을 알려주는 로직을 개발하고 있었습니다.기능 자체는 단순했습니다. 사용자가 방에 입장하거나 퇴장하면, 해당 방의 참여자들에게 WebSocket 메시지를 보내면 됩니다.처음에는 Service 레이어에서 비즈니스 로직 처리와 WebSocket 메시지 발행을 순차적으로 수행했습니다.@Serviceclass RoomService( private val roomRepository: RoomRepository, private val messagingTemplate: SimpMessagingTemplate,) { @Transactional fun joinRoo.. 2026. 3. 14.
[Spring] 멀티 테넌시 대응을 위한 DB 라우팅 라이브러리 구현기 배경입사 후 처음 맡게 된 임무는, 기존 Delphi로 개발되어 있던 주문 마감 시스템을 Spring 기반으로 마이그레이션 하는 일이었습니다. (이 글에서는 주문 마감에 관한 내용은 다루지 않습니다.) 이 작업을 시작하기에 앞서, 먼저 회사가 사용하는 DB 구조를 파악해야 했고, 그 구조에 맞춰 멀티 테넌시 환경을 지원하는 DataSource 라우팅 라이브러리를 직접 개발해야 했습니다. 아래에 회사의 DB 구조를 간략히 소개하겠습니다.DB 구조 • 사용 중인 데이터베이스:→ Firebird 2.1.4, 파일 기반의 오래된 DBMS • 업체별 데이터 관리 방식:→ 새로운 업체가 추가될 때마다 기존 DB 스키마를 복제하여 업체 전용 DB를 따로 운영하는 구조 즉, 하나의 시스템에서 여러 개의 DB 인스턴스를.. 2025. 4. 10.
TDD 도입하고 개발해보며 체득하기2 이 글에선 저번 글에서 "메뉴 옵션" 파트를 TDD로 진행하면서 개선할 부분을 어떻게 개선했는지를 다루겠습니다. 이번에 개발할 도메인은 "결제 내역", "메뉴 카테고리"입니다.기존의 테스트 코드를 모두 작성한 후 비즈니스 로직을 작성한 부분이 가장 크게 개선할 점이었습니다. 따라서 아래의 순서를 따랐습니다.테스트 목록 정리실패하는 단위 테스트 작성실패 테스트를 통과하는 비즈니스 로직 작성2 ~ 3 단계를 반복하여 실패 테스트 코드 모두 작성성공하는 단위 테스트 작성성공 테스트 코드를 통과하는 비즈니스 로직 작성위에 흐름을 따랐으며 Repository -> Service -> Controller 순으로 개발하였습니다.개선된 TDDRepositoryRepository 테스트의 목적은 "올바른 값을 반환하는가.. 2024. 7. 20.
TDD 도입하고 개발해보며 체득하기 최근에 QR코드를 사용하여 스마트오더를 개발하는 프로젝트를 진행하고 있습니다.프로젝트에서 제가 맡은 파트는 "메뉴 옵션" 개발입니다 지금까지 했던 프로젝트의 백엔드는 혼자 진행하였고 규모도 크지 않아 테스트 코드를 하지 않아도 어느 정도 품질이 보장되었지만(MVP 테스트 진행), 이번 프로젝트는 8월까지 MVP 개발을 끝내고 실제 소상공인들이 사용할 서비스로 어느 정도 규모가 있었기 때문에 품질 보장이 되어야 했습니다. 또한, 이미 릴리즈된 애플리케이션은 그걸로 끝나지 않고 지속적으로 새로운 기능을 추가해야하며 코드들은 처음과 다른 모습이 되어가게 됩니다. 기존에 있던 코드들의 동작이 변하지 않았는지 보장할 수 있어야 했기에 테스트 코드의 작성은 필수입니다. TDD 도입 이유백엔드 팀원분이 TDD는 처음.. 2024. 7. 14.
Google Cloud SQL 로 MySQL 배포하기 GCP를 사용해서 배포한 이유원래 db는 cloudtype이라는 클라우드 서비스를 이용하였는데, 프리티어는 하루에 1번 중지가 되고 수동으로 켜줘야 하는 단점이 존재하였다. 또한 GCP를 사용해서 CI/CD를 구축할 거기 때문에 DB또한 GCP로 배포하여 함께 관리하려고 한다. GCP 환경 설정인스턴스 생성GCP -> SQL -> 인스턴스 만들기MySQL DB를 만들거기 때문에 MySQL를 선택한 후 인스턴스 정보를 입력하고 인스턴스를 생성한다. 기존 DB -> Google Cloud SQL로 데이터 이전1) 기존 DB에서 데이터 Export 2) 새 DB에 데이터 ImportGCP로 배포한 DB 주소를 입력한 후 export 한 데이터 import 이렇게 GCP로 클라우드 서비스 이전 완료! 이제 시작.. 2024. 6. 23.
[Spring] enum, class에서 @JsonValue 사용법과 자바의 직렬화 우선 @JsonValue 사용법을 알아보기 전에 자바 직렬화를 알아야 더욱 깊이 있는 이해를 할 수 있어, 간단하게 자바 직렬화를 설명하고 넘어가겠습니다. 자바 직렬화란?직렬화(Serialize)- 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있는 바이트(byte) 형태로 데이터를 변환하는 기술- JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술역직렬화(Deserialize)- 바이트로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술- 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 기술자바 직렬화의 장점자바 직렬화는 자바 시스템 개발에 최적화되어 있다.복잡한 데이터 구조의 객체라도 직렬화 기본 조건.. 2024. 6. 4.