분류 전체보기

    [Spring] ObjectMapper - LocalDateTime 직렬화 문제

    개인 프로젝트 과제를 진행 중에, fillter에서 인증 실패 시, response에 에러메세지를 전달하기 위해 ObjectMapper를 이용하던 중 문제가 발생했습니다. LocalDateTime 직렬화 문제 ErrorResponse 객체에 들어있는 데이터중 LocaldateTime.now()로 문제가 발생한 시간 데이터가 있습니다. 해당 response를 ObjectMapper로 직렬화를 하여 반환할 때, 다음과 같은 예외가 발생합니다. com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "c..

    2023.11.16 TIL

    오늘 한 것 내배캠 스프링 챌린지반 특강 듣기 개인 프로젝트 과제 챌린지반 특강 오늘은 Redis 가 무엇인지, 어떻게 구축하고 Spring boot 에서 연동하고 사용하는 방법에 대한 강의를 들었다. 조회 성능을 위해 꼭 필요한 캐시 저장소인 만큼, 꼭 필요한 지식이었는데 잘 가르쳐주셔서 정말 좋았다. 게다가 실제 업무에서 사용하는 레디스 컴포넌트 코드도 공유해주셨다. (매우감사...) 과제에서 Refresh Token 관리하고 로그아웃 할 때 잘 써먹어야겠다. 개인 프로젝트 도메인 설계에 이어서, 오늘은 프로젝트 환경 구성 (DB, Redis, Swagger) 설정과 Security 설정 및 인증 처리를 진행했다. Springboot3에서 Swagger 설정하는게 버전이 올라서 변경된 점이 있어 레..

    2023.11.15 TIL

    오늘 한 것 숙련 과제 프로젝트 숙련 과제 프로젝트 강의도 거의 들었겠다, 오늘부터 과제를 진행하기로 했다. To-Do List를 구현하기 위한 API + @ 로 페이지까지 구현하는 과제다. 회원 인증/인가 처리를 JWT로 하고 Security로 처리해야한다. 그외엔 기본적인 CRUD + 정렬,검색... 오늘은 우선 ERD와 UseCase 작성하고 기본 도메인 엔티티만 구현해놓았다. 내일부터 본격적으로 구현해야지.. 프로젝트 진행과정도 포스팅 해야겠다.

    2023.11.14 TIL

    오늘 한 것 스프링 강의 듣기 알고리즘 스터디 스프링 강의 오늘은 Http Client인 Rest Template과 JPA 연관관계 종류에 대해 강의를 듣고 배웠다. Rest Template을 통해 외부 API 서버와 통신해 데이터를 가져오고 자신의 서버에서 가공처리하는 과정을 배웠고 JPA의 1:1, 1:N, N:1 N:M 관계에 대해 어떻게 엔티티를 정의하고 연관관계를 맺는지 배웠다. Spring 기본 CRUD, JWT를 이용한 인증/인가처리, 외부 API 통신, JPA 를 배웠으니 이제 숙련과제를 할 때가 됐나보다. 알고리즘 스터디 오늘도 내배캠 기준 LV4 두 문제를 풀고 서로의 풀이를 공유하는 시간을 가졌다. 이번에는 그래도 두 문제 중 한 문제는 풀어서 다행이라는 생각이 들었는데, 서로 공유하..

    [Java] 쓰레드의 상태와 제어

    쓰레드 프로세스가 할당받은 자원을 이용하는 실행의 단위 쓰레드의 생성 프로세스가 작업중인 프로그램에서 실행 요청이 들어오면 쓰레드를 만들어 명령을 처리하도록 함 쓰레드의 자원 프로세스 안에는 여러 쓰레드들이 있고, 쓰레드들은 실행을 위한 프로세스 내 주소 공간이나 메모리공간(Heap)을 공유받음 추가로, 쓰레드들은 각각 명령처리를 위한 자신만의 메모리공간(Stack)도 할당 받음 쓰레드 상태 스레드 객체를 생성하고 start() 메소드를 호출하면 바로 실행되는 것이 아니라 실행 대기 상태가 된다. 실행 대기 상태란 언제든지 실행할 준비가 되어 있는 상태를 의미한다. 실행 상태의 스레드는 run() 메소드를 모두 실행하기 전에 다시 실행 대기 상태로 돌아갈 수 있고, 실행 대기 상태에 있는 다른 스레드가 ..

    [Spring] 스프링(Spring)이란?

    Spring이란? 엔터프라이즈용 Java 애플리케이션을 간편하게 만들게 해주는 도구 스프링이 등장하기 이전에는 비즈니스 로직을 구현하기 위해 기술 자체에 대한 공부를 추가적으로 해야만 했습니다. 비즈니스 로직을 구현하는 기술 자체가 복잡하고 어려웠기 때문입니다. 스프링은 이전 기술에 비해 사용 방법이 상대적으로 덜 복잡합니다. 따라서, 개발 초기에 기본적인 설정과 적용시킬 기술들만 잘 선택을 해준다면, 기술보다는 애플리케이션의 로직 자체에 더 집중하여 비즈니스 로직을 구현할 수 있습니다. 오픈소스 스프링은 모든 사용자에게 무료로 열려 있습니다. 즉, 어떤 개인 및 기업도 스프링을 사용하여 웹 애플리케이션을 개발을 할 수 있으며, 필요하다면 스프링의 코드를 일부 수정하여 사용하여도 무관합니다. 이처럼 오픈..

    [Nginx] SSE 통신할 때, Connection Timeout..

    문제상황 로컬에서 잘 되던 연결이 서버에 배포를 하고 테스트를 하니 클라이언트가 받지를 못하고 Connection Timout이 나는 것이다.. 딱히 특별한 에러로그도 없어서 왜이러나 하고 이것 저것 찾아본 결과 Nginx 쪽에서 문제가 있던 것을 알 수 있었다. 원인 현재 클라이언트와 WAS 사이에는 프록시 서버로 Nginx 웹 서버를 사용하고있는데, Nginx는 기본적으로 Upstream으로 요청을 보낼 때, HTTP/1.0 버전을 사용한다. 연결을 위해서는 Http버전은 1.1 , Connectoin:keep-alive로 통신을 해야한다. 클라이언트에서 백엔드서버로 요청을 할 때에는 맞게 보내지만 Nginx에서 백엔드 WAS 프록시하여 요청을 전달할 때는 HTTP/1.0 버전을 사용하고 Connec..

    [Spring] 유효성 검증 - Validation

    Validation이란? 로직을 처리하기 위해 필요한 데이터 ( 사용자 또는 다른 서버의 request 등 )의 값이 유효한지, 잘못된 데이터인지 확인하는 단계를 뜻합니다. 예를들어 이메일 데이터를 받을 때, 이메일의 형식이 일치하지 않는다면, 처리를 하지 못하기에 사전에 확인하고 검증합니다. Bean Validation Spring에서는 validation을 위해 Bean Validation 라이브러리를 제공합니다. Bean Validation은 유효성 검증에 대한 여러 에노테이션을 제공합니다. @NotNull null 불가 @NotEmpty null, “” 불가 @NotBlank null, “”. “ “ 불가 @Size 문자 길이 측정 @Max 최대값 @Min 최소값 @Positive 양수 @Nega..