Kafka ์ค์น ๋ฐ ๊ตฌ์ฑ์ด ์๋ฃ๋์๋ค๋ฉด Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์์ Spring Kafka ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ์ถ๊ฐํด์ผ ํ๋ค.
Spring Boot ํ๋ก์ ํธ์์ Kafka๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ํ๋ก์ ํธ์ build.gradle ํ์ผ์ Spring Kafka ์์กด์ฑ์ ์ถ๊ฐํด์ผ ํ๋ค.
implementation 'org.springframework.kafka:spring-kafka'
application.properties ๋๋ application.yml ํ์ผ์ Kakfa ์๋ฒ์ ์ฃผ์๋ฅผ ์ง์ ํด์ผ ํ๋ค. ๋ง์ฝ ๋ก์ปฌ์์ ์คํํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ๋ค.
spring:
kafka:
bootstrap-servers: localhost:9092
# ์ค์ ํ๋ก๋์
ํ๊ฒฝ์์๋ ์ฌ๋ฌ Kafka ๋ธ๋ก์ปค๋ฅผ ','๋ก ๊ตฌ๋ถํ์ฌ ๋์ดํ ์ ์๋ค.
# **bootstrap-servers: kafka1:9092,kafka2:9092,kafka3:9092**
์ด ์ค์ ์ Spring Boot ์ ํ๋ฆฌ์ผ์ด์
์๊ฒ Kafka ๋ธ๋ก์ปค๊ฐ **localhost**์ 9092 ํฌํธ์์ ์คํ๋๊ณ ์๋ค๋ ๊ฒ์ ์๋ ค์ค๋ค. ์ฐธ๊ณ ๋ก, **localhost:9092**๋ Kafka์ ๊ธฐ๋ณธ ์ค์ ์ด๋ฉฐ, ์ค์ Kafka ์๋ฒ์ ์ค์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
์ฌ์ฉ์ ํ๋์ ๋ฐ๋ฅธ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ Kafka๋ก ์ ์กํ๋ Java ๋ก์ง์ ๊ตฌํํด์ผ ํ๋ค. ์ด๋ฅผ ์ํด KafkaTemplate๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ Kafka ํ ํฝ์ ์ ์กํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ์ ํ๋ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๊ณ ์ ์กํ๋ ์๋น์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
@Service
public class UserActivityService {
private final KafkaTemplate<String, UserActivity> kafkaTemplate;
public UserActivityService(KafkaTemplate<String, UserActivity> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void sendActivity(UserActivity activity) {
kafkaTemplate.send("user-activities", activity);
}
}
์ฌ๊ธฐ์ **UserActivity**๋ ์ฌ์ฉ์ ํ๋์ ๋ํ๋ด๋ ์์ ํด๋์ค์ด๋ค. ์ด ํด๋์ค๋ ์ฌ์ฉ์ ID, ํ๋ ์ ํ, ์๊ฐ, ๋ต๋ณ ๋ด์ฉ ๋ฑ์ ํ๋๋ฅผ ํฌํจํด์ผ ํ ๊ฒ์ด๋ค. ๋ํ, **user-activities**๋ ์ด๋ฒคํธ๋ฅผ ์ ์กํ Kafka ํ ํฝ์ ์ด๋ฆ์ด๋ค. Kafka ํ ํฝ์ ๋ฉ์์ง๋ฅผ ์นดํ
๊ณ ๋ฆฌ๋ณ๋ก ๊ตฌ๋ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ ํ ํฝ์๋ ๊ด๋ จ๋ ๋ฉ์์ง๋ค์ด ์ ์ฅ๋๋ค. ๋ฐ๋ผ์ ํ ํฝ์ ์ด๋ฆ์ ์ ์ฅ๋๋ ๋ฉ์์ง์ ๋ด์ฉ์ ์ ๋ํ๋ผ ์ ์๋๋ก ์ ์ํด์ผ ํ๋ค.
์ด์ ํ๋ก์ ํธ๋ฅผ ์คํํ๊ณ ์ฌ์ฉ์ ํ๋์ Kafka๋ก ์ ์กํ๋ ๊ธฐ๋ฅ์ ํ ์คํธํด๋ณผ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๋ ๋ด์์ ์ง์ ํ
์คํธ๋ฅผ ์ํํ ์๋ ์๋ค. ์ด๋ฅผ ์ํด์๋ Spring Kafka์์ ์ ๊ณตํ๋ **KafkaTestUtils**์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, Mock ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด Kafka ์ฐ๊ฒฐ์ ๋ชจ๋ฐฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ณผ Kafka ์ฌ์ด์ ์ค์ ํต์ ์ ํ ์คํธํ๋ค. ๋ก์ปฌ์ ์ค์น๋ Kafka๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, Docker๋ฅผ ์ฌ์ฉํ์ฌ Kafka ์ปจํ ์ด๋๋ฅผ ์คํํ์ฌ ํ ์คํธ๋ฅผ ์ํํ ์ ์๋ค. ํตํฉ ํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ Kafka ๊ฐ์ ์ค์ ํต์ ์ด ์ ์ด๋ฃจ์ด์ง๋์ง ํ์ธํ ์ ์๋ค.