본문 바로가기
  • 시 쓰는 개발자

전체 글176

spring security - 인증 방식에 따른 차이 (세션과 토큰방식) 세션 기반 자격 증명 방식이란, 인증된 사용자의 정보를 서버 측에서 세션 형태로 하여 세션 저장소에 저장하는 방식을 말함. 클라이언트의 request에는 서버로 전달되는 쿠키가 있는데 이 쿠키 안에 세션 id가 담겨서 전달됨. 그리고 이걸 서버에서 관리함. 즉, 인증된 사용자의 정보를 서버의 세션 저장소에서 관리하고 클라이언트에겐 해당 사용자를 구분할 세션 Id만 전달 서버에서 세션id 생성(고유한 값) → 클라 쿠키에 저장돼서 request시 쿠키랑 같이 서버로 전송해서 인증된 사용자임을 증명 // 세션 데이터가 많아질수록 서버 부담 증가 세션 id만 클라에서 사용 → 적은 네트워크 트래픽 서버에서 세션 정보 관리 → 보안성 유리 서버 여러개로 확장시 불리 → 세션 불일치 문제 발생 가능 (확장한 서버.. 2023. 1. 3.
12/27 스터디 1300 K번째 수 n=10 , k=20이면 숫자가 크다보니 규칙을 찾아야함 A 행렬 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 ... 10 20 30 40 50 60 70 80 90 100 B[20] 이중에서 20보다 작거나 같은 값이 몇개인지 세면 됨 => 각 행이 구구단임 ? k=20 i*j가 20 안에 몇개인지 세면 되는데 1행은 10개 10까지 2행은 10개 20까지 3행은 6개 18까지 4행은 5개 20까지 5행은 4개 20까지 6행은 3개 18까지 7행은 2개 14까지 8행은 2개 16까지 9행은 2개 18까지 10행은 2개 20까지 k // i => 2.. 2022. 12. 28.
12/23 스터디 어떤 블로그에서 봤는데, 이분탐색은 숫자 맞추는 up down 게임이라고 하더라... 좋은 예시인 것 같다.. 2110 공유기 설치 ㅇ 9663 N-Queen python으로는 실패하고... 동일 코드로 pypy로는 통과하는 문제인데 간혹 이런 문제가 나오는데 로직이 문제인지 잘 모르겠다... pypy로만 통과되는 문제면 그만큼 시간관리가 엄격하다는 건데, 그래서 그런지 검색해서 나오는 코드마다 모두 일차원 배열로 풀었다. 이차원 배열은 시간이 더 많이 걸려서 그런가보다 ... 일차원 배열 board를 선언했는데 이것의 의미는 board[ i ] = j 일 때 [ i, j ]에 퀸을 놓겠다는 의미이다. 이것을 잘 기억해두어야 한다. 우리가 문제를 풀 때 사용하는 함수는 2가지이다. 퀸을 놓을 수 있는지 .. 2022. 12. 23.
12/20 스터디 15651 N과 M(3) N과 M(1) 문제와 매우 비슷한 문제였다. 애당초 N과 M 문제들 자체가 순열 조합 문제라서, 순열 조합 중복순열 중복조합으로 이해하고 접근하면 바로 풀 수 있었다. 이 문제는 순열과 똑같은 맥락에, 중복을 추가한 문제였기 때문에 순열 코드에서 중복을 제거하는 부분만 없애주면 중복을 추가해줄 수 있게 되고 그러면 중복순열을 구현할 수 있었다. 따라서 for문 안에 if i not in s부분을 지워주면 된다. 나머지 코드는 15649 N과 M(1) 문제의 코드와 동일하다. n, m = list(map(int, input().split())) s = [] def dfs(): if len(s) == m: print(' '.join(map(str, s))) return for i i.. 2022. 12. 20.
12/14 스터디 15650 N과 M(2) 앞서 풀었던 15649 문제 N과 M(1)이 순열 문제였다면, 이 문제는 조합 문제였다. 마찬가지로 combination을 쓰면 금방 풀 수 있지만 이것도 백트래킹을 활용해 풀어야한다. 순열과 조합 자체가 유사한데 한가지 다른 점은 순열은 [1,2]와 [2,1]이 다르지만 조합은 서로 같다. 이 점을 이용해서 15649 코드를 조금 변형하면 된다. n, m = list(map(int, input().split())) s = [] def dfs(start): if len(s) == m: print(' '.join(map(str, s))) return for i in range(start, n + 1): if i not in s: s.append(i) dfs(i + 1) s.pop(.. 2022. 12. 15.
헷갈리는 문법 정리 (2) - isdigit, Counter, if-else 1. python의 sort()함수는 기본적으로 stable하다. 즉, 우선 순위가 같은 데이터에 대해서 정렬 후의 결과가 바뀌지 않는다. 2. str.isdigit() 문자열이 숫자인지 판단할 떄 isdigit() 함수를 이용하는데, 정확히는 숫자로만 이루어져있는지 확인하는 함수이다. 따라서 문자가 단 하나라도 있으면 False, 문자열의 모든 문자가 숫자로만 이루어져있으면 True를 반환한다. str.isdigit("100won") # False str.isdigit("100") # True 3. collections의 Counter함수★ Counter는 "리스트"를 값으로 주게 되면 각 원소들이 몇 번 등장했는지 세어 딕셔너리 형태로 반환한다. from collections import Counte.. 2022. 12. 12.
WelcomePage란? WelcomePage란? 예전에 웰컴페이지가 Login으로 고정돼서 localhost:8080을 아무리 쳐도 login 화면만 나왔던 경험이 있었다. 그때는 오류거나 경로를 잘못 입력해서 생긴 오류였다고 생각했는데, 다시 생각해보니 그것이 바로 WelcomePage가 설정돼서 그런 거였다. // 한마디로 localhost:8080이 특정 페이지로 고정되는 것이다. 이게 설정되어있으면 localhost:8080을 쳐도 예를 들어 항상 localhost:8080/index.html 로 고정돼서 메인화면으로만 나온다거나, 로그인화면으로 고정된다거나 등의 오류아닌 오류같은 상황이 일어날 수 있다. 아래 사진의 코드처럼 자바코드로 되어있을 수도 있고, html로 path를 고정시켜놓는 경우도 있는 것 같은데 ht.. 2022. 12. 11.
쿠키와 캐시 쿠키 쿠키는 클라이언트(웹 브라우저)에 저장되는 작은 데이터 파일입니다. 웹사이트에서 로그인 정보, 사용자 환경 설정, 장바구니 등을 저장하고 다음에 같은 웹사이트를 방문할 때 사용됩니다. 이를 통해 사용자는 로그인 정보를 입력하지 않고도 다시 해당 웹사이트를 방문할 수 있습니다. 또한 쿠키는 사용자의 브라우저에서 수신된 웹 페이지에서 쿠키를 읽을 수 있습니다. 캐시 반면에 캐시는 브라우저에 의해 자동으로 생성되는 저장소이며, 최근에 방문한 웹 페이지의 일부분을 저장합니다. 이를 통해 사용자가 이전에 방문한 페이지를 더 빠르게 로드할 수 있습니다. 캐시는 브라우저에서 수신한 웹 페이지의 일부 또는 전체를 저장하고 다음에 같은 웹 페이지를 방문할 때 사용됩니다. 이는 빠른 로딩과 인터넷 대역폭을 절약할 수.. 2022. 12. 9.
12/7 스터디 1920 수 찾기 전형적인 binary search 문제였고, 이분탐색을 위해 먼저 정렬을 해주었다. 정렬 후 각 숫자들에 대해 모두 binary search 알고리즘을 적용해주었다. 이때, 한가지 다른 점은 flag를 각 숫자마다 0으로 설정해놓고 숫자를 찾으면 flag = 1, 없으면 그대로 0으로 설정을 해서 마지막에 flag 값에 따라 숫자 유무를 검사해서 1 혹은 0을 출력해주는 형식으로 진행해주었다. binary search에 대해 간단히 설명하면, 반씩 쪼개서 탐색을 하는 알고리즘인데 탈출 조건은 start와 end가 서로 엇갈리는 순간이다. 즉, start 2022. 12. 9.