본문 바로가기

java56

[JWT+JAVA] JWT(Json Web Token)에 대해서 자세히 알아봅시다 - 실습편 안녕하세요. 이전 포스팅에서 JWT의 이론적인 측면에 대해서 자세히 다뤄보았습니다. 오늘은 JWT를 java에서 생성해보고 검증하는 코드를 실제로 작성해보도록 하겠습니다. 오늘 실습한 내용은 github에 올려두어 직접 테스트를 진행해보실 수 있습니다. 실습 코드 github Link 환경 아래가 오늘 jwt 실습에 사용할 라이브러리입니다. jjwt를 사용합니다. jjwt를 사용하는 이유는 라이브러리를 선택할 때 아래의 기준으로 선택되었습니다. 표준 스펙을 대부분 지원하는가 ? project가 가장 star의 수가 많은가 ? 문서가 잘 되어있는가 ? implementation("io.jsonwebtoken:jjwt-api:0.11.5") runtimeOnly("io.jsonwebtoken:jjwt-imp.. 2023. 2. 27.
[gRPC + java or kotlin] gRPC를 직접 구현재보자 - 공통 모델편 안녕하세요. 오늘부터는 gRPC를 직접 구현해보는 시간을 가져보도록 하겠습니다. 총 3개의 챕터로 진행될 예정이며 이번 포스팅은 공통 모델, 서버, 클라이언트 편으로 나누어서 진행하려고 합니다. 오늘은 protocol buffer를 이용해서 java에서 공통된 모델을 만드는 과정을 보도록 하겠습니다. IDL(Interface Defintion Language) gRPC는 Interface를 먼저 정의해야한는 언어라고 말씀드렸습니다. 이부분에 대해서는 이전 시간에 [gRPC] protocol buffer3를 실제로 사용해보자 포스팅을 참고하시면 좀 더 자세한 내용을 알 수 있습니다. 오늘 사용할 protocol buffer 파일은 아래와 같습니다. 각 라인의 설명은 코드에 달아두었습니다. 위 링크에서 pr.. 2021. 7. 31.
[java] ThreadLocal에 관하여 안녕하세요. 오늘은 ThreadLocal에 대해서 알아보도록 하겠습니다. 변수를 공유하는 방법 객체는 Heap 또는 Stack 메모리 영역에 배치시킬 수 있습니다. Heap 영역은 일반적으로 모든 thread에서 접근 할 수 있으며 stack은 thread 하나당 만들어 지는 메모리 영역으로 thread간 접근이 불가능한 것으로 알려져 있습니다. 아래 코드의 UserRepository 변수는 Heap 영역에 만들어진 객체를 가리키고 있으며 다른 곳에서도 해당 객체를 바로 접근할 수 있습니다. 함께 공유해서 사용하기 때문에 여러 thread에서 사용할 때 공유된 정보로써 제공할 수 있습니다. 따라서 만약 UserRepository가 설정 정보를 가지고 있고 이를 변경한다면 사용하고 있는 모든 곳에서 영향을.. 2021. 5. 15.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 기본적인 검색 만들기 안녕하세요. 오늘 실습해볼 내용은 elasticsearch를 이용하여 Spring에 빠른 검색을 적용해 보는 것입니다. 이전시간까지 우리는 아래 포스팅을 통해서 환경설정, index를 만들고 document의 CRUD를 적용해보는 것에 대해서 실습해 보았습니다. [elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 환경설정과 Index 만들기 [elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - Document CRUD 만들기 ElasticSearch를 사용한다는 것은 일반적으로 빠른 검색 서비스를 이용하기 위한 목적을 가지고 계실 것입니다. 이전까지는 검색을 하기위해 데이터를 쌓는 부분에 .. 2021. 4. 23.
[java] Java와 Lazy evaluation - Java8 Stream 안녕하세요. 이전시간에 우리는 Lazy evaluation에 대해서 알아보는 시간을 가졌었습니다. 오늘은 이어서 Java8의 Stream의 Lazy Evaluation에 대해서 알아보는 시간을 가져보겠습니다. 우리는 이전 시간 [Java] Java와 Lazy Evaluation 포스터에서 Lazy Evaluation의 장점을 필요하지 않는 연산을 하지 않는다라고 이야기했습니다. 그리고 Stream은 Lazy Evaluation을 사용하는 대표적인 연산방식입니다. 예제 아래와 같은 로직이 있다고 해보겠습니다. 1 ~ 30까지의 숫자의 List가 있습니다. 이 숫자에서 3의 배수의 숫자만을 걸러내고 10을 곱한 값중 앞에서 3가지만 취하도록 하겠습니다. 이런 로직을 가지는 메서드를 만든다고 해보겠습니다. C.. 2021. 4. 2.
[Java] Java와 Lazy Evaluation Lazy evaluation은 실제로 필요로 해지는 경우에 연산을 시작하는 것입니다. 이 반대로는 eager evaluation이 있으며 이는 할당되자마다 연산을 시작합니다. 기본적인 Java의 기조는 eager evaluation을 기본으로합니다. 하지만 일부 Lazy Evaluation이 있었으며 Java 8이 나오면서 Java에는 Lazy Evaluation을 좀 더 유연하게 사용할 수 있게되었습니다. 오늘은 Lazy Evaluation의 예제와 Java 8에서 어떻게 사용할 수 있을지에 대해서 알아보는 시간을 가져보도록 하겠습니다. 예제 오늩 테스트를 위해 사용하는 메서드는 아래와 같습니다. 해당 메서드를 실행하게되면 1초간 sleep을 하고 입력받은 파라미터에 a가 포함되어있는지 여부로 true.. 2021. 3. 26.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - Document CRUD 만들기 안녕하세요. 오늘은 이전 시간에 이어서 elasticsearch를 java Spring에서 사용하는 방법에 대해서 코드로 알아보도는 시간을 가져보도록 하겠습니다. 오늘 알아볼 내용은 Java Spring을 이용하여 ElasticSaerch와 기본적인 Document의 CRUD 작업을 하는 방법입니다. Document는 ElasticSearch에 저장되는 실제 데이터입니다. RDB로 치자면 Table의 row에 해당한다고 볼 수 있습니다. 주의사항 제가 사용하는 ElasticSearch 버전은 7.9.3 버전입니다. Java High Level REST Client SDK 같은 경우 버전에 종속적이기 때문에 만약 버전을 꼭 맞추시고 사용하시기를 권장드립니다. 대표적인 예로 6 버전에는 Type 이라는 In.. 2021. 3. 23.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 환경설정과 Index 만들기 안녕하세요. 오늘은 Elastic에서 제공하는 SDK를 이용하여 Java에서 ElasticSearch에 통신히여 결과를 가져올 수 있도록 해보겠습니다. ElasticSearch의 이론적인 내용에 대해서는 추후에 별도 포스팅으로 여러분들께 공유드리도록 하겠습니다. ElasticSearch API 종류 Elastic에서 제공하는 Java SDK는 2가지 종류가 있습니다. 첫번째는 Low Level SDK이며 두번째는 Hight Level SDK 입니다. 저희가 이번에 사용할 SDK는 Hight Level SDK입니다. Java Low Level REST Client ElasticSearch에서 제공하는 Low Level Java 통신 SDK 입니다. http 요청을 만들 수 있는 라이브러리입니다. Elast.. 2021. 3. 10.
[Java] final 키워드에 대해서 알아보자 안녕하세요. 오늘은 여러분들과 java의 final 키워드에 대해서 알아보려고 합니다. final final 키워드는 변수(variable), 메서드(method), 또는 클래스(class)에 사용될 수 있습니다. 이 final 키워드는 어떤 곳에 사용되냐에 따라 다른 의미를 가집니다. 하지만 final 키워드를 붙이면 무언가를 제한한다는 의미를 가지는 것은 공통적이 성격입니다. 변수(variable) 변수에 final을 붙여보겠습니다. 변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미를 가집니다. 수정될 수 없기 때문에 초기화 값은 필수적입니다. 만약에 객체안의 변수라면 생성자, static 블럭을 통한 초기화까지는 허용합니다. 수정 할 수 없다는 범위는 그 변수의 값에 한정합니다. 즉, 다.. 2021. 3. 3.
[자료구조] 코드로 알아보는 java의 PriorityQueue with Heap 안녕하세요. 오늘은 코드로 알아보는 java 시간압니다. 오늘 여러분들과 알아볼 Java의 자료구조는 PriorityQueue입니다. PriorityQueue는 우선순위 큐입니다. 우선순위 큐는 일반적인 FIFO 구조를 가지는 큐에 우선순위를 넣어 우선순위가 높은 노드부터 먼저가져올 수 있는 Queue입니다. Heap 자료구조 PriorityQueue는 Heap 자료구조를 기반으로 되어있습니다. 먼저 Heap 자료구조란 무엇인지를 확인해보겠습니다. Heap 자료구조는 최솟값, 최댓값을 빠르게 찾기위해 완전 이진 트리를 사용하는 자료구조입니다. 간단히 개념을 설명드리면 최소힙의 경우 root 노드가 값이 제일 작으며 트리는 부모 노드는 자식 노드보다 값이 작음을 항상 만족하는 트리입니다. 그리고 이렇게 H.. 2021. 2. 11.
[자료구조] 코드로 알아보는 java의 TreeMap 안녕하세요. 오늘은 코드로 알아보는 java의 자료구조 시간입니다. 오늘 알아볼 자료구조는 TreeMap입니다. 바로 그러면 알아보도록 하겠습니다. TreeMap 기본적으로 TreeMap은 내부의 값들을 key 값을 기준으로 정렬하여 가지고 있습니다. 정렬된 순서를 알 수 없는 HashMap과는 차이가 있습니다. 아래 예제 코드를 한번 보도록 하겠습니다. @Test public void treeMapTest() { TreeMap map = new TreeMap(); map.put(3, "val"); map.put(7, "val"); map.put(8, "val"); map.put(9, "val"); map.put(10, "val"); map.put(11, "val"); map.put(12, "val");.. 2021. 1. 20.
[Java] Java의 정렬 알고리즘 - Arrays와 Collections 안녕하세요. 오늘 포스팅은 Java의 Collection에서 사용하고 있는 정렬에 대해서 알아보려고 합니다. Java를 사용하다보면 정렬해서 처리해야할 경우가 생깁니다. 그럴경우 아래와 같이코드를 작성하곤 합니다. 아래 코드를 볼때 결과값이 1, 2, 3, 4, 5로 정렬되게 나온다는 것을 예측할 수 있을것입니다. @Test public void arrayTest() { int[] array = new int[]{1, 3 , 5, 4, 2}; Arrays.sort(array); System.out.println("array = " + Arrays.toString(array)); } @Test public void collectionTest() { List collection = new ArrayList(.. 2021. 1. 19.