본문 바로가기

Spring22

[Spring] Server-Sent Events로 알람 서비스 개선하기 들어가기 전에 F-lab 프로젝트가 끝나고 비슷한 기술 스택을 사용하는 프로젝트 강의를 보면서 어떤 걸 더 고민하고 개선할 수 있을지 시야를 넓히려고 하고 있다. 마침 간단한 SNS 서비스를 만들면서 대용량 프래픽을 고려했을 때 어떤 점들을 개선시킬 수 있는지를 담은 강의가 있었는데 비슷한 알람 기능이 있었다. 우리도 알람 조회 API를 통해 알람을 확인하는 기능까지는 개발했다보니 그 이후에 할 수 있는 고민을 알게 되고 또 직접 구현해 보는 게 굉장히 흥미로웠다. 기본적인 기능은 게시물에 댓글을 달거나 좋아요를 클릭하는 등의 특정 이벤트가 발생했을 때 그 내용이 수신자에게 알람 데이터로 저장이 되고 수신자는 알람 조회 API를 통해 내게 온 알람들을 확인할 수 있는 것이다. 이때 조회 페이지를 새로고침.. 2023. 8. 28.
[Spring] 로컬 캐시를 활용한 Refresh Token 구현기 (feat. Caffeine) 들어가기 전에 쉽게 이해하는 Spring Security + JWT 로그인 구현기에 이어 이번엔 로컬 캐시 라이브러리인 Caffeine을 활용해서 Refresh Token을 구현한 경험을 남겨보고자 한다. 이 게시물은 이미 Refresh Token을 적용해야 하는 이유를 알고 계신 분들이 볼 것 같아서 Refresh Token이 필요한 이유나 프로세스는 생략하며 아래 첨부된 코드들에는 로그아웃이나 다른 기능을 위한 로직은 존재하지 않는다. 01. DB가 아닌 캐시를 선택한 이유 Refresh Token 구현에 DB를 사용할 것인가, 캐시를 사용할 것인가를 고민했다. 우선 고려해야 할 것은 Access token의 유효 시간이 굉장히 짧기 때문에 계속해서 Refresh token을 통해 재발급 받아야 한다.. 2023. 5. 28.
[Spring Security] POST 테스트 : 403 Forbidden 에러 해결 Step 0. 상황 POST method로 코칭 신청 API에 요청을 보내는 테스트 코드를 작성했는데 403 Forbidden이 반환되면서 테스트가 실패했다. @Nested @DisplayName("코칭 신청") class CreateScheduleTest { @Test @WithMockCustomUser(role = "MENTEE") @DisplayName("유효한 스케줄 id가 전달되면 메서드를 호출하고 200 OK를 반환한다.") void when_scheduleIdIsValid_expect_callMethodAndReturn200Ok() throws Exception { Long scheduleId = 1L; ResultActions response = mockMvc.perform( MockMvc.. 2023. 5. 17.
[Spring] 쉽게 이해하는 Spring Security + JWT 로그인 구현기 들어가기 전에 프로젝트에서 로그인 구현 방법으로 Spring Security와 JWT를 사용하기로 했다. 많은 방법이 있는데 그중 이 두 가지를 선택한 이유를 간단하게 적어보겠다. 01. 토큰 기반 인증 방식을 선택한 이유 면접 스터디에서 세션 기반 인증과 토큰 기반 인증 방식에 대해 공부했을 때 가장 중점적으로 봤던 게 "어떤 이유로 토큰 기반 인증 방식이 생겼는가"였다. 토큰 기반 인증 방식이 생긴 이유는 기존의 세션 기반 인증 방식은 서버 측에서 세션 저장소를 두고 정보를 저장하여 사용하기 때문에 사용하는 메모리가 계속해서 증가되고, 쿠키를 지원하지 않는 브라우저 혹은 모바일 환경에서 사용하기 어려워서 확장성의 문제가 있기 때문이다. 그래서 나는 별도의 세션 저장소를 사용하지 않고 세션 저장소를 통.. 2023. 5. 12.
[Spring] REST Docs 설정 Spring REST Docs The aim of Spring REST Docs is to help you produce accurate and readable documentation for your RESTful services. Writing high-quality documentation is difficult. One way to ease that difficulty is to use tools that are well-suited to the job. To this end, Spring REST Docs uses Asciidoctor by default. Asciidoctor processes plain text and produces HTML, styled and laid out to sui.. 2023. 4. 19.
[Spring Boot] com.mysql.cj.jdbc.driver not found Step 0. 상황 프로젝트의 대략적인 개발 환경은 다음과 같다. 팀원 분이 설정하셨던 코드를 그대로 프로젝트를 실행해 보니 아래와 같이 찾을 수 없다는 에러가 발생했다. Java 17 Spring boot 3.0.4 Mybatis 3.0.1 dependencies { implementation 'mysql:mysql-connector-java' } Step 1. 원인 Maven Repository에 MySQL Connector를 검색하면 두 가지가 나온다. 그중 MySQL Connector Java에 들어가면 다음과 같은 문구를 확인할 수 있다. 이제는 connector-j로 지원한다는 의미인 것 같다. 그리고 실제로 Spring initializer에서 MySQL 의존성을 추가하면 아래와 같이 설정해.. 2023. 3. 31.