본문 바로가기

분류 전체보기106

[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.
[Python] 프로그래머스 - 더 맵게 | heapq 동작 원리 나의 풀이 import heapq def solution(scoville, K): answer = 0 scoville.sort() # 빠뜨리지 말자 while scoville[0] 1: heapq.heappush(scoville, heapq.heappop(scoville) + heapq.heappop(scoville) * 2) answer += 1 else: answer = -1 break return answer cs 처음에는 list.sort()로 접근 하다가 효율성 케이스 실패로, heapq로 변경. 그런데 while문 타기 전 최초에 한번은 리스트 정렬을 해줘야하는데, 그걸 빠뜨려서 테스트 케이스에서 계속 몇 개가 삐꾸 났다. 실제 코테 상황에는 이런 사소한 부분이 오히려 발견하기 어려워서 당황할.. 2021. 8. 12.
[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.
[Python] 프로그래머스 - 완주하지 못한 선수 나의 풀이 def solution(participant, completion): for i in participant: for i in completion: participant.remove(i) return participant[0] cs 예전에 자바 이중루프로 풀어보았던 문제를 유사한 방식으로 파이썬으로 풀어보았다. 테스트 케이스는 아주 간단하게 통과했으나, 또 다시 정확도 검사에서 실패..! 그사이에 프로그래머스 정확도 검사 케이스가 추가되었던 걸까... 다른 사람의 풀이 def solution(participant, completion): temp = 0 dic = {} for part in participant: dic[hash(part)] = part temp += int(hash(part)).. 2021. 8. 10.
[Python] 프로그래머스 - 가장 큰 수 나의 풀이 from itertools import permutations def solution(numbers): str_list = [] int_list = list(permutations(numbers)) for num in int_list: str_list.append("".join(map(str, num))) return str(sorted(map(int, str_list), reverse=True)[0]) cs permutations를 사용해 리스트 요소들의 순열의 조합을 구한 후, 내림차순으로 정렬해 0번째 인덱스 값을 리턴하는 방법. 테스트 케이스는 모두 통과했으나, 정확성 테스트에서 시간초과로 실패! 다른 사람의 풀이 from functools import cmp_to_key def com.. 2021. 8. 9.
[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.
git 저장소에 민감 정보 올라갔을 때 조치 | 특정 커밋만 삭제 주니어라면 한번쯤은 겪을 상황이지만? 다시는 겪고 싶지 않은 상황... 바로 git에 secret key를 올려버린 것이다... 아찔! 급하게 레파지토리를 비공개로 전환하고 수습을 해야했다. 문제의 파일을 .gitignore에 추가하고 다시 push를 했으나 어림도 없지! 그대로 남아있다. 원격 저장소에는 이미 과거에 올린 문제의 파일에 대한 cash가 남아있기 때문. 재빨리 아래 명령어를 통해 cash를 날려주고, git rm -m —cached [문제의파일명] cs 다시 한번 더 push를 해주면! cash가 삭제되고 .gitignore에 파일명이 반영되어 있기 때문에 최신 커밋에는 더 이상 문제의 파일이 보이지 않게 된다. 그러나! 문제의 파일이 존재하는 과거 커밋들이 문제. 여전히 누구나 hist.. 2021. 7. 4.