
전체 글
Spring Security - Method Security로 사용자 별 데이터 권한 확인하기
@PreAuthorize, @PostAuthorizePre/PostAuthorize 어노테이션을 이용해서 현재 로그인한 유저가 data를 생성한 주체(data owner)인지, ADMIN 권한을 가진 사용자인지 검사해보려고 합니다.@PreAuthorize, @PostAuthorize는 SpEL(Spring Expression Language)을 사용해서 권한 검사를 지원하는 어노테이션입니다.어노테이션을 메소드에 붙이면 메소드의 시작, 끝 시점에 주어진 조건식(SpEL)을 기반으로 권한을 검사합니다.어노테이션에 매개변수로 담는 문자열에서 SpEL을 지원하기 때문에 @Secured 보다 세밀한 권한 검사가 가능합니다. Request level 권한 인증 VS Method level 권한 인증글을 읽게 되신..
Spring boot 프로젝트에 Sentry 연결하기
Sentry는 에러 추적, 성능 모니터링 플랫폼입니다.이번에 작업한 프로젝트를 원격 서버에 배포하고 난 뒤 에러가 발생했습니다. nohup 명령어를 사용하고 있어서 nohup.out 파일에 서비스 로그가 찍히고 있었는데, 보기에 매우 불편해서 Sentry를 통해 에러를 잡고 디버깅을 해보려 사용하게 됐습니다. Sentry는 애플리케이션 런타임 시에 SDK를 사용해서 데이터를 잡습니다.Sentry가 Spring boot 프로젝트에서 데이터를 잡기 위해서 SDK를 설치해야합니다. 설치 방법이 두가지인데, 그 중에서 gradle plugin으로 추가하는 방법을 선택했습니다. 이 방법을 사용하면 Sentry 플러그인이 Spring boot 프로젝트에 적절한 의존성을 추가해준다고 합니다.plugins { id ..
[1026] 보물
문제 출처 [BOJ] 1026 - 보물 풀이 가장 작은 수를 가장 큰 수와 짝으로 곱해서 더하는 것이 가장 작은 수를 만드는 최선입니다. A만 정렬할 수 있다는게 함정입니다. 왜냐하면 사실 결과는 정렬된 결과를 출력하는게 아니라 최소 값을 만드는 것이기 때문입니다. 따라서 하나는 오름차순, 하나는 내림차순으로 정렬해서 각 인덱스의 값들을 곱해서 결과를 내면 됩니다. 코드 https://github.com/small-j/Algorithm/blob/master/BOJ/1026_%EB%B3%B4%EB%AC%BC.cpp GitHub - small-j/Algorithm Contribute to small-j/Algorithm development by creating an account on GitHub. git..
[프로그래머스] 거리두기 확인하기
문제 출처 [프로그래머스] 2021 카카오 채용연계형 인턴십 - 거리두기 확인하기 풀이 거리두기의 규칙이 정해지고 그 규칙에 지키지 않은 대기실은 0을 규칙을 잘 지킨 대기실은 1을 출력하여 5개의 대기실에 대해 배열을 반환하는 문제였습니다. 1. 대기실의 모든 영역을 돌아주면서(5 x 5 = 25) P를 찾아준다. 2. 현재 P를 기준으로 오른쪽 부분에 멘헤튼 거리를 지키지 않은 P가 존재하는지 확인한다. m값이 더 작은 P들은 검사해줄 필요가 없겠다는 생각이 들어 오른쪽 부분만 검사해주었다. 오른쪽 부분만 검사해주었다는 부분이 직관적이지 않게 들릴 수 있지만, 현재 n을 기준으로 n부터 시작해서 오른쪽 부분의 distance가 2가 넘지 않는 부분들을 검사해주었다. 3. 1번째 탐색 때는 빨간 원을 ..
[프로그래머스] 카카오프렌즈 컬러링북
문제 출처 [프로그래머스] 2017 카카오 코드 예선 - 카카오프렌즈 컬러링북 풀이 1. 주어진 영역 전체를 돌아준다. 2. 색이 칠해져있는 영역에 도달하면 bfs를 돌린다. 3. bfs를 돌면서 유효한 영역(맞닿은 칠해진 영역)만 queue에 추가해준다. 4. 전체 다 돌고나면 하나의 영역 완성 및 영역의 크기 반환하여 최대 영역 찾기 코드 GitHub - small-j/Algorithm Contribute to small-j/Algorithm development by creating an account on GitHub. github.com
[프로그래머스] 오픈채팅방
문제 출처 [프로그래머스] 2019 KAKAO BLIND RECRUITMENT - 오픈채팅방 풀이 오픈채팅방은 카카오톡 채팅방에 유저가 들어가고 나가는 기록을 배열로 받으면 그 기록을 배열로 만들어 반환해주는 문제입니다. 기존에 들어왔던 유저가 닉네임을 바꾸게 되면 이미 채팅방에 기록된 유저의 닉네임을 변경해주어야 했습니다. 기록을 모두 출력해놓고 닉네임이 변경되면 문자열에 접근해서 변경해주는 것은 복잡한 방법이라 생각하여 다른 아이디어를 떠올렸습니다. 닉네임을 Map에 저장하고 이름이 변경되는 기록에 따라 Map의 value를 바꿔주고 마지막에 기록을 한번에 배열로 만들어주었습니다. 아이디는 유일하니까 아이디로 Map에 저장해두자 출력은 가장 마지막에 record를 한번 돌아주면서 -> record를 ..
[SOPT] SOPT 29기 웹 파트 서류, 면접 합격 후기!
Start? sopt의 공식 홈페이지에 모집 글이 올라와서 기쁨의 환호성을 지르며 자기소개서 작성을 시작했습니다. 포스터의 디자인이 어찌나 이쁜지 sopt에 애정이 더욱 샘솟는 느낌이었습니다. 저는 작년 26기에서 서류 탈락을 한 과거가 있었기에.. 서류를 정말 열심히 작성해야겠다고 다짐하고 모집 글이 뜬 바로 다음 날부터 서류를 작성하기 시작했습니다. 26기에 지원했던 과거의 자기소개서를 보니 왜 떨어졌는지 알 것만 같은.. 예 그랬습니다. 과거의 자신을 회고하면서 더 좋은 자기소개서를 작성하기 위한 동기가 되지 않았나 싶습니다! 서류 문항 공통 문항 1. 협업 시 팀원이 지원자에 대해 표현한 말 중 가장 인상 깊었던 말이 있나요? 그때의 상황과 인상 깊었던 이유를 구체적으로 설명해주세요. (700자)..
[BOJ] 2344 - 거울
문제 출처 [BOJ] 2344 - 거울 풀이 주어진 상자에 구멍이 뚫려있고 구명으로 빛이 들어오는데 들어옵니다. 빛이 들어와서 상자 안의 거울에 부딪쳐 다른 구멍으로 나가게 되는데 나가는 구멍의 번호를 구하는 문제였습니다. 상자의 구조를 배열에 저장할 때 1, 1의 좌표에서부터 저장해주고 상자 주변배열에 1부터 2N+2M까지의 번호를 저장해주었습니다. 구조를 만들어준 뒤 각 번호에서 시작해서 bfs로 상자 안을 탐색해 나가는 구멍을 찾아주었습니다. 구멍을 이동하는 빛의 움직임은 대칭적입니다. 예를 들어 1번 구멍 -> 8번 구멍 이런 빛의 경로가 있다면 8번 구멍 -> 1번 구멍 으로 빛이 나아간다는 것입니다. 저는 이를 이용해서 dfs로 빛이 어떤 구멍으로 나가는지 찾아줄 때 모든 구멍을 돌지 않고 반..
[BOJ] 22351 - 수학은 체육과목 입니다 3
문제 출처 [BOJ] 22351 - 수학은 체육과목 입니다 3 풀이 주어진 문자열을 잘라서 순차적으로 증가하는지 확인해주고 해당되는 경우를 출력해주면 되는 문제였습니다. 순차적으로 증가하는 경우를 확인해 준 방법은 브루트포스였습니다. 증가하는 경우는 이렇게 나뉠 수 있습니다. 한자리 -> 한자리 ex) 12 => 1 -> 2 한자리 -> 두자리 ex) 910 => 9 -> 10 두자리 -> 두자리 ex) 1011 => 10 -> 11 두자리 -> 세자리 ex) 99100 => 99 -> 100 세자리 -> 세자리 ex) 299300 => 299 -> 300 시작하는 수가 몇 자리인지 알 수 없기 때문에 한자리, 두자리, 세자리 이렇게 늘려가보면서 모든 경우를 확인해주어야 합니다. 그리고 각 자리수는 한자..
[프로그래머스] 기능개발
문제 출처 [프로그래머스] 스택/큐 - 기능개발 풀이 작업이 어느 진도까지 진행됬는지를 보여주는 progresses배열과 각 작업속도를 알려주는 speeds배열이 주어집니다. 작업은 전체 100%까지 진행되고 가장 먼저 끝내야하는 우선순위가 높은 작업 순서로 정렬되어 제공됩니다. 우선순위가 높은 순서부터 작업을 배포해야하기 때문에 뒤의 작업들은 앞의 우선순위가 높은 작업이 완료되기 전까지는 배포가 불가능합니다. 그리고 이미 마무리되어 있던 뒤의 작업은 앞의 작업과 함께 배포될 수 있습니다. 간단히 생각해서 우선순위가 높은 작업이 끝나는 날짜를 구한 뒤, 해당 날짜보다 작업의 마무리 일이 늦은 작업전까지는 모두 함께 배포할 수 있습니다. 따라서 progresses배열의 앞에서부터 작업이 끝나는 날짜를 구해..