일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- QueryDSL
- data
- CodeCommit
- backenddeveloper
- Spring Boot
- Docker
- rds
- 자격증
- codebuild
- goorm
- s3
- goorm x kakao
- 개발자
- MSA
- serverless
- spring
- aws
- 티스토리챌린지
- sqs
- CICD
- 오블완
- codedeploy
- orm
- nosql
- jpa
- bootcamp
- DynamoDB
- 스터디
- mapping
- Redis
- Today
- Total
gony-dev 님의 블로그
[Final] 6. MongoDB 트랜잭션 본문
이번에는 드디어 1회차 프로젝트를 마무리 짓는 글이다!
많은 이슈가 있었고, 팀원간에 문제를 해결하는 과정들이 있었지만 어찌저찌 잘 마무리한 것 같다.
그럼 각설하고 1회차 프로젝트에 대한 마무리를 진행해보겠다.
이전 포스트에서는 docker-compose를 통해 컨테이너를 실행시켜 msa 환경이 잘 실행되는지 확인하고 테스트해보았다.
다른 문제는 없었지만 계정을 로그아웃하고 재접속을 시도하였을 때 이전에 생성하였던 데이터 변경 사항이 적용이 되지 않아 아무 데이터도 저장되지 않았던 오류가 있었다.
그래서 다양한 원인을 유추해 보았다.
추측
1. ajax 호출
- 위의 사진들은 Login 시 클라이언트 측에서 발생하는 진행상황이다.
- login을 진행하면 OAuth2 토큰을 받아와 유저 정보를 가져온다.
이때 정보를 가져오는 함수가 initAccount인데, getCurrentAccount()에서 요청한 ajax에 대한 값을 토대로 객체들을 나타내는 것이다.
- login을 진행하면 OAuth2 토큰을 받아와 유저 정보를 가져온다.
- 흐름을 이해하던 나는 처음에 initAccount(account)에서 기존의 데이터가 아닌 유저에 대한 데이터를 모두 초기화하여 불러오는 줄 알았다.
- 하지만 잘 가져오는 것을 테스트를 통해 확인하여 이는 오류가 아니었던 것으로 결론났다.
2. Transaction
- 다음은 Account Service의 유저 생성과 데이터 변경에 대한 메서드들이다.
두 코드 모두 트랜잭션이 적용되어 있는 것을 확인할 수 있다. - 트랜잭션은 특성상 데이터의 변경을 감지하고 ACID 특성을 유지하며 진행되기에 나는 추측을 해보았다.
"만일 트랜잭션이 적용되지 않았다면..데이터가 없는 것처럼 보이는 것이 당연하지 않을까?"
해답
정답은 이미 눈치챘겠지만 트랜잭션의 미적용이었다.
JPA 같은 RDBMS는 트랜잭션이 자동으로 적용이 되지만
MongoDB 같은 비정형 데이터들은 트랜잭션이 적용되지 않아 수동으로 이를 구현해야 한다.
NoSQL에 대한 트랜잭션을 적용하기 위해서는 두 가지 조건이 필요하다.
- Session 기반 트랜잭션 구현
- ReplicaSet 환경 구축
NoSQL은 Standalone 모드에서는 작용하지 않기에 클러스터 형태를 구성 해야한다.
그래서 다음과 같이 MongoDB에 대한 Configuration을 설정하고 yml에는 다음과 같이 설정해주었다.
data:
mongodb:
uri: mongodb://account-mongodb:27017/account-mongodb?replicaSet=rs0
database: account-mongodb
auto-index-creation: true
- 눈여겨보아야할 점은 uri의 replicaSet=rs0이라는 부분이다. 해당 파라미터를 통해 우리는 replicaSet을 구성할 수 있다!
이렇게 설정을 마쳤더니 MongoDB에 대한 트랜잭션이 정상적으로 작동하였다!
그렇게 딥다이브의 데이터 문제를 해결할 수 있었다.
1회차 프로젝트를 마치며..
사실 프로젝트에 대한 포스팅을 급마무리를 지은 감이 없잖아 있다..
프로젝트를 총 4개를 진행해야하다보니 글을 여유있게 작성할 틈이 없어서인것 같다.
하지만 프로젝트는 결코 대충하지 않았으며 발표도 순조롭게 진행하며 좋은 결과물을 창출하였다.
좋은 팀원들을 만나 포트폴리오에 적을 프로젝트를 만들 수 있었다.(조크)
글솜씨가 별로지만..2회차 프로젝트도 잘 작성하며 백엔드 개발자로서의 기반을 계속 다져나가 보겠다!
감사합니다!!
(혹시 궁금해하는 분들이 있을까봐 링크 남겨요 ㅎㅎ)
'Goorm x Kakao Project > 1회차 프로젝트' 카테고리의 다른 글
5. MSA 도커 파일 테스트 (0) | 2025.01.04 |
---|---|
4. 서비스 리팩터링 (0) | 2024.12.28 |
3. Maven에서 Gradle (0) | 2024.12.18 |
2. Spring Cloud MSA (0) | 2024.12.18 |
1. MSA를 사용하는 이유 (1) | 2024.12.13 |