전체 글35 아트 담당자 없는 팀에서 AI로 2D 몬스터 애니메이션 만들기 우리 팀에는 아트를 전문으로 맡는 사람이 없습니다. 첫 게임인 K-God Robot Hunters를 만들면서, 아트도 익숙하지 않은 상태에서 하나씩 부딪혀야 했습니다. 이번 글은 그중 전투에 등장하는 몬스터의 2D 애니메이션을 만든 기록입니다. 시작부터 끝까지 AI의 도움을 받았지만, 사람이 준비하고 고르고 수정하는 일도 계속 필요했습니다. 게임이 궁금하시다면 Steam 페이지에서 K-God Robot Hunters를 살펴보세요. 게임은 전장에서 몬스터와 싸우는 구성이며, 전투 연출에는 Slay the Spire를 많이 참고했습니다. 제가 구현한 동작은 대기(idle), 피격(hit), 사망(dead) 세 가지입니다. 비슷한 전투 화면에서 캐릭터 애니메이션을 만들어야 하는 분에게 시행착오가 도움이 되었.. 2026. 10. 3. Spring Batch Paging vs Cursor 배치를 돌릴 때 페이징 처리를 할 지 커서를 할 지 고민이 되는 때가 있다.업무적으로 경험했던 많은 케이스들을 떠올려보면 해당하는 조건의 모든 데이터가 대상이 되기 때문에, 애초부터 쿼리를 잘 짜서 Cursor로 돌리는 것이 편하다. PagingItemReader의 경우에는 데이터가 많아질수록 한 번의 쿼리 수행이 느려지는 단점이 있다. 또한, MyBatisPagingItemReader 쿼리 내에 paging 처리를 위한 파라미터를 따로 추가해줘야 하는 번거로움도 있다. (없으면 계속 첫 페이지를 돌리기 때문에 뜻밖의 장애와 마주칠 수 있다)SELECT FOOFROM BARWHERE TYPE = 'A'OFFSET #{_skiprows} ROWS FETCH NEXT #{_pagesize} ROWS ONLY.. 2025. 7. 28. Pub-Sub 구조에서 자주 발생하는 실수 Kafka를 통해서 Event Driven Architecture를 만들다 보면 흔히 발생하는 실수가 한 가지 있다. 바로 트랜잭션 종료 전에 Event를 전송하게 되는 것이다. 가령 상품을 생성하고 상품 번호를 받아서 후처리를 하는 경우, Subscriber에서 상품 번호로 조회를 하고자 하면 조회가 되지 않을 수도 있다. Publisher와 Subscriber 각각 layer 단위로 테스트 할 때는 발견이 되지 않는 문제다. 또한 개발 서버에서 테스트할 때도 Kafka와 DB의 속도 차이에 따라 테스트 중에 발견이 되지 않을 수도 있다. 다른 팀과 함께 협업을 하는 상황이라면 어디에서 잘못된 것인지 알아채기 굉장히 어려운 경우도 종종 있었던 것 같다. Subscriber 기준에서 Retry 설정을 갖.. 2022. 2. 16. Kafka 자주 쓰는 명령어 정리 버전 확인 $ bin/kafka-topics.sh --version Topic 관리 토픽 생성 $ bin/kafka-topics.sh --create --zookeeper ${zookeeper} --replication-factor 3 --partitions ${partitions} --topic ${topicName} * 토픽을 생성할 때 deadLetter도 함께 만들어 두는 습관을 갖자. deadLetter는 토픽의 파티션과 같은 숫자여야 한다. 토픽 확인 $ bin/kafka-topics.sh --describe --zookeeper ${zookeeper} --topic ${topicName} 토픽의 파티션 갯수, replication factor, retention등의 부가 설정을 확인할 수 있.. 2022. 2. 16. /dev/null 이해하기 Backend 개발자로서 업무 중에 스크립트를 작성할 일이 많지 않지만, 배포 스크립트를 작성하다 보면 리눅스 잘 모르는 사람으로서 당황스러운 구문이 /dev/null이었다. java -jar myapplication.jar > /dev/null 2> /dev/null jar로 되어있는 프로그램을 실행시킨다. > /dev/null => 실행 결과에 대한 응답값(STDOUT)을 무시한다. 2> /dev/null => 실행시 오류(STDERR)를 무시한다. 실행한 곳에 EOF를 전달한다. & => 백그라운드로 실행한다. /dev/null 자체는 리눅스에서.. 2021. 10. 14. Modern Java In Action 정리 - 13 디폴트 메서드 자바8 이전에는 인터페이스에 새로운 메소드를 추가하게 된다면 해당 인터페이스를 implement하는 쪽에서 전부 compile error가 나곤 했다. 따라서 하나의 인터페이스를 정의하더라도 굉장히 고심해서 설계해야 했다. 하지만 요구사항은 쉽게 변하고 변경이 많아지기 때문에 이러한 문제는 어떻게든 계속 일어나게 된다. 자바8에서는 인터페이스에 static method 와 default method를 추가해서 이 문제를 해결하고자 했다. 인터페이스를 구현하는 클래스는 자동으로 추가된 디폴트 메서드를 상속받게 된다. default void sort(Comparator 2020. 7. 11. 이전 1 2 3 4 ··· 6 다음