백엔드/Spring

[Spring] 이미지를 파일로 저장하지 않고 업로드 하기

목적 이미지 업로드 시 이미지를 디스크에 저장하지 않기 위함 목차 서론 구현 방법 이미지 다운로드 이미지 업로드 1. 서론 회사에서 외부 상품을 크롤링하여 내부 상품으로 변환하는 프로세스를 개발중이었다. 배치 어플리케이션을 통해 외부 상품의 이미지를 회사 이미지 서버에 올리고, 회사 이미지 서버의 url을 DB에 저장해야 했다. 배치 어플리케이션이기 때문에 메모리 관리가 크게 중요하지 않았고, (쿠버네티스의 새로운 Pod에 어플리케이션이 뜨고 죽기 때문, 새로운 배치 어플리케이션은 새로운 Pod에서 시작) 굳이 디스크에 저장하고 싶지 않았다.(그냥 메모리에서 처리하고 싶었다.) 2. 구현 방법 이미지 url에 접근하여 이미지의 정보를 ByteArray형태로 가져온다. ByteArray타입의 데이터를 By..

2023.03.20 게시됨

[Spring] bootBuildImage와 "No compatible attachment provider is available" 포스팅 썸네일 이미지

백엔드/Spring

[Spring] bootBuildImage와 "No compatible attachment provider is available"

목적 bootBuildImage로 만든 스프링부트 이미지 실행 시 No compatible attachment provider is available 에러가 발생하는 것을 해결하기 위함 목차 bootBuildImage로 이미지 빌드 에러 해결하기 1. bootBuildImage로 이미지 빌드 bootBuildImage를 사용하여 빌드한 이미지를 쿠버네티스에서 Pod의 형태로 만들어 실행하였다. 하지만 No compatible attachment provider is available 라는 에러와 함께 Pod가 실행되지 않았다. 상태가 CrashLoopBackOff로 초기화 컨테이너가 반복적으로 실행에 실패하였다. 2. 에러 해결하기 https://github.com/alibaba/arthas/issues..

2021.12.01 게시됨

백엔드/Spring

[Spring] JWT 로그인 구현하기 2

목적 기존에 구현한 JWT로그인을 보완하고자 함 목차 기존의 흐름 새로 구현한 JWT로그인의 흐름 코드 설명 기존의 흐름 https://emgc.tistory.com/133 기존에 작성한 JWT로그인이며 흐름은 아래와 같다. 필터 로그인 시 쿠키에 있는 토큰을 확인하고 유효한 토큰이라면 인증객체를 생성하고 요청을 넘긴다 컨트롤러 인증객체의 확인 없이 클라이언트가 입력한 아이디와 비밀번호를 통해 사용자를 인증하고 인증된 사용자의 정보로 토큰을 발급한다. 하지만 아래와 같은 문제점이 있어서 새로운 JWT로그인이 필요했다. 토큰을 갖고 있어도 매번 아이디 비밀번호를 입력해야 로그인 가능 토큰 자체의 만료시간이 짧기 때문에 만료될때마다 아이디 비밀번호를 입력 새로 구현한 JWT로그인의 흐름 토큰을 access ..

2021.10.25 게시됨

[Spring] 생성자 주입을 사용해야 하는 이유 포스팅 썸네일 이미지

백엔드/Spring

[Spring] 생성자 주입을 사용해야 하는 이유

목적 생성자 주입을 사용하는 이유에 대해 알고자 함 목차 생성자 주입이란? 생성자 주입의 장점 a. NPE 방지 b. Immutable 객체 생성 c. 순환참조 방지 1. 생성자 주입이란? 주입이란 A객체가 B객체를 사용하는 코드가 있을때, B객체를 생성하여 A객체가 사용할 수 있도록 관계를 형성해 주는 것이다. 생성자 주입은 생성자를 사용하여 객체를 생성할때, 생성되는 객체가 사용하는 의존성을 생성자의 파라미터로 전달해주는 방식이다. 2. 생성자 주입의 장점 a. NPE 방지 필드주입과 setter주입이 제대로 되지 않았다는 가정하에 autowired를 제거하였다. 테스트 시 필드주입과 setter주입의 경우엔 의존성이 제대로 주입되지 않았음에도 객체를 생성할 수 있었다. 따라서 의존성이 제대로 주입되..

2021.08.27 게시됨

[Spring] GeoIp2를 사용한 해외 아이피 차단 포스팅 썸네일 이미지

백엔드/Spring

[Spring] GeoIp2를 사용한 해외 아이피 차단

목적 해외에서 들어오는 해킹시도를 막기 위함 목차 해킹시도 해외 IP 차단하기 1. 해킹시도 최근에 제작한 서비스를 AWS EC2에 배포하여 운영중에 다음과 같은 예외를 보게 되었다. 처음보는 IP에서 수상한 url 경로로 접속한 것이었다. 찾아보니 /index.php s=/index/ think app/invokefunction&function ... 러시아의 모스크바에서 php서버 취약점에 대한 공격시도였다. 다행히 내 서비스는 스프링부트여서 예외를 뱉어냈다. 하지만 그럼에도 내 서비스에는 해외에서 접근할 일이 없기에 해외 IP의 접근을 모두 막고 싶었다. 또한 스프링부트에서 해외 IP차단에 관련한 글은 찾기가 힘들어 이에 대한 가이드 라인을 제공하고자 글을 작성하게 되었다. 2. 해외 IP 차단하기..

2021.07.28 게시됨

[Spring] JASYPT를 사용한 프로퍼티 암호화 포스팅 썸네일 이미지

백엔드/Spring

[Spring] JASYPT를 사용한 프로퍼티 암호화

목적 git의 public repository와 CI/CD를 연동해 어플리케이션을 배포하는데 있어 중요한 정보가 탈취되는 것을 막기 위함 목차 JASYPT란? 사용방법 1. JASYPT란? 홈페이지에 가보면 아래와 같이 적혀있다. Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need of having deep knowledge on how cryptography works. Jasypt는 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로 자신의 프로젝트에 기본 암호화 기능..

2021.07.27 게시됨

[Spring] 스프링의 CORS설정 포스팅 썸네일 이미지

백엔드/Spring

[Spring] 스프링의 CORS설정

목적 CORS를 이해하여 서로 다른 출처간의 자원공유를 원활히 하기 위함 목차 CORS란 스프링의 CORS설정 스프링 시큐리티의 CORS설정 스프링의 CORS? 스프링 시큐리티의 CORS? 1. CORS란? CORS란Cross-Origin Resource Sharing, 교차 출처 리소스 공유의 약자이다. 서로 출처가 다른 웹 애플리케이션에서 자원을 공유하는 것을 말한다. 여기서 출처는 '프로토콜://도메인:포트' 이다. 예를 들자면 http://localhost:8080 이다. CORS에러 [cors에러] 프론트엔드와 백엔드의 출처가 다르면 위와 같은 에러를 심심치 않게 볼 수 있다. 브라우저는 보안상의 이유로 교차 출처 HTTP요청을 제한한다. 이를 해결하기 위해선 백엔드에 CORS관련..

2021.06.23 게시됨

[Spring] 스프링 프로파일 환경별로 빌드하기 포스팅 썸네일 이미지

백엔드/Spring

[Spring] 스프링 프로파일 환경별로 빌드하기

목적 환경별로 스프링 프로파일(application.yml 또는 application.properties)를 설정하기 위함 목차 환경별 프로파일 구분의 필요성 프로파일 구분 과정 1. 환경별 프로파일 구분의 필요성 일반적으로 프로파일은 resources폴더 아래에 가져다놓고 빌드를 하게 되면 resources에 속한 모든 파일이 jar에 포함되게 된다. 혹여나 다른 서로 다른 개발환경에서 프로파일을 구분하지 않고 빌드 했을 경우, jar에는 모든 프로파일이 담기게 된다. 누군가 악의을 품고 jar파일을 뜯어서 중요한 정보를 탈취할 수 도 있는 일이다. 2. 프로파일 구분 과정 프로파일의 구분 과정은 크게 2가지로 나뉜다. gradle에서 함께 빌드하고자 하는 프로파일만을 jar에 포함시킨다. 스프링에서 ..

2021.06.21 게시됨