반응형

Uncaught Error: The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.

반응형
반응형
반응형
반응형

SecurtyContext이런용어 때문에 보안토큰에 문제있을거라고 생각했으나 아니었음, 밑에 Exception message를 잘봐야했음

2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.security.web.FilterChainProxy - Securing POST /files/manual/upload/00060101_PlantInfo/2024/01/
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.c.SecurityContextPersistenceFilter - Set SecurityContextHolder to empty SecurityContext
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.a.i.FilterSecurityInterceptor - Authorized public object filter invocation [POST /files/manual/upload/00060101_PlantInfo/2024/01/]
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.security.web.FilterChainProxy - Secured POST /files/manual/upload/00060101_PlantInfo/2024/01/
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.c.HttpSessionSecurityContextRepository - Did not store anonymous SecurityContext
2024-01-19 10:29:24 [http-nio-8007-exec-10] [WARN ] o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'UploadFiles' is not present]
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.c.HttpSessionSecurityContextRepository - Did not store anonymous SecurityContext
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.c.SecurityContextPersistenceFilter - Cleared SecurityContextHolder to complete request
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.security.web.FilterChainProxy - Securing POST /error
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.c.SecurityContextPersistenceFilter - Set SecurityContextHolder to empty SecurityContext
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.security.web.FilterChainProxy - Secured POST /error
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.c.HttpSessionSecurityContextRepository - Did not store anonymous SecurityContext
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.c.HttpSessionSecurityContextRepository - Did not store anonymous SecurityContext
2024-01-19 10:29:24 [http-nio-8007-exec-10] [DEBUG] o.s.s.w.c.SecurityContextPersistenceFilter - Cleared SecurityContextHolder to complete request
2024-01-19 10:29:26 [pool-2-thread-1] [DEBUG] o.a.h.i.c.PoolingHttpClientConnectionManager - Closing expired connections
2024-01-19 10:29:26 [pool-2-thread-1] [DEBUG] o.a.h.i.c.PoolingHttpClientConnectionManager - Closing connections idle longer than 30 SECONDS

반응형

'java, spring' 카테고리의 다른 글

[windows] sts(SpringToolSuite) eclipse 실행 script  (0) 2024.01.25
java stream  (0) 2022.04.28
Quartz  (0) 2022.04.19
Tomcat's directories  (0) 2021.03.03
Java Web Application  (0) 2021.03.02
반응형

Uncaught Error: input is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.

반응형
반응형

input요소에 포커스가 가지 않고 copy & paste방지한것처럼 select가 되지 않는 버그 때문에 찾아보니

pointer-event:none 을 해주면 그렇게 된다고 한다

그러나 이때문은 아니고 syncfusion state 변경후 re-render될때 뭔가 안맞아서 그런것으로 예상됨

재현조건을 좁혀봤더니 dropdownList에서 state변경을 통해 구현한 부분에서 정확히 에러가 발생하는 것으로 추정되었기 때문

반응형
반응형
반응형
반응형

html파일에서 <!DOCTYPE html>을 써주지 않아 html의 최신 버전을 알려주지 않거나,

user agent stylesheet에서 명시하는 속성을, 내가 직접 override하지 않으면 그 기본 규칙이 적용될 수 있다.

 

이를 미연에 방지하는 법은, 브라우저의 모든 기본 CSS 규칙을 초기화하기 위해

CSS Reset (meyerweb.com/eric/tools/css/reset/)을 해주는 것이 있겠다.

반응형
반응형
반응형
반응형
e-checkboxfilter e-filter-popup e-control e-dialog e-lib e-popup e-popup-open {
  width: 282px;
}

-> .e-checkboxfilter .e-filter-popup .e-control .e-dialog .e-lib .e-popup .e-popup-open

로 수정하니까 정상동작함

반응형
반응형
반응형
반응형
반응형
반응형

https://simsimjae.tistory.com/382

 

왜 리액트는 대세가 되었을까?

주변에서 다들 리액트가 빠르다, 좋다. 하는데 정확히 어떤 부분이 좋은건데? 라고 물어보면 명확한 답변을 하기가 어려웠습니다. 그래서 이번기회에 리액트가 왜 좋은거고 어떤 장점이 있는건

simsimjae.tistory.com

 

브라우저의 렌더링 과정: parse -> layout -> paint -> composite(paint과정에서 나눠진 레이어들을 합침)

jQuery나 js로 직접 DOM에 접근해서 수정하면 매번 reflow (layout -> paint -> composite)이 일어나며 이는 렌더링 과정에서 대부분의 시간을 잡아먹는 작업이므로 비효율적

 

리액트는 업데이트가 필요한 UI컴포넌트를 하나씩 수정하지 않습니다. 리액트 컴포넌트가 리턴한 JSX를 해석해서 Virtual DOM에 그리고, 이것을 모든 컴포넌트에 대해서 반복합니다. 전부 다 그렸으면 실제 DOM과 비교해서 변경된 부분만 변경시켜주는것이죠. 어떻게 보면 조삼모사처럼 보일수도있습니다. 한번에 하나씩 변경시킬것인가? 아니면 모아서 한번에 처리할것인가? 근데 후자의 방법이 더 좋은 방법입니다. 왜냐면, 모아서 한번에 처리하면 리플로우는 딱 한번 일어나기 때문에 브라우저의 리소스를 덜 사용하기 때문입니다.

유저와의 상호작용이 많아서 서버에서 데이터를 가져와서 UI에 그 데이터를 묶어서 보여줘야 하는 경우가 많은 서비스에서는 리액트가 훨씬 개발하기 편하고 빠릅니다. 

DOM관리를 리액트가 알아서 편리하게 해주기 때문이죠. 저희는 그저 데이터와 UI 컴포넌트를 묶어주기만 하면 됩니다. 직접 DOM에 접근할 필요가 없어요.

출처: https://simsimjae.tistory.com/382 [104%:티스토리]

 

반응형
반응형

state들이 한꺼번에 변화하고 같은 성질을 가진다면 아래와 같이 destructuring assignment를 통해 묶어서 사용

 

화면에 나타나는 변화하는 값들을 state로 사용하되 변화가 한꺼번에 일어나는 것이라면 하나의 state로 묶어서 사용

const [inputs, setInputs] = useState({ username: "", email: "" });
const { username, email } = inputs;

위와 같이 사용하면 inputs.username이렇게 매번 inputs.붙이지 않아도 됨

 

inputs[name] = value; (x)
setInputs({ (o)
  ...inputs,
  [name]: value
});

세팅할때는 위와 같이 해야함

반응형
반응형

리액트 컴포넌트는 기본적으로 부모컴포넌트가 리렌더링되면 자식 컴포넌트 또한 리렌더링이 됩니다. 바뀐 내용이 없다 할지라도요.

물론, 실제 DOM 에 변화가 반영되는 것은 바뀐 내용이 있는 컴포넌트에만 해당합니다. 하지만, Virtual DOM 에는 모든걸 다 렌더링하고 있다는 겁니다.

나중에는, 컴포넌트를 최적화 하는 과정에서 기존의 내용을 그대로 사용하면서 Virtual DOM 에 렌더링 하는 리소스를 아낄 수도 있습니다. 이것은 다음번에 알아볼게요. -> useCallback, React.memo 사용

 

아래와 같이 component를 React.memo로 감싸주고 useCallback사용해야함

export default React.memo(CreateUser);

https://react.vlpt.us/basic/19-React.memo.html

 

19. React.memo 를 사용한 컴포넌트 리렌더링 방지 · GitBook

19. React.memo 를 사용한 컴포넌트 리렌더링 방지 이번에는, 컴포넌트의 props 가 바뀌지 않았다면, 리렌더링을 방지하여 컴포넌트의 리렌더링 성능 최적화를 해줄 수 있는 React.memo 라는 함수에 대해

react.vlpt.us

 

반응형
반응형

어떤 컴포넌트에 a,b,c,d,....등 많은 state가 있고

어떤 값 (m)은 a의 유효 count를 세는 등 a가 바뀔때만 영향받는 값

const countActiveList = (a) => a.filter(n => n.active).length;

const count = countActiveList (a);

그냥 위와 같이 쓰면 a, b, c, d 각각이 바뀌어도 virtualDOM 리렌더가 일어나며 리렌더될때마다 m값은 매번 새로 계산됨

이것을 방지하기 위해 useMemo사용

const m = useMemo(()=> countActiveList (a),[a])

 

  • 화면이 랜더링될때마다 일반 변수는 계속 초기화되는데, 기억해 두어야 할 필요가 있을 때 사용
  • 기억해야 하는 값이긴 하지만 화면에 직접 나타나진 않을 때 useState대신 useMemo사용

 

useMemo가 값 재사용이라면 useCallback은 함수재사용

const onRemove = id => {
  // user.id 가 파라미터로 일치하지 않는 원소만 추출해서 새로운 배열을 만듬
  // = user.id 가 id 인 것을 제거함
  setUsers(users.filter(user => user.id !== id));
};

=>

const onRemove = useCallback(
    id => {
      // user.id 가 파라미터로 일치하지 않는 원소만 추출해서 새로운 배열을 만듬
      // = user.id 가 id 인 것을 제거함
      setUsers(users.filter(user => user.id !== id));
    },
    [users]
  );
반응형
반응형

SELECT JSON_AGG( JSON_BUILD_OBJECT ('authId',AUTH_ID, 'yn',ALARM_TALK_YN)) FROM MDM_ALARM_AUTH

반응형
반응형

* 새창이 생기는 팝업과 비교되는 개념

* syncfusion 정의에서는 아래 컴포넌트 동작을 막느냐 아니냐 막으면 모달

Specifies the Boolean value whether the dialog can be displayed as modal or non-modal.

  • Modal: It creates overlay that disable interaction with the parent application and user should respond with modal before continuing with other applications.
  • Modeless: It does not prevent user interaction with parent application.

Defaults to false

반응형
반응형
반응형
반응형

cond_isHarvestKg != null  정상동작

cond_isHarvestKg != '' 정상동작

cond_isHarvestKg != 'Y' 이거만 있으면 무조건 if조건이 true가 되는 문제 발생함

처음에는 대소문자 인식이 안되는 문제인줄 알았으나 아니었음만약 인식이 안된다면 무조건 false가 되어야 하는데 이 경우는 무조건 true가 되었음정확히는 모르겠지만 예전에 발생한 아래오류 발견!!! 관련이 있을지도 모르겠음

 

-------------------------------------------------

mybatis java.lang.numberformatexception for input string에러가 난데없이 발생

string을 number로 잘못 변환했다는 건데 그런적이 없는데 왜?? 알고보니 아래와 같은 이유였음 

<if test=status=='P' and status=='p'> -> 'p'를 char -> int로 변환하여 비교시 status도 int로 변환되어 에러남

<if test=status=="P" and status=="p"> ->"p"로 해줘야함

 

반응형
반응형

[Windows 11] 요일이 dddd

[Windows 7] M/d/yyyy -> M/d/yyyy'('ddd')'

https://www.youtube.com/shorts/VKAWrKVKC9s

 

반응형
반응형

 

반응형
반응형
반응형
반응형
반응형
반응형

local/sessionStorage: web storage object

localStorage.setItem(key,value)해주면, React.useEffect(()=>{...},localStorage.getItem(key))로 수정감지 가능함 

useEffect(setup, dependencies?)에서 dependencies?는 state, props뿐 아니라 관련된 모든 variables와 functions 사용가능 (출처:https://react.dev/reference/react/useEffect)

local storage는 domain,protocol,port로 정의되는 origin에 묶여있음

origin(domain/port/protocol)만 같다면 url 경로는 달라도 동일한 결과, localStorage는 동일한 오리진을 가진 모든 창에서 공유되기 때문입니다. 따라서 한 창에 데이터를 설정하면 다른 창에서 변동 사항을 볼 수 있습니다.

sessionStorage는 origin + 동일 tab내에서만 유효

storage 이벤트

localStorage나 sessionStorage의 데이터가 갱신될 때, storage 이벤트가 실행됩니다. storage 이벤트는 다음과 같은 프로퍼티를 지원합니다.

  • key – 변경된 데이터의 키(.clear()를 호출했다면 null)
  • oldValue – 이전 값(키가 새롭게 추가되었다면 null)
  • newValue – 새로운 값(키가 삭제되었다면 null)
  • url – 갱신이 일어난 문서의 url
  • storageArea – 갱신이 일어난 localStorage나 sessionStorage 객체

여기서 중요한 점은 storage 이벤트가 이벤트를 발생시킨 스토리지를 제외하고 스토리지에서 접근 가능한 window 객체 전부에서 일어난다는 사실입니다.

좀 더 구체적으로 설명을 이어나가 보겠습니다.

두 개의 창에 같은 사이트를 띄워놨다고 가정해봅시다. 창은 다르지만 localStorage는 서로 공유됩니다.

실제 본 페이지를 두 개의 브라우저 창에 띄워 봅시다.

두 창에서 모두 storage 이벤트를 수신하고 있기 때문에 한 창에서 아래 예시를 실행해 데이터를 갱신하면 다른 창에 해당 사항이 반영되는 것을 확인할 수 있습니다.

 
 
// 문서는 다르지만, 갱신은 같은 스토리지에 반영됩니다.
window.onstorage = event => { // window.addEventListener('storage', () => {와 같습니다.
  if (event.key != 'now') return;
  alert(event.key + ':' + event.newValue + " at " + event.url);
};

localStorage.setItem('now', Date.now());

storage 이벤트의 또 다른 중요한 특징은 event.url이 있어 데이터가 갱신된 문서의 URL을 알 수 있다는 점입니다.

또한 event.storageArea에는 스토리지 객체가 포함되어 있는데, storage 이벤트는 sessionStorage나 localStorage가 변경될 때 모두 발생하기 때문에 event.storageArea는 스토리지 종류에 상관없이 실제 수정이 일어난 것을 참조한다는 것 역시 중요한 특징입니다. 변경이 일어났을 때 우리는 event.storageArea에 무언가를 설정해 '응답’이 가능하도록 할 수 있죠.

출처: https://ko.javascript.info/localstorage

반응형
반응형
net stop factoryOne-apiGateway
net stop factoryOne-platform-server

copy /y "C:\DEV_FactoryOne_0.0.1\FactoryOne_API Service Install\application.yml.apiGateway.dev" "C:\DEV_FactoryOne_0.0.1\FactoryOne_API Service Install\ApiServer_apiGateway\application.yml"
copy /y "C:\DEV_FactoryOne_0.0.1\FactoryOne_API Service Install\application.yml.platform.dev" "C:\DEV_FactoryOne_0.0.1\FactoryOne_API Service InstallApiServer_platform\application.yml"

net start factoryOne-apiGateway
net start factoryOne-platform-server
반응형
반응형

기본: element.focus(), <input autofocus/> autoFocus아님

react 간단버전: <input ref = { input =>  input && input.focus() } />

react

import React, { useEffect, useRef } from 'react';

export default function MyComponent(): JSX.Element {
    const inputReference = useRef<HTMLInputElement>(null);

    useEffect(() => {
        inputReference.current?.focus();
    }, []);

    return (
        <div>
            <input ref={inputReference} />
        </div>
    );
}

react useFocus hook 버전

const FocusDemo = () => {
    const [inputRef, setInputFocus] = useFocus()

    return (
        <> 
            <button onClick={setInputFocus} >
               Focus
            </button>
            <input ref={inputRef} />
        </>
    )
}

const useFocus = () => {
    const htmlElRef = useRef(null)
    const setFocus = () => {htmlElRef.current &&  htmlElRef.current.focus()}

    return [ htmlElRef, setFocus ] 
}

 

<input ref={input => input && input.focus()}/>

반응형
반응형

select unnest(array[1,2,3]);

unnest

1

2

3

반응형
반응형

STRING_TO_ARRAY(str text, delimiter text [, null_str text])

SELECT STRING_TO_ARRAY('A|B|C|D', '|') ;

--Results
{A,B,C,D}
SELECT STRING_TO_ARRAY('A|B|C|D', '|','B')

--Results
{A,,C,D}
반응형
반응형
SELECT 
  MS.SCHEDULE_ID, 
  SPC."CROP_ID" AS CROP_ID, 
  SPC."CROP_PRODUCT_ID" AS CROP_PRODUCT_ID, 
  SPC."FLOW_ID" AS FLOW_ID, 
  SPC."CROP_NM" AS CROP_NM, 
  SPC."CROP_PRODUCT_NM" AS CROP_PRODUCT_NM, 
  SPC."FLOW_NM" AS FLOW_NM 
FROM 
  MDM_SCHEDULE MS, 
  jsonb_to_recordset(MS.CROP_PRODUCT_FLOW :: jsonb) as SPC(
    "CROP_ID" text, "CROP_PRODUCT_ID" text, 
    "FLOW_ID" text, "CROP_NM" text, "CROP_PRODUCT_NM" text, 
    "FLOW_NM" text
  ) 
WHERE 
  MS.USE_YN = 'Y' 
  AND MS.DEL_YN = 'N'

 

 

반응형
반응형
		<if test="cond_alarm_type_cd_list != null and cond_alarm_type_cd_list != ''">
			and C.alarm_type_cd in
			<foreach collection="cond_alarm_type_cd_list" item="item" index="index" open="(" separator="," close=")">
				#{item}
			</foreach>
		</if>

-> cond_alarm_type_cd_list =[]이면 아래와 같이 잘못된 query생성됨

        SELECT 
          FPS.PLT_SCHEDULE_ID AS "PLT_SCHEDULE_ID", 
          FPS.PLT_SCHEDULE_NM AS "PLT_SCHEDULE_NM", 
          FPS.PLT_CD AS "PLT_CD", 
          FPS.ROOM_ID AS "ROOM_ID", 
          FPS.DSC AS "DSC", 
          CASE WHEN FPS.ALL_DAY_YN = 'Y' THEN true WHEN FPS.ALL_DAY_YN = 'N' THEN false ELSE NULL END AS "ALL_DAY_YN", 
          FPS.START_DT AS "START_DT", 
          CASE WHEN FPS.ALL_DAY_YN = 'Y' THEN '종일' WHEN FPS.ALL_DAY_YN = 'N' THEN TO_CHAR(FPS.START_DT, 'HH24:mi') ELSE NULL END AS "START_TIME", 
          FPS.END_DT AS "END_DT", 
          FPS.REMARK AS "REMARK" 
        FROM 
          FARM_PLT_SCHEDULE FPS 
        WHERE 
          FPS.USE_YN = 'Y' 
          AND FPS.PLT_CD IN 
          AND FPS.START_DT BETWEEN ? :: timestamp 
          AND ? :: timestamp + interval '1 day'

 

<if test="apiKeys.size() > 0">
    <choose>
        <when test="ids==null || ids.isEmpty()">
            1 = 0 <!-- a test returning false, to adapt depending on you DB vendor -->
        </when>
        <otherwise>
            id IN <foreach item="id" collection="ids" open="(" separator="," close=")">#{id}</foreach>
        </otherwise>
    </choose>

참고: https://stackoverflow.com/questions/42995592/how-can-i-skip-query-if-where-in-clause-is-empty-in-mybatis-3

반응형

+ Recent posts