본문 바로가기

분류 전체보기

(44)
This JSX tag's 'children' prop expects a single child of type 'ReactNode', but multiple children were provided. 아래 코드와 같이 서버에서 전달된 데이터에 따라서 다른 html을 변수에 넣고 출력하려는데 에러발생 . . . const projectList = (list: any) => { if(resCode == '0000') { const encData = list.map((data:any) => { return JSON.parse(data.encData) }) return( {encData.map((pro:any) => { return( {pro[0].title} ) })} ) } else { return( 프로젝트 생성 ) } } return( . . . PROJECT {projectList} /* ^^^^^^^ This JSX tag's 'children' prop expects a single child ..
mybatis like 문 검색 결과가 이상해서 한참 프론트를 수정했는데 알고보니 쿼리 문제였다... MY-SQL일 경우 SELECT [] FROM [] WHERE name LIKE CONCAT('%',#{name},'%') ORACLE일 경우 SELECT [] FROM [] WHERE name LIKE %'||#{name}||'%' MS-SQL일 경우 SELECT [] FROM [] WHERE name LIKE '%' + #{name} + '%' 지금 쓰고있는 디비가 mysql인데 oracle 버전으로 써서 잘못된 결과가 나옴...오류가 뜨는것도 아니라 찾는데 한참걸렸다 참고 블로그: https://dongram.tistory.com/12 [MyBatis] 동적 쿼리 LIKE 문 삽질 주의 [MyBatis] 동적 쿼리 생성시 삽..
Plugin classpath entry points to a non-existent location: 위 오류가 뜨면서 빌드가 안될때가 있는데 build.gradle에 들어가보면 상단에 import 부분의 jetbrains가 빨갛게 돼있다. 이럴땐 인텔리제이를 업데이트해주면 해결된다.
어노테이션을 이용해 메소드 인자로 세션값 바로 받기 @LoginUser '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' - 이동욱 지음 위의 책 일부를 공부용으로 정리한 내용입니다. 컨트롤러에서 로그인한 유저의 세션값을 가져오기 위해 아래 코드를 작성해야한다. SessionUser User = (SessionUser) httpSession.getAttribute("user"); 같은 코드가 반복되는 것을 피하기 위해 어노테이션을 통해 메소드 인자로 전달받는 형태로 변경하고자 한다. @LoginUser 어노테이션 생성 config.auth 패키지에 LoginUser 생성 package com.odog.www.config.auth; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; ..
springbootTest에서 session 이용하기 세션값을 가져오는 코드가 매번 반복되기 때문에 이를 어노테이션 기반으로 개선했는데, 이로인해 테스트시 NullPointException 에러가 발생했다. @ResponseBody @PostMapping("/goals") public Long save(@RequestBody GoalsSaveRequestDto requestDto, @LoginUser SessionUser user //메소드 인자로 세션값 바로 받기) { return goalsService.save(requestDto, user.getId()); } @LoginUser 라는 어노테이션을 생성해서 session의 user값을 가져와 SessionUser 클래스에 담아 전달하는 형태인데, 테스트에선 세션값이 없으니 계속 오류가 발생했다.(자세한..
api 리스트 출력하기 1. useEffect() 로 렌더링 할 때 api 통신해서 리스트 받아온 후 setList로 state에 저장 response.data를 콘솔에 출력해보면 아래와 같이 이중배열로 오기 때문에 response.data를 배열로 state에 저장해 map()으로 뽑아 낸 뒤 그 안에 출력하고자 하는 encData를 다시 map()으로 출력해야 한다. {resCode: '0000', resMsg: '성공', encData: '[{"idx":2,"proIdx":2,"name":"테스트 api","path":"/api…0413","regTime":"170549","record":"","memIdx":0}]', dataType: ''} const [list, SetList] = useState([]); useEf..
error: update_ref failed for ref ~ error: update_ref failed for ref 'refs/heads/~~': cannot lock ref 'refs/heads/브랜치': is at aaa but expected bbb 해결방법 커맨드 창에서 git update-ref [위에 refs/heads/~~ 부분] [but expected 뒤에있는 bbb] git update-ref refs/heads/~~ bbb 위의 오류 해결 후 또다른 오류 발생 fatal: could not read log file '.git/rebase-merge/message': No such file or directory error: could not commit staged changes. 해결방법 참고로 커밋 내용이 다 날아가기때문에 변경사항을 c..
axios 팀원의 커밋을 내려받고 'npm start'를 한 순간..어라? 'axios'를 찾을 수 없다는 오류가 발생했다. axios가 뭔데? axios 란? Axios는 node.js와 브라우저를 위한 Promise 기반 HTTP 클라이언트 입니다. 그것은 동형 입니다(동일한 코드베이스로 브라우저와 node.js에서 실행할 수 있습니다). 서버 사이드에서는 네이티브 node.js의 http 모듈을 사용하고, 클라이언트(브라우저)에서는 XMLHttpRequests를 사용합니다. https://axios-http.com/kr/docs/intro 시작하기 | Axios Docs 시작하기 브라우저와 node.js에서 사용할 수 있는 Promise 기반 HTTP 클라이언트 라이브러리 Axios란? Axios는 node...
XSS(크로스 사이트 스크립팅) 웹사이트의 관리자가 아닌 사용자가 악성 스크립트를 삽입하여 다른 사용자의 정보(세션, 쿠키 등)를 탈취하거나 비정상적인 동작을 실행하는 공격 방법. Stored, Reflected, DOM-based 세가지 기법이 있다. Stored XSS 악성 스크립트가 서버에 저장되어 다른 사용자가 웹사이트에 방문하거나 글을 열람할 때 스크립트가 실행되는 기법. 게시판 같은 곳에 악성 스크립트가 포함된 글을 게시하고, 다른 사용자가 그 글을 볼 때 해당 스크립트가 실행되어 세션, 쿠키 등의 사용자 정보를 유출시키거나 공격자가 유도한 사이트로 리다이렉트 하는 등의 방식이다. Reflected XSS 서버가 외부 요청에 대한 응답으로 검색 결과나 에러 메세지 등을 전달하는 과정에서, 사용자 요청해 포함된 악성 스크립트가..
<selectkey> 이용해서 insert 된 pk 값 가져오기, LAST_INSERT_ID does not exist 오류 태그 안에 태그를 작성하고, selectkey 태그 안에 SELECT last_insert_id() 를 작성해주면 된다. 결과값은 insert 태그의 parameterType으로 들어온 VO로 전달되기 때문에 keyProperty는 pk값이 들어갈 변수 이름으로, resultType은 그 변수의 데이터 타입으로 작성하면 됨. INSERT INTO pm.apiMain ( //생략 ) VALUES ( //생략 ) SELECT last_insert_id() fun apiInsert(info: DocsInfo): Int @Transactional(rollbackFor = [Exception::class, RuntimeException::class]) fun apiInsert(info: DocsInfo): Res..