반응형
Java(Spring Boot), Kotlin(Ktor), NestJS의 비교 내용 중:
- Kafka 연동 방식
- DB 연결 방식
- JWT 인증 구조
- 환경 설정 방식
- 동일 기능 API 예제
각 항목별로 보기 쉽고, 핵심만 빠르게 파악할 수 있도록 구성
🔄 Kafka 연동 방식
Java (Spring Boot)
- spring-kafka 사용
- application.yml에 설정
- @KafkaListener로 간단한 Consumer 구현 가능
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
Kotlin (Ktor)
- kafka-clients 직접 사용
- 코루틴과 함께 비동기 처리
- 설정은 코드에서 수동으로 지정
val consumer = KafkaConsumer<String, String>(props)
consumer.subscribe(listOf("topic"))
NestJS
- @nestjs/microservices + kafkajs
- ClientsModule을 통한 Kafka 클라이언트 등록
- 데코레이터 방식으로 간단하게 사용 가능
ClientsModule.register([
{
name: 'KAFKA_SERVICE',
transport: Transport.KAFKA,
options: {
client: {
brokers: ['localhost:9092'],
},
},
},
])
🛢️ DB 연결 방식
Java (Spring Boot)
- JPA (Hibernate) + Spring Data
- application.yml로 DB 연결 설정
- Repository 패턴, 트랜잭션 처리 간편
Kotlin (Ktor)
- Exposed 또는 JPA 사용
- DSL 기반 SQL 쿼리 작성이 가능 (Exposed)
- 설정은 코드 기반 또는 conf 파일 사용
NestJS
- TypeORM 또는 Prisma
- .env 파일과 TypeOrmModule.forRoot 사용
- TypeScript로 프론트와 타입 공유 유리
🔐 JWT 인증 구조
Java (Spring Security)
- OncePerRequestFilter로 토큰 필터링
- SecurityConfig에서 인증 경로, 인가 설정
- 커스터마이징 매우 세분화 가능
Kotlin (Ktor)
- Authentication 플러그인 사용
- JWTVerifier 설정 필요
- call.principal<JWTPrincipal>()로 사용자 추출
NestJS
- @nestjs/jwt + PassportModule
- AuthGuard('jwt')로 인증 처리
- JwtStrategy에서 토큰 검증 구현
⚙️ 환경 설정 방식
Java (Spring Boot)
- application.yml, @Value, @ConfigurationProperties
- @Profile을 통해 dev/stage/prod 전환 가능
Kotlin (Ktor)
- application.conf (HOCON) 또는 코드 기반 설정
- 타입 안전한 구성 가능
NestJS
- .env + ConfigModule
- ConfigService로 환경 변수 주입
🧪 동일 기능 API 예제 (GET /greet?name=홍길동 → "Hello, 홍길동!")
Java (Spring Boot)
@RestController
@RequestMapping("/api")
public class GreetController {
@GetMapping("/greet")
public String greet(@RequestParam String name) {
return "Hello, " + name + "!";
}
}
Kotlin (Ktor)
routing {
get("/greet") {
val name = call.parameters["name"] ?: "World"
call.respondText("Hello, $name!")
}
}
NestJS (TypeScript)
@Controller('api')
export class GreetController {
@Get('greet')
greet(@Query('name') name: string): string {
return `Hello, ${name || 'World'}!`;
}
}
필요하시면 여기서 더 확장해서 Swagger, 테스트 코드, CI/CD, 마이크로서비스 구성 차이도 정리해드릴 수 있어요!
반응형
'Java' 카테고리의 다른 글
gRPC 연동 정리 (Java vs Kotlin vs NestJS) (0) | 2025.04.02 |
---|---|
Java, Kotlin, NestJS의 CI/CD 구성과 마이크로서비스 아키텍처 구성 차이 (0) | 2025.04.02 |
Java, Kotlin, NestJS 비동기 처리 방식, 성능 특징, 그리고 API 구조 설계 방식 차이 (0) | 2025.04.02 |