본문 바로가기
728x90
반응형

Spring20

[SpringBoot] Redis NOAUTH HELLO must be called with the client already authenticated 이슈 안녕하세요. J4J입니다. 이번 포스팅은 redis에서 발생했던 이슈에 대해 적어보는 시간을 가져보려고 합니다.   이슈 원인 redis를 사용하기 위해 서버 구축부터 시작하여 spring 프로젝트에 다양한 설정들을 추가해볼 수 있습니다. 제목과 관련된 이슈는 여러 가지 설정들을 해보면서 제가 마주했던 것 중 하나입니다.   먼저 저는 spring 프로젝트 내부에 redis 사용 환경 설정을 해보면서 다음과 같은 에러 메세지를 확인할 수 있었습니다. org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redisat org.springframework.data.redis.connection.lettuce.L.. 2024. 6. 30.
[React] SSE (Server-Sent Events) 사용하여 실시간 통신하기 안녕하세요. J4J입니다. 이번 포스팅은 sse (server-sent events) 사용하여 실시간 통신하는 방법에 대해 적어보는 시간을 가져보려고 합니다.   관련 글 [SpringBoot] SSE (Server-Sent Events) 사용하여 실시간 통신하기    들어가기에 앞서 해당 글에서는 sse API가 존재할 때 react에서 어떻게 활용할 수 있는지에 대해서 적어보려고 합니다. 만약 sse에 대한 기본 개념에 대해서 먼저 알고 싶으신 분들은 위의 링크를 참고해 주시면 됩니다.    SSE (Server-Sent Events) 사용 환경 설정 react에서 sse 사용 환경 설정하는 방법에 대해 적어보겠습니다. sse API는 관련 글에서 확인할 수 있는 spring에서 제공해주는 API를 .. 2024. 5. 8.
[SpringBoot] Thread Local을 이용하여 Thread 별 독립적으로 변수 관리하기 안녕하세요. J4J입니다. 이번 포스팅은 thread local을 이용하여 thread 별 독립적으로 변수 관리하는 방법에 대해 적어보는 시간을 가져보려고 합니다.   Thread Local 이란? thread local은 각각의 thread 내부에서는 전역적으로 공유되지만 서로 다른 thread에게는 공유되지 않는 저장소를 의미합니다. thread local은 일반적으로 thread 간 발생할 수 있는 동시성 문제를 해결하기 위해 사용될 수 있습니다. 예를 들어 서로 다른 thread가 동시에 동일한 저장소를 바라보고 있을 때, 다음과 같은 상황이 발생할 수 있습니다.    thread A 입장에서는 저장했던 데이터를 그대로 전달받아 내부 로직에 사용하고 싶었지만, 동시에 thread B의 데이터가 저.. 2024. 5. 4.
[디자인패턴] 빌더(Builder) 패턴 이해하기 안녕하세요. J4J입니다. 이번 포스팅은 빌더(builder) 패턴에 대해 적어보는 시간을 가져보려고 합니다. Builder 패턴이란? builder 패턴은 객체 생성을 유연하게 할 수 있도록 도와주는 디자인 패턴 중 하나입니다. 자바 관점에서 확인했을 때 객체 생성을 할 때 보통 사용될 수 있는 것은 생성자를 활용하는 것입니다. 파라미터 정보가 하나도 들어있지 않은 default 생성자부터 원하는 파라미터 정보로 구성된 생성자까지 활용하여 객체를 생성할 수 있습니다. builder 패턴은 생성자와 유사하게 객체 생성을 도와주지만 생성하는 방법을 다양하게 구성해 볼 수 있습니다. 클래스 내부에 builder 패턴을 적용하기 위한 설정만 해둔다면 객체 인스턴스를 생성해야 되는 곳에서 메서드 체이닝을 활용하.. 2024. 3. 23.
[객체지향설계] SOLID 설계 원칙 (5) - DIP (의존성 역전 원칙) 안녕하세요. J4J입니다. 이번 포스팅은 solid 설계 원칙 마지막인 dip (의존성 역전 원칙)에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [객체지향설계] SOLID 설계 원칙 (1) - SRP (단일 책임 원칙) [객체지향설계] SOLID 설계 원칙 (2) - OCP (개방 폐쇄 원칙) [객체지향설계] SOLID 설계 원칙 (3) - LSP (리스코프 치환 원칙) [객체지향설계] SOLID 설계 원칙 (4) - ISP (인터페이스 분리 원칙) DIP (의존성 역전 원칙) 란? solid 설계 원칙에서 dip가 의미하는 것은 고수준 모듈은 저수준 모듈에 의존하지 않고 추상화에 의존해야 된다는 것을 말합니다. 여기서 고수준 모듈과 저수준 모듈은 무엇이며, 추상화에 의존해야 된다는 것은 또 무엇.. 2024. 3. 22.
[SpringBoot] Layer별 테스트 코드 작성하기 (1) - JPA를 이용한 Repository 테스트 안녕하세요. J4J입니다. 이번 포스팅은 Layer별 테스트 코드 작성하는 방법 첫 번째인 JPA를 이용한 Repository 테스트하는 방법에 대해 적어보는 시간을 가져보려고 합니다. JpaRepository 테스트 JPA를 이용하는 환경에서 repository 테스트를 수행할 때 가장 대표적으로 해볼 수 있는 테스트는 JpaRepository 사용에 대한 테스트입니다. JpaRepository를 테스트하기 위해서는 jpa에서 제공해 주는 @DataJpaTest 어노테이션을 활용하면 되는데 해당 어노테이션 내부를 확인해 보면 다음과 같이 다양한 설정 값들이 들어 있는 것을 볼 수 있습니다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @.. 2024. 2. 3.
[SpringBoot] Spring Boot 3 버전 이후 gradle에 querydsl 사용 환경 설정하기 안녕하세요. J4J입니다. 이번 포스팅은 spring boot 3 버전 이후 gradle에 querydsl 사용 환경 설정하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 관련 글 [SpringBoot] JPA에서 QueryDSL 사용하기 [SpringBoot] QueryDSL Projections로 결과값 핸들링하기 들어가기에 앞서 Spring Boot의 3버전이 등장하면서 최근에 생성되는 많은 프로젝트들은 3 버전 이상의 환경들을 구성하고는 합니다. 3 버전부터는 3 버전 이전과 설정하는 방법이 달라지기도 하고, 3 버전 이상의 환경에서 설정하는 방법을 더 궁금해하실 것 같아서 querydsl 사용 환경 설정하는 방법만 따로 정리하려고 합니다. querydsl이 무엇인지에 대해 더 궁금하신 분들은.. 2024. 1. 22.
[SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (3) - API Gateway에 Lambda 연결하기 안녕하세요. J4J입니다. 이번 포스팅은 AWS Lambda와 API Gateway로 Serverless 구성하기 세 번째인 API Gateway에 Lambda 연결하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (1) - Spring 세팅 및 로컬 테스트 [SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (2) - Lambda 생성해서 배포하기 API Gateway 세팅 [ 1. API Gateway 접속 ] [ 2. REST API 구축 ] [ 3. API Gateway 상세 설정 ] 상세 설정은 다음과 같이 해주시면 됩니다. 그리고 여기서 설정.. 2023. 5. 5.
[SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (2) - Lambda 생성해서 배포하기 안녕하세요. J4J입니다. 이번 포스팅은 AWS Lambda와 API Gateway로 Serverless 구성하기 두 번째인 Lambda 생성해서 배포하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (1) - Spring 세팅 및 로컬 테스트 Spring 세팅 이전 글을 확인해보시면 로컬에서 Lambda에 배포할 Spring 코드를 작성하여 테스트한 것을 확인해 볼 수 있습니다. 해당 설정을 기반으로 Lambda에 배포하기 위한 추가 설정을 다음과 같이 진행해보겠습니다. [ 1. 의존성 추가 ] // Lambda Deploy import com.github.jengelman.gradle.plug.. 2023. 4. 30.
[Next] Naver 로그인 Spring을 활용하여 구현하기 안녕하세요. J4J입니다. 이번 포스팅은 naver 로그인 spring을 활용하여 구현하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 동일한 방식의 다른 서비스 로그인을 활용하는 방법에 대해 궁금하신 분들은 다음을 참고해 주시면 됩니다. [Next] Kakao 로그인 Spring을 활용하여 구현하기 [Next] Apple 로그인 Spring을 활용하여 구현하기 Next만을 이용하여 naver 로그인을 구현하는 방법에 대해 궁금하신 분들은 다음을 참고해 주시면 됩니다. [Next] 네이버 로그인 구현하기 애플리케이션 등록 naver를 이용하여 로그인을 구현하기 위해서는 먼저 사용하려는 서비스 애플리케이션 정보를 등록해줘야 합니다. 다음 절차들을 통해 애플리케이션을 등록해보겠습니다. [.. 2023. 4. 2.
[Next] Kakao 로그인 Spring을 활용하여 구현하기 안녕하세요. J4J입니다. 이번 포스팅은 kakao 로그인 spring을 활용하여 구현하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 동일한 방식의 다른 서비스 로그인을 활용하는 방법에 대해 궁금하신 분들은 다음을 참고해 주시면 됩니다. [Next] Naver 로그인 Spring을 활용하여 구현하기 [Next] Apple 로그인 Spring을 활용하여 구현하기 Next만을 이용하여 kakao 로그인을 구현하는 방법에 대해 궁금하신 분들은 다음을 참고해주시면 됩니다. [Next] 카카오 로그인 구현하기 애플리케이션 등록 kakao를 이용하여 로그인을 구현하기 위해서는 먼저 사용하려는 서비스 애플리케이션 정보를 등록해줘야 합니다. 다음 절차들을 통해 설정해보도록 하겠습니다. [ 1. k.. 2023. 3. 26.
[Next] Apple 로그인 Spring을 활용하여 구현하기 안녕하세요. J4J입니다. 이번 포스팅은 apple 로그인 spring 활용하여 구현하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 동일한 방식의 다른 서비스 로그인을 활용하는 방법에 대해 궁금하신 분들은 다음을 참고해 주시면 됩니다. [Next] Kakao 로그인 Spring을 활용하여 구현하기 [Next] Naver 로그인 Spring을 활용하여 구현하기 Apple Developer 등록 [ 1. App Identifiers 추가하기 ] Apple 로그인을 구현하기 위해서는 먼저 서비스로 사용될 App을 등록해줘야 합니다. Apple Developer Identifiers에 접속한 뒤 + 버튼을 클릭해 줍니다. [ 2. Identifiers 유형 선택 ] 어떤 유형을 등록할지 다.. 2023. 3. 20.
[SpringBoot] Oracle과 동일한 AES 암호화하기 안녕하세요. J4J입니다. 이번 포스팅은 Oracle과 동일한 AES 암호화하는 방법에 대해 적어보는 시간을 가져보려고 합니다. Oracle AES 암호화 먼저 Oracle에서 AES 암호화하는 Function을 만들어주겠습니다. 암호화해주는 Function은 다음과 같이 작성해서 생성해줍니다. create or replace FUNCTION AES_ENCRYPTION (text IN VARCHAR2) RETURN VARCHAR2 IS secret_key VARCHAR(32) := '12345678901234567890123456789012'; -- 비밀키 encrypted_raw RAW (2000); key_bytes_raw RAW (32); encryption_type PLS_INTEGER := DB.. 2022. 7. 30.
[SpringBoot] MySQL과 동일한 AES 암호화하기 안녕하세요. J4J입니다. 이번 포스팅은 MySQL과 동일한 AES 암호화하는 방법에 대해 적어보는 시간을 가져보려고 합니다. MySQL AES 암호화 MySQL에서 AES 암호화를 도와주는 Function을 만들려고 합니다. 아래와 같이 MySQL에서 제공해주는 aes_encrypt를 활용하여 암호화를 해주는 aes_encryption Function을 만들어줄 수 있습니다. CREATE FUNCTION `aes_encryption`(p_text varchar(100)) RETURNS varchar(100) CHARSET utf8 BEGIN declare v_encrypted_text varchar(100); select hex(aes_encrypt(p_text, '1234567890')) into v.. 2022. 7. 25.
[React] AES256 암호화 (with. Java) 안녕하세요. J4J입니다. 이번 포스팅은 AES256 암호화하는 방법에 대해 적어보는 시간을 가져보려고 합니다. React에서 암호화 방법 [ 1. 패키지 설치 ] $ npm install crypto-js $ npm install -D @types/crypto-js // 타입 스크립트 사용 시 추가 설치 [ 2. 암복호화 코드 작성 ] import cryptoJs from 'crypto-js'; const secretKey = '12345678901234567890123456789012' // 32자리 비밀키 const iv = 'abcdefghijklmnop' // 16자리 iv // 암호화 export const encrypt = (text: string) => { const cipher = cry.. 2022. 7. 4.
[Docker] SpringBoot 환경 구축 안녕하세요. J4J입니다. 이번 포스팅은 SpringBoot 환경 구축하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 다음 글을 참고하시면 좋을 것 같습니다. [Docker] MySQL 환경 구축 사전 준비 [ 1. 소스 코드 ] STS와 같은 IDE를 사용했을 때 동작이 잘 이루어지고 있는 SpringBoot 소스 코드가 필요합니다. 제가 구현한 것은 포스트맨을 이용해 API를 호출해보면 다음과 같은 결과를 만들어줍니다. [ 2. Datasource 설정 ] 해당 부분은 DB 연결을 위해 설정한 Datasource의 url이 localhost로 되어 있는 분들만 참고해주시면 됩니다. Docker를 이용해 SpringBoot를 동작시킬 경우 localhost로 Datasource를 .. 2022. 1. 26.
[Spring] Filter를 이용하여 Request Parameter 조작하기 안녕하세요. J4J입니다. 이번 포스팅은 filter를 이용하여 request parameter를 조작하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 최근 회사 업무를 수행하다가 클라이언트로부터 전달받은 parameter를 조작해야 되는 상황이 생겼었습니다. 대표적인 케이스가 parameter 암호화입니다. 보안성을 높이기 위해 클라이언트에서 리소스를 암호화하여 전달하고는 하는데 서버에서 전달받는 리소스마다 복호화하게 될 경우 불필요하고 반복적인 작업이 많아지게 됩니다. 이를 보완하고자 request를 조작하는 filter를 등록하여 클라이언트에서는 암호화된 리소스를 전달했지만 스프링의 비즈니스 로직 구간에서 데이터를 전달받았을 땐 복호화가 되어있도록 하여 재사용성을 높이는 방향을 생각하게 되었습니.. 2021. 11. 11.
[Spring] JWT 구현하기 (2) 안녕하세요. J4J입니다. 이번 포스팅은 Client에서 JWT 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 참고하시면 이해가 더 잘되실 겁니다. 2021.04.07 - [Spring/Spring] - [Spring] JWT란? 2021.04.08 - [Spring/Spring] - [Spring] JWT 구현하기 (1) 이전 꺼를 보신 분들은 스프링에서 JWT사용을 위한 설정이 완료된 상태일 겁니다. 이번엔 Client가 사용되는 화면을 구성할 React를 이용해서 어떤 식으로 서버와 주고받는지에 대해 보여드리도록 하겠습니다. 기본적인 흐름은 다음과 같습니다. 화면에서 아이디와 비밀번호를 입력하여 로그인하기 정상적으로 로그인이 된 경우 브라우저 저장소.. 2021. 4. 9.
728x90
반응형