분류 전체보기 35

[Spring] Security 인증(Authentication) 흐름 정리

회사 프로젝트에서 Spring Security를 사용하면서 정리해본 인증 처리 흐름.학원에서 배웠을 때는 단순히 UserDetailsService만 구현했었는데,실제 프로젝트에서는 AuthenticationProvider까지 커스텀해서 사용하니까 확실히 다르다. 1. 기본 인증 흐름HTTP Request → AuthenticationFilter → AuthenticationManager → AuthenticationProvider → UserDetailsService이게 기본 흐름인데, 실제로는 크게 두 가지 방식으로 구현 가능:기본 Provider + UserDetailsService 구현학원에서 했던 방식UserDetailsService만 구현하면 나머지는 Spring Security가 알아서 처리간..

개발노트/Spring 2025.02.18

[Spring Boot + Vue.js 시리즈 2편] STS4와 Vue.js 연동하기

이전 글에서 JSP와 Vue.js의 차이점을 알아보았다.이번에는 실제로 Spring Boot(STS4)와 Vue.js를 어떻게 연동하는지 알아보자. 1. 프로젝트 구조기본적인 프로젝트 구조는 다음과 같다:project/├── backend/ (Spring Boot)│ ├── src/│ │ ├── main/│ │ │ ├── java/│ │ │ └── resources/│ └── pom.xml└── frontend/ (Vue.js) ├── src/ │ ├── components/ │ ├── views/ │ ├── api/ │ └── store/ └── package.json   2. Spring Boot 설정2.1. CORS ..

개발노트/Spring 2025.02.14

[Spring] 다국어 처리 시 locale이 제대로 처리되지 않는 문제

문제 상황로그인 실패 이력을 보여주는 그리드에서 실패 사유를 다국어 처리하려고 했다.최초에는 jqGrid formatter에서 직접 다국어 처리를 시도:colModel:[ {name:'failReason', index:'failReason', width:300, align:"left", formatter: function(cellvalue){ // spring:message를 직접 사용하려 했으나 JavaScript에서는 불가능 return ''; // 작동 안함 } }] 알고보니 spring:message는 JSP 처리 단계에서 서버 사이드로 처리되고,formatter는 그 이후 클라이언트 사이드에서 실행되기 때문에 동작할 수..

[Spring Boot + Vue.js 시리즈 1편] JSP vs Vue.js 차이점 분석

프론트엔드 프레임워크들이 계속 발전하면서 Vue.js에 대한 관심이 높아지고 있다.현재 회사 프로젝트에서는 JSP를 사용하고 있지만, 향후 기술 스택 전환이나 새 프로젝트를 위해Vue.js를 미리 학습해보려고 한다. 1. 데이터 바인딩 비교JSP에서는 이렇게 데이터를 표시했다: ${board.title} 작성자: ${board.writer} 내용: ${board.content} 조회수: ${board.viewCount} Vue.js에서는 다음과 같이 작성한다: {{ board.title }} 작성자: {{ board.writer }} 내용: {{ board.content }} 조회수: {{ board.viewCount }}    2. 반복문 처리 방식JSP..

[jqGrid] 자주 쓰는 메서드 정리

jqGrid를 쓰면서 자주 사용했던 메서드들 총정리나중에 또 까먹을까봐 기록해두는 중... 🤔 1. setRowData그리드의 특정 행 데이터를 업데이트할 때 사용한다.문법$("#grid").jqGrid('setRowData', rowid, data, cssp)매개변수rowid: 업데이트할 행의 ID (필수)data: 업데이트할 데이터 객체 (필수)cssp: CSS 속성 (선택)사용 예시// 단일 컬럼 업데이트$("#myGrid").jqGrid('setRowData', rowId, {'name': 'John'});// 여러 컬럼 동시에 업데이트$("#myGrid").jqGrid('setRowData', rowId, { 'name': 'John', 'age': 25, 'city': 'Se..

개발노트/jqGrid 2025.02.10

[jQuery] 이벤트 바인딩 삭제하기 (unbind vs off)

오늘 코드 리뷰하다가 이벤트 중복 바인딩 이슈가 있어서 해보는 정리🤔 이벤트 중복 바인딩이 발생하는 경우실제로 발견한 중복 코드:// 상단에 있던 코드$('#btnSearch').unbind().click(_eventSearch); //검색 버튼 클릭// 하단에 있던 코드$('#btnSearch').click(function(e){ $("#page").val(1); _eventSearch(); e.preventDefault();}); 이러면 검색 버튼 누를 때 _eventSearch 함수가 두 번 실행될 수 있음.근데 다행히 unbind()가 있어서 이전 이벤트는 제거됐었다.  비슷한 중복 패턴들:// 패턴 1: document.ready 안에서 중복$(document).ready(fu..

개발노트/jQuery 2025.02.05

[JavaScript] 금액 포맷팅하는 amtFormatJson 함수

# amtFormatJson 함수 기본 구조 function amtFormatJson(amount) { if (!amount) return ""; amount = String(amount).replace(/[^0-9]/g, ""); return amount.replace(/\B(?=(\d{3})+(?!\d))/g, ",");}   # 사용 예시// 일반 숫자 포맷팅amtFormatJson(10000); // "10,000"amtFormatJson("5000000"); // "5,000,000"// jQuery에서 활용$("#price").text(amtFormatJson(data.price));// form 데이터 포맷팅$("input[name='amount']").val(am..

[Java] zip4j 로 파일 암호화/복호화 스트림 처리

zip4j 라이브러리를 사용해서 파일을 암호화하고 stream으로 처리하는 방법 정리해봄! 0. 개발 환경Java 17Spring Bootzip4j 2.11.5 1. 라이브러리 의존성 추가 (Maven pom.xml) net.lingala.zip4j zip4j 2.11.5   2. 파일 업로드 (암호화)zipParameters.setFileNameInZip(zip파일 내부에 저장될 원본파일명) 꼭 지정해줘야함!!public void encryptAndSaveFile(MultipartFile file, String storePath, String password) throws Exception { // 저장 경로 생성 File saveFolder = new File(storePa..

개발노트/Java 2025.01.24

[jqGrid] 기본 예제 (게시판 만들기)

프로젝트하면서 제일 많이 만드는 게시판 예제로 정리해봄.기본적인 CRUD랑 검색, 정렬 다 들어있음.   1. HTML 구조 검색 글쓰기     2. jqGrid 초기화 및 설정 $(document).ready(function() { initGrid(); initEvents();});function initGrid() { $("#boardGrid").jqGrid({ url: '/api/board/list', datatype: 'json', mtype: 'POST', colNames: ['번호', '제목', '작성자', '작성일', '조회수', 'boardId'], ..

개발노트/jqGrid 2025.01.23

[jqGrid] 주요 메서드와 이벤트 총정리

내가 보려고 카테고리별로 나눈 jqGrid의 주요 메서드와 이벤트 1. 데이터 관련 메서드일단 제일 많이 쓰는 데이터 가져오기/설정하기 메서드들// 데이터 가져오기$grid.getRowData(rowId) // 특정 행 데이터. 제일 자주 씀$grid.getDataIDs() // 모든 행 ID 배열. forEach 돌릴 때 씀$grid.getLocalRow(rowId) // 로컬 데이터에서 가져올 때$grid.getCell(rowId, colName) // 특정 셀만 필요할 때$grid.getCol(colName) // 컬럼 전체 값이 필요할 때$grid.getGridParam('data') // 그리드 전체 데이..

개발노트/jqGrid 2025.01.22