분류 전체보기264 [Redis] Hashes을 이용하여 매핑 만들기 ( Strings VS Hashes ) 안녕하세요. 우리는 저번시간에 [Redis] Redis 자료구조 알아보기 포스팅을 통해 Redis가 가지고 있는 유용한 자료구조와 그 사용법 및 활용되는 곳에 대해서 간단히 알아보았습니다. 오늘은 이어서 제가 토이 프로젝트에 사용한 방법에 대해서 여러분들께 공유드리는 포스팅을 한번 진행해보려고 합니다. 오늘 여러분들께 보여드릴 것은 Hashes 자료구조를 이용하여 매칭되는 서로의 Key와 Value를 뒤집어서도 매핑할 수 있게하는 것입니다. 문제 상황 기존에 프로젝트에서 Tag를 저장하고 있는 테이블이 있었습니다. 이 테이블은 primary key인 id 값과 그 이름인 value 값을 가지고 있습니다. id와 value는 1 대 1 대응이되고 있었습니다. 사용하는 곳은 여느 태그들과 마찬가지입니다. 만.. 2020. 12. 31. [Redis] Redis 자료구조 알아보기 안녕하세요. 이전 [Redis] Redis의 기본 명령어 포스팅에서 Redis의 기본적인 명령어와 이와 연관된 자료구조에 대해서 간단하게 알아본적이 있습니다. Redis는 다양한 자료구조를 기본적으로 제공하고 있는데 상당히 높은 생산성을 제공합니다. Redis 자료구조를 잘 알고 적절하게 사용한다면 생산성 및 퍼포먼스도 얻을 수 있습니다. 따라서 오늘은 여러분들과 Redis의 자료구조에 대해서 알아보는 시간을 여러분들과 가져보려고합니다. redis.io에 소개되고 있는 자료구조 Redis는 아래의 자료구조를 공식적으로 지원하고 있습니다. Strings : Vinary-safe한 기본적인 key-value 구조 Lists : String element의 모음, 순서는 삽입된 순서를 유지하며 기본적인 자료구.. 2020. 12. 24. [UNIT-TEST] Webflux Reactor 유닛 테스트 하기 안녕하세요. 오늘은 여러분들과 함께 알아볼 내용은 Webflux에서 채택하고 있는 Reactive Stream 프로젝트인 Reactor를 유닛 테스트하는 방법입니다. Reactive Stream의 경우 기존의 일반적인 로직과 다르게 Publisher(생산)와 Subscriber(구독)로 나누어져 있으며 각각이 서로를 의식하지 않은채 약한 결합으로 돌아갑니다. 그렇기 때문에 기존 우리가 짜던 구성으로는 테스트가 쉽지 않습니다. 따라서 테스팅을 용이하게 하기위한 구성 방법 및 테스팅 방법에 대해서 오늘 여러분들과 함께 공유하고자 합니다. 이번 포스팅에서 테스팅 프레임워크로 Spock을 사용하도록 하겠습니다. JUnit 5와 Reactor 테스팅 방법의 차이는 없으므로 동일하게 사용하셔도 좋습니다. 의존성 w.. 2020. 12. 17. [JPA] 테이블의 한 컬럼 내에서 N개의 값을 가지는 방법 안녕하세요. 오늘은 처음으로 여러분들께 JPA에 관련하여 포스팅을 하려고합니다. 저는 대부분의 프로젝트에서 JPA와 QueryDsl을 사용하고 있습니다. 사용하는 이유는 확실히 간편하기 때문입니다.. 그리고 String이 아닌 메서드 형으로 쿼리를 작성하기 때문에 만약 잘못된 점이 있다면 QueryDsl 덕분에 컴파일 타임에 찾을 수 있고 객체로 DB Table을 관리할 수 있다는 점이 있습니다. 사용하기 위한 러닝커브는 상당히 높은 편이지만 익숙해지기만 한다면 다시 Mybatis로는 돌아갈 수 없는 편함을 제공합니다. 여러분들과 오늘 이야기 나눠보고자 하는 내용은 JPA를 이용할 때 테이블의 컬럼에 내의 N개의 값을 가지는 방법입니다. 요구사항 한 게임에 게임에 대해서 리뷰를 남깁니다. 리뷰를 남길 때.. 2020. 12. 12. [자료구조] 코드로 알아보는 java의 EnumMap 안녕하세요. 오늘은 코르로 알아보는 java의 자료구조 시간으로 돌아왔습니다. 오늘 여러분들께 소개시켜드리고자 하는 자료구조는 EnumMap입니다. 이름에서 알 수 있듯이 Enum을 Key로 하는 자료구조인데요. HashMap을 평소에 사용하다 Sonar Lint의 정적분석에서 Enum을 Key로 사용한다면 EnumMap을 사용하는 것을 추천하기에 저도 EnumMap의 존재를 알게 되었습니다. 오늘은 제가 EnumMap 자료구조를 사용한 상황과 EnumMap은 HashMap과 어떻게 다른지 알아보는 시간을 가져보도록 하겠습니다. 문제의 상황 아래 소스는 제가 진행하고 있는 프로젝트의 코드 중 일부입니다. Game에 여러 Review를 남길 수 있도록 DB의 구조가 되어있습니다. 여기서 아래 메서드는 Re.. 2020. 12. 6. [주절주절] 사이드 프로젝트 - DB 사이트(Pika) 회사를 이직하고 8개월 정도 지나고 나서 이제 좀 업무와 도메인에 익숙해지기 시작했다고 느껴질 무렵 저는 전 회사에서 마음이 맞는 사람들과 사이드 프로젝트를 하기 시작하였습니다. 혼자하는게 아닌 팀을 이뤄서 하는 사이드 프로젝트라는게 사실 부담스럽다는 생각도 있었습니다. 왜냐하면 어떤 일을 함에 있어 동기라는게 중요한데 개발에 대한 열정만으로 과연 프로젝트를 계속 이어나갈 수 있을까하는 걱정이 었습니다. 막연하게 개발자 3명과 디자이너 1명이서 사이드 프로젝트를 시작하고 이제 2개월이 지났습니다. 다행히 처음에 막연했던 목표가 지금은 구체적이 되어 적당히 단단한 동기와 지속 할 수 있는 원동력이 생기게 되지 않았나 싶습니다. 우리는 먼저 제 1 목표를 세웠습니다. 제 1 목표 그것은 우리가 만든 사이트로.. 2020. 12. 3. [java/Design Pattern] 싱글톤의 Early 초기화 안녕하세요. 이전시간에 저희들은 싱글톤의 Lazy 초기화에 대해서 알아보는 시간을 가졌었습니다. 포스팅에서 싱글톤 객체의 초기화 시점에는 Lazy와 Early가 있다고 말씀드렸었는데요. 오늘은 Eager 시점의 초기화에 대해서 알아보는 시간을 가져보도록 하겠습니다. 먼저 저번 포스팅에서 말씀드린 객체 초기화 방법에 대해서 다시한번 보겠습니다. Eager initialization: 클래스 인스턴스 생성을 실제로 사용되기전에 먼저 진행 Static block initialization Enum singleton Lazy initialization: 클래스 인스턴스의 생성을 처음 실제로 사용될 때 진행 Thread safe singleton Bill Pugh singleton Eager initializat.. 2020. 11. 29. [java/Design Pattern] 싱글톤의 Lazy 초기화 안녕하세요. 오랜 만에 여러분들과 Design 패턴에 대해서 알아보는 시간을 가져보려고 합니다. 이전에 저희들은 Singleton 패턴에 대해서 [Spring & Design Pattern] Spring에서 발견한 디자인패턴_Singleton Pattern 시간에 알아본적이 있습니다. 그때 Singleton을 초기화 할때 아래와 같은 코드로 초기화를 진행했습니다. 하지만 사실 이렇게 초기화 하는 것은 문제점을 안고 있습니다. public class Government { private static Government government; private Government() {} public static Government election() { if(government == .. 2020. 11. 28. [Spring] Spring의 핵심기술 PSA - 개념과 원리 안녕하세요. 오늘은 오랜만에 Spring에 대해서 이야기 해보고자합니다. [Spring] Spring의 정의와 기본 개념 포스팅에서 Spring의 대표적인 핵심가치 3가지로 IoC, AOP, PSA가 있다고 말씀드렸었습니다. 그리고 [Spring] Spring의 핵심 기술 IoC / DI에서 그 중 하나인 IoC/DI에 대해서 알아보는 시간을 가졌습니다. 그리고 이후 AOP에 대해서 3개의 포스팅 ([Spring] Spring AOP - 기본 이론편, [Spring] Spring AOP - 실전편, [Spring] Spring AOP - 원리편)에 걸쳐서 함께 알아보는 시간을 가졌습니다. 오늘은 마지막 남은 핵심가치인 PSA(Portable Service Abstraction)에 대해서 알아보는 시간을 .. 2020. 11. 25. [java] Generic을 이용한 Box Class 안녕하세요. 오늘 포스팅은 Java Generic의 4번째 시간입니다. 오늘 여러분들과 공유하고자 하는 내용은 다시 기본으로 돌아가서 Generic을 이용한 Box Class라는 내용입니다. Box Class에 란 아래와 같이 어떠한 타입으로든 받을 수 있는 Class를 말합니다. 아래 예제를 보면 Box class 안에 Object 타입의 변수가 하나있으며 getter, setter 메서드가 각각 있습니다. Object Class는 모든 Class의 부모 클래스이기 때문에 setter 메서든에는 모든 Class가 들어올 수 있게되어 Box Class란 이름으로 사용할 수 있는 것입니다. public class Box { private Object object; public void set(Object .. 2020. 11. 22. [Java] Java의 Super Type Token 안녕하세요. 오늘은 Java Generic의 3번째 시간입니다. 외부 통신을 할 때 가장 많이 사용하는 Spring의 Bean은 restTemplate 일겁니다. restTemplate을 사용할 때 응답값에 대해서 형변환을 할 때 배열로의 형변환을 타입을 new TypeReference() {} 이렇게 사용하곤 합니다. jackson에서도 마찬가지지요. 왜 이렇게 사용할까요? 이상하게 여기고 List으로 바꾸면 제대로 동작하지 않습니다. 위와같은 형태를 Super Type Token이라고 부릅니다. 오늘은 이 Super Type Token은 어떤것이며 왜 사용해야하는지 알아보는 시간을 가져보겠습니다. 제네릭의 Type Erasure jackson이라는 라이브러리가 있습니다. jackson은 json형태의.. 2020. 11. 17. [Java] Java 제네릭의 형 변환(covariant & contravariant) 안녕하세요. 저희는 저번 포스팅에서 배열과 컬렉션 제네릭의 차이점에 대해서 알아보는 시간을 가졌습니다. 그리고 배열은 기본적으로 형변환이 자유로우며 컬렉션 제네릭은 무공변으로 형변환이 불가능 하다는 차이를 알게 되었습니다. 그렇다면 컬렉션을 이용해서는 다양한 형태의 데이터 처리가 불가능 할까요? 그렇지 않습니다. 오늘은 제네릭의 형 변환(covariant & contravariant)에 대해서 알아보는 시간을 가져보겠습니다. 공변성(covariant) 공변성이란 자신이 상속받은 부모 객체로 타입을 변화시킬 수 있다라는 것을 뜻합니다. 제네릭의 공변성을 사용하기 위해서는 extends 키워드를 사용해야합니다. 아래 예제는 이전 포스팅에서 사용한 예제입니다. 아래 처럼 사용하면 컴파일에러가 발생하는 건 우리.. 2020. 11. 11. 이전 1 ··· 9 10 11 12 13 14 15 ··· 22 다음