기존 서버 환경
- Ubuntu 20.04.6 LTS
- Docker
1. MongoDB 설치
docker run -d --restart always --name mongodb -e MONGO_INITDB_ROOT_USERNAME={아이디} -e MONGO_INITDB_ROOT_PASSWORD={패스워드} -p 27017:27017 mongo
옵션내용
- 포트 : 27017
- 자동재실행 : always
- 컨테이너 이름 : mongodb
2. MongoDB conf 파일 수정 (인증 관련 설정)
docker exec -it mongodb /bin/bash
위 명령어를 통해 컨테이너에 접속하여 아래 명령어를 통해 conf 파일 수정
vi /etc/mongod.conf // or vim /etc/mongod.conf
※ 만약 vi 혹은 vim 이 없다고 뜨는 분들은 아래 명령어를 통해 설치 후 다시 실행
apt-get update
apt-get install vim
파일을 열면 아래와 같습니다.
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
# engine:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
여기서 security를 주석해제 하시고 authorization: enabled 추가
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
# engine:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
수정된 파일 내용 입니다.
저장 후 나와서 mongoDB를 재실행합니다.
※ 혹시나 햇갈리시는 분들을 위해 저장 후 재실행 과정은 아래와 같습니다.
- 저장 : ESC + w + !
- 파일 나가기(vi 종료) : ESC + q + !
- 컨테이너 나가기 : exit + 엔터
- 컨테이너 재시작(예시 mongoDB 컨테이너 기준) : docker restart mongo
3. DB 생성 및 계정 설정
컨테이너 접속 후 아래 명령어를 치고 비밀번호까지 입력 후 mongoDB 접속
mongosh -u {아이디} -p // 엔터 이후 비밀번호 입력
아래 명령어를 통해 원하는 DB 생성
use {DB 이름} // 만약 DB가 이미 존재 시, 사용으로 간주
여기서 주의하실 점은 admin, config, local은 MongoDB 설정을 위해 이미 기본으로 존재하기에 새로운 DB 생성이 안됩니다.
admin으로 이동 후 테스트 계정 생성
use admin
db.createUser({ user: "원하는계정 이름", pwd: "비밀번호", roles: [{role : "원하는 권한", db: "디비 이름"}] })
원하는 권한은 특별한 케이스가 아니면 readWrite(읽기 및 쓰기)로 하시면 됩니다.
자세한 권한 정보는 아래 공식링크를 남겨두겠습니다.
3. Spring Boot에 MongoDB 라이브러리 추가
여기 링크에서 원하시는 버전 선택 후 gradle에 추가하시면 됩니다.
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb
저는 3.1.5 버전으로 추가했습니다.
※ 예시
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb:3.1.5'
4. Spring Boot application.properties 추가
아래 내용들을 추가해줍니다.
spring.data.mongodb.database=DB이름
spring.data.mongodb.port=27017
spring.data.mongodb.host=DB설치한 서버 주소(만약 같은 컴퓨터일 경우 localhost)
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=아이디
spring.data.mongodb.password=패스워드
5. 코드 추가
저는 REST API를 통해 Insert, Select를 실행해보고 싶어서 아래 코드들을 추가했습니다.
- Controller
package com.study.CSStudy.api.controller;
import com.study.CSStudy.api.dto.TestCollectionDto;
import com.study.CSStudy.api.service.MongoDBService;
import com.study.CSStudy.db.entity.TestCollectionEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/mongo")
public class MongoDBSampleController {
@Autowired
MongoDBService service;
@GetMapping("/findByName/{name}")
public List<TestCollectionEntity> findByName(@PathVariable String name){
return service.findByName(name);
}
@GetMapping("/findAll")
public List<TestCollectionEntity> findAll(){
return service.findAll();
}
@PostMapping("/insert")
public void insert(@RequestBody TestCollectionDto dto){
service.insert(dto);
}
}
- Service
package com.study.CSStudy.api.service;
import com.study.CSStudy.api.dto.TestCollectionDto;
import com.study.CSStudy.db.entity.TestCollectionEntity;
import java.util.List;
public interface MongoDBService {
TestCollectionEntity insert(TestCollectionDto dto);
List<TestCollectionEntity> findAll();
List<TestCollectionEntity> findByName(String name);
void deleteByName(String name);
}
- ServiceImpl
package com.study.CSStudy.api.service;
import com.study.CSStudy.api.dto.TestCollectionDto;
import com.study.CSStudy.db.entity.TestCollectionEntity;
import com.study.CSStudy.db.repository.MongoDBRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MongoDBServiceImpl implements MongoDBService{
@Autowired
MongoDBRepository repository;
@Override
public TestCollectionEntity insert(TestCollectionDto dto) {
return repository.insert(dto.dtoToEntity());
}
@Override
public List<TestCollectionEntity> findAll() {
return repository.findAll();
}
@Override
public List<TestCollectionEntity> findByName(String name) {
return repository.findByName(name);
}
@Override
public void deleteByName(String name) {
repository.deleteByName(name);
}
}
- Dto
package com.study.CSStudy.api.dto;
import com.study.CSStudy.db.entity.TestCollectionEntity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class TestCollectionDto {
private long id;
private String name;
private String content;
public TestCollectionEntity dtoToEntity(){
TestCollectionEntity entity = new TestCollectionEntity(this.id, this.name, this.content);
return entity;
}
public void entityToDto(TestCollectionEntity entity){
id = entity.getId();
name = entity.getName();
content = entity.getContent();
}
}
- Entity
package com.study.CSStudy.db.entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "testCollection")
public class TestCollectionEntity {
@Id
private long id;
private String name;
private String content;
}
- Repository
package com.study.CSStudy.db.repository;
import com.study.CSStudy.db.entity.TestCollectionEntity;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
public interface MongoDBRepository extends MongoRepository<TestCollectionEntity, Long> {
List<TestCollectionEntity> findByName(String name);
}
유심히 볼곳은 Entity 파일입니다.
@Document(collection = "Collection 이름") 을 통해 원하는 Collection을 정하며,
그 안에 들어갈 내용들을 입력하여 사용하면 됩니다.
이후 post man을 이용하여 데이터들을 넣어봤습니다.
넣은 값들의 결과입니다.
'개발잡담 > DB' 카테고리의 다른 글
MySQL 명령어 사용법 - 기본 2 (0) | 2024.01.16 |
---|---|
MySQL 명령어 사용법 - 기본 1 (0) | 2024.01.15 |
Base 64 인코딩이란? (0) | 2023.09.05 |