본문 바로가기

web/SpringBoot44

[REST API] Serializable 정말 구현해야 할까? 개발 완료 후 시간이 좀 남아돌아 다른사람들 소스를 보다보니 DTO에 죄다 Serializable 을 implement 해놨음.. 엇? 외부로 직렬화해서 내보내는건가? 싶어 확인해보다 내가 개념 정리하려고 쓰는 포스팅. 직렬화란?(Serializable) 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술(역직렬화)을 아울러서 이야기한다. 시스템적으로 이야기하자면 JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 .. 2023. 10. 18.
파일다운로드 시 PDF 워터마크 처리하기 현재 진행하고 있는 프로젝트에서 나한테 말도 없이 파일다운로드 시 워터마크처리 하는걸 날 끼워 놓곤 던져줬다. 그것도 기간도 3일주더라 ㅋㅋㅋ 그래서 2일만에 해줬다. 그게 뭐라고 ㅋㅋㅋ 시간이 남아서 포스팅에 개발과정을 정리해보기로 했다. Spring Boot 3.1.x + Gradle + IntelliJ + OPENJDK17 RESTfulAPI AWS S3 Bucket 일단 PDF 파일을 다루기 위해 지원되는 라이브러리를 찾다보니 대표적으로 iText 를 제일 많이 이용하더라 나는 무료 버전인 iText5.5.13 버전을 이용하기로 하였다. 1. Gradle에 추가 implementation 'com.itextpdf:itextpdf:5.5.13' implementation 'com.amazonaws:.. 2023. 10. 17.
Properties 암호화하기 지금 하고 있는 프로젝트에서 Aws Config 를 세팅하는 도중 accessKey 와 secretKey 를 프로퍼티에 등록하려고 한다. 근데 너무 날것(?) 으로 입력하면 보안이슈도 있고... 뭔가 하수같단말이지!!! 그래서 해당값을 Jasypt(Java Simplified Encryption) 를 이용하여 암호화해서 넣어보려한다. 우선 간단하게 암호화해서 입력할수 있도록 간단한 function 작성을 위해 Jasypt 라이브러리 추가 implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4' 그런다음 암호화 함수작성 public static void encProcess() { StandardPBEStringEncryptor s.. 2023. 10. 12.
HttpOnly + Secure Cookies 생성 Https 로 설정까지 마쳤다면 HttpOnly 쿠키를 설정해보자 로그인 시 Refresh 토큰발급을 HttpOnly 쿠키로 발급하고자한다. httpOnly란 Set-Cookie HTTP reponse 헤더에 포함되는 flag이다. cookie를 생성할 때 HttpOnly를 사용하는 것은 브라우저가 HttpOnly를 지원할 경우 쿠키는 클라이언트 측 스크립트에 접근할 수 없다. 악성 스크립트(XSS 공격)에 의한 위험을 완화시켜준다. 즉, http only 쿠키 방식으로 저장된 정보는 Javscript의 Document.cookieAPI로 접근이 불가능하다. 따라서 XSS 취약점 공격으로 담긴 값을 불러올 수 없다. 또한 CSRF 공격도 막을 수 있다. 1. 쿠키생성 ResponseCookie.from(.. 2023. 9. 12.