들어가기 order-service에서 주문 내역을 저장하는 부분을 JPA와 Kafka Connect를 이용한 두 가지 방법으로 구현했었다. Kafka를 사용했을 때의 장점은 카프카가 DB로의 저장 요청을 대신 수행하므로 어플리케이션에서는 Kafka로 요청을 보내고 클라이언트에게 바로 응답을 할 수 있다는 점이다. OrderJpaService@Service@Transactional@RequiredArgsConstructorpublic class OrderJpaService implements OrderService { private final OrderRepository orderRepository; private final OrderProductRepository orderProductRep..
기존의 프로젝트에서는 HTTP만 사용했었는데 보안 문제 때문에 요즘은 거의 HTTPS만 사용하는 추세고 해서 미뤘던 일을 오늘 하기로 했다. 과정은 그리 복잡하지는 않았지만 그동안 시간이 없었기에 이번에 싹 바꾸기로 했다. TLS 인증서 발급 https://certbot.eff.org/ CertbotTaglinecertbot.eff.org 나는 Certbot을 이용해서 인증서를 발급 받았다. 우선 자신의 도메인이라는 것을 확인하는 과정이 필요하기 때문에 인증 과정을 거쳐야 한다. 방법은 여러 가지가 있지만 나는 WAS를 중단해도 되는 상황이었고, 쉽게 진행할 수 있을거 같아서 아래의 방법으로 진행했다. sudo apt updatesudo apt-get install letsencrypt -y sudo..
사건의 발단 매번 Kafka를 실행시키기 귀찮아서 개발을 편하게 하기 위해서 EC2에 Kafka를 올려두었다. 그런데 로컬 환경이 아니다 보니 진짜 여러 오류가 많이 발생했다. 그래서 나중에 혹시 또 겪을 수도 있기 때문에 해결한 과정을 정리해 두기로 했다. Image 문제 - repository does not exist or may require wurstmeister/kafka와 wurstmeister/zookeeper 이미지를 이용해서 실행하려고 했는데 오류가 발생했다. pull access denied for wurstmeister/kafka, repository does not exist or may require 딱 보니까 이미지에 문제가 생긴거 같아서 검색을 통해 confluent kaf..
개요 이번에는 config-service를 구현해 보았다. 다른 서비스들에서 공통된 설정 부분을 따로 빼서 한 파일로 만들고, 나중에 빌드를 했을 때 설정만 변경할 수 있기 때문에 바꿀 가능성이 있는 부분도 따로 빼서 처리할 수 있다. 민감한 정보를 그대로 노출시키는 것은 바람직하지 않기 때문에 간단한 대칭키 암호화를 이용하여 처리했다. Spring Cloud Config Server 설정 dependencies { // Bus-Kafka implementation 'org.springframework.cloud:spring-cloud-starter-bus-kafka' // Config Server implementation 'org.springframework.cloud:spri..
개요 이번에는 매장 서비스를 구현해 보겠다. 매장 서비스는 주로 매장 목록 조회에 필요하고 매장 상세 보기 정도의 정보를 응답할 수 있는 서비스이다. 일단 기본적으로 카테고리와 연관 관계를 맺고 있지만 다른 서비스와는 독립적으로 구성되어 있으므로 따로 카테고리 서비스를 만들지 않고 그냥 매장 + 카테고리로 프로젝트를 만들기로 했다. Entity @Getter@AllArgsConstructor@NoArgsConstructor(access = AccessLevel.PROTECTED)@Builder@Table(name = "stores")@Entitypublic class Store { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) priva..
https://megamaker.tistory.com/298 [Spring Cloud][4] JWT, OAuth2로 로그인 하기개요 이번 프로젝트는 MSA 구조에 대해서 공부하는 것뿐만 아니라 여러 최적화도 적용해보기로 했기 때문에 서버측에 부담이 덜 갈 수 있도록 JWT를 이용하기로 했다. 일단 액세스 토큰만 구현megamaker.tistory.com 저번 로그인에 이어서 이번에는 로그아웃을 구현해보았다. 딱히 서버에서 세션을 사용하는 것이 아니어서 처리 로직은 그냥 토큰이 저장되어 있는 쿠키를 없애면 된다. 쿠키 만료시키기 gateway-service 수정 우선 gateway-service에서 로그아웃을 위한 경로를 지정한다. 로그인한 상태에서만 접근 가능하도록 필터를 적용했다. 필터명은 전에는 ..