[Android] SMS, MMS의 차이점과 동작방식

Chance·2025년 1월 23일

1. SMS 처리 방식

1.1 SMS 수신

SMS 메시지는 브로드캐스트 리시버를 통해 수신됩니다.

  • 브로드캐스트 액션: android.provider.Telephony.SMS_RECEIVED
  • 브로드캐스트 리시버 등록:
    • AndroidManifest.xml에 리시버를 등록하거나, 코드에서 동적으로 등록할 수 있습니다.
    • 예시:
      <receiver android:name=".SMSReceiver">
          <intent-filter>
              <action android:name="android.provider.Telephony.SMS_RECEIVED" />
          </intent-filter>
      </receiver>
      
  • SMS 데이터 읽기:
    수신된 SMS는 브로드캐스트 Intent에 포함된 PDUs(Protocol Data Units) 형태로 전달됩니다. 이를 디코딩해 메시지와 발신자 정보를 추출할 수 있습니다.
    @Override
    public void onReceive(Context context, Intent intent) {
        if ("android.provider.Telephony.SMS_RECEIVED".equals(intent.getAction())) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Object[] pdus = (Object[]) bundle.get("pdus");
                if (pdus != null) {
                    for (Object pdu : pdus) {
                        SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);
                        String sender = sms.getOriginatingAddress();
                        String message = sms.getMessageBody();
                        Log.d("SMSReceiver", "Sender: " + sender + ", Message: " + message);
                    }
                }
            }
        }
    }
  • 저장 위치: SMS 메시지는 content://sms/ URI를 통해 Android 시스템 데이터베이스에 저장됩니다.
    • 예: 받은 메시지: content://sms/inbox
    • 보낸 메시지: content://sms/sent

1.2 권한

SMS를 처리하려면 아래 권한이 필요합니다:

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />

2. MMS 처리 방식

2.1 MMS 수신

MMS는 SMS보다 복잡한 처리 과정을 거칩니다. MMS 메시지가 수신되면 WAP 푸시 메시지 형태로 전달되며, 이를 처리하기 위해 특정 브로드캐스트 액션을 사용합니다.

  • 브로드캐스트 액션: android.provider.Telephony.WAP_PUSH_RECEIVED
  • 브로드캐스트 리시버 등록:
    MMS 수신 리시버를 AndroidManifest.xml에 등록해야 합니다. MIME 타입 필터가 필요합니다.
    ```xml
    <receiver android:name=".MMSReceiver">
        <intent-filter>
            <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
            <data android:mimeType="application/vnd.wap.mms-message" />
        </intent-filter>
    </receiver>
    
    ```
  • MMS 데이터 읽기:
    MMS는 WAP_PUSH_RECEIVED 브로드캐스트를 통해 수신되며, 데이터베이스에 저장된 MMS를 Content Resolver로 읽어와야 합니다.
    ```java
    @Override
    public void onReceive(Context context, Intent intent) {
        if ("android.provider.Telephony.WAP_PUSH_RECEIVED".equals(intent.getAction())) {
            String mimeType = intent.getType();
            if ("application/vnd.wap.mms-message".equals(mimeType)) {
                // MMS 데이터를 Content Resolver를 통해 처리
                parseMmsData(context);
            }
        }
    }
    
    private void parseMmsData(Context context) {
        Uri uri = Uri.parse("content://mms");
        Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
    
        if (cursor != null && cursor.moveToFirst()) {
            do {
                String id = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Mms._ID));
                String body = getMmsBody(context, id);
                Log.d("MMSReceiver", "MMS Body: " + body);
            } while (cursor.moveToNext());
            cursor.close();
        }
    }
    
    ```

2.2 MMS 저장 위치

MMS는 content://mms/ URI를 통해 Android 데이터베이스에 저장됩니다.

  • 받은 MMS: content://mms/inbox
  • 보낸 MMS: content://mms/sent

MMS는 하나의 메시지가 여러 파트(본문, 첨부 파일)로 구성되므로, 각 파트를 content://mms/part에서 읽어야 합니다.


2.3 MMS 권한

MMS 처리를 위해 아래 권한이 필요합니다:

<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

3. 주요 차이점 (SMS vs MMS)

항목SMSMMS
브로드캐스트 액션Telephony.SMS_RECEIVEDTelephony.WAP_PUSH_RECEIVED
데이터 형식PDU (Protocol Data Unit)WAP 푸시 메시지 + 데이터베이스 참조
저장 위치content://sms/content://mms/
내용 구조단일 텍스트 메시지다중 파트(텍스트, 이미지, 첨부 파일)
권한RECEIVE_SMS, READ_SMSRECEIVE_MMS, READ_SMS, READ_PHONE_STATE

4. 처리 시 유의사항

4.1 타이밍 문제

MMS는 브로드캐스트를 수신했을 때 데이터가 완전히 저장되지 않았을 수 있으므로, 데이터를 읽기 전에 약간의 지연을 두거나, ContentObserver를 사용하여 새로운 MMS 저장 이벤트를 감지해야 합니다.

4.2 기본 SMS 앱 권한

Android 4.4 (KitKat) 이상부터는 기본 SMS 앱만이 SMS/MMS 데이터를 수정하거나, 일부 중요한 API를 호출할 수 있습니다. 앱이 기본 SMS 앱이 아니면 읽기 전용 권한만 부여됩니다.

4.3 PDU 디코딩

SMS는 PDU 형식을 디코딩해야 하며, MMS는 데이터베이스를 통해 각 파트를 읽어야 하는 차이가 있습니다.


5. 요약

  • SMS는 간단한 텍스트 메시지로 처리되며, PDU를 디코딩하고 데이터베이스에 저장된 메시지를 ContentResolver로 조회할 수 있습니다.
  • MMS는 다중 파트 메시지로 더 복잡하며, 브로드캐스트를 통해 수신한 후, Content Resolver를 사용해 각 파트를 읽어야 합니다.
  • 권한과 기본 SMS 앱 여부가 SMS/MMS 처리의 중요한 요소입니다.


둘다 시스템 데이터베이스에 저장하는데, MMS가 SMS에 비해 저장이 오래걸리는 이유

MMS가 SMS보다 저장하는 데 더 오래 걸리는 이유는 여러 가지 요소가 결합되어 있기 때문입니다. MMS는 SMS보다 더 복잡한 구조를 가지고 있으며, 여러 파트로 구성된 데이터를 처리하고 저장하는 과정이 포함됩니다. 이 과정이 SMS보다 느리게 처리되는 주된 이유는 다음과 같습니다.


1. MMS는 여러 파트로 구성됨

  • SMS: SMS는 기본적으로 단일 텍스트 메시지로 구성됩니다. 수신된 SMS는 대부분 간단하게 처리되어, 데이터베이스에 저장하는 데 시간이 거의 걸리지 않습니다.
  • MMS: MMS는 본문 텍스트 외에도 이미지, 오디오, 비디오 등 다양한 미디어 파일을 첨부할 수 있습니다. 이러한 첨부 파일들은 MMS 메시지의 "파트(part)"로 저장되며, 각 파트는 별도의 데이터베이스 레코드로 저장됩니다. 결과: MMS 메시지는 여러 개의 파트로 구성되고, 각 파트를 분리하여 저장해야 하므로 저장하는 데 시간이 더 걸립니다.

2. WAP 푸시 메시지의 처리 과정

WAP란?

WAP_PUSH_RECEIVED는 안드로이드에서 사용되는 브로드캐스트 액션 중 하나로, WAP 푸시 메시지를 수신했을 때 발생합니다. WAP(Wireless Application Protocol) 푸시 메시지는 주로 특정 URL이나 간단한 정보를 전송하기 위해 사용되며, 주로 모바일 네트워크를 통해 전달됩니다.

이 액션은 주로 다음과 같은 경우에 발생합니다:

  • 운영 체제가 WAP 푸시 메시지를 수신했을 때.
    푸시 메시지에는 특정 서비스 제공자 또는 애플리케이션이 처리해야 할 데이터(예: URL, 알림 메시지 등)가 포함됩니다.

  • MMS 수신: MMS는 일반적으로 WAP 푸시 메시지 형식으로 수신됩니다. WAP 푸시 메시지는 데이터를 비동기적으로 수신하기 때문에, MMS 메시지가 완전히 다운로드되기 전까지는 이를 저장할 수 없습니다.

    • MMS 메시지가 수신되면 먼저 WAP 서버에서 파일을 다운로드해야 하며, 파일이 모두 다운로드된 후에 MMS 파트가 데이터베이스에 저장됩니다.

    • 이 과정에서 서버와의 네트워크 통신이 필요하고, 데이터가 완전히 다운로드된 후에야 content://mms/part URI에 저장됩니다.

      결과: MMS가 여러 파일을 포함하고 있으며, 네트워크 통신과 다운로드가 완료되어야 저장될 수 있기 때문에, SMS보다 처리 시간이 길어집니다.


3. MMS 메시지의 메타데이터 처리

  • MMS메타데이터를 포함하고 있으며, 이를 데이터베이스에 저장할 때 추가적인 작업이 필요합니다. 예를 들어, MMS 메시지에는 발신자, 수신자, 메시지 ID, 콘텐츠 타입, 파트(파일) 등에 대한 정보가 포함됩니다. 결과: 각 파트의 메타데이터와 실제 데이터가 데이터베이스에 저장되기 때문에, 데이터베이스 연산이 더 많이 필요하고, 이로 인해 저장 시간이 더 길어질 수 있습니다.

4. MMS 파일 처리

  • MMS에는 첨부 파일이 포함될 수 있으며, 이 파일들은 일반적으로 크기가 크기 때문에 MMS 메시지의 저장에 더 많은 시간이 걸릴 수 있습니다.
    • 첨부 파일은 이미지, 음악 파일, 동영상 등 다양한 형식이 있을 수 있으며, 이러한 파일들은 처리하고 저장하는 데 더 많은 자원이 필요합니다.
    • 파일은 content://mms/part URI에 저장될 때 파일을 복사하고, 디스크 I/O 작업을 수행해야 하므로 시간이 더 걸립니다.

5. MMS와 SMS의 브로드캐스트 처리 차이

  • SMS: SMS 메시지는 브로드캐스트 리시버를 통해 즉시 수신되고, 그 데이터가 즉시 처리되어 데이터베이스에 저장됩니다.
  • MMS: MMS는 WAP 푸시로 수신되며, 메시지가 다운로드되고 저장되기까지 시간이 걸립니다. 또한, 네트워크 연결 상태에 따라 메시지 다운로드 시간이 달라질 수 있습니다.

6. MMS 다운로드 대기 및 처리

  • MMS 메시지는 비동기적으로 다운로드되기 때문에, 다운로드가 완료될 때까지 메시지를 저장할 수 없습니다. 다운로드가 완료되면 그때서야 메시지의 본문 및 첨부 파일들이 데이터베이스에 저장됩니다.
    • 다운로드 중일 때는 MMS 데이터베이스에 임시로 저장된 상태일 수 있으며, 완전히 다운로드되고 파트가 모두 저장될 때까지 시간이 걸립니다.

      결과: 메시지가 완전히 다운로드될 때까지 기다려야 하므로, 저장이 완료되기까지의 시간이 길어질 수 있습니다.


결론

MMS가 SMS보다 저장하는 데 더 오랜 시간이 걸리는 이유는 다음과 같은 복합적인 요인 때문입니다:

  1. 여러 파트로 구성된 데이터 처리
  2. 네트워크 통신을 통한 다운로드 시간
  3. 대용량 파일 처리 (이미지, 비디오 등)
  4. 메타데이터 및 파트별 저장 과정

이 모든 과정이 동시에 일어나기 때문에, MMS는 SMS보다 처리와 저장 시간이 더 길어집니다.

0개의 댓글