Spring

    [Spring] Spring AOP와 실무 응용

    AOP AOP(Aspect Oriented Programming): 관점 지향 프로그래밍 관심사의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. Spring AOP Spring에서도 AOP를 지원하며, 공통적으로 처리해야할 부분은 따로 모듈화해서 개발자가 비즈니스 로직에만 집중할 수 있도록 해준다. 예를 들어, 어떤 API의 어느 지점(Pointcut)에서 어떤 작업을 수행할 것인지(Advice)를 공통적으로 처리할 수 있다. 다음 예시를 보자. (본 코드는 Kotlin을 기준으로 작성되었다) Pointcut "어느 지점에서" @Aspect class PointcutList { @Pointcut("execution(* com.example.ltaop..controller....

    [Spring] PostgreSQL - PostGIS, JPA를 통해 공간 데이터 다루기

    [Spring] PostgreSQL - PostGIS, JPA를 통해 공간 데이터 다루기

    데이터베이스에 숫자, 문자열이 아닌 점, 선, 면 등의 정보를 담아야 할 때, 주로 공간 데이터를 사용한다. 본 포스팅에서는 Spring + JPA 환경에서 PostgreSQL의 extension인 PostGIS를 통해 공간 데이터를 다루는 방법을 알아보겠다. PostGIS의 도입 배경과 설치 과정은 아래 글을 참고하자. 2023.01.11 - [database] - [Postgresql] PostGIS 설치 - MySQL이 아닌 PostgreSQL을 사용하는 이유 [Postgresql] PostGIS 설치 - MySQL이 아닌 PostgreSQL을 사용하는 이유 배경 프로젝트 도중 공간 데이터를 다룰 일이 있었다. 나는 주로 MySQL을 사용하기 때문에 처음에는 MySQL이 지원하는 공간 데이터 타입(..

    [Spring] Mockito when으로 repository save 리턴받기

    문제 단위테스트로 Mockito를 사용하던 중, repository save의 리턴 값에 대한 assert를 하고 싶었다. 그러나 객체가 실제 DB에 저장되지 않기 때문에 repository save는 null을 리턴한다. 나는 save한 객체를 그대로 받고 싶었고, 참고자료를 통해 해결했다. 해결 when(userRepository.save(any(User.class))).then(AdditionalAnswers.returnsFirstArg()); repositroy save로 어떤 User가 넘어가든, save의 첫 번째 인자를 리턴하도록 stubbing을 설정했다. 이제 리턴받은 객체로 원하는 검증을 할 수 있다. https://stackoverflow.com/questions/26161917/mo..

    [CI/CD] Gitlab + Jenkins + Nginx + Docker + AWS EC2 - 무중단 배포

    [CI/CD] Gitlab + Jenkins + Nginx + Docker + AWS EC2 - 무중단 배포

    회사 프로젝트에 CI/CD를 적용할 일이 생겼다. 이전에 Github + Jenkins + AWS CodeDeploy를 사용해 CI/CD를 적용한 적이 있었는데, 회사 사정 상 다른 방식으로 CI/CD를 적용해야 하는 상황이다. 따라서, Gitlab + Jenkins + Nginx + Docker + AWS EC2를 사용한 CI/CD 적용 방법을 기록한다. CI/CD 구조는 다음과 같다. 1. Gitlab 저장소에 Push 한다. 2. webhook을 통해 Jenkins에서 Gitlab 레포지토리에 접근한다. +) Gitlab과 Jenkins는 회사 서버에서 도커 컨테이너로 설치했다. 나는 회사 프로젝트여서 회사 서버에 설치한 것이지, EC2 등 각각 상황에 맞는 환경에 젠킨스를 설치하면 된다. 3. J..

    [Spring] AWS S3 압축 파일 풀어서 업로드하기 - TransferManager

    [Spring] AWS S3 압축 파일 풀어서 업로드하기 - TransferManager

    이전에 Spring을 통해 S3 파일을 압축해서 다운로드하는 글을 작성했는데, 많은 도움이 되었다. 2022.08.05 - [java/spring] - [Spring] AWS S3 파일 압축해서 다운로드 - 여러가지 방법 비교분석 [Spring] AWS S3 파일 압축해서 다운로드 - 여러가지 방법 비교분석 이전에 Spring을 통해 S3에서 파일을 다운로드하는 API를 개발한 적이 있었다. 2021.08.05 - [java/spring] - [Spring] AWS S3에서 Spring Boot로 파일 다운로드 [Spring] AWS S3에서 Spring Boot로 파일 다운로드.. gksdudrb922.tistory.com 이번에는 반대로 압축파일을 업로드하면 S3에 풀어서 저장되는 API를 구현하고자..

    [Spring] AWS S3 파일 압축해서 다운로드 - 여러가지 방법 비교분석

    [Spring] AWS S3 파일 압축해서 다운로드 - 여러가지 방법 비교분석

    이전에 Spring을 통해 S3에서 파일을 다운로드하는 API를 개발한 적이 있었다. 2021.08.05 - [java/spring] - [Spring] AWS S3에서 Spring Boot로 파일 다운로드 [Spring] AWS S3에서 Spring Boot로 파일 다운로드 프로젝트 중 AWS S3에서 특정 버킷의 파일을 다운로드 받아야 하는 상황이 생겨 기록을 한다. build.gradle - 의존성 추가 dependencies { ... implementation 'org.springframework.cloud:spring-cloud-starter-a.. gksdudrb922.tistory.com 그러나 이 방법은 단일 객체 하나를 다운받을 수 있었는데, 이번에는 디렉토리를 포함해서 대용량 파일을 ..

    [Spring] AWS S3 객체 삭제

    기본 세팅 먼저 S3 버킷에 대한 퍼블릭 엑세스 설정이 필요하다. 해당 글을 참고하자. 2022.07.25 - [aws] - [AWS] S3 버킷 퍼블릭 엑세스 설정 [AWS] S3 버킷 퍼블릭 엑세스 설정 AWS S3 버킷을 퍼블릭하게 열어두고 사용할 때가 많다. 이번에는 S3 퍼블릭 엑세스에 대한 기본 세팅을 설명한다. 퍼블릭 엑세스 차단 기본적으로 아무 설정 없이 버킷을 생성하면 모든 퍼블릭 엑 gksdudrb922.tistory.com 또한, Spring Boot에서 S3 설정 및 접근에 대한 인증 키를 입력해야 한다. 해당 글을 참고하자. 2022.07.25 - [java/spring] - [Spring] AWS S3 접근 [Spring] AWS S3 접근 라이브러리 추가 implementati..

    [Spring] 엑셀 다운로드 API

    [Spring] 엑셀 다운로드 API

    서비스 운영 중 사용자들 편의를 위해 엑셀 파일 다운로드 기능을 제공할 일이 생겨 학습한 내용을 기록한다. 라이브러리 추가 둘 중 하나만 추가하면 된다. HSSFWorkbook은 .xls 확장자, XSSWorkbook은 .xlsx 확장자 전용이라고 한다. 나는 .xlsx인 두 번째 라이브러리만 추가했다. implementation 'org.apache.poi:poi:5.2.2' // HSSFWorkbook 사용 implementation 'org.apache.poi:poi-ooxml:5.2.2' // XSSFWorkbook 사용 컨트롤러 @Controller @RequiredArgsConstructor @RequestMapping("/excels") public class ExcelController {..