예정 작업 목록
- 메뉴 리스트 메뉴 아이콘 푯시
- 파일 업로드 구현 ( 유저 프로필 )
- 권한별 메뉴 리스트 업
작업목표
- 유저 프로필 업로드 구현
- 유저 권한별 메뉴 리스트업
이슈
- mysql 에서 JSON으로 저장된 내역의 파싱 작업
- mysql 5.7 버전 이상에서 동작하며, json 관련 함수에 대한 숙지가 필요
- json의 depth가 깊어질수록 쿼리의 작성의 복합도가 증가한다.
해결
/* 이와 같은 json data가 db에 저장되어 있다고 하면 쿼리에서 파싱해서 해당 조건을
만족하는 목록을 불러오기 위햇서는 json 관련 함수를 사용하여야 한다.
[
{"auth_cd":"MSTR","auth_nm":"마스터관리자","c":"N","r":"Y","u":"N","d":"N"}
,{"auth_cd":"MNGR","auth_nm":"관리자","c":"N","r":"Y","u":"N","d":"N"}
,{"auth_cd":"USR","auth_nm":"일반사용자","c":"N","r":"Y","u":"N","d":"N"}
,{"auth_cd":"GST","auth_nm":"방문자","c":"N","r":"Y","u":"N","d":"N"}
]
*/
// json_extract(data , '$.탐색할 key' )
// ex) json_extract( data,'$.auth_cd')
// 그렇지만, 위와 같은 구조에서는 먼저 배열에서 몇번째 값을 가져올 것인지를 먼저정해야한다.
// parameter로 위의 json에서 몇번째 인덱스를 참조할 지를 받아와 동적으로 처리하였다.
// mybatis 에서 파라미터 값을 동적 처리하기 위해 CONCAT으로 문자열을 합쳐서 사용
// 쿼리는 아래와 같이 사용
SELECT
Z.*
FROM
(
SELECT
ml.menu_nm
, ml.menu_url
, ml.menu_icon_url
<if test=" idx != null and idx != ''">
, json_extract(ml.auth_infos, CONCAT('$[',#{idx},']') ) as auth_info
</if>
FROM menu_list ml
where
ml.use_yn = 'Y'
)Z
WHERE
1=1
AND json_extract(Z.auth_info, "$.r") = "Y"
회고
싱글 파일에 대한 파일 업로드도 처리하였다. 생각보다 아직까지는 큰 이슈 없이 java 프레임웍에 비해 부족함은 없는것 같다.
인터셉터도 간단하게 구현이 되어 로그인, 로그아웃, 세션 타임아웃 기능을 쉽게 구현할 수 있었다.
express-session 을 사용하여 세션 타임아웃 구현 하는 부분은 다른 글에서 다루도록 하겠다.
다음 작업 리스트
- 헤더 쪽 유저 프로파일 부분, 세팅 부분 화면 구현
- 권한별 버튼 보여주는 부분 구현
- Docker image로 실 서버에 배포해보기
- 관리자 페이지에서 어떤 기능을 더 추가할지 고민해보기
참고 사이트
'개발일지 > WEB' 카테고리의 다른 글
NodeJs 웹 프로젝트 개발일지 #4 (0) | 2021.07.13 |
---|---|
NodeJs 웹 프로젝트 개발일지 #3 (0) | 2021.06.17 |
NodeJs 웹 프로젝트 개발일지 #2 (0) | 2021.06.16 |
NodeJs 웹 프로젝트 개발일지 #1 (0) | 2021.06.07 |
NodeJs 웹 프로젝트 시작 (0) | 2021.05.27 |