[Bluebot] 개발일지 - Pillow에 대해서

배연우·2023년 7월 20일
0

Bluebot

목록 보기
1/1

블루봇 개발에 있어, 앞으로의 목표는 대부분의 embed를 사용하는 명령어들을 가시성과 자유도를 높이기 위해서라도 이미지를 적극 활용하는 방향으로 제작하려고 하였다.

문제점

embed 대신 Image를 사용하게 된다면, 어마어마하게 많은 Pillow를 사용하게 될 텐데, 문제는 총 두가지가 있다.

1. 속도와 처리량의 문제

측정해보지는 않았지만, 이미지를 생성하고, 보내야 하는 작업이 들어가기 때문에 봇에 많은 부하를 줄 수 있고, 속도 역시 느려질 것 같다는 문제가 있다.

2. Pillow

Pillow가 파이썬에서 이미지를 만드는 데에는 최적의 라이브러리인 것은 사실인 것 같다. 그러나, Flutter를 하다 온 입장으로서 Pillow 는 여전히 많은 불편함을 준다. 예를 들어보자. Pillow 에서 텍스트를 중앙에 정렬해 배치하기 위해서는 다음과 같은 코드가 필요하다.

titleFont = ImageFont.truetype('../font/SUITE-SemiBold.ttf', 30) # 폰트를 지정한다.
text = "아무튼 대충 감당하기 힘들 정도로 엄청 엄청 엄청나게 긴 이름의 테스트 게임"
_, _, w, h = I1.textbbox((0, 0), text, font=titleFont)  # 이 부분에서 텍스트의 실제 길이와 높이를 알아낸다.
I1.text(((800 - w) / 2, 40), text, fill=(255, 255, 255), font=titleFont)    
# 그 후, 부모의 크기에서 텍스트의 크기를 빼고,
# 그걸 나누기 2해서 horizontal로 중앙 정렬을 할 수 있다. 
im.show()

보면 알겠지만, 복잡하다. 그러나 Flutter에서는 이렇게 해결이 가능하다.

Center(
	child: Text("아무튼 텍스트",
    style: TextStyle(font: ..., fontSize: ...)
	)
)

코드가 더 직관적이고, 깔끔하게 짜는 것이 가능하다.

그렇다면, 내 생각에는 Flutter와 같은 코딩이 python에서도 가능하게 객체를 만드는 것이 좋지 않을까 생각했다.

내가 걱정하는 것은 2가지다.

1. 시간 낭비가 아닐까?

많이 쓰이기는 하지만, 굳이 객체로 만들지 않아도 메서드 몇개면 충분한 것이 아닐까?

2. 이렇게 짜게 된다면 당연하게도 시간이 더 오래 걸릴 것이다.

개발의 편의성은 올라갈 수 있어도, 이 코드가 실행되는데 있어서는 더 많은 시간이 들 수 밖에 없는 것은 당연하다. 그냥 앱이라면 모를까, Discord의 경우에는 서버가 모든 연산을 처리해서 뱉어줘야 하기 때문에, 성능은 매우 중요한 요소 중 하나이다.

해결책

아직 찾지는 못하였다. 일단은 메서드로 엮는 것만 해보고, 더 준비가 되면 그때 해볼 생각이다. 성능은... 잘 모르겠다. 테스트를 어떻게 만들어야 할 지도 공부하자.

profile
주니어 개발자

0개의 댓글