프론트에서 form POST로 새 탭 띄우기 — target=_blank 외부 시스템 연동
백엔드 WebClient로는 302 리다이렉트 화면을 사용자 브라우저에서 열 수 없어, 프론트가 직접 form POST를 만들어 새 탭으로 보낸다
프론트에서 form POST로 새 탭 띄우기 — target=_blank 외부 시스템 연동
SSO 로그인, 외부 신청 화면처럼 “다른 시스템 화면을 사용자 브라우저에서 열어줘야” 하는 연동이 있다. 백엔드에서 WebClient로 POST해도 결과로 받는 302 리다이렉트 화면을 사용자 브라우저에 띄울 수 없다. 프론트가 직접 form을 만들어 submit하는 방식이 정석.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const openPostWindow = (url, data) => {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', url);
form.setAttribute('target', '_blank');
for (const key in data) {
const input = document.createElement('input');
input.setAttribute('type', 'hidden');
input.setAttribute('name', key);
input.setAttribute('value', data[key]);
form.appendChild(input);
}
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
};
왜 이렇게?
window.open(url + '?' + queryString)은 GET이라 길이 제한·민감 정보 노출 문제fetch는 응답을 JS가 받아 화면 전환에 쓸 수 없음 — 외부 시스템이 HTML 화면을 돌려주는 경우 무용- form submit +
target="_blank"은 브라우저가 직접 새 탭으로 네비게이션을 받아 화면 전환
디버깅 팁
새 탭의 첫 POST 요청을 보고 싶다면 Chrome을 --auto-open-devtools-for-tabs로 실행. 자세한 건 Chrome 새 탭에서 자동으로 개발자도구 열기 참고.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.