본문 바로가기
728x90
반응형

Spring99

[SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (1) - Spring 세팅 및 로컬 테스트 안녕하세요. J4J입니다. 이번 포스팅은 AWS Lambda와 API Gateway로 Serverless 구성하기의 첫 번째인 Spring 세팅 및 로컬 테스트에 대해 적어보는 시간을 가져보려고 합니다. Serverless 란? Serverless는 개발자가 서버를 직접 관리하지 않아도 애플리케이션을 배포하여 사용자에게 서비스를 제공해 주는 개발 모델을 의미합니다. Serverless의 특징들은 다음과 같이 있습니다. 개발자는 배포를 위한 부분만 신경쓰도록 도와줌 배포를 제외한 유지 관리 및 스케일링 등을 자체적으로 관리해 줌 사용자가 없으면 활성화되어 있지 않음 사용자가 생기면 활성화되었다가 모든 요청이 처리되면 대기 상태로 전환 서버가 동작되는 시간이 아니라 활성화되어 있는 시간에 비례하여 비용을 계.. 2023. 4. 28.
[SpringBoot] MockMVC를 이용하여 API 테스트하기 안녕하세요. J4J입니다. 이번 포스팅은 mock mvc를 이용하여 api 테스트하는 방법에 대해 적어보는 시간을 가져보려고 합니다. MockMVC란? mock mvc는 스프링을 이용하여 api 테스트를 할 수 있게 도와주는 것 중 하나로 다음과 같은 특징들을 가집니다. 서버를 구동시키지 않아도 테스트 가능 api 테스트를 하는 것이기 때문에 controller에 구성된 코드들을 테스트 client가 api를 요청하는 것처럼 api 경로를 입력하여 테스트하는 방식 스프링 api를 테스트 하는 방법으로 MockMVC를 제외하고도 WebTestClient, TestRestTemplate 등이 있습니다. 모두 api를 테스트한다는 공통점을 가지지만 MockMVC는 가상 서버를 동작시키고 WebTestClien.. 2023. 4. 9.
[SpringBoot] WebClient를 이용하여 외부 API 호출하기 안녕하세요. J4J입니다. 이번 포스팅은 webClient를 이용하여 외부 api 호출하는 방법에 대해 적어보는 시간을 가져보려고 합니다. WebClient란? webClient는 spring 5에서 부터 등장한 HTTP 클라이언트 라이브러리입니다. 여기서 말하는 HTTP 클라이언트라고 하는 것은 HTTP 프로토콜을 이용하여 서버와 통신하는 것을 의미하며 다른 말로는 서버에 API 요청을 보내는 주체라고도 말할 수 있습니다. webClient가 등장하기 이전까지는 spring에서 자주 사용되던 HTTP 클라이언트로 restTemplate이 존재했었습니다. 그래서 spring에서 다른 서버와 통신을 하기 위해서는 restTemplate를 사용하고는 했는데 webClient가 등장한 이후로는 webClien.. 2023. 3. 15.
[SpringBoot] QueryDSL where절에 1=1 사용하기 안녕하세요. J4J입니다. 이번 포스팅은 QueryDSL where절에 1=1 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. where절에 1=1 사용이 필요한 경우 QueryDSL에서 where절에 1=1 사용이 필요한 경우는 동적으로 사용되는 조건절에 대응하기 위해 주로 활용합니다. 이 부분은 QueryDSL뿐만 아니라 Native JPA나 Mybatis에서도 충분히 사용될 수 있는 요소입니다. 해당 상황을 알아보기 위해 다음과 같은 테이블 및 클래스 파일들이 있다고 가정해 보겠습니다. // table create table school ( no int primary key auto_increment, name varchar(50), address varchar(50) ) // entity.. 2023. 1. 25.
[SpringBoot] 엑셀 파일 생성하여 다운로드하기 안녕하세요. J4J입니다. 이번 포스팅은 엑셀 파일 생성하여 다운로드하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 엑셀 파일 생성 및 다운로드 방법 [ 1. 의존성 추가 ] org.apache.poi poi 5.2.2 org.apache.poi poi-ooxml 5.2.2 [ 2. Controller 작성 ] package com.excel.controller; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFColor; import org.apache.poi.xssf.usermodel.XSSFFont; impor.. 2023. 1. 18.
[SpringBoot] 이메일 발신하기 안녕하세요. J4J입니다. 이번 포스팅은 이메일 발신하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 구글 계정 2단계 인증하기 해당 글은 이메일을 발신할 때 구글 계정을 활용하여 상대방에게 메일을 전달하는 방법을 작성하려고 합니다. 구글 계정을 활용하지 않는 케이스에서는 다른 상황들이 존재할 수 있으니 참고 부탁드립니다. 먼저, 구글 계정으로 이메일을 발신할 때 구글 계정 2단계 인증을 통한 앱 비밀번호를 취득해야 합니다. 앱 비밀번호를 생성하지 않을 경우 올바르게 구현하더라도 동작이 정상적으로 수행되지 않을 수 있습니다. 다음 단계를 거쳐 구글 계정 2단계 인증을 통한 앱 비밀번호를 생성해 보겠습니다. [ 1. 구글 계정 로그인 ] [ 2. Google 계정 접속 ] [ 3. 2단계 인증하기 ] .. 2023. 1. 16.
[SpringBoot] encodeURIComponent, decodeURIComponent 사용하기 안녕하세요. J4J입니다. 이번 포스팅은 encodeURIComponent, decodeURIComponent 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 정확히 일치해서 사용하기 먼저 encodeURIComponent와 decodeURIComponent는 자바스크립트에서 문자를 인코딩, 디코딩하기 위해 사용되는 함수로 URI를 구성할 때 일부 문자에 의해 발생되는 문제들을 해결할 때 주로 사용합니다. 그리고 이런 목적으로 사용되는 두 함수와 동일한 결과가 나오는 것을 스프링에서도 사용하고자 하는 상황들이 가끔씩 발생할 수 있습니다. 이런 목적을 달성하기 위해 자바에서는 URLEncoder와 URLDecoder를 제공합니다. 하지만 문제점은 URLEncoder의 결괏값은 encodeURICo.. 2022. 12. 29.
[SpringBoot] AWS Lambda로 배치 만들기 (3) - GitLab으로 자동배포하기 안녕하세요. J4J입니다. 이번 포스팅은 AWS Lambda 배치 만들기 마지막인 GitLab으로 자동 배포하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [SpringBoot] AWS Lambda로 배치 만들기 (1) - Spring 세팅 및 로컬 테스트 [SpringBoot] AWS Lambda로 배치 만들기 (2) - Lambda 생성해서 배포하기 IAM 설정 [ 1. IAM 접속 ] [ 2. 사용자 추가 ] 좌측에서 사용자 메뉴를 선택한 뒤 우측에 있는 사용자 추가 버튼을 클릭합니다. [ 3. 사용자 정보 설정 - 세부 정보 및 액세스 유형 설정 ] 세부 정보 설정에서는 사용하실 사용자 이름을 자유롭게 입력해주면 됩니다. 액세스 유형에서는 액세스 키를 선택해주면 됩니다. [ 4. 사.. 2022. 12. 15.
[SpringBoot] AWS Lambda로 배치 만들기 (2) - Lambda 생성해서 배포하기 안녕하세요. J4J입니다. 이번 포스팅은 AWS Lambda로 배치 만들기 두 번째인 Lambda 생성해서 배포하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [SpringBoot] AWS Lambda로 배치 만들기 (1) - Spring 세팅 및 로컬 테스트 Spring 세팅 이전 글을 참고하면 DB에 로그 데이터를 쌓는 기본적인 비즈니스 로직 구성이 완료되어 있습니다. 이번엔 구성되어 있는 비즈니스 로직들이 Lambda에 배포했을 때 정상적으로 동작될 수 있는 추가 설정들을 해보도록 하겠습니다. [ 1. 의존성 추가 ] org.springframework.cloud spring-cloud-function-adapter-aws 3.2.8 com.amazonaws aws-lambda-jav.. 2022. 12. 12.
[SpringBoot] AWS Lambda로 배치 만들기 (1) - Spring 세팅 및 로컬 테스트 안녕하세요. J4J입니다. 이번 포스팅은 AWS Lambad로 배치 만들기 첫 번째인 Spring 세팅 및 로컬 테스트에 대해 적어보는 시간을 가져보려고 합니다. DB 세팅 이번에 Lambda를 이용해 만들어보려고 하는 것은 배치를 돌려 주기적으로 DB에 로그 데이터를 적재하는 것입니다. 그러므로 로그 데이터 적재를 위해 사용될 테이블을 생성하도록 하겠습니다. 테이블을 생성하기에 앞서 Lambda에 작업한 코드를 배포하기 때문에 로컬에서 사용하는 DB로 해주시면 안 됩니다. [AWS] RDS로 MySQL 사용 환경 구성과 같은 글들을 참고하여 로컬이 아닌 서버에서 DB를 생성해주시면 됩니다. 데이터 적재를 위해 사용될 DB 스키마는 다음과 같습니다. create table lambda_log ( no b.. 2022. 12. 5.
[SpringBoot] QueryDSL에서 DB Function 사용하기 안녕하세요. J4J입니다. 이번 포스팅은 QueryDSL에서 DB Function 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서... 이번 글에서 제가 사용할 DB는 MySQL입니다. 그리고 테스트를 위한 MySQL Function을 다음과 같이 생성해뒀습니다. CREATE DEFINER=`root`@`localhost` FUNCTION `get_function_test`(p_name varchar(100), p_age int) RETURNS varchar(200) CHARSET utf8 BEGIN declare p_return_value varchar(100); select concat('이름은 ', p_name, '이고 나이는 ', p_age, '입니다.') into p_r.. 2022. 9. 29.
[SpringBoot] QueryDSL에서 상수값 사용하기 안녕하세요. J4J입니다. 이번 포스팅은 QueryDSL에서 상수값 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 상수값 사용 방법 QueryDSL에서 상수값을 사용하기 위해서는 Expressions를 활용해주면 됩니다. 긴 말 필요 없이 다음 코드를 확인해보시면 됩니다. package com.querydsl.repository; import static com.querydsl.entity.QStudent.student; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.querydsl.core.types.Projection.. 2022. 9. 26.
[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.
[SpringBoot] QueryDSL Projections로 결과값 핸들링하기 안녕하세요. J4J입니다. 이번 포스팅은 QueryDSL Projections 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. Projections 사용 이유 제가 Projections을 사용하는 이유는 Repository 내부에서 데이터를 조회할 때 Entity 외의 값 (ex, DTO)으로 편리하게 리턴 받아 사용할 수 있도록 하기 위해서입니다. 일반적으로 Proejctions을 사용하지 않는다면 다음과 같이 select의 return값으로 Tuple을 전달받은 뒤 DTO 등으로 변환하여 리턴하는 방식도 있습니다. package com.spring.querydsl.repository; import java.util.ArrayList; import java.util.List; import or.. 2022. 7. 9.
[SpringBoot] Found shared references to a collection 에러 안녕하세요. J4J입니다. 에러 원인 JPA를 이용하여 개발하다가 다음과 유사한 에러를 마주했던 적이 있습니다. org.springframework.orm.jpa.JpaSystemException: Found shared references to a collection: com.spring.error.entity.Board.firstFileList; nested exception is org.hibernate.HibernateException: Found shared references to a collection: com.spring.error.entity.Board.firstFileList at org.springframework.orm.jpa.vendor.HibernateJpaDialect.conv.. 2022. 6. 13.
[SpringBoot] JPA에서 QueryDSL 사용하기 안녕하세요. J4J입니다. 이번 포스팅은 JPA에서 QueryDSL 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. QueryDSL이란? QueryDSL은 자바 코드를 이용하여 데이터베이스 query를 작성할 수 있게 도와줍니다. 일반적으로 JPA를 사용하여 개발하면 JPARepository를 상속받은 인터페이스 파일을 만들어 활용하고는 합니다. 하지만 JPARepository가 가지는 한계가 있기 때문에 상황에 따라 JPQL문을 직접 작성하기도 합니다. 여기서 문제점은 JPQL을 작성을 했지만 에러가 발생될 수 있는 코드임에도 불구하고 디버깅 단계 때 확인이 불가합니다. 결국 런타임까지 넘어갔을 때 에러가 발생될 것이고 그때서야 잘못된 코드임을 확인하여 수정작업이 이루어집니다. 게다가 개인적으.. 2022. 4. 24.
[SpringBoot] AWS S3에 파일 업로드하기 안녕하세요. J4J입니다. 이번 포스팅은 AWS S3에 파일 업로드하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 Controller에서 파일 데이터를 받을 수 있기 위해 multipartfile을 사용할 예정입니다. 또한 AWS S3 버켓​ 생성하는 방법은 [AWS] 이미지 저장을 위한 S3 버킷 생성하기를 참고해주시길 바랍니다. S3에 접근할 IAM 계정 생성 가장 먼저 S3에 접근할 수 있는 IAM 계정 생성을 해줘야 합니다. 계정 생성이 완료되면 해당 계정 정보를 SpringBoot에 입력해줄 것이고 이를 기반으로 S3에 접근할 수 있는 사용자인지를 판단할 수 있게 도와줍니다. ​​​[ 1. IAM 서비스 접근 ] [ 2. 사용자 추가 클릭 ] [ 3. 사용자 정보 입력 ] .. 2022. 4. 23.
728x90
반응형