| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 디자인
- 스프링
- js
- 디자인패턴
- 리눅스
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online강의
- 자바연습문제
- 자바기본
- String
- 패스트캠퍼스후기
- 패스트캠퍼스
- 국비
- 직장인자기계발
- DesignPattern
- linux
- 직장인인강
- 데이터베이스
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
- 재택근무
- 자바예제
- Spring
- 자바기초
- 자바
- 패캠챌린지
- javabasic
- 웹
- java
- ncs
- java기초
- DB
- Today
- Total
목록전체 글 (168)
FIF's 코딩팩토리
REA(Reverse Engineer Anything)는 Claude Code 같은 AI 에이전트에 붙여 바이너리, Electron 앱, .NET, APK 를 리버스 엔지니어링하게 해주는 MCP 서버다. 설치와 CLI 사용법 정리 요즘 깃허브에서 제일 핫한 레포 중 하나가 REA 다.https://github.com/morluto/rea2026-10-19 기준 스타가 약 32만 개, 포크가 8만 개를 넘었다..npm 패키지(rea-agents)는 2026년 7월에 처음 올라왔으니 몇 달만에 이렇게 된거다.한 달 다운로드도 34만 회가 넘는다.뭐길래 이렇게 난리인지 문서를 톺아봤다. REA 란?한 줄로 하면 "AI 에이전트용 리버스 엔지니어링 도구 모음" 이다.레포 설명도 "Reverse enginee..
Spring Boot JPA 에서 DataSource 2개(MariaDB + MSSQL)를 붙이는 다중 DataSource 설정 정리. @Primary 로 기본을 정하고 @EnableJpaRepositories 로 저장소를 나누고 트랜잭션 매니저를 유닛별로 둔다 왜 하나?서비스 DB 는 MariaDB 하나인데, 문자 발송은 문자 시스템 쪽 MSSQL 에 프로시저를 불러야 한다.JDBC 로 따로 붙어도 되지만 이미 JPA 를 쓰고 있으니 같은 방식으로 가고 싶다.문제는 스프링 부트 자동 설정이 DataSource 를 하나만 가정한다는 거다.spring.datasource.* 하나 읽어서 DataSource, EntityManagerFactory, TransactionManager 를 한 벌 만들어준다.두..
스프링 Filter 에서 ContentCachingResponseWrapper 로 JSON 응답 본문을 꺼내, 정규식으로 휴대폰 번호를 010****5678 처럼 마스킹하는 방법에 대한 정리. 컨트롤러는 손대지 않는다. Host 헤더 검증 필터도 덤으로 왜 하나?관리자 화면의 회원 목록, 신청자 목록.. 이런 데는 휴대폰 번호가 꼭 들어간다.보안 점검을 받으면 "목록에서 휴대폰 번호가 전부 노출된다" 는 항목이 거의 빠지지 않고 나온다.DTO 마다 마스킹 코드를 넣으면 되긴 하는데, API 가 수십개면 하나씩 고치다 빠뜨리는 게 생긴다.그래서 응답이 나가는 길목인 Filter 에서 한번에 처리한다.JSON 응답 본문에 "010-1234-5678" 모양이 보이면 "010****5678" 로 바꿔서 내보낸..
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..
