본문 바로가기

분류 전체보기256

[Redis] 캐시(Cache)와 Redis [Redis] 캐시(Cache)와 Redis [Redis] Redis의 기본 명령어 [Java + Redis] Spring Data Redis로 Redis와 연동하기 - RedisTemplate 편 [Java + Redis] Spring Data Redis로 Redis와 연동하기 - RedisRepository 편 안녕하세요. 현대의 웹 서비스에서는 Cache가 정말 중요한 역할을 합니다. 서비스의 규모가 커져감에 따라 모든 요청을 DB 직접 참조 또는 API 호출로 처리한다면 성능과 에러 등과 같은 이슈가 발생할 수 밖에 없습니다. 과도한 요청이 문제가 되기 시작하면 캐시(Cache)에 대해서 고려할 수 밖에 없습니다. 오늘은 캐시(Cache)와 Redis의 특징에 대해서 여러분과 이야기해보고자 합니다.. 2020. 8. 5.
[java8] 병렬 Stream Java에서는 다양한 방법으로 병렬 처리를 만들 수 있습니다. 기본적인 Thread 클래스를 이용할 수 있으며, ExecutorService를 이용하여 쓰레드풀도 쉽게 만들 수 있습니다. 그리고 CompleteFuture를 이용하면 쓰레드 간의 데이터 동기화, 실행 순서 등도 원하는 대로 조작할 수도 있습니다. 그리고 Java8애서 등장한 Stream은 병렬 처리를 쉽게 사용할 수 있게 메서드를 제공해줍니다. 만들어 놓은 Stream에 parallel를 추가하기만 하면 되죠. 오늘은 java8의 병렬 Stream에 대해서 알아보는 시간을 가져보겠습니다. Stream 예제 오늘 사용할 예제는 아래와 같습니다. 코드에는 java google style guide를 적용하였습니다. 메서드를 하나 만들도록 하겠.. 2020. 7. 26.
[Java9] Reactive Stream Flow - Processor 실습 안녕하세요. 우리는 이전 포스팅에서 Reactive Stream에 대해서 알아봤었습니다. Reactive Stream의 스펙으로 Publisher, Subscriber, Subscription을 소개해드렸었습니다. 하지만 저희가 알아보지 않은 스펙이 하나 더 존재합니다. 바로 Processor Interface 입니다. 오늘은 이 Interface에 대해서 간단하게 알아가보는 시간을 가지도록 하겠습니다. 개요 Processor는 리액티브 스트림에서 처리하는 이벤트의 변환 단계입니다. 예를 들어 Subscriber가 여러개 있을 때 하나의 Processor가 에러를 수신하면 이로부터 회복하거나 즉시 onError 신호를 모든 Subscriber에게 에러를 전파할 수 있습니다. 또한 Producer가 생성한.. 2020. 7. 17.
[Java9] Reactive Stream Flow - 실습편 안녕하세요. 이전 포스팅에서 Reactive Stream에 대해서 알아봤었습니다. 오늘은 Reactive Stream 스펙을 이용해 실제로 Reactive Stream으로 구현해보도록 하겠습니다. 예제를 만들어 보도록 하겠습니다. 스펙 이전 포스팅에서 확인했던 3가지의 Reactive Stream의 스펙은 아래와 같습니다. 자세한 내용은 이전 포스팅를 참고 부탁드립니다. public interface Publisher { public void subscribe(Subscriber 2020. 7. 15.
[Java8] Java 비동기 - CompletableFuture 안녕하세요. 우리는 이전시간에 [비동기] Reactive Stream 이란 포스팅에서 reactive stream에 대해서 알아보았습니다. Reactive Stream은 published된 이벤트에 반응하여 일련의 값을 처리하는 방식입니다. 하지만 우리가 비동기를 이용할 때는 이벤트를 처리할 때도 있지만 일회성으로 무거운 작업을 여러 CPU로 나눠서 처리하고자 함도 있습니다. 물론 Reactive 방식을 이용하여 처리할 수 있지만 Reactive 방식으로는 이럴경우 Thread를 완벽하게 제어하기가 까다롭습니다. 이럴 때 사용하는 비동기 방식이 일반적으로 생각할 수 있는 thread를 생성하여 작업을 위임하는 방법입니다.이러한 방법은 Java 5에서부터는 Future라는 이름을 추상화 되어 .. 2020. 7. 11.
[Java] Reactive Stream 이란? reactive stream이란 non-blocking(넌블럭킹) backPressure(역압)을 이용하여 비동기 서비스를 할 때 기본이 되는 스펙입니다. java의 RxJava, Spring5 Webflux의 Core에 있는 ProjectReactor 프로젝트 모두 해당 스펙을 따르고 있습니다. 또한 Java9에 추가된 Flow 역시 reactvie stream 스펙을 채택하여 사용하고 있습니다. 따라서 비동기 프로젝트를 잘 이해하기 위해서는 기본 스펙이 되는 Reactive Stream에 대해서 이해가 필요합니다. 이 스펙은 다행스럽게도 공개된 사이트가 있습니다. 원 페이지 주소는 참조에 두도록 하겠습니다. 오늘은 Reactive Stream 스펙에 대해서 한번 알아보는 시간을 가져보겠습니다. 개요 .. 2020. 7. 2.
[Spring] Spring AOP - 원리편 안녕하세요. 오늘은 Spring AOP의 3번째 시간으로 마지막 시간입니다. 오늘은 AOP가 Spring 내부에서 구현되는 원리에 대해서 한번 알아보는 시간을 가져보도록 하겠습니다. AOP를 사용하는 방법 및 기본적인 이론은 아래 링크를 통해 이전 포스팅을 확인해주시기 바랍니다. [Spring] Spring AOP - 기본 이론편 [Spring] Spring AOP - 실전편 정적 프록시와 동적 프록시 Spring의 AOP는 프록시 패턴을 사용합니다. proxy pattern에 대해서는 예전에 [Spring & Design Pattern] Spring에서 발견한 디자인패턴_Proxy Pattern 으로 포스팅 한적이 있으니 참고하시면 자세히 알 수 있습니다. 만약 Class에 .. 2020. 7. 1.
[Java] 자바에서 줄바꿈, 개행의 규칙 개발은 회사에 들어가면 혼자할 수 도 있지만 협업하는 경우가 훨씬 많습니다. 동일한 시간에 혼자서 만들 수 있는 프로젝트에는 한계가 있기 때문입니다. 무궁무진하게 쉴새없이 좋은 기술들이 나오고 있는 현재, 그리고 계속해서 바뀌는 요구사항. 모든 것을 만족시키려면 협업이 중요합니다. 여러명이서 만들지만 혼자서 만든것과 같은 결과물이 나온다면 그것은 더 없이 좋은 결과물이라고 생각합니다. 그러기 위해서는 코딩의 습관 등이 프로젝트에 일관적일 필요가 있습니다. 이럴 때 이용할 수 있는 것이 Coding Convention입니다. 오늘은 Coding Convention 중 Oracle docs에 나와있는 Coding Convention을 보면서 스스로 자신의 코딩 스타일에 대해서 되돌아보는 시간을 가지고자 합니.. 2020. 6. 26.
[Spring] Spring AOP - 실전편 안녕하세요. 오늘은 저번 포스팅, 기본 이론편에 이어서 Spring AOP에 대해서 실제 적용을 해보며 알아보는 시간을 가지도록 하겠습니다. 저번 포스팅에서 배운 이론이 어떻게 적용되는지 눈으로 확인하시며 쉽게 이해가 되셨으면 좋겠습니다. AOP 적용 타입 Spring AOP는 아래와 같은 type의 Advice를 제공합니다. @Before Before는 target 메서드가 실행되기 전에 Advice가 실행됩니다. target이 실행되지 못하도록 막는 방법은 가지고 있지 않습니다. (exception을 발생시키면 되기는 합니다.) @After After는 target 메서드가 실행된 후에 Advice가 실행됩니다. 정상적으로 메서드가 마무리되든 비정상적으로 exception이 발생하든 무조건 실행되는 .. 2020. 6. 23.
[Spring] Spring AOP - 기본 이론편 안녕하세요. 오늘은 Spring AOP에 대해서 알아보고 실제로 적용하는 방법에 대해서 이야기해보고자합니다. AOP는 [Spring] Spring의 정의와 기본 개념에서 Spring을 비침투적인 기술로 만들기위한 3가지 기술중 하나라고 언급한 적이있습니다. 오늘부터는 Spring AOP에 대해서 알아보는 시간을 가져보도록 하겠습니다. AOP 먼저 아래 코드의 상황을 보면서 문제를 이해해보도록 하겠습니다. doSomething이라는 메서드가 있습니다. 이 메서드는 어떤 바쁜 일을 합니다. 이렇게 운영하던 중 새로운 요구사항이 들어왔습니다. 바로 doSomething 메서드가 실행되는 시간을 찍어달라고 합니다. 그렇다면 우리는 아래와 같이 timeCheck 메서드를 만들어 코드를 작성할 수 있습니다. pub.. 2020. 6. 20.
[python] java 개발자가 배우는 python - dictionary 안녕하세요. 오늘은 java 개발자가 배우는 python 4번째 시간입니다. 오늘 배워볼 내용은 tuple과 마찬가지로 java에는 나오지 않는 자료형의 이름을 가진 dictionary입니다. 하지만 API를 개발해 보신분이라면 그렇게 생소하지 않을 것입니다. 빠르게 아래에서 dictionary에 대해서 알아보도록하겠습니다. dictionary dictionary는 java의 Map과 가장 유사한 자료구조를 가지고 있습니다. 즉, key - value Mapping의 자료구조라는 뜻입니다. dictionary는 list나 tuple 처럼 순차적으로 해당 요소값을 구하지 못하며 key를 통해 value의 값을 얻어옵니다. 이것이 dictionary의 가장 큰 특징이며 이때 hash를 사용하여 검색합니다. .. 2020. 6. 17.
[python] java 개발자가 배우는 python - tuple 안녕하세요. java 개발자가 배우는 python 3번째 시간입니다. 오늘 알아볼 것은 java 개발자가에게는 조금 생소한 개념일 수도 있는 tuple이라는 자료구조입니다. tuple tuple으 쉼표로 구분되는 여러 값으로 구성되는 자료구조입니다. 이 tuple은 python의 immutable(수정불가능한) list로써 python 함수의 다중리턴에 사용됩니다. 어떻게 사용하는 자료구조인지 예시를 들어가며 한번 확인해보도록 하겠습니다. 선언은 소괄호와 컴마를 이용해서 가능합니다. >>> test = () >>> type(test) >>> t = (1, 2, 3) >>> t (1, 2, 3) >>> type(t) 뿐만 아니라 선언시 초기화 할 경우에는 소괄호를 생략해도 tuple 자료형으로 선언됩니다... 2020. 6. 14.