Spring
-
Spring STOMP로 채팅, 알림 구현 + Spring Security, JWTSpring 2024. 8. 19. 22:24
스터디카페 예약 서비스 프로젝트를 진행하면서 STOMP를 사용해 채팅과 알림 기능을 구현한 내용을 정리한 글입니다.틀린 부분이 있을 수 있으니 댓글로 의견을 주시면 감사합니다. 1. build.gradle 의존성 추가// websocketimplementation 'org.springframework.boot:spring-boot-starter-websocket'// STOMPimplementation 'org.webjars:stomp-websocket:2.3.3' 2. StompWebSocketConfig @EnableWebSocketMessageBroker@Configuration@RequiredArgsConstructorpublic class StompWebSocketConfig implements..
-
Spring OAuth2.0(Google)Spring 2024. 8. 18. 17:49
이전의 Spring Security OAuth를 이용해서 백엔드에서 처리하는 방식이 아닌, 프론트에서 Authorization Code를 전달받아직접 Access Token을 받아와 사용자 정보를 받아오는 방법입니다. https://kimtahwn.tistory.com/58 의 OAuth 흐름을 읽고 오시면 좋습니다. Spring OAuth2.0 Google 구현하기프론트에서 Authorization Server에서 Authroization Code를 받아 백엔드 서버로 전달하는 방식입니다. 1. application.ymlgoogle: client_id: ${GOOGLE_CLIENT_ID} client_secret: ${GOOGLE_CLIENT_SECRET} grant_type: authoriza..
-
Spring Security OAuth2.0(kakao)Spring 2024. 8. 17. 03:53
https://kimtahwn.tistory.com/58이전의 OAuth2.0 글을 읽고 오시면 좋습니다.Spring Security OAuth2.0을 사용하여 kakao 로그인 구현하기이 방식은 프론트엔드에서 Authorization Code를 받아올 필요없이 백엔드에서 모든 OAuth 로그인을 처리하는 방식입니다. Spring Security 에서는 쉽게 OAuth2를 사용할 수 있도록 지원해줍니다.1. 로그인 요청의 EndPoint를 /oauth2/authorization/{provider} 로 하게 되면 Spring Security에서 요청을 가로채 로그인을 시작하고 인증서버로 리디렉션을 수행하는데 사용합니다.ex) kakao login : /oauth/authorization/kakao 2. 리..
-
spring boot 3 버전 이상에서 swagger 사용하기Spring 2024. 7. 2. 00:16
build.gradle에 아래 문구를 작성하여 의존성을 추가해주면 swagger를 사용할 수 있습니다.//swaggerimplementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' http://localhost:8080/swagger-ui/index.html 에서 확인할 수 있습니다. Spring Security를 사용 중이라면, import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.securit..
-
refresh token redis로 구현하기Spring 2024. 2. 22. 03:48
로그인할 때 access token을 생성하고, access token을 이용하여 redis에 key값으로 저장하여 refresh token을 구현했습니다. jwt token 발급 flow 클라이언트에서 로그인한다. 서버는 클라이언트에게 Access Token과 Refresh Token을 발급 Access Token은 사용자 쿠키에 저장, Refresh Token은 key값을 email로 redis에 저장 요청마다 cookie에 있는 access token을 검증 이 때, Access Token이 만료가 되면 Redis에 index인 access Token로 검색하여 refresh token이 있는지 확인 서버는 Refresh Token 유효성 체크를 하게 되고, 새로운 Access Token을 발급하며..
-
Spring에서 Redis로 분산락 사용하기Spring 2024. 2. 22. 01:58
항해99를 진행하면서 팀원분들과 동시성 문제에 대해 이야기를 나누면서 낙관적락, 비관적락에 대해 테스트도 진행해보고 Redis의 분산 락에 대해 알게 되었습니다. Redis는 Reddison으로 구현하는 분산 락뿐만 아니라, Lettuce의 스핀 락도 존재했는데 스핀 락의 경우 분산 락과 달리, Lock을 얻지 못 하면 계속해서 요청을 보내기 때문에 Redis에 대한 부하가 커지게 되서 Pub / Sub 방식을 사용하는 Redisson으로 하는 것이 좋다고 생각했습니다. Lettuce로도 구현할 수 있지만 복잡하기 때문에 구현하기 쉬운 Redisson을 사용했습니다. 분산 락, Distributed Lock 하나의 요청이 리소스를 선점하면 나머지의 요청은 대기하고 있습니다. 요청이 끝난 후에 Redis는..
-
AOP, Aspect-Oriented ProgrammingSpring 2024. 2. 22. 01:57
AOP, Aspect-Oriented Programming AOP는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것입니다. 주로 중복되는 부분을 제거하고 횡단 관심사를 개별 모듈로 분리하여, 깔끔하게 유지보수 할 수 있도록 도와줍니다. 횡단 관심사를 개별 모듈로 분리한다는 것은 위의 예시에서 쉽게 확인할 수 있습니다. 실제 비즈니스 로직에서의 예시에서는 DB 연결, 로깅, 파일 입출력 등이 있습니다. AOP의 주요 개념 Aspect(관점): 횡단 관심사를 정의한 모듈. 로깅, 보안, 트랜잭션 관리 등이 Aspect의 예시입니다. Join Point + Pointcut을 모듈화한 것 Join Point(결합 지점): 프로그램 실행 ..
-
동시성 문제와 LockSpring 2024. 2. 22. 01:56
트랜잭션 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미합니다. 하나의 트랜잭션은 여러 단계로 이루어져 있으며, 모든 단계가 완료되면 커밋(commit)되어 데이터베이스에 변경사항이 저장됩니다. 하지만 중간에 문제가 발생하여 트랜잭션이 완료되지 못할 경우, 롤백(Rollback)을 통해 트랜잭션의 모든 변화를 원상태로 복구 시킵니다. 트랜잭션은 데이터의 일관성을 보장하는 중요한 역할을 하며 JPA에서도 트랜잭션 개념을 사용하여 Entity를 관리하고 있습니다. 트랜잭션의 특징 원자성(Atomicity) : 트랜잭션에 포함된 작업들이 DB에 모두 반영되거나, 전혀 반영되지 않아야 한다는 특성입니다.(All or Nothing) 일관성(Consist..