개발자
안녕하세요. Java Spring으로 백엔드 서버 마이그레이션, 알람 기능 개발 중에 고민이 있어 질문드립니다. [상황] 기존 알람 서비스는 하나의 서비스 Class로 통합해서 두고, 문자, 푸쉬알람, 이메일 3가지 경우로 기능을 swith하여 각 기능별로 서비스를 호출하는 방식으로 구현되어 있습니다. 알람과 관련된 데이터는 JSON 파일에서 불러와 jsonObejct와 Map 자료구조를 통해 가공하여 기능 구현이 되어있습니다. 알람 데이터 JSON 파일은 상황별 코드에 따라 문자, 푸쉬알람, 이메일로 데이터가 구분되어 있습니다. JSON 파일은 대략적으로 아래와 같은 형태입니다. (mail 알람의 경우엔 HTML 파일을 전송하는 방식입니다. thyemleaf를 통해 전달받은 파라미터 값만 HTML에 주입하는 형태로 구현되어 있어서 msg 안에 String 대신 JSON 형태의 데이터가 들어가고 있습니다.) [알람 JSON 데이터 구조 예시] { "code1" : { "Sms" : { "title" : "sms 제목", "msg" : "sms 메세지", }, "Push" : { "title" : "push alarm 제목", "msg" : "push alarm 메세지", }, "Mail": { "title" : "mail 제목", "msg": { "name" : "#{name}", "use" : "#{use}", ... }, "code2" : {... }, ... } [문제 인지 & 개선 방향 고민] 알람 데이터가 JSON으로 정의되어 있다보니, 기능 개발을 위해 Json 파일을 읽고, JsonObject와 Map 자료구조로 데이터 가공을 할 수 밖에 없는 상황인데요. 제가 알기로는 자바에서 Map 자료구조를 사용하게되면 타입 자체가 불명확해서 지양해야 하며, JSON 파일로 관리 시 하드코딩에 해당되어 기능 자체에 제약이 많다고 판단하여 해당 상황을 DTO로 관리함과 동시에 Database에서 관리하도록 바꿔볼까 생각중입니다. [궁금증 & QnA] 이 상황에서 고민 & 궁금증이 몇 가지 있습니다. 1. 해당 알람 데이터를 DB 관리로 바꾸는게 더 나은 선택인지? -> 만약 바꾼다고 하면 Alarm Table을 따로 두고, User Table과 N:M 매핑하는식으로 구현할 생각입니다. 2. , mail HTML Template이 다양하다보니, Template 마다 넘겨줘야하는 JSON 데이터가 다양한 상황입니다. 그러다보니 mail msg 컬럼에는 다양한 형태의 JSON 데이터가 들어가게 되어 이걸 DB로 구현한다고 하니 막막한 상황입니다. -> 결국 해당 부분만 JSON 데이터로 넣는것 말고는 떠오르는 방법이 없네요.(해당 부분만 JSON 데이터로 넣으면 오히려 관리가 더 어려워지지 않을까 고민입니다.) 3. 다른 분들은 알람 기능을 어떻게 구현하는지 궁금합니다.
답변 1
인기 답변
삭제된 사용자
2023년 11월 09일
안녕하세요. 답변 드리기에 앞서 몇 가지 궁금한 점이 있습니다. A. 현재 JSON으로 되어있는 [알람 JSON 데이터 구조 예시]를 보면 알람 데이터마다 "code1", "code2"와 같이 key가 붙어있는데 이건 알람 데이터의 ID 역할인가요? 그렇다면 JSON으로 관리하고 있는 데이터가 실제로 발송한(할) 알람들의 리스트라고 보면 될까요? B. "만약 바꾼다고 하면 Alarm Table을 따로 두고, User Table과 N:M 매핑하는식으로 구현할 생각입니다." 라고 적어주셨는데 현재 매핑 관계는 어디서 관리하고 계신가요? 일단은 제가 임의로 판단해서 질문하신 내용에 대해 말씀드리자면, 1. 알람 데이터라는 표현이 모호해서 헷갈리기는 하지만, "알람 템플릿"이 아닌 "사용자에게 실제로 발송한 알람"을 의미하신다면 DB 관리로 바꾸는 편이 더 나을 것 같습니다. 실제로 발송한 알람은 계속 쌓이게 될텐데, 한 JSON 파일을 계속 읽고 덮어씌우고 하는 과정이 바람직해 보이지는 않습니다. 또한 B에서 여쭤본 것처럼 이미 매핑 관계를 DB로 관리하고 계신다면 발송한 알람들도 DB에서 관리하는 것이 훨씬 나을 것으로 보이구요. 하지만 혹시 말씀하신 JSON이 알람 템플릿(예를 들어 제목이 "YYYY-MM-DD 발송 알람" 과 같은 식이고 실제 발송 시 YYYY-MM-DD를 현재 날짜로 치환해서 사용하는 식)이라면 템플릿 정도는 JSON으로 관리해도 크게 문제는 없을 것 같습니다(물론 이 경우에도 DB로 관리하는 편이 더 나을것 같습니다). 2. 어떤 점에서 관리가 어려워지지 않을까 고민되시는지를 적어주시면 상세한 답변이 가능하겠지만, 일단 JSON 데이터를 문자열 자체로 넣으면 생각하시는 것처럼 크게 관리가 어려워지지는 않을 것 같습니다. 말씀하신 내용으로 유추해 보았을 때 저장된 JSON 형식의 데이터에서 특정 필드의 값으로 데이터를 조회한다든가 하는 식의 작업이 필요하지는 않을 것으로 보여서요. 혹시 어떤 점에서 걱정되시는지도 추가로 말씀해주시면 좋을 것 같습니다. 3. 이건 제가 구현해본 적이 없어 잘 모르겠네요.. 아마 다른 분들이 좋은 답변 주실 것 같습니다 :D 마지막으로, "자바에서 Map 자료구조를 사용하게되면 타입 자체가 불명확해서 지양해야 하며" 라는 문장이 조금 어색하게 느껴집니다. 자바에서 Map 자료구조는 key와 value 모두 선언 시점에 지정해야 하기 때문에 "타입 자체가 불명확"하다고 말할 수는 없을 것 같습니다. 제가 자바는 사용한지가 너무 오래 되어서 현재 어떻게 되어있는지는 모르겠지만, 코틀린에서 JSON 데이터를 매핑할 때 value에 해당하는 객체 클래스를 모두 정의하기 번거로우면 Any를 사용하기도 했는데 혹시 그런 의미로 말씀하신 것인지 궁금합니다. 좋은 하루 되세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!