전체 글

개발과 함께하는 일상을 그리는 블로그입니다.
· Work
들어가기 전에 아래는 Spring Boot + Vue.js 환경에서 이루어진 내용입니다. 개요 필자는 2021년부터 덴티아이라는 서비스를 3년간 운영해오고 있다. 덴티아이는 나라에서 지원하는 학생들의 치과주치의 사업을 전산화하는 시스템이다. 사업은 연 단위로 진행되고, 각 기관에서는 작성된 서식들을 특정한 기간(?) 동안 보관해야 한다고 한다. 따라서 덴티아이에는 작성된 서식들을 PDF로 변환한 후 기관별로 연말에 일괄적으로 다운로드할 수 있는 기능이 있다. 이러한 일괄 다운로드 기능의 구현 방식에 대해 변화한 과정을 소개한다. 서식 다운로드 및 인쇄 덴티아이에는 학생의 서식을 실시간으로 다운로드하거나 인쇄할 수 있는 기능이 있다. 이 기능은 작성된 서식을 보는 페이지에서 해당 화면 자체를 프론트에서 직..
· Javascript
개요 시스템 운영 중 zip 파일을 다운로드하는 기능이 계속 차단된다는 이슈가 보고되었다. 확인해 보니 다운로드를 시도할 때 위험한 파일로 분류되어 다운로드가 차단되었다. 해당 이슈를 비교적 간단하게 우회할 수 있는 방법이 떠올라 해당 방법으로 적용했고, 해당 이슈뿐만 아니라 각종 파일 다운로드 시 공통으로 사용할 수 있는 방식이기도 하여 정리 겸 포스팅하게 되었다. 문제상황 파일을 다운로드하는 경우 보통 해당 파일의 경로를 a 태그의 href에 기입하는 방식으로 다운로드를 구현하곤 하는데, 이때 크롬에서 zip 파일을 다운로드하려고 할 때 아래와 같이 다운로드 파일이 차단되었다. 확인해 보니 크롬 환경에서 zip 파일 등 일부 다운로드를 차단하는 경우가 존재했다. https://support.googl..
· Setting
개요 업무 중에 PM 분의 메일이 계속 스팸 처리되는 문제가 있어 SPF를 적용하면서 추가적인 보안 조치인 DKIM까지 적용한 내용을 기록하게 되었다. SPF 설정에 대한 내용은 아래 포스팅을 참고해 주세요 :) https://hojun-dev.tistory.com/entry/Gmail에-도메인-SPF-설정하기-with-AWS-Route-53 Gmail에 도메인 SPF 설정하기 with AWS Route 53 개요 업무 중에 PM 분의 메일이 계속 스팸으로 처리되고 클라이언트가 수신조차 하지 못하는 경우가 계속 발생했다. 확인해 보니 회사 메일에 SPF가 설정되지 않아서 스팸으로 처리되거나 수신 hojun-dev.tistory.com DKIM이란? DKIM이란 DomainKeys Identified Ma..
· Setting
개요 업무 중에 PM 분의 메일이 계속 스팸으로 처리되고 클라이언트가 수신조차 하지 못하는 경우가 계속 발생했다. 확인해 보니 회사 메일에 SPF가 설정되지 않아서 스팸으로 처리되거나 수신 거부되는 것으로 확인하였고, 해당 이슈를 해결한 내용을 기록하게 되었다. SPF란? SPF란 Sender Policy Framework의 약자로 스푸핑으로부터 도메인을 보호하고 발신 메일이 수신 서버에 스팸으로 표시되지 않도록 하는 표준 이메일 인증 방법이다. 이메일 스푸핑이란 공격자가 이메일 주소를 사칭하여 수신자가 신뢰할 수 있는 출처에서 보낸 메시지라고 생각하도록 만드는 기법인데, 수신 메일 서버는 SPF를 사용하여 내 도메인에서 전송된 것처럼 보이는 수신 메일이 내가 승인한 서버에서 전송된 것인지 확인하여 스푸..
들어가기 전에 해당 포스팅은 아래 환경 기준으로 작성되었습니다. JDK 17 Spring Boot 3.1.0 JPA + QueryDsl 5.0.0 Hibernate 6.2.2 개요 QueryDsl로 쿼리를 작성하던 중 transform을 사용하던 곳에서 아래와 같은 오류가 발생했다. 쿼리를 작성하는 부분은 아무리 봐도 문제가 없고 이전 버전에서 잘 동작하던 쿼리이기도 했다. 코드를 들어가 보니 hibernate 6.x 버전으로 넘어오면서 ScrollableResults에서 get(int) 메소드가 사라져서 발생한 문제였다. 해당 이슈를 구글링해 보니 아래와 같은 해결책이 존재했다. @Bean public JPAQueryFactory jpaQueryFactory() { return new JPAQueryF..
· Setting
개요 다양한 업무를 하다 보면 여러 작업이 필요한 경우가 있다. 필자 기준 가장 유용하게 사용하는 사이트들을 정리한다. 유용한 사이트가 생기면 지속적으로 업데이트될 예정. 개발 관련 인코딩/디코딩 인코딩, 디코딩 결과가 필요한 경우 유용하게 사용할 수 있다. 엄청나게 많은 인코딩 기법의 결과를 한 눈에 볼 수 있다. https://dencode.com/ DenCode | Encoding & Decoding Online Tools Encoding and Decoding site. e.g. HTML Escape / URL Encoding / Base64 / MD5 / SHA-1 / CRC32 / and many other String, Number, DateTime, Color, Hash formats! d..
· Setting
개요 업무 중 하나의 시스템에서 GS인증을 적용해야 했는데, 인증을 받기 위해서는 그 서비스의 기본 도메인에 HSTS를 적용하고 크롬의 HSTS Preload List에 등록해야 했고, 그에 따라 서브 도메인들에도 필연적으로 HTTPS를 적용해야 했다. 대응을 위해 여러 설정 및 적용을 해보며 HSTS 및 도메인에 대한 전반적인 내용을 기록한다. 해당 포스팅은 https 리다이렉트에 대한 기초적인 지식이 필요합니다. https 리다이렉트 관련한 내용은 아래 포스팅을 참고해 주세요 :) https://hojun-dev.tistory.com/entry/http-https-리다이렉트 http를 https로 리다이렉트하는 여러가지 방법 개요 웹 사이트를 개발하고 도메인을 연동할 때 실제 사용자가 접속하는 페이지..
개요 서비스를 운영하다 보면 동시성 문제에 의해 DB에 잘못된 업데이트가 발생하거나 중복 insert 등의 경우를 종종 마주칠 수 있다. 단일 서버라면 Java에서 제공하는 synchronized 블록을 이용해서 대응을 할 수 있겠지만, synchronized 블록은 하나의 Application 내에서만 동작하기 때문에 로드 밸런서를 통해 여러 대의 서버를 구성하였다면 완전한 동기화를 적용할 수 없다. 따라서 다중 서버 환경과 비슷하게 테스트해 보고 DB 동시성 문제를 해결해 보자. 만약 단일 서버라면 아래와 같은 방식으로 해결할 수도 있다. (synchronized + JPA) https://hojun-dev.tistory.com/entry/JAVA-JPA-중복-Insert-방지하기 [JAVA] JPA..
hojun-dev
개발 일상