mongoDB atlas의 connect 통해서 compass의 connection url 생성
비밀번호의 경우 database Access → Password Authentication → AutoGenerate Secure Password 후 copy, 이 값을 compass의 New Connection → Advanced Connection Options → Authentication의 Password 에 변환된 비밀번호 값을 입력 (atlas 측에 user가 존재해야함)
핫스팟의 경우는 연결시 변경되는 ip와 tls 문제 등 오류 발생등으로 인하여 사용하지 못할 것 같음
yml에는 DB의 이름 작성, @Document 를 통해 collection 명 설정
MongoDB는 기본적으로 _id
필드를 고유 식별자로 사용하며, 값이 제공되지 않으면 MongoDB가 ObjectId
값을 생성
Java에서 이 필드 타입이 **ObjectId
**인 경우에도 Spring Data MongoDB가 이를 자동으로 처리
MongoDB에 저장된 **LocalDateTime
**은 기본적으로 ISO 형식의 Date
타입으로 저장
LocalDateTime
**을 저장할 때 **UTC 기준의 **Date
****로 변환.ZonedDateTime
또는 **OffsetDateTime
**을 사용하여 시간대를 포함한 시간 데이터를 관리할 수 있음Spring Data MongoDB는 이를 자동으로 **LocalDateTime
**으로 변환해서 가져옴
MongoDB는 저장 시 Date
타입으로 변환하더라도, Spring Data MongoDB에서 자동으로 Java의 LocalDateTime
타입으로 역직렬화
public enum AlarmType {
CHATTING("채팅"), // 해당 Enum 값에 대한 설명(한글)
FEED("피드"),
FAVORITE("좋아요"),
NOTICE("공지"),
COMMENT("댓글"),
FOLLOW("팔로우");
private final String alarmType;
@JsonValue // 객체를 JSON으로 변환할 때 사용되는 값, JSON으로 직렬화될 때 "채팅" 으로 출력
public String getAlarmType() {
return alarmType;
}
@JsonCreator // JSON을 객체로 변환 (역직렬화), JSON에서 "채팅"을 받을 때 AlarmType.CHATTING으로 변환
public static AlarmType fromString(String alarmType) {
for (AlarmType type : AlarmType.values()) {
if (type.getAlarmType().equals(alarmType)) {
return type;
}
}
throw new IllegalArgumentException("알 수 없는 타입입니다. "+alarmType);
}
}
// 컨트롤러로 전달되는 파라미터를 Enum으로 변환하기 위해 사용
@Component
public class AlarmTypeConverter implements Converter<String, AlarmType> {
@Override
public AlarmType convert(String source) {
return AlarmType.valueOf(source.toUpperCase()); // JSON에서 전달된 값 -> Enum 변환
}
}
/api/alars?type=채팅
이 전달 될 경우 type=채팅 이 AlarmType.CHATTING 으로 변환됨