JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] 회원 가입 비즈니스 로직 짜기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
practice-implement-signup-logic
type
post
updatedAt
Dec 6, 2025 05:39 AM

✅ 회원 가입 비즈니스 로직 짜기

  1. 회원 가입한 사용자 정보 DB에 저장하기
    1. UserService
      @Service public class UserService { private final UserRepository userRepository; private final KafkaTemplate<String, String> kafkaTemplate; public UserService(UserRepository userRepository, KafkaTemplate<String, String> kafkaTemplate) { this.userRepository = userRepository; this.kafkaTemplate = kafkaTemplate; } public void signUp(SignUpRequestDto signUpRequestDto) { // 회원 가입한 사용자 정보 DB에 저장 User user = new User( signUpRequestDto.getEmail(), signUpRequestDto.getName(), signUpRequestDto.getPassword() ); userRepository.save(user); } }
       
  1. Kafka에 전송할 메시지 객체 만들기
    1. Kafka에 넣을 메시지 객체 이름을 UserSignedUpEvent라고 지을건데, 이렇게 이름을 짓는 이유는 MSA 구조에서 많이 사용하는 이벤트 기반 아키텍처에서 사용하는 네이밍 방식을 활용해 지은 것이다. 이 개념에 대해 모르는 분들은 그냥 ‘MSA에서 많이 사용하는 메시지 객체의 이름이구나’ 정도로만 인지하고 넘어가자.
       
      UserSignedUpEvent
      public class UserSignedUpEvent { private Long userId; private String email; private String name; public UserSignedUpEvent(Long userId, String email, String name) { this.userId = userId; this.email = email; this.name = name; } public Long getUserId() { return userId; } public String getEmail() { return email; } public String getName() { return name; } }
      UserSignedUpEvent 메시지 객체에 password 속성은 일부러 포함시키지 않았다. 왜냐하면 password 값을 다른 종류의 서버(ex. 이메일 서버)에서 활용할 일이 없기 때문이다. 다른 데서 활용할 일이 없는데 굳이 불필요한 정보를 포함시켜 kakfa에 메시지를 보낼 필요가 없다. 이와 같이 kafka에 메시지를 보낼 때는 필요한 정보만 선별해서 보내면 된다.
       
  1. Json 형태의 String으로 만들어 주는 함수 추가하기
    1. UserService
      @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public void signUp(SignUpRequestDto signUpRequestDto) { // 회원 가입한 사용자 정보 DB에 저장 User user = new User( signUpRequestDto.getEmail(), signUpRequestDto.getName(), signUpRequestDto.getPassword() ); userRepository.save(user); } private String toJsonString(Object object) { ObjectMapper objectMapper = new ObjectMapper(); try { String message = objectMapper.writeValueAsString(object); return message; } catch (JsonProcessingException e) { throw new RuntimeException("Json 직렬화 실패"); } } }
       
  1. Kafka에 메시지 보내는 로직 추가하기
    1. @Service public class UserService { private final UserRepository userRepository; private final KafkaTemplate<String, String> kafkaTemplate; public UserService(UserRepository userRepository, KafkaTemplate<String, String> kafkaTemplate) { this.userRepository = userRepository; this.kafkaTemplate = kafkaTemplate; } public void signUp(SignUpRequestDto signUpRequestDto) { // 회원 가입한 사용자 정보 DB에 저장 User user = new User( signUpRequestDto.getEmail(), signUpRequestDto.getName(), signUpRequestDto.getPassword() ); User savedUser = userRepository.save(user); // 카프카에 메시지 전송 UserSignedUpEvent userSignedUpEvent = new UserSignedUpEvent( savedUser.getId(), savedUser.getEmail(), savedUser.getName() ); this.kafkaTemplate.send("user.signed-up", toJsonString(userSignedUpEvent)); } private String toJsonString(Object object) { ObjectMapper objectMapper = new ObjectMapper(); try { String message = objectMapper.writeValueAsString(object); return message; } catch (JsonProcessingException e) { throw new RuntimeException("Json 직렬화 실패"); } } }
 
 

✅ 중간 체크

전체 프로젝트 구조에서 User Service에 해당하는 부분을 다 구현했다. 다음 강의에서는 Email Service에 해당하는 부분을 구현해보자.
notion image
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
type
series-footer
updatedAt
Dec 6, 2025 05:39 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.