JAVA - 채팅메세지에 커스텀 이모지 넣는 방식에 따른 속도 테스트

개발자 이상규·2023년 2월 3일
0

Java

목록 보기
2/6
post-thumbnail

상황


채팅 메세지에 커스텀된 이모지(이미지)를 넣는 기능을 구현하던 중 참고 자료를 찾다가 두가지 방식을 발견했습니다.

방식


Telegram 방식

  • 채팅 메세지에 이모지의 코드를 넣어 순차적으로 찾아 replace하는 방식
{
	"message" : "안녕 {:Smile}"
}

LINE 방식

{
    "type": "text",
    "text": "Look at this: $ It's a LINE emoji!",
    "emojis": [
        {
            "index": 14,
            "emojiId": "001"
        }
    ]
}

두 방식에서 어떤 방식을 택할 지 고민하기 위하여 테스트를 진행해 보았습니다.



테스트


조건

길이가 554의 문자열 제일 뒤에 이모지를 넣는 조건으로 천만번 진행하였습니다.

코드

/**
 * 554 길이의 문자열, 천만번 스티커 변환시
 * replace 방식 16951 ms
 * index 방식 1000ms
 */
public class ChatStickerTest {

    @Test
    void findStickerSpeedTest_replace() {
        // message lenth : 554
        String message =
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd:::code";
        String target = ":::code";

        long beforeTime = System.currentTimeMillis();

        for (int i=0; i<10000000; i++) {
            message.replace(":::code", "sticker");
        }

        long afterTime = System.currentTimeMillis();
        long secDiffTime = afterTime - beforeTime;
        System.out.println("걸린 시간(ms) : " + secDiffTime);	// 16951 ms
    }

    @Test
    void findStickerSpeedTest_index() {
        // message lenth : 554
        String message =
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
                "aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd";
        String target = ":::code";
        int index = 554;

        long beforeTime = System.currentTimeMillis();

        for (int i=0; i<10000000; i++) {
            final String f = message.substring(0, index);
            final String b = message.substring(index, message.length());
            final String result = f + target + b;
        }

        long afterTime = System.currentTimeMillis();
        long secDiffTime = afterTime - beforeTime;
        System.out.println("걸린 시간(ms) : " + secDiffTime);	// 1000ms
    }
}



결론


길이가 554의 문자열 제일 뒤에 이모지를 넣는 조건으로 천만번 진행한 텔레그램 방식의 테스트 결과는 16951 ms이 소요되었고 약 17초로 환산됩니다.
line 방식으로 이모지를 넣는 방식의 테스트 결과는 1000ms가 소요되었으며 약 1초로 환산됩니다.

텔레그램에선 속도를 위해 어떻게 더 구현이 되어있는지 확인할 수 없고 테스트 결과로는 차이가 압도적으로 나기 때문에 LINE방식을 사용하는 것이 속도는 우위에 있는것으로 확인됩니다.

profile
Contact: leeeesanggyu@gmail.com

0개의 댓글