개요저는 이전까지 Spring Security을 사용하여 jwt로 인증을 진행하였습니다. Json 로그인이 성공하면 accessToken과 refreshToken을 프론트에 발급해 주었으며, 서버에 접근하기 위해서는 헤더에 토큰 정보를 담아 요청하면 인증이 성공하여 Api로 원하는 동작을 수행하도록 구현하였습니다. 헤더에 토큰값을 넣어 인증하는 가장 간단하고 직관적인 방식이지만, 이번에 쿠키와 세션에 대해 공부하고 프론트와 협업해보며, 보다 안전하고 효율적인 로그인 방식을 구성해보기로 하였습니다. 이번 글은 스프링 시큐리티와 jwt를 활용한 인증 로직이 모두 구현 되어 있다는 전제 하에, 프로젝트를 진행하며 프론트와 협업시 쿠키와 세션, jwt를 어떻게 적절히 활용하면 좋을지에 대해 작성한 글입니다. 만..
분류 전체보기
문제 상황 웹 소켓을 이용한 실시간 채팅 기능을 구현하던 중, 발생한 오류입니다. 로그를 한번 살펴보면,redisSubscriber(MessageListner)를 선언하기 위해서는 webSocketConfig가 필요함 webSocketConfig에서는 stompHandler를 받아서 사용함stompHandler는 채팅방 정보를 알기위해 chatRoomService를 주입받음chatRoomService는 채팅룸의 메시지 정보를 불러오기 위해 chatMessageService를 주입받음이렇게 순환 종속성이 발생하였습니다. 우선 이것을 해결하기 위해서는 실시간 채팅 기능의 정확한 구조를 이해할 필요가 합니다. 프로젝트에서의 채팅방 요구사항은 다음과 같습니다. 1. 채팅방은 매칭이 생성될 시 하나만 생성된다.2..
출처 https://school.programmers.co.kr/learn/courses/30/lessons/72411 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 개인적으로 처음에 잘 안읽어서 그런지 좀 헷갈렸던 문제였습니다. 문제를 요약하자면, 1. 단품으로 1개씩 파는 레스토랑이 있는데, 2개 이상 묶어서 코스 요리로 만들려고 한다. 2. 단, 코스 요리는 2개 이상의 요리로 구성되어 있으며, 적어도 2명의 손님이 시켜먹은 조합이여야 한다. - 예를들어, 1번 손님은 A, C, D 조합으로 먹었고 2번 손님이 A, D 조합으로 먹었다면, (A..
이번에는 로그인을 진행하기 위한 스프링 시큐리티에 대해 알아보는 시간을 가지려고 합니다. 다른 블로그나 자료를 참고하여 공부를 해보려고 합니다. 스프링 시큐리티(SpringSecurity) 스프링 시큐리티란? API가 실행될 때 마다 사용자를 인증해야 하는데, 그 인증을 구현해놓은 것이 스프링 시큐리티입니다. 스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크입니다. 즉 인증(Authenticate, 누구인가)과 인가(Authorize, 어떤것을 할 수 있는지)를 담당하는 프레임워크입니다. 스프링 시큐리티에서는 주로 서블릿 필터(filter)와 이들로 구성된 필터체인으로의 구성된 위임 모델을 사용합니다. 그리고 보안과 관련하여 체계적으로 많은 옵..
스프링 프로젝트를 하던 중, 엔티티 매니저가 무엇인지 궁금하여 찾아보다가 알게된 영속성 컨텍스트에 대해 공부해보려고 합니다. 출처는 아래에 기재하였습니다. 영속성 컨텍스트 EntityManagerFactory& EntityManager 새로운 고객의 요청이 올때마다 엔티티 매니저 팩토리는 엔티티 매니저를 생성합니다. 엔티티 매니저는 내부적으로 데이터베이스 커넥션을 사용하여 DB를 사용합니다. EntityManagerFactory 말 그대로 엔티티 매니저를 만드는 공장입니다. 엔티티 매니저 팩토리는 생성하는 비용이 커서 한 개만 만들어 애플리케이션 전체에서 공유합니다다. 여러 스레드가 동시에 접근해도 안전합니다. EntityManager EntityManager는 영속성 컨텍스트 내에서 Entity들을 관..
이 글은 제가 작은 프로젝트를 진행하며 공부하며 정리한 글이기때문에, 코드의 질도 낮고 부정확한 부분이 많을거라고 생각합니다. 감안하고 봐주시면 감사하겠습니다. (특히 저는 제대로된 배포는 안해봤습니다) 저는 Gradle 스프링 부트 3.2.3버전을 사용중이며, JDK 17 자바를 사용하고 있습니다. 저번 포스팅까지 오라클 클라우드 인스턴스 생성 -> DB 연동 -> 버킷으로 이미지 업로드 까지 모두 마쳤습니다. 이번 포스팅에서는 마지막으로 스프링 프로젝트를 빌드하고, 오라클 서버로 옮긴 뒤 실행시키는 것 까지 다뤄보겠습니다. Oracle 인스턴스에 서버 띄우기 먼저, 저번시간에 연결했던 오라클 서버 콘솔로 접속합니다. 저는 jar파일로 빌드해서 사용할것이기 때문에, JDK를 설치해야 합니다. 우분투 패..
에러 극복기 시간 없으신 분들은 그냥 지나가셔도 되는 부분입니다. 가볍게 보시고, 혹시 이유를 아시는 분 계시면 댓글 부탁드립니다! 처음에는의존성에 jersey를 제외하고 httpClient만 주입해주었습니다. 그랬더니 java.util.NoSuchElementException: No http provider available 에러가 발생했습니다. 로그를 더 보면 옆에, jersey를 주입하라고 나와 있습니다. 아마 HttpProvier 클래스가 jersey 라이브러리에 있는 것 같았습니다. 그래서 jersey를 위에 올린 사이트에 검색해서 넣어주었습니다. implementation 'com.oracle.oci.sdk:oci-java-sdk-common-httpclient-jersey:3.37.0' 아 ..
이전 포스팅에서는, 버킷을 생성하고 의존성을 주입받는 등 연결에 필요한 설정들을 해보았습니다. 저번 포스팅을 짧게 끊은 이유는.. 왠지 이번 글이 길어질거 같아 나누었습니다. 바로 이미지 업로드 기능을 구현해보도록 하겠습니다. 이 글은 제가 작은 프로젝트를 진행하며 공부하며 정리한 글이기때문에, 코드의 질도 낮고 부정확한 부분이 많을거라고 생각합니다. 감안하고 봐주시면 감사하겠습니다. (특히 저는 제대로된 배포는 안해봤습니다) 저는 Gradle 스프링 부트 3.2.3버전을 사용중이며, JDK 17 자바를 사용하고 있습니다. 이미지 업로드 기능 구현 도메인 설계 Image 패키지 위치는 다음과 같습니다. @Entity @Getter @Builder @AllArgsConstructor @Table(name ..