TIL

    [TIL - 20230426] Enum 타입 필드 검증을 위한 커스텀 애노테이션 생성

    💻문제점 다음과 같이 job을 입력하지 않으면 에러가 발생한다. @Valid를 사용하려고 했지만, dto에서 job은 EnumType이므로 @NotBlank와 같은 애노테이션을 작성할 수 없었다. public enum JobEnum { YOUTUBER("youtuber"), EDITOR("editor"); private String job; JobEnum(String job) { this.job = job; } } 📃시도 @NotNull 등 여러 애노테이션을 붙여봤지만, 전부 에러가 났다. 에러를 보니 애초에 @Valid 검증 단계로 넘어가기 전에, 문자열을 JSON으로 파싱하는 과정에서 오류가 발생했던 것이다. Resolved [org.springframework.http.converter.HttpMe..

    [TIL - 20230420] ControllerAdvice, ExceptionHandler 전역 예외 처리

    💻문제점서비스에서 중복 회원이나, 비밀번호 불일치와 같은 문제 상황이 발생하면 throw 를 통해 에러를 던졌다.단순히 에러를 던지기만 하면 클라이언트에서는 제대로된 응답을 받지 못하기 때문에 이 에러를 어떻게 처리할까 고민했다. 더불어 @Valid를 사용해 회원가입시 필드에 대한 유효성 검사를 할 때, 유효하지 않을 경우 발생하는 예외는 어떻게 처리할지 문제였다.📃시도다음과 같이 Comment, Post, Member에 대해 CustomException을 만들어서 각각의 에러 상황에 대해 해당 예외를 던졌다.CustomException을 만들때는 RuntimeException을 상속하도록 하여 메서드에 throws를 작성하지 않도록 했다.public class MemberException exten..

    [TIL - 20230419] JWT

    💻문제점 어제 해결했다고 생각했던 토큰의 띄어쓰기 문제의 원인은 다른 곳에 있었다. 토큰을 띄어쓰기 기준으로 split 한 결과를 확인해보니 다음과 같았다. Bearer가 두 번이 찍히는 것..! // header 토큰을 가져오기 public String resolveToken(HttpServletRequest request) { //Authorization 이라는 헤더 값(토큰)을 가져옴 String bearerToken = request.getHeader(AUTHORIZATION_HEADER); //토큰 값이 있는지, 토큰 값이 Bearer 로 시작하는지 판단 if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_PREFIX)) ..

    [TIL - 20230418] JWT

    💻문제점 회원가입을 하고 다음과 같이 로그인을 해서 토큰을 얻었다. Bearer ey어쩌구~~ 로그인을 해야 게시물 등록이 가능하기에, 헤더 부분에 토큰을 넣어줬다. 하지만 다음과 같은 에러가 떴다. 📃시도 토큰에 띄어쓰기가 있어 사용할 수 없다는 것 같은데, 아무리 봐도 띄어쓰기가 안 보였다. 한참 application.yml 에 있는 jwt.secret.key를 들여다 보며 요리조리 키를 바꾸어봤었다. key값에 replace를 줘서 띄어쓰기를 다른 문자로 바꾸려고 했지만, 내가 찾을 수 없는 띄어쓰기는 역시 코드도 찾지 못한 모양... 🔍해결 원인은 jwt.secret.key가 아니었다. 당연하다. 왜냐하면 토큰은 내가 생성한거니까. 나는 이상한 곳에서 삽질하고 있었던 것... 내가 생성한 토큰이 ..

    [TIL - 20230415]

    💻문제점 어제 PostController의 update 메서드에서 요청 메시지 바디의 객체를 가져오려고 @ReqeustBody 애노테이션을 사용했는데, 오류가 발생했었다. //게시글 수정 @PutMapping("/update/{id}") @ResponseBody public PostResponseDTO update(@PathVariable Long id, @RequestBody PostRequestDTO reqDTO) { return postService.updatePost(id, reqDTO); } 📃시도 에러 메시지를 보아하니 Content-Type이 지원이 안된다는 것 같아 @RequestBody를 지우는 선택을 했다. 해결은 됐는데 찜찜한 기분 🔍해결 알고보니 PostMan에서 바디에 요청을 x-..

    [TIL - 20230414] 블로그 과제

    💻문제점 문제점1. CreatedAt과 ModifiedAt 이 Null로 들어가는 문제 발생 문제점2. createdAt과 modifiedAt을 날짜만 나오게 하고 싶다. 📃시도 문제점2. 자동으로 저장된 날짜와 시간을 subString으로 잘라서 사용하려고 했다. 🔍해결 문제점1. 생성 날짜와 수정 날짜는 애노테이션을 사용해서 DB에 들어갈 때 자동으로 생성될텐데 하고 찾아보다가 main 메서드가 있는 곳에 @EnableJpaAuditing 애노테이션을 붙이지 않았음을 알게 되었다. 해당 애노테이션을 적용해야 createdAt, modifiedAt 처럼 DB에 저장되거나 수정될 때 자동으로 기록할 수 있다. 문제점2. 단순히 createdAt과 modifiedAt의 데이터 타입을 LocalDateTim..

    [TIL - 20230413] 세션

    💻문제점 오늘 알고리즘 시험에서 3번 문제를 풀 때 첫 번째 테스트 케이스는 잘 수행되었다. import java.util.Arrays; public class Test3 { static int[] dx = {1, -1, 0, 0, 1, 1, -1, -1}; static int[] dy = {0, 0, 1, -1, 1, -1, 1, -1}; static int SIZE; static char[][] map; static char[][] resultMap; public static void solution(int x, int y, char mine) { if (x = SIZE || y = SIZE) { return; } char now = map[x][y]; //지뢰라면..