Spring Security를 공부하다가!!도저히 정리를 안 하고는 이해가 안 될 것 같아서 블로그에 정리를 해 보려 한다. 먼저 build.gradle에 security 디펜던시 추가를 해준다.물론, JWT token을 사용할 것이기에 JWT 종속성도 추가해 준다. JWT 사용 흐름 Client 가 username, password로 로그인 성공 시서버에서 "로그인 정보" → JWT로 암호화 (Secret Key 사용)JWT를 Client 응답 Header에 전달응답 Header 에 아래 형태로 JWT 전달ex) **Authorization: Bearer** eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzcGFydGEiLCJVU0VSTkFNRSI6Iuult..
분류 전체보기
대부분의 스프링 애플리케이션은 웹!!웹 애플리케이션은 보통 여러 고객이 동시에 요청함 그런데 스프링 없이 순수한 DI 컨테이너로 객체 참조값을 비교해보면 두 참조값이 다른 것을 알 수 있음그런데 만약 고객이 요청할 때 마다 항상 새로운 객체를 생성한다면 메모리 낭비가 심할 것이다!!!! 이를 해결하기 위해 싱글톤 패턴을 사용한다객체를 하나 만든 뒤 해당 객체를 공유하는 것이다 싱글톤 패턴 - 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 싱글톤 패턴을 사용하여 싱글톤 객체를 생성하고 테스트 실행 시 둘 모두 같은 객체를 참조하는 것을 볼 수 있다..신기하닷!!!!! 생성자를 private 처리해서 숨기다니 근데 스프링 컨테이너는 모든 Bean에 이 싱글톤 패턴을 적용해준다!!..
의존관계 주입이란?- 런타임 (실행 시점)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것-> 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있음 IoC 컨테이너, DI 컨테이너- AppConfig와 같이 객체 생성과 관리를 관리, 의존관계 연결해주는 것- 의존관계 주입에 초점을 맞춤 스프링 컨테이너- ApplicationContext- 기존에는 AppConfig로 생성, 이제 스프링 컨테이너를 통해 객체 생성 + DI- @Configuration이 붙은 AppConfig를 설정 정보로 사용- @Bean이 적힌 메서드는 모두 호출하여 스프링 컨테이너에 반환된 객체 등록 -> 스프링 빈- applicationContext.getBean()를 통해..
A, B = map(int, input().split()) def solution(number): num = 1 answer = 0 i = 0 for _ in range(number): answer += num i += 1 if num == i: num += 1 i = 0 return answer print(solution(B) - solution(A-1)) 처음에 겁 먹었는데 생각보다 간단했다. 그냥 하라는대로 하기
import mathm = int(input())n = int(input())num = [True for i in range(10001)]num[0] = Falsenum[1] = Falsefor i in range(2, int(math.sqrt(n))+1): # 어차피 약수는 대칭이므로 n의 제곱근까지만 확인 if num[i] == True: j = 2 while i * j 0: print(sum(answer)) print(answer[0])else: print(-1) 에라토스테네의 체.. 뭔 이름이 이따구?원리는 다음과 같다2부터 N까지 존재하는 모든 자연수를 나열한다.나열된 숫자 중에서 가장 작은 수를 x로 지정한다.나열된 숫자 중에서 x의 배수를 모두..
import sysfrom collections import dequefront = deque(input())m = int(input())end = deque()for _ in range(m): cmd = sys.stdin.readline().strip() if cmd == "L": if len(front) > 0: end.appendleft(front.pop()) elif cmd == "D": if len(end) > 0: front.append(end.popleft()) elif cmd == "B": if len(front) > 0: front.pop() else: ..
import sys input = sys.stdin.readline n = int(input()) num = sorted(list(map(int, input().split()))) x = int(input()) a, b = 0, n-1 answer = 0 while(a 최소한으로 확인하기 위해!
s = input()alpha = [0 for _ in range(26)]for i in list(str(s)): alpha[ord(i)-97] += 1print(' '.join(map(str, alpha))) ord() -> 알파벳을 아스키 코드로 변환a = 97 💥 map 함수 활용map(function, iterable) 적용할 함수 / 적용할 값들이 인자로 들어감map 함수의 반환값은 map 객체, 그러나 join과는 함께 사용 가능(join 메서드가 반복 가능한 객체를 인자로 받기 때문)원래는 list로 묶어줘야 함