본문 바로가기

728x90
반응형

실전코드

(10)
[SpringBoot3] 대용량 엑셀 파일 업/다운로드(Mybatis 조회) 데이터가 별로 많지 않으면 클라이언트에서 엑셀파일을 만들어 다운받는것도 고려할만 하나데이터가 수십만건 이상일 경우 메모리부족, 타임아웃 등의 문제가 생기기 때문에 백엔드에서 처리하는 방법을 고려해야 한다.하지만 백엔드에서 처리를 한다고 해도 응답시간 지연으로 인한 타임아웃, 백엔드 자체의 메모리 부족이 발생할 수 있는데 이 때 SpringBoot3에서 선택할 수 있는 해결방법을 공유해보고자 한다.고려사항방대한 양의 DB 데이터 조회로 인한 메모리 부족DB데이터로 생성하는 엑셀파일의 메모리 부족엑셀파일 생성까지 http응답을 기다리다 타임아웃 방지해결방법엑셀파일 생성 : 버퍼 사이즈 마다 저장소에 temp파일을 생성하는 라이브러리 선택DB 데이터 조회 : ResultHandler를 이용해 fetchSize..
[SpringBoot3] Jasypt를 활용한 application 속성값 암호화 application.yml 에는 암호화 키, 각종 서비스의 access key 등 탈취 시 치명적인 데이터들이 보관되어 있다.따라서 이를 암호화된 암호문 상태로 관리하고,사용시에는 자동으로 복호화를 하기 위해 Jasypt라는 라이브러리를 사용하려고 한다.라이브러리 설치build.gradle// jasyptimplementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'config 설정JasyptConfig.java@Configuration@Profile({"dev"}) // config를 적용시킬 profilepublic class JasyptConfig { @Value("${jasypt.encryptor.password}") priv..
[Nuxt3] 운영 환경에서 콘솔 로그 노출 제한 local 환경에서 디버그를 위해 log를 찍어놨는데서비스 운영에 앞서 이 모든 log함수들을 찾아서 지울 수도 없는 노릇이다.따라서 운영환경 등 선별된 환경에서는 log함수를 동작하지 않도록 조치할 수 있다.이 때 라이브러리 등을 사용할 필요 없이 서버가 빌드되는 과정에 conole.log 함수를 빈 함수로 오버라이드 하면 된다. 우선 Nuxt3에서 서버 구동 시 전역설정을 할 수 있는 plugins 폴더에 ts파일을 만들어 적용한다.export default defineNuxtPlugin(() => { const runtimeConfig = useRuntimeConfig() if (runtimeConfig.public.env === 'dev') { const console = globalTh..
[SpringBoot3] XSS 방지를 위한 Request, Response 이스케이프 처리(CharacterEscapes, Filter, MappingJackson2HttpMessageConverter 사용) 개요XSS를 방지하기 위한 여러 가지 방법 중 Http Request 및 Response의 Body에 포함된 특수문자를 escape 하는 방법이 있다.예전에는 Requst의 escape를 위해 네이버에서 만든 오픈소스인 lucy를 많이 사용했지만, jackson에서 지원해주는 CharacterEscapes와 별도로 사용해야 하고, 마지막 커밋이 2년 전인걸로 보아 개발도 사실상 중단된 상태이다. 그리고 MappingJackson2HttpMessageConverter를 사용하는 여러 글이 있지만, 이는 Response에는 적용되지만 Request에는 적용되지 않기 때문에 Request에 적용할 수 있는 추가 개발이 필요한 상황이다. 이 때 escape 처리는 정책에 따라 커스터마이징 될 수 있어야 하기 때..
[Nuxt3] NuxtPage에 keepalive를 적용한 Tab형 화면 구현하기(Element Plus el-tabs) 개요탭으로 화면을 보는 것은 일상에서 많이 사용하는 기능 중 하나이다.따라서 Web 개발 시에 탭을 활용한 화면 전환을 만들어야 할 경우가 생기는데이를 Nuxt3에서 어떻게 구현할 수 있는지 살펴보고자 한다.UI 컴포넌트 라이브러리로는 Element Plus를 사용했으며, el-tabs를 사용했다. · Nuxt Components" data-og-description="The component is required to display pages located in the pages/ directory." data-og-host="nuxt.com" data-og-source-url="https://nuxt.com/docs/api/components/nuxt-page" data-og-url="https:/..
[MyBatis] MyBatis Interceptor를 활용한 페이징(페이지네이션) 처리 : Pageable 객체를 파라미터로 개요기존 MyBatis에서 페이징 처리를 위해선 페이징이 필요한 조회구문에 Top n Query를 직접 작성하거나, 을 사용해서 미리 작성된 구문을 연결해서 붙여줘야 했다.하지만 이런 방법은 여러 개발자가 수많은 조회구문에 작성하기에는 코드 중복이 심하고 가독성이 떨어져 유지보수가 힘들어질 수 있다는 단점이 있다.이러한 단점을 해결하기 위해 MyBatis Interceptor를 사용해서 특정 파라미터를 전달받은 select 쿼리에 대해 페이징 처리를 할 수 있는데 이를 알아보고자 한다.전달받을 파라미터로는 개발자 임의로 정할 수 있으나, JPA에서 사용하는 java 표준인 Pageable 객체를 사용했다.접근방법MyBatis Interceptor 클래스를 생성한 후 intercept를 Override해준..
Nuxt3 에서 다국어 기능(locale) 멀티 파일 적용해서 사용하기 (nuxtjs/i18n) 다국어 지원 웹을 만들기 위해 i18n을 도입하기로 하였다.Nuxt3를 공식 지원하는 nuxtjs/i18n 라이브러리를 사용하게 되었다. @nuxtjs/i18nInternationalization for Nuxt. Latest version: 9.1.0, last published: 17 days ago. Start using @nuxtjs/i18n in your project by running `npm i @nuxtjs/i18n`. There are 89 other projects in the npm registry using @nuxtjs/i18n.www.npmjs.comnpm에서 확인해보면 다운로드 수도 많고 업데이트도 꾸준히 되고 있는 듯 하다.vue-i18n을 기반으로 만들어졌다고 하며, vu..
[쿠키 Cookie] Http 환경 백엔드 에서 생성한 쿠키를 프론트엔드 클라이언트에서 사용하기(Spring Boot3, Nuxt3) 프로젝트를 진행 하다보면 쿠키를 사용해야 하는 상황을 마주하게 되는데 마냥 간단하게 사용하기엔 여러 제약이 걸려있습니다.개인이 프로젝트를 진행하는 보편적 환경인로컬에서 백엔드와 프론트엔드가 분리된 환경에서백엔드에서 생성한 쿠키를 프론트엔드 클라이언트 사이드에서 사용 하는 경우를 가정합니다.(Spring Boot 3와 Nuxt 3를 예시로 하고 있습니다.)쿠키란클라이언트의 브라우저에 저장되는 작은 데이터이다.HTTP 요청 시 브라우저는 자동으로 쿠키를 포함하여 서버에 전송할 수 있다.주로 사용자 인증, 세션 관리, 사용자 맞춤 설정 등에 활용된다.키=값; 옵션들 형식으로 구성되어 있다.고려사항HTTP 환경에서 사용클라이언트 사이드에서 사용백엔드와 프론트엔드가 분리된 Cross-site 환경접근방법쿠키 전송..

728x90
반응형