๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ํ๊ธฐ: Java, Maven/Gradle, Kafka, ๊ทธ๋ฆฌ๊ณ ์คํ๋ง ๋ถํธ ํตํฉ ๊ฐ์ด๋
๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๋๋ก ์ค์ ํ๋ ๊ฒ์ ์ฑ๊ณต์ ์ธ ํ๋ก์ ํธ ๊ฐ๋ฐ์ ์ฒซ ๊ฑธ์์ ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ Java , Maven/Gradle , Apache Kafka , ๊ทธ๋ฆฌ๊ณ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ ๋ฅผ ์ค์ ํ๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์๋ดํฉ๋๋ค. ๊ฐ ๋จ๊ณ๋ ์ฝ๋ ์์ ์ ํจ๊ป ์ ๊ณต๋์ด, ๋ฐ๋ผ ํ๋ฉด์ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
1. Java์ Maven/Gradle ์ค์น
Java ์ค์น
Java ๋ ์คํ๋ง ๋ถํธ์ Kafka์ ํ์ ๊ธฐ๋ฐ์ด ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค. ์ต์ JDK(Java Development Kit) ๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ค์น ํ, Java ๋ฒ์ ์ ํ์ธํ๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
java -version
์ด ๋ช ๋ น์ด๋ก ํ์ฌ ์ค์น๋ Java ๋ฒ์ ์ ํ์ธํ ์ ์์ต๋๋ค. Java 11 ๋๋ Java 17 ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
Maven ๋๋ Gradle ์ค์น
Maven ๊ณผ Gradle ์ ์๋ฐ ํ๋ก์ ํธ์ ๋น๋ ๋๊ตฌ ๋ก, ๊ฐ๊ฐ ํ๋ก์ ํธ์ ์์กด์ฑ ๊ด๋ฆฌ์ ๋น๋๋ฅผ ๋ด๋นํฉ๋๋ค.
Maven ์ค์น
Maven ์ค์น ํ, ๋ค์ ๋ช ๋ น์ด๋ก ์ค์น ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค:
mvn -version
Gradle ์ค์น
Gradle์ ์ฌ์ฉํ๋ ค๋ฉด ์ค์น ํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํฉ๋๋ค:
gradle -v
๋ ์ค ํ๋์ ๋น๋ ๋๊ตฌ๋ฅผ ์ ํํ๋ฉด ๋ฉ๋๋ค. ์คํ๋ง ๋ถํธ ๋ Maven ๊ณผ Gradle ๋ชจ๋ ์ง์ํ๋ฏ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง์ถฐ ์ ํํ ์ ์์ต๋๋ค.
2. ๋ก์ปฌ์ Kafka ์ค์น ๋ฐ ์คํ
Kafka ์ค์น
Kafka๋ Apache Kafka ๊ณต์ ์น์ฌ์ดํธ ์์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. Kafka๋ Zookeeper ์ ํจ๊ป ๋์ํ๋ฏ๋ก, Zookeeper๋ ์ค์นํด์ผ ํฉ๋๋ค.
# Kafka ๋ค์ด๋ก๋
wget https://downloads.apache.org/kafka/3.0.0/kafka_2.13-3.0.0.tgz
tar -xvzf kafka_2.13-3.0.0.tgz
cd kafka_2.13-3.0.0
Zookeeper ์คํ
Kafka๋ฅผ ์คํํ๊ธฐ ์ ์ Zookeeper ๋ฅผ ๋จผ์ ์คํํด์ผ ํฉ๋๋ค.
bin/zookeeper-server-start.sh config/zookeeper.properties
Kafka ์คํ
Zookeeper๊ฐ ์คํ๋์๋ค๋ฉด, ์ด์ Kafka ๋ธ๋ก์ปค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
bin/kafka-server-start.sh config/server.properties
Kafka๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ฉด, Kafka ๋ธ๋ก์ปค๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ค๋น๊ฐ ๋ฉ๋๋ค.
3. ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ ์์ฑ
์คํ๋ง ๋ถํธ ์ด๊ธฐํ
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ Spring Initializr ์น์ฌ์ดํธ๋ฅผ ํตํด ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ ์์ฑ ์ ์๋์ ๊ฐ์ ์ค์ ์ ์ ํํฉ๋๋ค:
- Project : Maven Project (๋๋ Gradle)
- Language : Java
- Spring Boot Version : 2.5.6
- Dependencies : Spring Web, Spring Kafka
์น์ฌ์ดํธ์์ ์ค์ ํ ํ ํ๋ก์ ํธ๋ฅผ ๋ค์ด๋ก๋ํ ๋ค, ๊ฐ๋ฐ ํ๊ฒฝ์์ ํ๋ก์ ํธ๋ฅผ ์ด ์ ์์ต๋๋ค.
ํ๋ก์ ํธ ๊ตฌ์กฐ
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๊ฐ ์์ฑ๋๋ฉด ์๋์ ๊ฐ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค:
src/
main/
java/
com.example.kafka/
KafkaApplication.java
resources/
application.yml
Kafka ๊ด๋ จ ์์กด์ฑ ์ถ๊ฐ
pom.xml
๋๋
build.gradle
ํ์ผ์ Kafka ์์กด์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์๋๋ Maven ์ ๊ธฐ์ค์ผ๋ก ํ ์์กด์ฑ ์ถ๊ฐ ์์ ์
๋๋ค:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.7.0</version>
</dependency>
Gradle ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
build.gradle
ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์กด์ฑ์ ์ถ๊ฐํฉ๋๋ค:
implementation 'org.springframework.kafka:spring-kafka:2.7.0'
4. Kafka ๊ด๋ จ ์ค์ ์ถ๊ฐ
์คํ๋ง ๋ถํธ์์ Kafka ์ค์ ์ ๊ฐ๋จํ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋จผ์ ,
application.yml
ํ์ผ์ Kafka ๋ธ๋ก์ปค ์ค์ ์ ์ถ๊ฐํฉ๋๋ค.
application.yml ์ค์ ์์
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 ๋ธ๋ก์ปค์ ์ฐ๊ฒฐํ์ฌ ํ๋ก๋์ ์ ์ปจ์๋จธ ๊ฐ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๋์์ค๋๋ค.
5. Kafka ๋ฉ์์ง ์ ์ก ๋ฐ ์์ ์์
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));
}
}
์ด ์ฝ๋๋ Kafka ํ๋ก๋์ ๊ฐ ๋ฉ์์ง๋ฅผ my_topic ์ผ๋ก ๋ณด๋ด๊ณ , ์ปจ์๋จธ ๊ฐ ํด๋น ๋ฉ์์ง๋ฅผ ์๋นํ๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ ์ค์ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๊ฒฝ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ํธ๋ ๋ ๋ฐ ํต๊ณ
์ต๊ทผ ํต๊ณ์ ๋ฐ๋ฅด๋ฉด, ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์คํ๋ง ๋ถํธ ์ Kafka ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ ๋ฅผ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค. 2023๋ Stack Overflow ์ค๋ฌธ์กฐ์ฌ ์ ๋ฐ๋ฅด๋ฉด, ์คํ๋ง ๋ถํธ๋ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํ๋ ์์ํฌ ์ค ํ๋์ด๋ฉฐ, Kafka๋ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฅผ ์ํ ๋ํ์ ์ธ ์๋ฃจ์ ์ผ๋ก ์๋ฆฌ ์ก๊ณ ์์ต๋๋ค. ํนํ ๊ธ์ต, IT, IoT ์ฐ์ ์์ Kafka์ ์ฌ์ฉ์ด ๊ธ์ฆํ๊ณ ์์ต๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ (FAQ)
Q1. Kafka๋ ์ ํ์ํ๊ฐ์?
A1. Kafka๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ด, ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ
์ด๋ ๋ก๊ทธ ์ฒ๋ฆฌ์ ์ ์ฉํฉ๋๋ค.
Q2. ์คํ๋ง ๋ถํธ์์ Kafka ์ค์ ์ด ์ด๋ ต๋์?
A2. ์คํ๋ง ๋ถํธ๋ Kafka์์ ํตํฉ์ ์ํด ์๋ ์ค์ ์ ์ ๊ณตํ๋ฏ๋ก, ์ค์ ์ด ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
Q3. Kafka๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Zookeeper๋ ์ค์นํด์ผ ํ๋์?
A3. ๋ค, Kafka๋ Zookeeper์ ํจ๊ป ๋์ํ๋ฏ๋ก, Kafka๋ฅผ ์คํํ๊ธฐ ์ ์ Zookeeper๋ฅผ ๋จผ์ ์ค์นํ๊ณ ์คํํด์ผ ํฉ๋๋ค.
Q4. Kafka ํ๋ก๋์์ ์ปจ์๋จธ๋ ์ด๋ค ์ญํ ์ ํ๋์?
A4. ํ๋ก๋์๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ญํ ์, ์ปจ์๋จธ๋ ๊ทธ ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
Q5. ์คํ๋ง ๋ถํธ์์ Kafka ํตํฉ์ ์ํ ํ์ ์์กด์ฑ์ ๋ฌด์์ธ๊ฐ์?
A5.
spring-kafka
์์กด์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์คํ๋ง ๋ถํธ์์ Kafka๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋๊ธ