๐ [Spring Data MongoDB] - Auto Increment Sequence ์ด๊ธฐํํ๊ธฐ
์๋ ํ์ธ์, ์ ๋ฒ ์๊ฐ์๋ Spring Data MongoDB์์ Auto Increment Sequence ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์์ต๋๋ค.
๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กด์ฌํ๋ ๊ฐ๋ค์ ์ ๊ฑฐํ๋ฉด์ Auto Increment ๊ฐ๋ ์ด๊ธฐํ ํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ์์ต๋๋ค.
MySQL์์๋ ๋จ์ ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก Auto Increment๋ฅผ ์ด๊ธฐํ ํ ์ ์๋๋ฐ์, MongoDB์์๋ ๊ตฌ๊ธ๋ง์ ํด๋ด๋ ์๋ฃ๊ฐ ์ ๋์ค์ง ์์์ต๋๋ค.(๊ฒ์ ๋ฅ๋ ฅ์ด ๋ถ์กฑํด์...)
๋ฐ๋ผ์ ์ด๋ป๊ฒ ์ด๊ธฐํ๋ฅผ ํ ์ ์์์ง ๊ณ ๋ฏผ์ ํ๋ค๊ฐ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐพ๊ฒ๋์๋๋ฐ์, ์๊ฐ์ธ๋ก ํจ์ฌ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค.
1) Sequence ๋ฉ์๋๋ฅผ ์ฆ๊ฐ์ํค๋ ํจ์์์ 1๋ก ์ด๊ธฐํํ๊ธฐ
๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก๋ ์ข์ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ ๊ฐ์ง๋ง, ๋ฐ๋ก ๋ ์ค๋ฅด๋ ๋ฐฉ๋ฒ์ด์์ต๋๋ค.
package com.juhyun.shorturl.entity.sequence;
import lombok.RequiredArgsConstructor;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import java.util.Objects;
import static org.springframework.data.mongodb.core.FindAndModifyOptions.options;
import static org.springframework.data.mongodb.core.query.Criteria.where;
@RequiredArgsConstructor
@Service
public class SequenceGeneratorService {
private final MongoOperations mongoOperations;
public Long generateSequence(String key) {
AutoIncrementSequence counter = mongoOperations.findAndModify(Query.query(where("_id").is(key)),
new Update().inc("seq", 1), options().returnNew(true).upsert(true), AutoIncrementSequence.class);
return !Objects.isNull(counter) ? counter.getSeq() : 1;
}
}
์ SequenceGeneratorService ํด๋์ค์ generateSequence() ๋ฉ์๋๋ Sequence ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๊ฐ์ ์ฆ๊ฐ์ํจ ํ ๋ฆฌํดํ๋ ํจ์์ ๋๋ค. ์ ํจ์์์์ ๋ฆฌํด ๊ฐ์ ๋จ์ํ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊ฟ์ฃผ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๊ฐ์ด ์ด๊ธฐํ๋ฉ๋๋ค.
return 1L;
์์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ฉด ํด๊ฒฐ์ ๋์ง๋ง, ๋ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ฑ ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ๋ค์ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
2) GUI์ sequence collection์์ ํด๋น ๊ฐ์ ์์ ํ๊ธฐ
์ ๊ฒ์๊ธ์์ Auto Increment ๋ฅผ ์ค์ ํ ๋, Entity๋ฅผ ๋ง๋ค์ด์ ๊ด๋ฆฌ๋ฅผ ํ์์ต๋๋ค.
package com.juhyun.shorturl.entity.sequence;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Getter
@Setter
@Document(collection = "auto_sequence")
public class AutoIncrementSequence {
@Id
private String id;
private Long seq;
}
๋ฐ๋ผ์ ์ ํ๋๋ auto_sequence ๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ์ด ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ปฌ๋ ์ ์์ seq ๊ฐ์ ๋ณ๊ฒฝํจ์ผ๋ก์ ์ด๊ธฐํ๋ฅผ ํ ์ ์์ต๋๋ค ๐
'CS > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ๋ฌด์ ๋ฐ๋ก ์ฐ๋ SQL ํ๋ 1 - SQL ํ๋ ์ด๋ก (1) | 2024.10.07 |
---|---|
MySQL EXPLAIN ์คํ๊ณํ ๋ง์คํฐํ๊ธฐ(feat. RealMySQL 8.0) (0) | 2023.01.07 |
[Spring Data MongoDB] Auto-Increment Sequence ๋ง๋ค๊ธฐ (0) | 2021.09.10 |
[MySQL] - ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(Isolation level) (11) | 2021.09.05 |
DBCP(DataBase Conncetion Pool), ์ปค๋ฅ์ ํ ์ด๋? (0) | 2021.08.10 |
๋๊ธ