구인사이트만들기:Kotlin과 TypeScript 기반의 마이크로서비스 사이드에 적용 했던 중간점검 이야기

궁금하면 500원·2024년 7월 15일
0

마이크로서비스 아키텍처(MSA)를 활용한 구인사이트 개발 사례

소개

최근 많은 기업들이 복잡한 시스템을 보다 유연하고 관리하기 쉬운 방식으로 전환하기 위해 마이크로서비스 아키텍처를 채택하고 있습니다.
MSA는 각 기능을 독립적인 서비스로 나누어 개발, 배포, 확장을 용이하게 합니다.
이 글에서는 Kotlin과 Spring Boot, TypeScript와 Next.js를 기반으로
구축한 구인사이트 예제를 통해 MSA의 장점과 단점을 살펴보겠습니다.

MSA의 장점

독립적인 배포

각 서비스가 독립적으로 배포될 수 있어, 특정 기능의 변경이나 버그 수정이
전체 애플리케이션에 영향을 미치지 않습니다.

예를 들어, 채팅 기능에 버그가 발생해도 다른 기능에는 영향을 주지 않습니다.

확장성

각 마이크로서비스를 독립적으로 확장할 수 있습니다.
예를 들어, 채팅 서비스의 트래픽이 급증할 경우 해당 서비스만 스케일 아웃하면 됩니다.

기술 다양성

각 서비스가 독립적으로 구현되므로 다양한 기술 스택을 사용할 수 있습니다.

예를 들어, 채팅 서비스는 Node.js로 개발하고,
나머지 서비스는 Kotlin과 Spring Boot를 사용하여 개발할 수 있습니다.

구인사이트 사례

이번에 개발한 구인사이트는 다음과 같은 기능을 갖춘 마이크로서비스 아키텍처를 기반으로 합니다

기업평가 서비스

이력서 등록 서비스

구직자 모집 서비스

구인 모집 알림 서비스

채팅 서비스

이 사이트는 Kotlin과 Spring Boot를 기반으로 구축되었으며,
프론트엔드는 TypeScript와 Next.js를 사용하여 개발했습니다.

Jenkins를 이용한 CI/CD, Grafana와 Prometheus를 통한 모니터링,
그리고 서비스 디스커버리는 Eureka를 사용했습니다.

##코드 설명

1. Kotlin 기반의 채팅 서비스 (Spring Boot와 Eureka)

먼저, 채팅 서비스는 다음과 같이 Kotlin과 Spring Boot를 사용하여 구현합니다.
이 서비스는 Eureka를 통해 서비스 디스커버리를 합니다.

// ChatServiceApplication.kt
@SpringBootApplication
@EnableEurekaClient
class ChatServiceApplication

fun main(args: Array<String>) {
    runApplication<ChatServiceApplication>(*args)
}

블로그 글을 작성하면서 마이크로서비스 아키텍처(MSA)의 장점과 단점, 그리고 이를 구인사이트에 적용한 사례를 상세히 설명하는 것이 좋았습니다.

예측되는 트러블슈팅 및 주의했던 부분

성능 문제

트래픽 집중

특정 기능(예: 채팅 서비스)에 트래픽이 집중될 수 있습니다.
로드 밸런싱과 캐싱 전략을 통해 성능 저하를 방지할 수 있습니다.

쿼리 최적화

데이터베이스 쿼리가 비효율적일 경우 성능이 저하될 수 있습니다.
인덱스를 적절히 설정하고, 쿼리 성능을 분석하여 최적화합니다.

데이터 일관성 문제

분산 트랜잭션

여러 서비스 간의 데이터 일관성을 유지하기 어려웠습니다.
SAGA 패턴이나 2PC(2-Phase Commit)를 고려하여 데이터 일관성을 보장하는것을 배웠습니다.

데이터 중복

서비스 간의 데이터 동기화 문제가 발생할 수 있습니다.
데이터 중복을 최소화하고, 동기화 전략을 설계합니다.

서비스 간 통신 문제

네트워크 지연

서비스 간의 네트워크 통신이 지연될 수 되었습니다.
적절한 API 설계와 성능 모니터링을 통해 해결하는방법을 학습하였습니다.

API 버전 관리

API 버전 관리를 통해 구 버전의 클라이언트와 호환성을 유지하였습니다.

모니터링 및 로깅

통합 모니터링

Grafana와 Prometheus를 사용하여 시스템의 상태를 실시간으로 모니터링 하게 되었습니다.

중앙 집중형 로깅

ELK 스택이나 Fluentd를 활용하여 로그를 중앙에서 수집하고 분석합니다.

배포 및 버전 관리

자동화된 배포

Jenkins와 같은 CI/CD 도구를 사용하여 자동화된 배포를 설정하고, 배포 시 테스트 자동화를 통해 리스크를 줄입니다.

롤백 전략

배포 실패 시 롤백할 수 있는 전략을 마련합니다.
Canary 배포나 Blue-Green 배포를 고려하여 배포 리스크를 줄였습니다.

보안 문제

인증 및 권한 관리

OAuth2, JWT 등 인증 및 권한 관리 시스템을 구현하여 보안을 강화 하였습니다.

데이터 보호

데이터 암호화 및 보안 정책을 적용하여 사용자 데이터를 보호하게 되었습니다.

결론

마이크로서비스 아키텍처는 복잡한 시스템을 보다 관리하기 쉽게 만들어 주지만,
다양한 도전 과제를 동반합니다.

구인사이트 예제를 통해 MSA의 장점과 단점을 살펴보았으며,
트러블슈팅 및 주의사항에 대한 통찰을 제공했습니다.

적절한 도구와 전략을 사용하여 MSA를 효과적으로 관리하고 성공적인 시스템 구축을
이루기 위해 학습이 좀더 필요하다는것을 배웠습니다.

profile
꾸준히, 의미있는 사이드 프로젝트 경험과 문제해결 과정을 기록하기 위한 공간입니다.

0개의 댓글