본문 바로가기

전체 글1104

스프링부트 3.0이상 Spring Security 기본 세팅 (스프링 시큐리티) 목차 [수정 사항] 2023-03-29 : 커스텀 어노테이션 적용하는 부분에서 소스코드에 잘못 들어간 코드가 있어서 삭제 2024-01-12 : SpringSecurityConfig 클래스의 코드에 어노테이션 빠져 있던 부분 추가 1. 시작하기 전에 1.1 설정 이해 보다는 당장 시큐리티 설정 복붙이 필요한 분들에게 이하 글에서는 import 를 제외하고 작성했고, 코드들이 글에 작성되어 있다보니 완전 초보라면 이해하기 힘들 것 같습니다. 또는 당장 급하게 복붙할 스프링 시큐리티 기본 세팅이 된 프로젝트를 찾는 경우도 있을겁니다. 그러니 우선 예시 프로젝트를 첨부합니다. 이 글은 이하의 예시 프로젝트를 만들기 위해 세팅하는 과정을 다룹니다. - 프로젝트 (스프링부트 3.0.2 기준) : github (m.. 2023. 2. 10.
[Koistudy] 1396 - 눈 내리는 밤 (L) (C++ cpp) 문제 : koistudy-1396 풀이 현재 n개의 영역의 눈 높이를 arr[i] 로 나타낸다고 해보자. arr[x]는 x 영역의 눈 높이이다. 그리고 F[i] = arr[i] - arr[i-1] 이라고 정의해보자. 그렇다면 arr에 대한 [A, B] 구간을 W만큼 업데이트하는건 F[]로 따졌을 때 다음과 같다. F[A] += W F[B+1] -= W 왜냐하면 F[X] = F[X] - F[X-1] 이므로 F[A]와 F[B+1]을 제외하고는 변화가 없기 때문이다. 즉, 기존 range update가 point update로 변경된다. 다음으로 arr[x]의 값을 알기 위한 쿼리는 F[1] + F[2] + ... + F[X] 로 나타낼 수 있다. 왜냐하면예를들어 X가 5일 경우 F[1] + F[2] + F[.. 2023. 2. 10.
스프링 부트 2.0에서 3.0 스프링 시큐리티 마이그레이션 (변경점) 목차 스프링 부트 3.0 부터 스프링 시큐리티 6.0.0 이상의 버전이 적용되었습니다. 스프링 부트 2.7.8 까지는 deprecated는 되었더라도 기존 설정대로 대부분 사용 가능했으나, 스프링 부트 3.0 부터는 아예 삭제된 부분들이 있어서 마이그레이션 시 주의할 부분(변경점)에 대해 다룹니다. - 스프링 부트 2.7 이하 스프링 시큐리티 기본 세팅 : 링크 - 스프링 부트 3.0 이상 스프링 시큐리티 기본 세팅 : 작성중 0. 스프링 시큐리티 설정 마이그레이션 예시 완전히 동일한 세팅은 아니지만, 스프링 부트 2.6 기반으로 작성된 기본 세팅 코드와 스프링 부트 3.0 기반으로 작성된 기본 세팅 코드 입니다. 이하에 나올 변경점들이 적용되어 있는걸 코드로 볼 수 있습니다.(각각 위 2.7 이하 기본.. 2023. 2. 9.
[자바] 백준 14395 - 4연산 (java) 문제 : boj14395 필요 알고리즘 개념 너비 우선 탐색 (bfs) BFS로 풀 수 있다! ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 BFS를 모른다면 'BFS 알고리즘 (너비 우선 탐색)' 글을 참고해보자. 우선 걸러낼 수 있는걸 먼저 생각해보자. 1. s = s - s; 연산의 경우 무조건 0이 되며, 이후 *, +, / 뭘 해도 0 이외로 벗어날 수 없다. 근데 t는 1 이상으로 입력이 주어진다. 따라서 그냥 버.. 2023. 2. 7.
[파이썬] 프로그래머스 - 과일 장수 (Lv1, Python) 문제 : Programmers-과일 장수 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 필요 알고리즘 개념 정렬, 그리디 그리디로 접근해서 풀 수 있다. 그리디 접근을 위해 정렬이 필요하다. 풀이 사과의 개수가 n개라고 해보자. 그렇다면 n%m 개 만큼은 버려져야 한다. 이 때 버려져야 하는 사과는 당연히 점수가 가장 낮은 사과들이다. 또한 이 문제는 m개씩 담은 상자에서 가장 점수가 낮은 사과를 기준으로 가격이 정해진다. 이 때 m개씩 짝지었을 때 낮은 사과가 가장 높게 나오는 방법은 내림차순으로 정렬 후 m개씩 고르는 방법이다(그리디). 위의 두 가지 모두 내림차순으로 정렬 후, m개씩 짝짓고 남는건 버리는 규칙에 부합한다. .. 2023. 2. 6.
자바 날짜 관련 코딩 시 Date와 Calendar를 쓰지 마세요! 결론 : 날짜 관련 코드짤 때 Date, Calendar 쓰지 마세요! Date(jdk 1.0), Calendar(jdk 1.1) 클래스의 문제점 - 불변 객체가 아님. setter가 존재하므로 Calendar나 Date 객체가 여러 객체에서 공유되면 한 곳에서 바꾼 값이 다른 곳에 영향을 미칠 수 있음. - int 상수 필드의 남용. CalendarSECOND 같은 상수 필드때문에, 여기에 Calendar.JUNE 같은 엉뚱한게 들어가도 컴파일 시점에 확인할 방법이 없음. - 헷갈리는 월 지정. Date 클래스에서 1월을 0부터 표현하며, Calendar에서도 마찬가지. 따라서 1582년 10월 4일은 다음과 같이 작성해야 하며 당연히 휴먼에러가 많이 나옴. calendar.set(1582, 9, 4).. 2023. 2. 6.
[자바] 백준 11967 - 불켜기 (java) 문제 : boj11967 필요 알고리즘 개념 BFS, DFS 등의 그래프 탐색 알고리즘 그래프 탐색을 통해 풀 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 BFS를 모른다면 'BFS 알고리즘 (너비 우선 탐색)' 글을 참고하자. 로직을 정확히 세워서 그래프 탐색을 진행하면 풀 수 있다. 글로 설명하면 아래와 같다. 우선 각 방의 상태를 다음과 같이 설정하였다. - 미방문 : 0 - 불 켜져있음 : 1 - 이.. 2023. 2. 5.
[자바] 백준 23746 - 문자열 압축 해제 (java) 문제 : boj23746 필요 알고리즘 개념 문자열, 구현 문자열을 다루는 방법을 알아야한다. 로직 자체는 문제에 제시된 그대로 구현만 할 수 있으면 풀 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 1. N개의 문자열을 입력받아 저장해둔다. 2. 압축된 문자열을 입력받는다. 3. '1'에서 입력받아둔 문자열을 순회하면서 ('1'에서 입력받을 때 미리 해둬도 된다) ___3.1 'to from' 으로 나눈다. 예를.. 2023. 2. 3.
[자바] 프로그래머스 - 스킬트리 (Lv2, Java) 문제 : Programmers-스킬트리 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 필요 알고리즘 개념 구현, 문자열 문자열을 활용해 문제에서 제시된대로 구현하는 문제이다. 풀이 1 - 쉽게 생각해볼만한 방법! 우선 가장 쉽게 생각해볼 수 있는 방법은, skill_trees[]의 각 문자열에서 skill에 들어있는 문자열을 제외한 나머지를 모두 제거하는 방식이다. 예를들어 '입출력 예'의 경우 다음과 같이 변환한다. (skill = CBD) "BACDE" -> "BCD" "CBADF" -> "CBD" "AECB" -> "CB" "BDA" -> "BD" 그렇게되면 skill이라는 문자열에서 앞에서부터 변환한 문자열이 나온다면 가능.. 2023. 2. 3.
[자바] 백준 9205 - 맥주 마시면서 걸어가기 (java) 문제 : boj9205 필요 알고리즘 개념 너비 우선 탐색 (bfs), 깊이 우선 탐색(dfs), 분리 집합(disjoint set) 중 하나 데이터를 원하는 형태로 바꾸는 사전작업이 좀 필요하다. 그것만 하면 그냥 가중치가 동일한 정점과 간선이 주어질 때 특정 지점부터 특정 지점까지 도달 가능하는지만 판단하면 되므로, bfs나 dfs나 분리집합이나 아무거나 써서 찾아주면 된다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이.. 2023. 2. 2.