본문 바로가기

Programming83

[SpringBoot] JWT(Json Web Token) 활용한 인증 처리 담당 기능에서 외부 시스템과의 연동을 위해 JWT(Json Web Token)을 활용한 인증 처리가 필요했다. JWT는 자바 뿐만 아니라 .Net, C, C++, Go, JavaScript 등 거의 대부분의 프로그램 언어를 지원하는 인터넷 표준 인증 방식이다. 토큰 구성은 크게 Header / Payload / Signature 이며, 연동 시스템에서 요구한 명세는 아래와 같았다. Header - type : 말그대로 토큰 타입이 "JWT" 라는 의미 - alg : 알고리즘은 HMAC SHA-256 을 사용하였으며, 파라미터는 밸류는 "HS256". 알고리즘 타입별 상세 정보는 아래 RFC 공식 문서를 참고하는 것이 좋다. https://www.rfc-editor.org/rfc/rfc7518#sectio.. 2023. 4. 15.
[Java] MyBatis 동적 쿼리 - trim, where, set 검색 또는 업데이트 조건을 동적으로 받는 경우 자주 사용하는 MyBatis 문법에 대해 정리해보고자 한다. 1. 태그만 사용할 때는 각각의 조건들만 동적으로 추가 가능했지만, 태그를 사용하게 되면 태그 하위의 태그 리턴 값에 따라 조건문 자체를 동적으로 active 시킬 수 있다. 하위의 태그 값을 모두 충족하지 않으면 WHERE가 생기지 않고 SQL 종결되며, 하나라도 충족하면 SQL에 WHERE가 붙는다. 하위 태그에는 AND || OR 모두 받을 수가 있다. 불필요한 AND 또는 OR 구문을 제거해준다. 1) 태그 사용하지 않을 때 HTML 삽입 미리보기할 수 없는 소스 안의 모든 조건이 충족하지 않는 경우 위의 구문은 아래과 같이 오류를 발생시킨다. HTML 삽입 미리보기할 수 없는 소스 2) 태.. 2022. 6. 27.
[MySQL] 프로그래머스 - Level 3~5 모든 문제 풀이 모음 없어진 기록 찾기 -- 1.서브쿼리 SELECT animal_id, name FROM animal_outs WHERE animal_id NOT IN (SELECT animal_id FROM animal_ins); -- 2.LEFT OUTER JOIN SELECT A.animal_id, A.name FROM animal_outs A LEFT OUTER JOIN animal_ins B ON A.animal_id = B.animal_id WHERE ins.animal_id IS NULL ORDER BY outs.animal_id; 있었는데요 없었습니다 SELECT A.animal_id, A.name FROM animal_ins A, animal_outs B WHERE A.animal_id = B.animal_.. 2021. 8. 11.
[Javascript] 브라우저 출력 | pdf 다운로드 | window.print() | html to pdf 오늘은 script로 간편하게 pdf 다운로드 및 출력을 할 수 있는 window.print() 함수를 소개해보려고 한다. pdf 보고서 출력같은 경우 서버단에서 별도의 모듈을 통해 가공해서 클라이언트에 던져주는 것이 일반적이다. 그러나 연산처리 등 별도의 가공 없이 화면 상의 정보만으로 간단하게 문서를 생성하고 싶은 경우, script 함수 단 한 줄만으로 브라우저에서 웹문서를 pdf 다운로드, 출력 할 수 있다. 브라우저에서 windows에서 ctrl + p 또는 mac에서 ⌘ + p를 눌렀을 때 뜨는 출력 모달을 띄우도록 제어해주는 것이다. 익스에서는 테스트 안 해봤는데... 뭐... 22년 6월에 종료되니까...(그날이 어서 오길🙏) 사용법은 아주 간단하다! window.onbeforeprint(.. 2021. 7. 6.
[Django] runserver 수행시 broken pipe 이슈 해결 aws ec2 ubuntu에서 django runserver를 하던 중에 만났던 broken pipe 오류. 먼저 목적지 ip로 ping을 계속 날려봤지만 연결 안 됨! 구선생님에게도 물론 질문을 했지만, 대부분 응답시간 초과 관련된 처리라서 내 경우에는 해당이 안 되었음! 그럴리 없겠지만 혹시라도 인스턴스 문제일까 싶어 인스턴스 재부팅 해봤지만 응 아니야~! 그렇게 삽질 실패하고 시무룩 퇴근 길에... broken pipe 에러는 대체 무슨 에러일까 하고 찾아보던중 pipe = socket 이라는 사실을 알게 됨. 고로 broken pipe error = "클라이언트가 연결을 시도하려 했을 때 서버의 소켓이 닫혀있어서 연결을 할 수 없어서 뜨는 에러" 왜 소켓이 닫혀있지??? 뭔가 촉이 옴. 그리고 다.. 2021. 7. 5.
[Django] ORM 구조와 원리 그리고 최적화 전략 - Pycon2020 김성렬님 발표 정리 QuerySet을 통해 알아보는 ORM의 특징 Lazy Loading : 쿼리셋을 선언할 때는 쿼리셋 자체로만 존재한다. 실제 SQL이 실행되는 시점은, 그 쿼리셋이 사용되었을 때이다. 당장 필요하지 않으면 호출을 지연하는 특성. 꼭 필요한 시점에만 필요한 만큼 SQL이 호출된다. 재사용하지 못함으로, 불필요한 쿼리가 더 호출될 수 있다. Caching : QuerySet 캐싱을 재사용할 수 있음. 모든 user를 먼저 캐싱해두고, 필요한 특정 유저 정보를 가져올 때 앞의 변수를 활용하면 추가 쿼리를 호출하지 않는다. Eager Loading(즉시로딩, N+1 Problem) : for문이 돌때마다 쿼리를 계속 돌린다. user가 100명 있으면 for문으로 userinfo를 얻기 위해서는 총 100+1.. 2021. 6. 6.
[Javascript] DOM control 관련 자주 사용하는 문법들 요소 좌표값 구하기, 특정 위치로 스크롤 이동시키기 window.scrollTo를 이용하여 특정 위치로 이동시키기 window.scrollTo를 이용하여 특정 위치로 이동시키기 홈페이지 중에 탭 메뉴를 클릭하면, 특정 위치로 스크롤바가 이동되면서 화면에 보여지는 것을 본 적 있을 것이다. scrollTo() 메서드로 이를 구현할 수 있다. window 객체의 scrollTo 메서드는 문서를 enai.tistory.com textContent textContent의 값은 식별자 노드의 내부 콘텐츠를 text/plain 으로 파싱(Parsing)한 결과. 즉, 해당 요소 내부의 원시 텍스트(raw text)이다. 파싱 속도가 빠르고 보안에 강하다. innerText 줄바꿈, 숨김 등 적용 가능. IE(IE8.. 2021. 6. 6.
[Oracle] SQL 튜닝 - 실행계획 수립 (Execution Plan) - Rule Based Optimizer : 지정한 규칙을 기반으로 판단. 요즘은 거의 사용하지 않음 - Cost Based Optimizer : 통계정보를 기반으로 최적의 실행계획을 수립함(ML 같은 방식은 아니고 계산기와 같음). CBO가 작동할 때 어떻게 실행 계획을 수립하는지 PlusTrace로 테스트 해보자. 1. 로그인 할 사용자에게 plustrace 권한을 부여한다. 2. 아래 구문을 셋팅하면 DB server가 로그를 추적하는 것을 확인할 수 있다. SET AUTOTRACE [ON | OFF | TRACE | TRACEONLY] - ON : SQL문 실행 + 실행 계획 + 통계 정보 + 수행 결과 - OFF : 어떤 결과도 보여주지 않음 - TRACE : SQL문 실행 + 실행 계획 + 통.. 2019. 12. 27.
[Oracle] SELECT문 처리 과정 1. 구문 분석 → excution plan : 내부적으로 하루에 한번 갱신되는 통계정보를 근거로 가장 cost가 낮은 루트로 실행계획을 수립함. → shared pool에 구문을 저장 (향후 재활용) 2. 실행 → Disk I/O를 최대한 줄이기 위해 sga(system global area)내의 database buffer cash에서 먼저 뒤져보고 없으면 database로 간다. 3. 인출 → 사용자(end user, application developer...)에게 실행 결과를 반환한다. 2019. 12. 27.