본문 바로가기
발전소/[T.I.L] : Today I Learned

[TIL] : 201

by 오주현 2022. 5. 15.
반응형

일일 배움을 위한 Today I Learned !


소경관

 MongoDB 공통 로직을 짜봤다.

 

package project.SPM.mapper;

import com.mongodb.client.model.Indexes;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.mongodb.core.MongoTemplate;

@Slf4j
@RequiredArgsConstructor
public abstract class AbstractMongoDBComon {

    protected MongoTemplate mongodb;

    /**
     * 컬렉션 생성하기
     * @param colNm 생성할 컬렉션 명
     * @return 생성 결과
     */
    protected boolean createCollection(String colNm) {

        boolean res;

        if (mongodb.collectionExists(colNm)) {
            res = false;
        } else {
            mongodb.createCollection(colNm);
            res = true;
        }

        return res;
    }

    /**
     *  인덱스 컬럼이 한 개일 때 컬렉션 생성
     * @param colNm 생성할 컬렉션명
     * @param index 생성할 인덱스
     * @return 생성 결과
     */
    protected boolean createCollection(String colNm, String index) {

        String[] indexArr = {index};

        return createCollection(colNm, indexArr);
    }

    /**
     * 인덱스 컬럼이 여러 개일 때 컬렉션 생성
     * @param colNm 생성할 컬렉션명
     * @param index 생성할 인덱스
     * @return 생성결과
     */
    protected boolean createCollection(String colNm, String[] index) {

        log.debug("### .createCollection start! : {}", this.getClass().getName());

        boolean res = false;

        // 기존에 등록된 컬렉션 이름이 존재하는지 체크 후 없다면 생성
        if (!mongodb.collectionExists(colNm)) {

            // 인덱스 값이 존재하는 경우
            if (index.length > 0) {
                // 컬렉션 생성 및 인덱스 생성
                mongodb.createCollection(colNm).createIndex(Indexes.ascending(index));
            } else {
                // 인덱스가 없으면 인덱스 없이 컬렉션 생성
                mongodb.createCollection(colNm);
            }
            log.debug("### .createCollection End! : {}", this.getClass().getName());
            res = true;
        }

        return res;
    }

    /**
     * 컬렉션 삭제
     * @param colNm 삭제할 컬렉션명
     * @return 삭제 결과
     */
    protected boolean dropCollection(String colNm) {

        boolean res = false;

        if (mongodb.collectionExists(colNm)) {
            mongodb.dropCollection(colNm);
            res = true;
        }

        return res;
    }

}

일단 이렇게 코딩해 주었는데 근무 체를 할 때 일자나 시간 별로 새로운 컬렉션을 생성하도록 하고 만약 컬렉션이 존재하는 경우 삭제를 하고 다시 생성을 하게 하는 것을 고민중인데 일단 구현해 보면서 어떤 식으로 할까 고민을 더 해봐야겠다. 

 

애초에 일자와 시간으로 나눠서 시간별로 여러번 저장이 되도록 만들 수도 있겠고, 일자로 나눠서 일자 별로만 저장되면서 같은 일자는 사전에 체크하고 삭제하는 경우(위에 코딩한 것)가 있겠다.

 

구현해 보면서 좀 더 적당할 것 같은 것을 적용하는 쪽으로 생각해 봐야겠다.

반응형

'발전소 > [T.I.L] : Today I Learned' 카테고리의 다른 글

[TIL] : 203  (0) 2022.05.17
[TIL] : 202  (0) 2022.05.16
[TIL] : 200 🎉  (0) 2022.05.14
[TIL] : 199  (0) 2022.05.13
[TIL] : 198  (0) 2022.05.12

댓글