Spring13 뭐? MSA? 그렇다면 다른 서비스를 호출해보자 Service Mesh. - 02 이전에는 MSA의 기본인 Gateway를 구현했습니다. 자 그러면 마이크로 서비스 답게 내부의 서비스들은 각자의 방법으로 메시지를 주고받아야 합니다. 그렇다면 어떤 방법을 사용해야 할까요? 앞에서 만든 Gateway를 사용하는 것도 하나의 방법이 될 수 있습니다. 이 방법을 사용하면 모든 트래픽을 게이트웨이에서 관리하니까 로깅같은 부분에서는 더욱 용이할거라고 생각합니다. 하지만 모든 네트워크 통신이 Gateway라는 단일 진입점을 사용하게 되면, 서비스의 트래픽이 커졌을 때, 게이트웨이의 장애가 전체 서비스의 장애가 될 수 있습니다. 이를 단일 장애점 (Single point of failure) 이라고 합니다. 따라서 각각의 서비스는 peer-to-peer 방식으로 통신이 이루어지는게 이상적인 아키텍처.. 2021. 4. 14. OAuth2.0 + JWT를 사용한 토큰 기반 서버 인증 구현하기 토큰 기반 인증 인증받은 사용자들에게 토큰을 발급하여, 서버에 접근할 때 토큰 정보를 함께 보내어 인증을 합니다. 서버에서는 사용자 인증 벙보를 세션으로 가지고 있을 필요가 없기 때문에 Stateless한 구조라고 하며, 서버를 확장하기 용이합니다. 인증에 사용할 OAuth2 Provider Google Naver Kakao 개발 전 준비 사항 OAuth2는 인증서버에서 로그인 후 인증서버에서 우리의 서버로 토큰을 보내주기 위해 Callback url을 등록해주어야 합니다. OAuth2를 제공해주는 개발자 센터에 OAuth2 인증을 사용하기 위한 어플리케이션 등록 합니다. developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카.. 2021. 4. 12. TDD.. 테스트 코드는 습관이에요! 인터넷에 테스트 코드의 장점을 검색해보면, 안정성을 높인다. side-effect를 줄인다. 마음의 평화가 찾아온다. 등 생산성을 매우 높여준다고 합니다. 하지만 저도 아아 그렇구나 테스트 코드는 좋은거구나.. 하고 신나게 개발만 했습니다. 물론 테스트 했죠. 디버깅하면서 전체 시나리오 테스트를요... 그런데 생각해봅시다. 우리는 소프트웨어라는 제품을 만들고 있는데, 제품을 만들 때 테스트를 안한 부품을 믿고 사용 할 수 있을까요? TDD를 공부하면 만나는 키워드가 있습니다. 그건 바로 F.I.R.S.T인데, F.I.R.S.T 원칙을 지키면서 단위테스트를 작성하면 좋은 테스트를 만들 수 있다고 합니다. 프로그래밍 패러다임은 이런 단어로 뜻 만드는 걸 좋아하는거같아요. SOLID라던가.. ACID라던가.... 2021. 4. 2. 뭐? MSA? 그렇다면 Zuul로 Gateway를 구현해보자. - 01 Netflix/zuul Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more. - Netflix/zuul github.com Eureka, Hystrix등과 같이 Netflix OSS에 포함 된 API 게이트웨이 Zuul 1.x은 Servlet의 Blocking API를 사용되어 개발되었기 때문에 기본적으로 Blocking 방식으로 동작을 하고, 이를 보완하기 위해 Thread pool을 사용했지만, 오랫동안 연결이 유지되어야 하는 Websocket과 같은 연결을 지원하지 않았지만, Zuul 2.0부터는 Netty 기반 Non-blocking으로 동작합니다. 💡 Spring Clo.. 2021. 3. 30. 헥사고날 아키텍처(Hexagonal Architecture) 기존의 계층형 아키텍처는 DIP를 적용해도 한계가 있고, 도메인이 인프라에 의존하게 되면서 도메인적인 관심사와 기술적인 관심사가 섞이게 됩니다. MSA에서는 여러 종류의 어플리케이션을 호출하는 시스템과 상호작용하는 저장소가 존재하기 때문에 다양한 인터페이스를 필요로 합니다. 하지만 시스템의 관점에서는 호출하는 시스템과 Infra 간에 큰 차이가 없습니다. 이러한 사상에서 탄생한 헥사고날 아키텍처는 '포트와 어댑터 아키텍처' 라고도 불리며 비즈니스 로직을 표현하는 내부 영역과 인터페이스 처리를 담당하는 외부 영역으로 나뉩니다. 내부 영역은 순수한 비즈니스 로직을 표현하는 영역으로 외부 영역과 연계되는 포트(Port)를 가지고 있고, 외부 영역은 외부에서 들어오는 요청을 처리하는 인 바운드 어댑터(Inbou.. 2021. 3. 27. Event를 발행해 느슨한 결합을 가져보자 도메인 모델간에 강한 의존성을 갖게 되면 트랜잭션의 범위가 커지고 시스템이 복잡해지는 경우가 발생합니다. 이를 해결하기 위해 Spring에서는 이벤트를 발행하고 핸들링하는 방법을 제공해줍니다. 시나리오 주문을 하면 주문 완료 Sms를 발송한다. @RequiredArgsConstructor @Service public class OrderService { private final OrderRepository orderRepository; private final SmsClient smsClient; public void placeOrder(OrderRequest orderRequest) { Order order = new Order(orderRequest.getOrderId()); order.place().. 2021. 3. 27. 이전 1 2 3 다음