분류 전체보기 80

permitAll()로 요청한 api들이 JwtFilter를 거쳐서 가는 문제

문제 상황 S3에 이미지 업로드 테스트 과정에서 해당 요청 api는 생각해보니 현재 jwt 필터를 거치지 않아도 될 api들이 모두 jwt 필터를 거치고 있었다. 권한 확인만 하지 않고 지나갔을 뿐. 문제 원인 이유는 간단하다. permitAll()로 했기 때문이다. permitAll()은 시큐리티 필터를 무시하는게 아니고 그냥 지나쳐 가라는 뜻이였다. 이 경우 시큐리티 필터 자체를 지나가지 않도록 ignore로 처리하면 된다. 하지만 BUT 그러면 spring security 자체를 쓰지 않게 되서 문제가 된다. 해결 방안 따라서 Jwt 필터를 만난경우 필터 로직을 거지치 않도록 Jwt 필터 class에 shouldNotFilter 메서드를 작성해주면 된다.  @Value("${WHITE_LIST..

개발 2024.04.29

예외 처리시 원하는 예외 응답값이 안오는 경우

문제 상황 스프링부트 3.2.5, openjdk 21 s3 이미지 업로드 api 요청 시 컨트롤러에서 해당 요청을 받아서 S3Util의 업로드 메서드를 실행시키는 과정으로 진행된다. 또한 그 과정에서 spring security를 통해 JwtAuthenticationFilter와 JwtExceptionFilter를 만든 상황이고, 현재 s3 이미지 업로드 api는 permitAll()로 되어 있다. S3에 이미지 객체를 업로드 할때, 버킷명을 잘못 적었을 때의 예외처리를 구현했습니다. 해당 예외시 _INTERNAL_SERVER_ERROR_를 발생시켰는데, _INVALID_TOKEN_가 발생했다. S3Util upoad 코드 @Slf4j@Component@RequiredArgsConstructorpubli..

개발 2024.04.29

@ColumnDefault 동작 안함(사실 동작함. 단지 적용이 안됐을 뿐.)

문제 상황 요청 DTO를 받고 이를 통해 객체를 생성하여 save하는 과정에서 @ColumnDefault로 지정한 필드에 값이 들어가지 않는 상황이 발생했다. (요청 DTO에서는 @ColumnDefault로 지정한 필드가 없다) DB에 넣고자 하는 객체 에러 로그 문제 원인 필드가 @Column(nullable = false)으로 지정되어 있고, @ColumnDefault는 사용하지 않도록 테이블을 생성한 상태에서, ddl-auto: update 를 하고 필드에 새로 @ColumnDefault를 해주어도 실제 테이블에는 반영이 되지 않았다. 이로 인해서 @DynamicInsert 를 하여 null인 필드는 insert문에 포함하지 않도록 했고, 이는 해당 필드에 아무런 값도 지정하지 않아서 “dosen’..

개발 2024.04.15

코틀린을 사용한 스프링 프로젝트에서 자바를 사용 할 때 자바 파일을 못 찾는 오류

문제 상황 코틀린을 이용한 스프링 프로젝트에서 BalanceController 를 자바로 작성 했을때, postman으로 api 테스트 시 해당 컨트롤러 내의 url를 찾지 못했다. 오류  @RestController @RequestMapping("/account") public class BalanceController { private final Database db; public BalanceController(Database db) { this.db = db; } @GetMapping("{id}/balance") public Account balance(@PathVariable long id) { return..

개발 2024.02.24

스프링부트 프로젝트를 도커를 이용하여 배포해 보자!

도커란 어플리케이션을 패키징 할 수 있는 툴 컨테이너에 어플리케이션, 시스템 툴, 환경 설정, dependancy들을 하나로 묶어 어디에서나 쉽게 배포하고 안정적인 구동을 할 수 있도록 도와줌 Docker Object Image Docker Container를 만들기 위한 읽기 전용 템플릿 이미지는 몇 가지의 추가적인 사용자 정의와 함께 다른 이미지를 기반으로 한다. 타인이 만들어서 레지스트리에 게시한 이미지를 사용하거나, 직접 이미지를 만들 수 있다. 이미지를 빌드하기 위해서는 Dockerfile를 이용하여 이미지를 만들고 실행하는데 필요한 단계를 정의해야 한다. Dockerfile 이미지에 레이어를 만든다. Dockerfile 변경하고 이미지를 재빌드하면 변경된 레이어만 다시 빌드된다. 이는 다른 가..

개발 2023.12.29

자바 - 백준 12015 / 가장 긴 증가하는 부분 수열2

https://www.acmicpc.net/problem/12015 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net 골드2 구현 방법 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이므로 DP로 풀 경우 O(n^2)의 시간복잡도를 가지므로 런타임 에러가 발생한다. 따라서 이 문제의 경우, 이분 탐색으로 구현해야 한다. 하지만 여기서 이해가 안되는 부분이 생겼다. 예를 들어서 5 6 2 7이라는 수열이 있다고 하자. 이 경우 이분 탐색으로 구현 하면 순서는 다음과 같다. 1. 5 2. 5 6 3. 2 6 ..

알고리즘 2023.07.21

자바 - 백준 14889 / 스타트와 링크

https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 실버 2 구현 방법 처음에 보고 재귀로 풀어야 겠다는 생각이 들어서 바로 풀었지만 시간 초과가 났다. 생각해보니 문제는 조합을 의도한거였는데 순열로 풀어서 시간 초과가 난거였다. 구현 자체는 간단하다. 1. n명의 사람들 중 반을 조합으로 선택한다. 2. 조합으로 선택된 사람들의 능력치를 구한다 3. 차이값을 계산하여 최소값인 경우 저장한다. 코드 import java.io.BufferedReader; import j..

알고리즘 2023.07.17

자바 - 백준 17144 / 미세먼지 안녕!

https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 골드 4 구현 방법 구현 문제라서 문제부터 간단하게 요약했다. plate -> r * c 공기청정기 = 1번열(c) 설치, 두행(r) 차지한다 미세먼지 양 = A(r, c) a. 미세먼지 모든칸 동시에 확산, 네방향으로 인접한 방향에 공기청정기 있거나 칸없으면 확산 x 확산 양 : a(r,c) / 5 소수점 버리기 (r,c)에 남은 양 : a(r, c) - a(r,c)/5 * (확산 방향 개수)..

알고리즘 2023.07.04

자바 - 백준 16235 / 나무 재테크

https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 골드3 구현 방법 구현 문제라서 일단 문제의 조건을 간단하게 정리 했다. 1. n * n = 땅 크기 2. 처음 모든 칸 양분 5 3. m = 나무 개수 4. 봄 -> 자신의 나이만큼 양분 먹음 -> 나이 +1 5. 한칸에 여러개 나무 가능 6. 나이 어린 나무부터 양분 먹음, 양분 부족하면 바로 죽음 7. 여름 -> 죽은 나무 양분으로 변함, 나무 나이 // 2 8. 가을 -> ..

알고리즘 2023.06.30

자바 - 프로그래머스 / 전화번호 목록

https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr lv2 구현 방법 조건 - phone_book의 길이는 1 이상 1,000,000 이하입니다. - 각 전화번호의 길이는 1 이상 20 이하입니다. - 같은 전화번호가 중복해서 들어있지 않습니다. 효율성 테스트 실패 방법 1. phone_book을 문자열 길이 오름차순으로 정렬한다. 시간복잡도 - 평균 : O(nlog(n)) / 최악 : O(n^2) 2. phone_book 문자열 하나와 그 외 p..

알고리즘 2023.05.28