Rumos

조회 성능을 위해 WHERE / ORDER BY 조건을 다중 칼럼 인덱스로 설정해도 될까?

푸앙이 사진관 서비스에서 사용하는 쿼리 메서드를 살펴보던 중, 신경쓰이는 녀석을 발견했다. 바로 PhotoRequestRepository의 Optional<PhotoRequest> findTopByUserIdOrderByCreateDateDesc(Long userId);이다. 프로필 이미지 생성 요청을 하기 전에 사용자의 요청이 이미 생성되...

두 번의 갱신 분실 문제를 해결하자! (feat. 비관적 락, 낙관적 락)

앞선 글에서 푸앙이 사진관의 uploadPhoto, updateEmail 트랜잭션이 동시에 일어날 때 두 번의 갱신 분실 문제가 발생함을 확인했다. 그리고 메서드 내부의 repository 호출 코드를 살펴보면서, 쿼리 실행과 MySQL 락을 확인하며 문제의 원인에 대해 파악했다. 이번 글에서는, 두 번의 갱신 분실 문제를 어떻게 해결하려고 시도했는...

두 번의 갱신 분실 문제의 원인을 찾아보자! (feat. 공유 잠금, 배타적 잠금)

푸앙이 사진관은 유저의 사진을 받아서 AI 프로필을 생성하는 서비스이다. 사용자는 AI 프로필 생성을 요청할 때마다, 완료된 프로필 이미지를 받을 이메일을 입력받는다. 하지만 이메일을 잘못 입력하면 프로필 이미지가 엉뚱한 이메일로 보내질 수 있기 때문에, 이메일 체크와 사용자의 이메일 수정은 필수적인 기능이다. 관련해서 테스트 코드를 짜다가, 이런 ...

MongoDB를 이용해 Id 필드의 타입 고르기 : Auto Increment vs UUID vs ObjectId

Auto Increment 대신 UUID를 선택했다 데이터베이스 스키마를 선택할 때 타입도 생각하지 않을 수 없다. 이전에 SQL 계열 데이터베이스를 사용했을 때 id pk 칼럼에 Auto increment가 자동 설정 되어 있는 경우가 많았다. 하지만 커머스 서비스의 경우, 상품 데이터의 id pk에 auto increment를 사용하면 API ...

MongoRepository에 @Repository가 없어도 빈 등록이 되는 이유

인턴십을 하면서 코드 리뷰를 하며 남의 코드를 유심히 들여다 보는 것도 큰 성장임을 알게 되었다. 사이드 프로젝트를 할 때도 남의 코드를 자세히 보고 이유있는 수정을 요구하려고 노력 중이다! 그 첫번째 경험을 하게 되어 공유한다. @Autowired의 지속적인 등장 아래의 코드가 UserChallengeService, PublicChallengeS...

Spring boot에서 OIDC 카카오 로그인 구현하기

사이드 프로젝트에서 카카오 로그인을 구현해야 할 일이 생겼다. 이전 프로젝트들에서 소셜 로그인은 해본 적이 없어서, 도전 정신을 가지고 구현했다. OIDC 방식의 소셜 로그인을 팀원들이 신기해 했고, 더욱 잘 설명해주고자 글을 남긴다! 작년에 비해 올해 들어 인턴을 하면서 공식 문서를 세심히 살펴보는 습관이 생겼다. (나의 격언이 10개의 블로그보다...

익숙한 MySQl 대신 MongoDB 도전하기

많은 프로젝트 경험이 있는 것은 아니지만, 프로젝트를 할 때마다 도구에 대한 고민이 큰 편은 아니었다. 데이터베이스설계 과목으로 인해 MySQL은 친숙했고, 인턴십에서 진행하는 프로젝트의 데이터베이스는 MariaDB 이다보니 NoSQL에 대한 고려는 전혀 하지 않았었다. ✅ 하지만 인턴십을 진행하면서, 매일 6500 정도의 사용자가 활발히 이용하는 ...

[메시지 큐] RabbitMQ, ActiveMQ

메시지 지향 미들웨어(MOM) 응용 소프트웨어 간의 비동기적 데이터 통신을 위한 소프트웨어 메시지를 전달하는 과정에서 보관/라우팅/변환 할 수 있다는 장점을 가진다. 보관 : 메시지의 백업 기능을 유지함으로써 지속성 제공 → 송수신 측은 동시에 네트워크 연결을 유지할 필요가 없다. 라우팅 : 미들웨어 계층이 직접 메시지 라우팅 수행...

[운영체제] 메시지 전달의 설계 이슈와 RabbitMQ

이번 방학 때 좋은 기회로 GDSC-CAU : 푸앙이 사진관 프로젝트에 백엔드 개발자로 참여하게 되었다. 메시지 큐로 몰려드는 AI 프로필 생성 요청을 관리하는 파트를 맡게 되었다. 메시지 큐 도구들을 살펴보기 전에, 운영체제에서 메시지 전달에 대해 복습하면서 기존 메시지 큐 도구들을 살펴보면 좋을 것 같아 글을 남긴다! 프로세스들이 서로 ...