일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- jsonMarshaller
- 7879
- save/update
- reids
- R2DBC Paging
- jar 배포
- 티스토리챌린지
- 오블완
- RedirectService
- Loki 로그
- formik
- Ingress Controller Fake
- intellij
- UnsupportedOperationException
- nGinder
- 노드간 통신
- 플루터
- Armeria
- fake jwt
- 월급루팡 일지
- hbase 저장공간 설정
- 핀포인트
- 논블록킹 성능
- 애자일 싫타
- 개발 어렵당.ㅠ
- OIDC
- ㅉ때
- pinpoint 2.5.3
- pinpoint
- LPOS
- Today
- Total
목록전체 글 (232)
대머리개발자

데이터 모델링(?)을 하는 과정에서 동일한 데이터를 저장하는 것은 누가 봐도 비효율적이다. 예들들어 설문지 관련 개발한다고 하자. 설문지에 응답의 값을 그대로 저장한다고 하면 1~100명의 응답값이야 크게 문제가 없겠지만 1만명 이상의 응답값을 그대로 저장 한다면……. 그래도 뭐 크게 문제는 안 되겠지만 개발자라면..이것은 찝찝해야 한다. 그렇지 않다면 당신은 개발자가 아닐 확률이… 리팩토링 욕구가.. 아니 애초에 이렇게 설계를 하지 않겠다. 긴 문자열 응답 값을 그대로 저장하기 보단. 별도의 테이블로 관리하고 해당 value의 pk만을 저장한다면 좋겠다. 요것이 바로 정규화 과정이다. 조금더 깨끗한 조금더 우아한 코드에 대한 고민을 실력이 뿜뿜!! 단 테이블이 추가되기 때문에 비지니스 로직이.. 상당히..
몇 명 사용하지 않는 시스템이긴 하지만 ㅋ앞으로의 미래를 위해서 미리미리!!미리뽕 하나의 프로세스에서 부가(추가)적인 작업을 해야하는 경우가 종종있다.아니 많이 있다. ㅎㅎ 메인 프로세스와 별개로 작업하는 경우 병렬적으로 처리한다면 너무나도 효율적!!이다. 예를들어 로그인 과정에서1. "로그인에 대한 이력"2. "마켓팅 여부 확인"3. "로그인에 대한 포인트 적립 처리"4. ...5. ...기본적인 사용자 정보를 Return 하는 부분하고는 연관성이 없기 때문에. 모든 과정을 처리하는 동안 wait 할 필요가 없다.0.05초의 과정이지만 ㅋ.. 티끌ms가 모여서 초로 바뀐다. 어플리케이션 로그인 속도 1초를 줄이기 위한 연간 과제도 있다고 하는데..이런 요소들을 찾아서 병렬로 처리한다면 굳굳!! 로그..

R2DBC는 여전히너무 단순한 형태의 API만 제공하기 때문에 페이징 처리를 위해서는 네이티브로 작성해야 한다. @Query( """ SELECT id, action, amount, regDt FROM Product WHERE userId =:userId ORDER BY regDt ASC LIMIT :pageIndex, :pageSize """ ) fun searchPointByUserId(userId: String, pageIndex: Int, pageSize: Int) : Flux ⭐⭐ 객체를 인자로 받아서 깔끔하게 바인딩 해볼라고 했더니...역시나. ㅋ 뭐 일단 낱개로 넘..

JWT가 만료되는시점에 페이지가 새로고침되어 페이지 내에 속한 모든 API가 호출되면모든 API에 대해서 토큰 갱신 작업을 진행한다. 3번의 리프레쉬 토큰 갱신 API가 콜된다. ㅜㅜ 최초의 요청이 토큰이 만료되면두번째, 세번째, .. 요청은 대기를 하고 순차적으로 처리한다. 즉 직렬화 한다! 최초 요청에 토큰을 갱신하고 갱신한 값으로 두번째, 세번째, .. 요청을 처리 할 수 있도록 한다!! 방법은 큐와 인터셉터를 이용한다. request, response 둘 중 하나의 인터셉터를 이용 하면 된다.request를 이용하기로 했다. 응답으로 온 401 결과를 처리하는 것보다는 request를 이용해서 "보내기 전"에 만료 체크를해서애초에 요청을 보내지 않으면 한 번이라도 네트워크 비용을 cut 할 ..

실상 Map 안에 Map으로 생각해도 된다.근데 문제는 실제 등록된 데이터를 확인해 보면 지저분하다. 우웩 더 나은 설계 방식은 Json 안에 Json을 저장하는 대신에,복합 객체에 이값을 저장하고 전체 객체를 Json으로 직렬화하는 것이다. ⭐⭐AS-ISval mainConfig = mutableMapOf( "xxx.status" to jsonStatus)Mono.zip( RedisConfig.getCache( "xxx:main:recommend"), RedisConfig.getCache( "xxx:tags"),).publishOn(Schedulers.boundedElastic()).doOnNext { it -> mainConfig["recommend"] = it.t1 mai..
개발함에 있어.. 네이밍이 제일 힘들다 기본적인 컨벤션이 있다고 해도 매한가지다. 창작의 고통처럼 느껴진다.(안해봤지만 ㅋ) 삭제를 위한 URI 네이밍은 단순하다. @DeleteMapping("/boards/{boardId}") 근데 여기서 추가적으로 삭제는 삭제인데 특정 사용자의 모든 게시글을 지우는 URI 네이밍은 어찌해야할까? ... ... ... 창작이 힘들면 회피해야 한다. 피할수 없으면 즐기라고 하지만...아니다. 피할수 있을때까지 피해야 한다. 회피기술(꼼수) ⭐⭐ @DeleteMapping("/boards/{boardId}") 엥? 똑같지 않은가? 맞다. 똑같다 ㅋ 새로운 URI 네이밍을 파는 것이 아니라. 특정 boardId의 값을 체크하고 로직을 분기하는것이다. if (boardId =..
실상 예외는 아니고 경고다. 개발서버에서 해당 로그가 계속 로깅되고 있어서 확인!s DB의 wait_timeout 보다 짧게 설정하면 된다고 하는데 계속해서 해당 로그가 발생한다. 설정을 시도 하는 과정에서 몇 가지 삽질.. 히카리의 maxLifeTime은 아래와 같이 5분 미만이면 기본값으로 설정된다. : HikariPool-1 - maxLifetime is less than 30000ms, setting to default 1800000ms. 빠른 테스트를 하려고 설정을 낮게 해보려다...왜 설정이 안 먹는지 부터해서 삽질 작렬!! wait_timeout을 전역으로 설정할수 없다면 세션으로 설정 가능!! hikari: max-lifetime: 305000 ##idle-timeout: 10000 con..
Parameter 0 of method mysqlEntityManagerFactory in com.config.MysqlConfig required a bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' that could not be found. 이미 1.마리아DB와 2.mysql를 설정해서 사용하고 있었다. 기존 사용하던 마리아DB를 제거하고 mysql 두 개를 설정하는 과정에서 이슈가 발생했다. @Primary 어노테이션은 반드시 주 DB 구성에만 포함시켜야 한다. 그렇지 않을 경우 충돌이 발생해서 아래와 같은 오류가 발생한다 사실 이미 최초 설정할 때 기억은 나지 않지만 마주 했던것 같은 느낌이다. 기록하자 ㅎ 삽..