본문 바로가기

분류 전체보기256

[MSA] Spring Cloud Sleuth와 Zipkin을 이용한 분산 시스템 Tracing_1 안녕하세요. 오늘은 Spring Cloud Sleuth와 Zipkin을 이용한 분산 시스템 Tracing을 하는 방법에 대해서 실습해보도록 하겠습니다. Zipkin Zipkin은 분산 트레이싱 시스템입니다. Zipkin은 시간 데이터를 모아 시간 지연 문제등을 해결할 수 있습니다. 로그 파일에 Tracing ID가 있다면 해당 ID를 통해 바로 이동할 수 있으며, 그렇지 않다면 서비스, Tag 등의 쿼리 기반으로 처리할 수 있습니다. 아래는 Zipkin의 UI화면입니다. Tracing을 해보기 위해서 Zipkin을 설치해보도록하겠습니다. 혹시 Zipkin에 대해 아키텍처적으로 궁금하신 분들은 https://zipkin.io/ 공식사이트를 방문하셔서 확인하시면 될 것같습니다. 설치 & 실행 https://.. 2019. 12. 5.
[MSA] MSA의 로깅과 트레이싱 안녕하세요. 오늘부터는 새로운 주제로 찾아뵙게 되었습니다. 바로 MSA입니다. 저희 회사에서 저는 요즘 프로젝트를 MSA의 기술들을 적용해가며 진행하고 있습니다. 오늘은 MSA의 기술 중 로그관리와 트레이싱에 대해서 한번 알아보도록 하겠습니다. MSA의 개념에 대한 설명은 추후에 따로 준비하도록 하겠습니다. ^^ 문제 제기 MSA(Micro Service Architecture)는 분산 환경에서 운영된다는 특징 때문에 각각의 서비스에 대한 로깅과 모니터링은 큰 고민거리로 남겨지게 됩니다. 서로 다른 개별 마이크로서비스(서버)에서 발생하는 로그를 연결지어 트랜잭션의 처음부터 끝까지 추적을 해내어야 하는데 이것은 쉽지않은 일입니다. 아래는 스프링 5.0 마이크로서비스 2/e에서 발췌한 내용입니다. 전통적인 .. 2019. 12. 4.
[Java 8] Java 8, Stream의 Collectors 안녕하세요. 이전 시간에 우리가 Stream에 대해서 알아봤던 것 기억하시나요? 오늘은 이어서 Collectors에 대해서 이야기 해보려고 합니다. Collectors란 "Stream을 일반적인 List, Set등으로 변경시키는 Stream 메서드"라고 입니다. 오늘은 Collectors를 통해 어떤 형태로 변경할 수 있는지에 대해서 알아보겠습니다. 오늘 수고해줄 List는 아래의 String List입니다. List givenList = Arrays.asList("a", "bb", "cc", "bb"); 그렇다면 위의 메서드를 이용하여 한번 Stream을 Collectors로 다뤄보도록 하겠습니다. toCollections toList, toSet toList collector는 모든 Stream el.. 2019. 11. 29.
[Java 8] Java 8 Stream API Tutorial 안녕하세요. 오늘은 Java 8의 기능 중 하나인 Stream에 대해서 알아보도록 하겠습니다. Stream은 배열, List등의 요소들의 처리를 담당하는 Class로써 기존의 배열처리를 간단하게 해주며, functional style로 처리할 수 있도록 해줍니다. 그리고 병렬처리 Optional 등 다양한 처리를 할 수 있도록 지원해줍니다. Stream 생성 Stream을 사용하기 위해서는 Stream을 생성할 필요가 있습니다. collection 또는 배열을 이용해서, 또는 자체적으로 생성할 수 있습니다. 아래와 같이 말이죠. // from Array String[] arr = new String[]{"a","b","c"}; Stream stream = Arrays.stream(arr); // from.. 2019. 11. 26.
[Java 8] Java 8에서의 새로운 특징 안녕하세요.이미 자바는 11버전을 향해 달리고 있지만 우리는 아직 낯선게 사실입니다. 우리뿐만 그런건 아닙니다. 아직 많은 오픈소스에서 호환되지 않기도 하지요. 언젠간 11버전에 대해서도 알아보겠지만 일단 요즘 대부분의 표준이 되고 있는 Java 8 버전에 대해서 이전 버전들과의 차이점에 대해 알아보도록 하겠습니다. Interface의 변화 Java 8 버전이전에는 interface는 public abstract methods만 허용했습니다. 하지만 Java 8 부터는 interface에서 static과 default 메서드를 사용할 수 있습니다. static method public interface Vehicle { void run(); static String producer() { return ".. 2019. 11. 19.
[java 8] 예제로 보는 lambda식_비교하기 Lambda식 없이 정렬 하기 Java8이전의 Sort는 Comparator interface를 implement하여 구현하여 사용하곤 했습니다. 아래와 같이 말이지요. public class Human { private String name; private int age; // standard constructors, getters/setters, equals and hashcode } /* * Test Class [Client] */ @Test public void sortEntitiesByName() { List humans = Arrays.asList(new Human("A", 20), new Human("B", 21)); Collections.sort(humans, new Comparator().. 2019. 11. 18.
[Java 8] 람다 표현식과 주의 사항 안녕하세요. 오느른 JAVA8에 관하여 실습해보도록 하겠습니다. 먼저 한가지 짚고 넘어가도록 하겠습니다. JAVA 8에서 이루고자 했던 것은 무엇일까요? 제가 일반적으로 많이들 말하는 부분이 간결한 코드와 멀티코어 프로세서를 쉽게 사용할 수 있도록 하는 것이라고 합니다. 그중 간결성에 대해서는 여타 많은 언어들이 나오면서 JAVA는 배우기 힘든 언어가 되었습니다. 이러한 단점을 극복하고자 Optional, Funtion, Lambda 등 다양한 방법이 JAVA8에 나왔습니다. 오늘부터는 이러한 기능과 방법을 알아보도록하겠습니다. lambda식 예제와 Function lambda식의 사용예제를 보도록 하겠습니다. @FunctionalInterface public interface Foo { String m.. 2019. 11. 13.
객체지향 설계의 5가지 원칙 S.O.L.I.D 안녕하세요. 오늘은 객체지향의 5가지 원칙, SOLID에 대해서 알아보도록하겠습니다. java의 특징은 많이 들어보셨을 것 같습니다. 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism) 이렇게 있죠. 이런 특징이 있는 JAVA는 객체지향(OOP) 프로그램의 특징을 가지고 있다고 합니다. 즉, 이런 특징을 이용하여 객체지향의 원칙을 구현할 수 있다는 것입니다. 오늘은 저와 객체지향을 목표로 하는 프로그램이 지켜야 할 5가지 원칙(Principle)에 대해서 알아보도록 하겠습니다. S - Single responsibility Principle 단일 책임 원칙(Single responsibility principle)이란 모든 메서드 또는 클래스는 단 하나의 책.. 2019. 11. 4.
[REST API] REST API의 Security With JWT 안녕하세요. 오늘은 REST API에 대해서 아야기하는 마지막 시간입니다. 주제는 security입니다. security는 우리가 개발을 하면서 빼놓을 수 없는요소입니다. 하지만 귀찮아서, 기능 개발이 재밌어서, 시간이 없어서 등등 많은 이유로 많은 개발자들이 접근하지 않는분야기도 합니다.(예전의 저만 그렇게 생각했을 수도 있어요.. ㅎㅎ;) 오늘은 REST API에서의 security에 대해서 알아보도록 하겠습니다. 개요 REST API의 Security를 생각할 때 가장먼저 생각해야할 제약조건은 stateless입니다. stateless란 서버는 client의 로그인과 같은 application state를 기록하지 않는 다는 의미입니다. 우리가 일반적으로 알고 있는 basic, OAuth 등과 같은.. 2019. 11. 1.
[REST API] REST 제약조건_캐싱(Caching) 캐시가 사용 가능해야 한다는 것은 REST의 6가지 제약조건 중 한 가지입니다. 캐싱이 어떤 것인지는 저의 예전 포스터를 참고 부탁드립니다. 캐시관련 http Method GET - 일반적으로 브라우저에서 cache가 사용 가능하게 처리합니다. POST - 일반적으로 cache가 사용 불가능합니다. 하지만 Expires와 Cache-Control header를 이용하여 caching을 구현하여 응답할 수 있습니다. PUT, DELETE - 해당 REQUEST는 Cache를 적용할 수 없습니다. cache관련 http 헤더 Expires 리소스의 cache 만료 시간을 절대값으로 나타낸 것입니다. 해당 헤더의 시간이 지나면 캐시가 아닌 원래 서버에 요청을 하여 리소스를 다시 얻어와야 합니다. Expires.. 2019. 10. 24.
[REST API] REST API 총 정리 안녕하세요. 요즘 대학교 동기들과 스터디를 하고 있습니다. 1달에 1번씩 주제를 선정하여 ppt를 만들고 발표를 합니다. 이번에 제가 발표한 주제는 REST에 대해서였습니다. 정리한 내용을 여러분들께 공유드립니다. 제가 지금까지 작성한 REST API에 대한 글들을 총 정리를 한 것이기 때문에 더 자세한 내용은 이전 게시물을 통해 확인바랍니다. 아래는 pdf파일입니다. rest api는 cache와 security에 관한 게시물을 마지막 게시물로 할 예정입니다. 감사합니다. 2019. 10. 18.
[Spring & Design Pattern] Spring에서 발견한 Design Pattern_strategy pattern 안녕하세요. 오늘은 디자인패턴 중 꽃이라고 불리는 strategy pattern에 대해서 알아보도록 하겠습니다. strategy Pattern OOP(객체 지향)의 주요 원칙중 하나로 Open-Closed Principle(개방폐쇄원칙)이 있습니다. 간략히 말하면 "소프트웨어의 구성요소들은 확장에는 열려있어야하고, 변경에는 닫혀있어야 한다." 라는 원칙입니다. 즉, 요구사항의 변경이 있을 때 기존 구성요소의 수정은 최소화 하되 확장에는 적극적이어야 한다는 말입니다. 확장에는 기존 구성요소의 변경이 없습니다. 결합도가 낮다는 의미이기도 합니다. strategy Pattern은 개방폐쇄원칙에 잘 맞아 떨어지는 패턴입니다. 위의 이미지는 strategy 패턴을 보여주는 diagram입니다. 보면 클라이언트는 .. 2019. 10. 16.