본문 바로가기

java28

[Java] POJO - Cache 구현 Java(POJO) Cache 구현개발을 하다보면 Cache, Caching 과 같은 단어들을 들어보고는 했을것이다.Spring framework 의 경우 기본적으로 캐싱을 지원하는 기능들을 지원한다, 또한 다양한 캐시 구현체들을 제공한다(Redis, Encache, Caffenine) 해당 구현체들로 더 많은 기능들을 사용할 수 있다. 1. Cache(캐시)란?그렇다면 Cache(캐시)란 무엇일까? Cache 는 데이터에 빠르게 접근하기위해 빠른 저장공간(Memory)을 활용하는 기술이다.Application 에서 자주 사용하는 데이터를 Memory 와 같이 빠른 저장소에 데이터를 임시로 저장하고,이후 데이터가 필요할 때 캐시 데이터에 접근하여 바로 사용한다. 캐시에서 데이터를 가져오는 이유는 DB나,.. 2025. 1. 8.
[Spring boot] Spring Boot 라이브러리(Library) 개념 및 만들기(1) Spring Boot 라이브러리(Library) 개념 및 만들기(1)web, application 을 개발하다보면 라이브러리(Library) 라는 말을 자주 듣게 되고, 거의 필수적으로 사용하게 된다.필자는 여러가지 모듈들에 반복적이고 공통적으로 들어가는 기능을 대체하기 위해 라이브러리를 만들기 위해 공부했던 내용들을해당 글에 담았다. 그럼 라이브러리가 어떤 개념인지, 어떤방법으로 만들고 적용 할 수 있는지에 대해서 아래에 설명하겠다.  1. 라이브러리(Library) 란?라이브러리(Library) 는 공통적인 기능을 재사용하기 위해 별도로 분리된 코드 모음(모듈)이다.여러개의 프로젝트, 모듈에서 공통적으로 쓰이는 코드를 반복적으로 작성하지 않고, 공통 모듈로 만들어서 필요한 모듈에서 의존성 형태로 가져.. 2024. 12. 27.
[Java & Spring] Version 비교 방법 - version4j Spring (Java) Version 비교 방법 - version4j다양한 상황에서 버전 체크, 비교를 해야하는 경우가 존재한다. git, 앱 버전, java, 자체 프로그램 버전 등등,,  1. Version 이란? version 은 특정 매체에서 제작, 또는 수정이 이루어질때의 제작되거나, 수정된 각각의 판본을 뜻한다.소프트웨어에서의 버전은 수정사항, 기능의 추가사항, 버그수정 등 다양한 작업이후 배포될때 각각의 의미에 맞는 버전을 올리고 배포 작업이 이루어 지게 된다.  Version 은 (.) dot(점) 을 기준으로 구분되며, 다음과 같은 순서에 의해 정의되어있다.Major Version . Minor Version . Build or Maintenance Version = 1.0.1 Majo.. 2024. 6. 25.
AES-256 - Encrypt(암호화) For Java 얼마전, 외부 서비스 업체에서 제공하는 데이터를 DB 에 적재해야 하는 신규 기능 개발이 있었고,필수 요구사항중에서 'AES256 암호화 필수 (Base64)' 항목이 존재 했고 설계,분석,개발 과정에서 알게된 내용을 정리한다.  해당 글에서는 AES/CBC/PKCS5Padding 방식으로 Java 테스트 코드를 구현했다.  요구사항 및 Flow 1. 외부 업체 -> 관리서버 API 요청 (필수 파라미터 3개, 전부 암호화) 2. 요구 데이터 응답(암호화) 3. 응답 데이터 기반, 데이터 생성 4. Batch Task 로 데이터 Receive 및 DB 적재 해당 요구사항을 만족하기 위해 AES256(Base64) 암호화에 대해 알아보자.   1. AES256 이란?AES (Advanced Encrypti.. 2024. 5. 26.
[Java] var 키워드란? (간단예제포함) Java - Var 키워드 java의 var 키워드는 java 10 부터 도입된 키워드 이다. 해당 키워드는, 지역 변수의 타입 추론을 위한 키워드 이다. 변수 선언시, 타입을 생략 가능하게 한다. var 키워드의 경우 Compile 시점에 타입을 추론하게 된다. 즉 Compile 시점에 타입이 이미 결정된다. 이때 컴파일러가 타입을 추론할 수 없을 경우, Compile Error 가 발생하게 된다. 즉 이걸 반대로 생각한다면, RunTime 시점에 타입에 대한 연산이 일어나지 않는다는 말이다. var 키워드의 장단점 장점 가독성 향상: 코드가 간결해지고, 중복된 타입 선언을 제거하여 가독성이 향상된다. 유지 보수성 증가: 코드의 변경이 있을때, 변수의 타입을 모두 변경하지 않아도 되어, 유지보수성이 증.. 2023. 9. 26.
[JPA]JpaRepository 원리 및 내부 분석(EntityManager 자동주입, 상속관계) JpaRepository 원리 및 내부 분석(EntityManager 자동주입, 상속관계) 1. 서론(찾아보게된 계기) - 얼마전 QueryDsl 적용을 하던 도중, 기존에 Spring Data JPA 에서 사용하던 JpaRepository 를 extends 받는 방식과 QueryDsl 을 동시에 적용하던 도중, 대다수의 블로그나 예제에서는 QueryDsl 을 사용하는 Repository에 Entity Manaer를 적용하는 방식을 사용하고 있었다. 하지만 기존에 사용하던 JpaRepository 는 EntityManager 를 자동주입을 해주어서 extends 를 받는것만으로도 EntityManager 를 별도로 설정하지 않고 사용 할 수 있었다. 그래서 기존의 JpaRepository 의 Entity.. 2023. 8. 30.
[SpringBoot] QR코드 생성 & Test(링크이동) - zxing 1. 서론 몇년전 시작된 COVID19의 여파로 비대면, 비접촉 관련된 시스템들이 많이 생겨났다. (QR인증, QR결제 ...) 심지어 QR코드는 2000년 6월에 표준이 되었을 정도로, 오래된 기술이지만, COVID19 로 인해 사용범위, 활용성이 높아진것 같다. 더불어 옥외광고, 모바일 앱, 웹사이트 내부링크 등등 활용되는곳도 점점 많아지고, 생활에 점점더 밀접해지고 있다. 1-1. 바코드 vs QR 코드? 사실 일반인의 입장에서 보면, "바코드와 QR코드가 다른점이 뭐야? 둘다 똑같은거 아니야?" 라는 말을 하게된다. 왜 일상에서는 QR 코드를 더 많이 사용할까? 바코드 레이저(스캔물체)를 수평방향으로 인식해야 한다. 최대 20자의 정보 저장 가능. 바코드의 "I" 높이 중 일부분이 훼손되어도 인식.. 2023. 3. 24.
[SpringBoot] RestTemplate - 카카오 openAPI 연동하기(Translation, 번역기) 서론 - Spring Boot 기반의 RestTemplate 공부를 하며 local에 서버를 2개 띄워서 테스트 하는것 보다는, openAPI를 적용해보고 싶던 와중 kakao 에서 제공하는 Translate (번역) API 를 찾게 되었고 연동해보았다. - 예전에는 단순히 카카오 개발자 사이트에서, Test용 어플리케이션 등록 + Api Key로 사용이 가능했지만, 2023.03.13일 현재 kakao i cloud라는 시스템을 사용하는것으로 조금 바뀌어 있다. (호출 방식, key 같은것들이 다름.) 혹시나 하는 마음에 이전버전의 API 호출 방식을 적용해봤는데 정상적으로 동작이 되었다. 목적은 어디까지나 RestTemplate를 사용한 API호출 이었기 때문에, 예전방식으로 진행했다. * 시작전 유.. 2023. 3. 13.
[Java] ThreadLocal이란? - (ThreadLocal, InheritableThreadLocal) 설명 및 예제(테스트) Spring Boot로 Log 추적기를 구현하던 도중, '동시성 문제'에 대해서 접하게 되었고, 여러가지 많은 해결 방법중 ThreadLocal 이라는 Class를 알게 되었다. ThreadLocal 이 무엇인지, 어떤 경우에 사용하는지에 대해서 알아보자. 1. ThreadLocal 이란? - JDK 1.2부터 등장한 클래스이며, Thread 단위로 로컬 변수를 사용할 수 있다.(각 스레드에 할당된 변수를 각각 전역변수 처럼 활용가능) 하지만 사용시 잘못 사용하게 되면, 부작용이 발생한다 (아래에서 다룰예정.) 종류에는 ThreadLocal, InheritableThreadLocal 2가지가 존재한다. - 공식문서 - 번역기를 통한 해석 이 클래스는 스레드 로컬 변수를 제공합니다. 이러한 변수는 (get.. 2023. 3. 7.