μ€νλ§ λΆνΈμ Kafka μκ°: μ€μκ° λ°μ΄ν° μ²λ¦¬μ ν
μ€νλ§ λΆνΈ μ Apache Kafka λ νλ IT μμ€ν μμ μ€μν μν μ νκ³ μμ΅λλ€. νΉν μ€μκ° λ°μ΄ν° μ²λ¦¬ μ μ€μμ±μ΄ 컀μ§λ©΄μ, λ κΈ°μ μ κ²°ν©μ λ ν° κ°μΉλ₯Ό λ°ννκ² λ©λλ€. μ΄λ² ν¬μ€ν μμλ μ€νλ§ λΆνΈ μ Kafka λ₯Ό μκ°νκ³ , μ΄λ₯Ό ν΅ν΄ μ€μκ° λ°μ΄ν° μ²λ¦¬ μ μ΄μ μ μ΄ν΄λ³΄κ² μ΅λλ€. λν, μ€λ¬΄μμ μ΄λ»κ² μ μ©ν μ μλμ§ μ½λ μμ μ ν¨κ» μ€λͺ νκ² μ΅λλ€.
μ€νλ§ λΆνΈ κ°μ
μ€νλ§ λΆνΈ λ Spring Framework μ νμ₯νμΌλ‘, 볡μ‘ν μ€μ μμ΄ λΉ λ₯΄κ² μ ν리μΌμ΄μ μ κ°λ°ν μ μλ λꡬμ λλ€. μλ° κ°λ°μ λ€μ΄ μ ν리μΌμ΄μ μ λ§λ€ λ νΈλ¦¬νκ² μ¬μ©ν μ μμΌλ©°, λ€μν λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μμ μ£Όλ‘ μ¬μ©λ©λλ€.
μ€νλ§ λΆνΈμ μ£Όμ μ₯μ :
- λΉ λ₯Έ μ ν리μΌμ΄μ
κ°λ° : κ°λ¨ν μ€μ μΌλ‘ λ°λ‘ μ€ν κ°λ₯ν μ ν리μΌμ΄μ
μ λ§λ€ μ μμ΅λλ€.
- μλ μ€μ : λλΆλΆμ μ€μ μ΄ μλμΌλ‘ μ²λ¦¬λμ΄, κ°λ°μλ μ½λ μμ±μ μ§μ€ν μ μμ΅λλ€.
- λ§μ΄ν¬λ‘μλΉμ€ μ§μ : ν° μ ν리μΌμ΄μ
μ μ¬λ¬ μλΉμ€λ‘ λλ λ
립μ μΌλ‘ λ°°ν¬ν μ μμ΅λλ€.
Apache Kafkaλ 무μμΈκ°?
Apache Kafka λ λμ©λμ μ€μκ° λ°μ΄ν° μ€νΈλ¦¬λ° μ μ²λ¦¬νλ λΆμ°ν λ©μμ§ μμ€ν μ λλ€. Kafkaλ λ°μ΄ν°λ₯Ό νλ‘λμ (producer)μμ 컨μλ¨Έ (consumer)λ‘ λ³΄λ΄λ λ©μμ§ λΈλ‘컀 μν μ ν©λλ€. λΆμ° νκ²½ μμ λ°μ΄ν° μ²λ¦¬ μ±λ₯μ κ·Ήλνν μ μμ΄, μ΄λ²€νΈ μ€μ¬ μμ€ν μμ μμ£Ό μ¬μ©λ©λλ€.
Kafkaμ μ£Όμ νΉμ§ :
- λμ μ²λ¦¬λ : μ΄λΉ μλ°±λ§ κ±΄μ λ©μμ§λ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
- νμ₯μ± : μλ² λ
Έλλ₯Ό μΆκ°ν΄ μ±λ₯μ νμ₯ν μ μμ΅λλ€.
- λ΄κ΅¬μ± : λ©μμ§κ° μμ€ μμ΄ μμ νκ² μ μ₯λ©λλ€.
μ€νλ§ λΆνΈμμ Kafkaλ₯Ό μ¬μ©νλ μ΄μ
μ€νλ§ λΆνΈμμ Kafkaλ₯Ό μ¬μ©νλ©΄ κ°νΈν ν΅ν© μ΄ κ°λ₯ν©λλ€. μ€νλ§ λΆνΈλ Kafkaμμ ν΅ν©μ μν΄ λ€μν μλ μ€μ μ μ 곡νκ³ μμΌλ©°, μ€μ νμΌλ§μΌλ‘ Kafka ν΄λΌμ΄μΈνΈλ₯Ό μ½κ² ꡬμ±ν μ μμ΅λλ€.
μ€νλ§ λΆνΈ + Kafkaμ μ£Όμ μ΄μ :
- κ°νΈν μ€μ : μμ‘΄μ± μΆκ°μ κ°λ¨ν μ€μ λ§μΌλ‘ Kafkaλ₯Ό μ¬μ©ν μ μμ΅λλ€.
- λμ νμ₯μ± : Kafkaλ₯Ό νμ©νμ¬ λκ·λͺ¨ νΈλν½μ μ²λ¦¬ν μ μμ΅λλ€.
- μ€μκ° λ°μ΄ν° μ²λ¦¬ : μ€μκ° λ‘κ·Έ, νΈλμμ λ°μ΄ν° λ±μ λΉ λ₯Έ μ²λ¦¬κ° κ°λ₯ν©λλ€.
μ€μκ° λ°μ΄ν° μ²λ¦¬μ μ€μμ±
μ€λλ λ°μ΄ν°μ μκ³Ό μλλ κΈ°νκΈμμ μΌλ‘ μ¦κ° νκ³ μμ΅λλ€. κΈ°μ λ€μ μ΄λ¬ν λ°μ΄ν°λ₯Ό μ€μκ°μΌλ‘ μ²λ¦¬νμ¬ μμ¬κ²°μ μ νμ© ν΄μΌ κ²½μλ ₯μ μ μ§ν μ μμ΅λλ€. μ€μκ° λ°μ΄ν° μ²λ¦¬ λ μ£Όλ‘ μ΄λ²€νΈ κΈ°λ° μν€ν μ² μμ μ¬μ©λλ©°, Kafkaλ μ΄λ¬ν μ€μκ° μ²λ¦¬λ₯Ό κ°λ₯νκ² νλ ν΅μ¬ λꡬμ λλ€.
μ€νλ§ λΆνΈμμ Kafka μ€μ νκΈ°: μ½λ μμ
μ΄μ μ€νλ§ λΆνΈ μ Kafka λ₯Ό νμ©ν κ°λ¨ν λ©μμ§ μ‘μμ μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
μμ‘΄μ± μΆκ°
λ¨Όμ ,
pom.xml
νμΌμ Kafka μμ‘΄μ±μ μΆκ°ν©λλ€:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.8.0</version>
</dependency>
Kafka μ€μ νμΌ
application.yml
νμΌμμ Kafka λΈλ‘컀 μ€μ μ ν©λλ€:
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
auto-offset-reset: earliest
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
Kafka νλ‘λμ ꡬν
@Service
public class KafkaProducer {
private static final Logger logger = LoggerFactory.getLogger(KafkaProducer.class);
private final KafkaTemplate<String, String> kafkaTemplate;
@Autowired
public KafkaProducer(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void sendMessage(String message) {
logger.info(String.format("#### -> Producing message -> %s", message));
this.kafkaTemplate.send("my_topic", message);
}
}
Kafka 컨μλ¨Έ ꡬν
@Service
public class KafkaConsumer {
private static final Logger logger = LoggerFactory.getLogger(KafkaConsumer.class);
@KafkaListener(topics = "my_topic", groupId = "my-group")
public void consume(String message) {
logger.info(String.format("#### -> Consumed message -> %s", message));
}
}
νλ‘λμ μ¬μ© μμ
@RestController
@RequestMapping("/api/kafka")
public class KafkaController {
private final KafkaProducer kafkaProducer;
@Autowired
public KafkaController(KafkaProducer kafkaProducer) {
this.kafkaProducer = kafkaProducer;
}
@PostMapping("/publish")
public ResponseEntity<String> sendMessageToKafkaTopic(@RequestParam("message") String message) {
this.kafkaProducer.sendMessage(message);
return ResponseEntity.ok("Message sent to Kafka topic");
}
}
μ΄ μ½λλ νλ‘λμ κ° λ©μμ§λ₯Ό my_topic μΌλ‘ 보λ΄κ³ , 컨μλ¨Έ κ° ν΄λΉ λ©μμ§λ₯Ό μλΉνλ ꡬ쑰μ λλ€. μ€μ μμ© μ¬λ‘ λ‘λ λ‘κ·Έ μ²λ¦¬ , μ€μκ° νΈλμμ μ²λ¦¬ λ±μμ μ¬μ©ν μ μμ΅λλ€.
μ€μκ° λ°μ΄ν° μ²λ¦¬ νΈλ λ
μ΅κ·Ό μ€μκ° λ°μ΄ν° μ²λ¦¬ μ νμμ±μ΄ λ€μν μ°μ μμ μ¦κ°νκ³ μμ΅λλ€. νΉν κΈμ΅ , μμ λ―Έλμ΄ , IoT λ±μμ μ€μκ° λ°μ΄ν° λΆμ μ΄ μ€μν μν μ νκ³ μμ΅λλ€. Gartner λ³΄κ³ μμ λ°λ₯΄λ©΄, μ€μκ° λ°μ΄ν° μ²λ¦¬λ μμΌλ‘λ κ³μ μ±μ₯ν κ²μ΄λ©°, 2025λ κΉμ§ μ 체 λ°μ΄ν°μ 75%κ° μ€μκ°μΌλ‘ μ²λ¦¬λ κ² μΌλ‘ μμΈ‘νκ³ μμ΅λλ€.
μμ£Ό 묻λ μ§λ¬Έ (FAQ)
Q1. Kafkaλ μ΄λ€ μν©μμ μ¬μ©νλμ?
A1. Kafkaλ λκ·λͺ¨ μ€μκ° λ°μ΄ν° μ€νΈλ¦¬λ°μ μ²λ¦¬ν λ μ¬μ©λ©λλ€. μ£Όλ‘ λ‘κ·Έ μ²λ¦¬ , νΈλμμ
λ°μ΄ν° μ²λ¦¬, μ΄λ²€νΈ κΈ°λ° μμ€ν
μμ μ¬μ©λ©λλ€.
Q2. μ€νλ§ λΆνΈμμ Kafkaλ₯Ό μ€μ νλ λ° λ³΅μ‘νκ°μ?
A2. μλμ. μ€νλ§ λΆνΈλ Kafkaμμ ν΅ν©μ μν΄ λ€μν μλ μ€μ μ μ 곡νμ¬ κ°λ¨νκ² κ΅¬μ±ν μ μμ΅λλ€.
Q3. Kafkaμ νμ₯μ±μ μ΄λ μ λμΈκ°μ?
A3. Kafkaλ λΆμ°ν μμ€ν
μΌλ‘, μλ² λ
Έλλ₯Ό μΆκ°νμ¬ μ½κ² νμ₯ν μ μμ΅λλ€.
Q4. μ€μκ° λ°μ΄ν° μ²λ¦¬λ μ μ€μνκ°μ?
A4. μ€μκ° λ°μ΄ν° μ²λ¦¬λ λΉ λ₯΄κ² λ³ννλ λΉμ¦λμ€ νκ²½μμ μ€μκ° μμ¬κ²°μ μ κ°λ₯νκ² νλ©°, κ²½μλ ₯μ λμ΄λ ν΅μ¬ μμμ
λλ€.
Q5. μ€νλ§ λΆνΈμμ Kafkaλ₯Ό μ¬μ©νλ μμλ₯Ό λ³Ό μ μλμ?
A5. μμμ μ 곡λ μ½λλ₯Ό μ°Έκ³ νλ©΄, μ€νλ§ λΆνΈμμ Kafkaλ₯Ό μ΄λ»κ² μ¬μ©νλμ§ μ½κ² μ΄ν΄ν μ μμ΅λλ€.
λκΈ