일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- spring security
- spring cloud
- JVM
- 웹어플리케이션 서버
- sql 기술면접
- 백준 16719
- 프로그래머스
- 프로래머스
- 파이썬
- Coroutine
- Kotlin
- 백준 17779
- 백준 17626
- re.split
- 백준
- Spring Boot
- 백준 파이썬
- 백준 16235
- 백준 15685
- JPA
- spring oauth
- Spring
- java 기술면접
- MSA
- with recursive
- MySQL
- springboot
- 백준 19238
- 백준 16236
- java
- Today
- Total
목록전체 글 (287)
시작이 반

OAuth : Open Auth 인증 처리를 대신해준다. developers.kakao.com/docs/latest/ko/kakaologin/rest-api Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 기존 로그인 방식 OAuth 로그인 방식 ( 카카오 ) 서버는 Code를 정상적으로 받았으면 인증이 정상적으로 됐다는 것을 알게 된다. -> 인증 처리 Access Token을 받는 순간 권한을 부여 받는다. 카카오 자원서버에 있는 정보에 접근할 수 있다. -> 권한 부여 Resource owner: 로그인 하려는 사람 Client : 자신 서..
삭제 수정 #authentication.principal 로 접근 가능
Controller에서 세션 찾는법 @GetMapping("/auth/joinForm") public String joinForm(@AuthenticationPrincipal PrincipalDetail principalDetail){ if(Optional.ofNullable(principalDetail).isPresent()){ return "redirect:/"; }else{ return "user/joinForm"; } } @AuthenticationPrincipal 어노테이션으로 찾을수 있다.

Spring Security란? Spring Security는 Spring기반의 어플리케이션의 보안(인증과 권한(을 담당하는 프레임워크이다. Spring Security는 Filter기반으로 동작한다. Filter는 Dispatcher Servlet으로 가기전에 적용되므로 가장 먼저 URL의 요청을 받지만, Interceptor는 Dispatcher와 Controller사이에 위치한다. 인증(Authentication): 해당 사용자가 본인이 맞는지를 확인하는 절차 인가(Authorization): 인증된 사용자가 요청한 자원에 접근 가능한지를 결정하는 절차 Principal(접근 주체): 보호받는 Resource에 접근하는 대상 Credential(비밀번호): Resource에 접근하는 대상의 비밀번호..
XSS : Cross Site Scripting 게시판이나 웹 메일 등에 자바 스크립트와 같은 스크립트 코드를 삽입하여 공격하는 기법 ex) 막는 방법은 간단히 '

dp1 리스트 A의 i : 0 ~ n-1 에서의 증가하는 수열의 값을 구한다. dp2 리스트 A의 i : n-1 ~ 0 에서의 증가하는 수열의 값을 구한다. ex) dp3 dp3[0] = dp2[0] dp3[n-1] = dp1[n-1] 리스트 A의 i :1 ~ n-2 에서 1. 리스트 A의 j : 1 ~ i 부분에서 a[i] 보다 작은 값중에서 최대값 dp1[j] 을 찾는다. 2. 리스트 A의 j : i ~ n-2 부분에서 a[i] 보다 작은 값중에서 최대값 dp2[j] 을 찾는다. dp3[i] = 1번과 2번을 더한후 1을 더해준다. n = int(input()) a = list(map(int, input().split())) reverse_a = list(reversed(a)) inc_dp = [0]..

현재 값(A[i]에서 이전 값들(A[0] ~ A[i-1])을 보면서 현재값보다 작으면서 dp(이전에 구한값)값이 가장 큰 값을 찾는다. n = int(input()) a = list(map(int, input().split())) dp = [0] * n def sequence(): dp[0] = a[0] for i in range(1, n): max_value = 0 for j in range(i): if a[i] > a[j]: if abs(a[i] - a[j]) != 0: max_value = max(max_value, dp[j]) max_index = dp.index(max_value) dp[i] = dp[max_index] + a[i] sequence() print(max(dp))

*연속으로 놓여 있는 3잔을 모두 마실 수는 없다. 처음에는 계단오르기와 같은 방식으로 풀었지만 계단오르기는 1칸 뛰어서 올라갈수 있는데 이문제는 몇칸이든 뛰어서 시음을 할 수있다. 이는 n잔 주워졌을떄 n-1잔 뛰어서 시음을 할 수 있다. 때문에 배열을 n+1 x n 개 만들어서 풀었지만 메모리 초과가 나왔다. 메모리 제한이 128MB이다 입력 제한이 10000인데 10001 x 10000 개 만들어버리면 당연히 메모리 초과가 나온다. 다시 생각했을때 최대 2잔까지 건너뛰어서 마셔도 최대값을 구할수 있다고 생각했다. 6 1000 1000 1 1 1000 1000 이렇게 있을때 1, 2, 5, 6을 마시는게 최대값이다. 7 1000 1000 1 1 1 1000 1000 이렇게 있다면 1, 2, 4, 6,..