| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바기본
- 스프링
- 패스트캠퍼스
- java기초
- String
- 직장인인강
- 웹
- 패스트캠퍼스후기
- 자바
- ncs
- 자바연습문제
- 데이터베이스
- 자바기초
- linux
- js
- 직장인자기계발
- DesignPattern
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
- 패캠챌린지
- 재택근무
- 국비
- 디자인
- 리눅스
- Spring
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online강의
- 디자인패턴
- 자바예제
- javabasic
- DB
- java
- Today
- Total
목록전체 글 (165)
FIF's 코딩팩토리
Quartz 작업 실행 이력을 DB 에 남기고, 로그인 사용자가 없는 작업 스레드에서 등록자와 권한 체크를 처리하는 방법에 대한 정리 1편 : Quartz 스케줄러 서버 여러 대에서 한 번만 돌리기 (1) - JDBC 클러스터와 빈 이름으로 작업 등록실행 이력이 필요한 이유작업을 관리자 화면에서 등록하게 만들었으면 "언제 돌았고 성공했는지"도 화면에서 보여야 한다.서버가 여러 대라 로그 파일을 뒤지면 어느 서버에서 돌았는지부터 찾아야 한다..그래서 실행할때마다 schedule_log 테이블에 한 줄씩 남긴다.작업마다 이력 코드를 넣는건 빠뜨리기 쉬우니 Quartz 의 JobListener 로 모든 작업에 한 번에 건다. 1. 이력 테이블@Entity(name = "schedule_log")@Getter ..
서버가 여러 대일때 스케줄 작업을 한 대에서만 돌리고, 작업 등록은 관리자 화면(DB)에서 하는 Quartz 구성에 대한 정리1편은 클러스터 설정과 작업 등록까지, 2편은 실행 이력 리스너와 작업 안에서의 인증 처리를 다룬다. Quartz 기본 사용법(cron 트리거, 재등록, 실패시 재실행)은 이전 글 에 정리해뒀다.@Scheduled 로는 안 되는 이유스프링에서 스케줄은 보통 @Scheduled 하나로 끝낸다.근데 서버가 2대면 2대 다 돈다..오래된 로그 삭제 정도는 두 번 돌아도 괜찮지만 메일 발송 같은건 두 번 나가면 사고다.그래서 ShedLock 같은 락 라이브러리를 붙이거나 Quartz 를 쓴다.여기서는 Quartz 를 JDBC 저장소 + 클러스터 모드로 썼다.작업이랑 트리거 정보를 DB 에..
Caffeine 로컬 캐시를 서버 여러 대에서 같은 값으로 맞추는 방법에 대한 정리 로컬 캐시의 문제공통코드, 메뉴, 메시지 같은건 거의 안 바뀌는데 화면마다 읽는다.그래서 서버 메모리에 올려두고 쓴다.스프링에서는 spring-boot-starter-cache 에 Caffeine 을 붙이면 금방 된다.근데 서버가 2대 이상이면 얘기가 달라진다..관리자 화면에서 코드를 바꾸면 요청을 받은 서버 캐시만 바뀌고 나머지 서버는 옛날 값을 그대로 들고 있다.보통은 Redis 같은 공유 캐시를 쓰거나 메시지로 갱신 이벤트를 뿌린다.여기서는 그런거 없이 DB 테이블 하나로 해결했다. 구조캐시 이름마다 "기준일시"를 둔다.DB 기준일시 : 관리자가 갱신을 요청한 시각. 모든 서버가 같이 봄서버 기준일시 : 이 서버가 ..
로그인 같은 POST 요청의 JSON body 를 브라우저에서 AES 로 암호화하고, 서버에서는 서블릿 Filter 로 풀어서 컨트롤러에 넘기는 방법에 대한 정리. CryptoJS 4.2.0 부터 기본 hasher 가 SHA1 에서 SHA256 으로 바뀌어서 버전만 올리면 서버 복호화가 안 되는 문제도 같이 다룬다 왜 하나?HTTPS 면 전송 구간은 이미 암호화된다.그런데 보안 점검을 받다보면 "개발자도구 Network 탭에 비밀번호가 평문으로 보인다" 는 항목이 종종 나온다.이걸 막으려고 body 자체를 한번 더 암호화해서 보낸다.cf. HTTPS 를 대신하는게 아니다. 키가 결국 브라우저에 내려가기 때문에 마음먹고 보면 풀 수 있다. 평문 노출을 막고, 오래된 요청을 다시 보내는걸 막는 정도로 생각하..
Nuxt2 프로젝트에서 로그인 안 한 사용자를 막고, API 가 401 을 주면 로그인 페이지로 보내는 구조에 대한 정리 하고 싶은 것로그인이 필요한 화면은 대충 이런게 필요하다.토큰 없이 페이지에 들어오면 /login 으로 보낸다페이지에 들어올때마다 메뉴, 사용자 정보를 다시 불러온다API 호출 중에 세션이 끊겨서 401 이 오면 /login 으로 보낸다API 호출할때 로딩바를 띄우고 끝나면 내린다Nuxt2 에서는 이걸 라우트 미들웨어 하나, 플러그인 하나로 나눠서 처리한다.페이지 이동은 미들웨어가, API 호출은 axios 플러그인이 맡는 식이다. 1. 토큰은 쿠키에Nuxt2 는 SSR 이라 서버에서도 코드가 돈다.localStorage 는 서버에 없어서 토큰을 쿠키에 넣었다.cookie-univer..
화면에서 등록한 배치 스케줄을 Quartz 로 돌리는 방법에 대한 정리 Quartz 란?자바에서 쓰는 잡 스케줄링 라이브러리다."매일 새벽 2시에 이거 돌려줘", "10초마다 이거 돌려줘" 같은걸 맡기면 된다.스프링의 @Scheduled 로도 되긴 하는데 @Scheduled 는 코드에 시간이 박혀있다.사용자가 화면에서 스케줄을 등록 ㆍ 수정 ㆍ 삭제하는 경우엔 Quartz 쪽이 맞다. org.quartz-scheduler quartz 2.3.2cf. 스프링 부트라면 spring-boot-starter-quartz 를 쓰면 된다. 아래 내용은 Quartz API 를 직접 쓰는 방식이다. 기본 구성 3가지Job : 실제로 할 일. Job 인터페이스의 execute() 하나만 구현하면 된다Tr..
Vue, React 없이 퍼블리싱 받은 정적 HTML 에 목록 조회 같은 동작을 붙인 방법에 대한 정리 왜 프레임워크를 안썼나관리자 화면은 Vue 로 만드는데 사용자 화면은 그냥 HTML + JS 로 만들고 있다.퍼블리싱 업체가 피그마 시안을 HTML 로 만들어서 넘겨주기 때문이다.여기에 Vue 를 얹으면 받은 HTML 을 전부 컴포넌트로 다시 옮겨야 하고, 디자인이 바뀔때마다 또 옮겨야 한다.페이지도 20장 정도고 동작이라고 해봐야 목록 조회, 상세 조회, 문의 등록 정도라 프레임워크 없이 가기로 했다.대신 몇 가지 규칙을 정했다. 1. 우리 코드와 퍼블리싱 코드 폴더 나누기src/ index.html news/news-list.html 퍼블리싱 HTML layout/header.ht..
리액트에서 상태관리를 어떻게 하는지, 어떤 라이브러리가 있고 요즘은 뭘 쓰는지에 대한 정리 상태관리가 왜 필요한가Vue 는 Vuex, Pinia 처럼 공식에 가까운 상태관리 라이브러리가 하나 있는데리액트는 공식 상태관리 라이브러리가 없다.리액트 자체는 useState 랑 Context 만 주고 나머지는 알아서 고르라는 식이라 라이브러리가 엄청 많다.Redux, MobX, Recoil, Jotai, Zustand, Valtio, XState.. 이름만 들어도 뭘 써야할지 헷갈린다.cf. Pinia 는 Pinia 상태관리 에 따로 정리했다.그래서 작은거부터 순서대로 정리해봤다. 1. useState - 컴포넌트 하나 안에서제일 기본이다. 컴포넌트 안에서만 쓰는 값은 이걸로 충분하다.import { useSt..
