승이의 기술블로그
article thumbnail
[SpringBoot] 동시성 문제를 해결하자 (Synchronized, MySQL, Redis)
SpringBoot 2024. 1. 10. 21:23

💭 들어가며 진행하던 프로젝트에서 위와 같이 응원 횟수를 여러번 클릭하면 이에 맞게 횟수가 증가되는 로직을 구현해야 했다. 한 명의 사용자는 여러번 응원 횟수를 증가시킬 수 있다. 이와 관련해 어떻게 동시성 문제를 해결할 수 있을지에 대한 고민을 시작했다. ✅ 동시성 문제란? 동시성 문제가 발생하지 않는 상황 pk가 1인 응원 데이터의 응원 횟수가 90인 상태에서 사용자 A 가 3번 응원 횟수를 증가시키고 사용자 B 가 10번 응원 횟수를 증가시켰다고 가정해보자. 사용자 A 응원 횟수 사용자 B pk가 1인 응원 데이터를 찾는다 >> 아 응원 횟수는 90이구나! 90회 pk 가 1인 응원 데이터의 횟수를 3회 증가시킨다. 93회 93회 pk가 1인 응원 데이터를 찾는다 >> 아 응원 횟수는 93이구나!..

article thumbnail
[SpringBoot] N+1 을 고려하여 페이징 쿼리 작성하기
SpringBoot 2024. 1. 1. 13:43

💭 들어가며 새로운 프로젝트를 진행하게 됐다. 프로젝트는 교내에서 열리는 스포츠 경기들의 결과를 실시간으로 확인할 수 있도록 하는 서비스이다. 경기들의 목록을 조회할 때, QueryDSL 을 사용하여 페이징 쿼리를 작성했다. 프로젝트에서의 컨벤션 상, 경기에 참여하는 팀들의 데이터를 순정렬하여 반환해야 했다. 그래서 다음과 같이 코드를 작성했다. List games = gameDynamicRepository.findAllByLeagueAndStateAndSports(leagueId, state, sportIds, pageRequest); return games.stream() .map(game -> new GameResponseDto(game, gameTeamRepository.findAllByGameW..

article thumbnail
[SpringBoot] 확장성을 고려하여 OAuth2.0 로 Kakao 소셜 로그인 구현하기
SpringBoot 2023. 9. 27. 00:28

최근 진행하고 있는 프로젝트에서 소셜 로그인 구현을 맡게 됐다. 소셜 로그인의 경우, 확장성이 많은 부분이기 때문에 맞는 방향인지에 대한 확신은 없으나.. 최대한 확장성을 고려하여 구현해보고자 노오력 해봤다. 구현 과정에서의 고민에 대한 일지와도 비슷해 빠르게 구현을 하고자 하는 경우에는 적절한 글이 아닐 수 있습니다 (__) OAuth2.0 https://oauth.net/2/ OAuth 2.0 — OAuth OAuth 2.0 OAuth 2.0 is the industry-standard protocol for authorization. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows..

[SpringBoot] @ConfigurationProperties 로 프로퍼티들을 바인딩하기
SpringBoot 2023. 9. 8. 17:17

@ConfigurationProperties 의 용도 properties 혹은 yml 에 존재하는 프로퍼티들을 객체에 바인딩할 수 있도록 해준다. 하나의 클래스에서만 사용되는 경우에는 @Value 어노테이션을 이용해서 사용해왔다. @Value("${jwt.public-key}") private String publicKey; @Value("${jwt.private-key}") private String privateKey; 그런데 만약, jwt 관련 설정 정보가 여러 군데에서 필요하다면?! 다음 상황을 가정해보자. 현재는 하나의 클래스에서 토큰을 생성하고 유효성을 검사하고 있지만, 이를 다른 클래스로 분리하게 된다면 두 클래스에서 모두 해당 설정 정보가 필요할 것이다. 이런 경우에 매번 @Value 로 ..

article thumbnail
[MySQL] Full Text Search 적용기
SQL 2023. 7. 20. 21:51

https://github.com/Indipage/SERVER GitHub - Indipage/SERVER Contribute to Indipage/SERVER development by creating an account on GitHub. github.com MySQL Full Text Search 가 필요한 상황 검색이 필요한 상황 - 주소에 포함되는 단어를 검색했을 때 해당하는 공간이 떠야 한다. DB 구조 - 지역마다 주소 체계가 다르기 때문에 크롤링 상황에서의 편의성을 위해서 주소를 각 컬럼별로 분리해두었다. - 따라서 base_government, city, metro_government, road_name, town, detail 6개의 모든 컬럼에 대해서 검색이 이루어져야 한다. 고려한 ..

검색 태그