전체 95

[소마] 스프링에서 리다이렉트했는데 자꾸 로그인 페이지로 넘어갈 때

스프링에서 리다이렉트했는데 자꾸 로그인 페이지로 넘어갈 때 문제OAuth2SuccessHandler에서 프론트에 토큰  값을 전달하기 위해 redirect를 설정했더니 다시 로그인 페이지로 리다이렉트되는 현상 해결현재 OAuth2SuccessHandler 설정@RequiredArgsConstructor@Componentpublic class OAuth2SuccessHandler extends SimpleUrlAuthenticationSuccessHandler { private final JwtProvider jwtProvider; @Override public void onAuthenticationSuccess( HttpServletRequest request, Htt..

프로젝트 2024.01.27

[소마] JWT 검증하기 전에 parsing 해보자

JWT 검증하기 전에 parsing 해보자 문제웹 서비스의 단일 키값으로 서명하는 방식은 하나의 키 유출로 모든 인증 프로세스가 유효하지 않게 된다.이 문제를 개선시키기 위해, 전달할 토큰을 생성하면서 유저에게 고유한 키값을 할당한다. 구현일반적으로 JWS를 검증하기 전에는 Jwts.parser() 메서드를 호출할 수 없으므로 저장한 key id 값을 추출할 수 없다.jjwt에서는 다음과 같은 상황에서 key locator를 권장하고 있다.If you need to support dynamic key lookup when encountering JWTs, you'll need to implement the Locator interface and specify an instance on the JwtPar..

프로젝트 2024.01.26

[소마] jwt 인증 프로세스에서 공통 로직을 분리하자

jwt 인증 프로세스에서 공통 로직을 분리하자 문제토큰 처리에 필요한 util 구현체 TokenProvider의 로직에서 Bearer prefix를 제거하고 validate가 반복된다. AS-IS@Slf4j@RequiredArgsConstructor@Componentpublic class JwtProvider { private final JwtService jwtService; public final static String ISSUER = "side-match"; public final static String HEADER_AUTHORIZATION = "Authorization"; public final static String TOKEN_PRIFIX = "Bearer"; p..

프로젝트 2024.01.26

[소마] 로그인 페이지 서버사이드 mvc 구현에서 endpoint 호출로 수정

로그인 페이지 서버사이드 mvc 구현에서 endpoint 호출로 수정 문제많은 블로그, 유튜브 레퍼런스들이 OAuth2 + JWT를 활용한 로그인 구현에 spring 서버 사이드(mvc) 형태로 해결하고 있다.나도 프로젝트 초반에 레퍼런스를 따라 진행했기 때문에 로그인 플로우를 웹서버에서 백엔드로 넘어오게 설정하였다. 이러한 구조의 문제는 다음과 같다.백엔드로 불필요한 요청이 넘어온다확장성이 떨어지고 다양한 클라이언트를 지원할 수 없다.프론트에서 CDN을 활용해 페이지를 렌더링할 수 없다. 해결@RestControllerpublic class LoginController { @GetMapping("/api/login") public void login(HttpServletResponse res..

프로젝트 2024.01.17

[소마] application.properties 에 노출되면 안되는 값을 암호화하자

application.yml에서 노출되면 안되는 값을 암호화하자 현재 문제 aws 접근키와 oauth의 client-secret같이 중요한 값이 application.yml에서 노출될 수 있다.설정 파일을 이미 git에서 추적하고 있기 때문에 .gitignore에 추가하더라도 여러 개발 환경에서 의도치 않게 공개될 수 있다.멘토와 코드 리뷰를 진행하기 위해서 private repo를 public으로 수정하고 싶었으나, 과거 commit에서 설정 파일에 암호가 노출되기 때문에 수정할 수 없었다. 처음부터 중요한 값들은 암호화하여 저장할 필요가 있다. 해결방안 aws parameter store 서비스를 사용jasypt 라이브러리 사용vault 툴 사용 프로젝트 배포에서 gcp의 프로모션을 사용할 수 있기 ..

프로젝트 2024.01.15

이진분류, 하노이 탑

이진분류와 하노이 탑 숫자 찾기 백준 1920 N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. -> 정말 쉬운 문제이지만, 배운 것을 적용하기 위해서 이진 탐색 관련 알고리즘으로 구현하였다. 우선 처음에 작성한 코드 def binary_search(ordered_list, target): left, right = 0, len(ordered_list) - 1 mid = (left + right) // 2 if left == right: if ordered_list[left] == target: return True else: return False elif ordered_list[mid] > target: mid -= 1..

알고리즘 2024.01.08

파이썬 정리 (2)

파이썬 정리 (2) 날짜/시간 활용하기 from datetime import datetime time = datetime.now() now.year, month, day, hour ... 등이 있다. 기억해야할 예제 1> format 함수로의 매개변수 대입 때 줄 바꿈 print("{}년 {}월 {}일 {}시".format( data.year, data.month, data.day, data.hour )) 2> if 문 다중 or문에서 줄 바꿈 if number == 1 \ or number == 3 \ or number == 5 \ or number == 7 \ or number == 9: print("홀수") 교재에서 설명되지 않아 정확한 것은 아닐 수도 있으나, 함수로 매개변수 전달은 줄 바꿈에 영..

컴퓨터과학 2024.01.07

파이썬 정리 (1)

파이썬 정리 (1) 21년도 1학기에 파이썬을 이용한 자료구조와 알고리즘을 수강하였다. 전공의 회의감 끝에, 적성에 맞는 개발자의 길에 들어서기로 했고 우연히 이어드림 스쿨 모집 광고를 봤다. 파이썬을 배운 경험과 AI, 메타버스, 블록체인 등 4차산업혁명에 자주 나오는 키워드에 관심이 많았기에 좋은 기회라고 생각하고 이를 준비하고자 공부한 것을 요약하는 포스팅을 하기로 했다. 문자열 만들기 코틀린과 다르게 ", ' 둘 다 사용하능하다 여러 줄 문자열을 이용하면(""" """) 텍스트의 줄바꿈이 문자열에 포함된다. 코틀린에서는 자동으로 앞, 뒷줄이 사라지는 함수가 추가되지만 파이썬에서 이를 구현하러면 """\ asdf zcxv\ """ 와 같이 작성하면 된다. IndexError 예외 index out ..

컴퓨터과학 2024.01.07

[소마] 블록체인 멘토링

Blockchainblock + chain강력한 변조 방지 시스템특성모든 멤버에게 공유불변, 레코드는 추가만 가능트랜잭션, 레코드를 모든 유저가 검증레코드의 암호화채굴POWProof Of Work비트코인의 채굴방식, 채굴기를 통해 작업증명을 하고 거래내역을 정리하므로 보상을 받는다.블록헤더의 Nonce값을 무작위로 생성하고 SHA256(Hash function)에 넣어 해쉬값을 만든다. 반환된 해쉬값의 앞자리의 '0'의 개수가 채굴 난이도에 부합되면(즉, 정해진 값보다 작으면) 검증이 끝나고 거래내역이 기록된다.채굴 난이도는 검증이 끝날 수 있는 예상시간과 환경에 따라 결정된다.참고 : https://www.banksalad.com/contents/쉽게-설명하는-블록체인-블록체인의-원리-채굴-해시-그리고..

컴퓨터과학 2024.01.07