잡다한 개발 17

dev'log 2주일 회고

2023년도 8월 25(금)부터 8월 31(목)까지 dev'log 를 개발하면서 현재 겪고 있는 문제들에 대해서 작성하면서 한 번 더 고민하는 시간을 갖고자 블로그를 작성하고 있습니다. 생각하는 개발자 개요 git commit 을 즉시 가져오는 것은 비용적으로 좀 힘들것이라 판단했습니다. 일단 생각하고는 있는 걸로는 저 혼자만 사용하려는 목적으로 개발하고 있지만, 혹여나 사용자가 500명만 넘어도 꽤나 힘들것 같다는 생각을 하게 되었습니다. (사실 지금 테스트하는 현재도 성능상으로 불안불안합니다.) 그래서 NestJS의 Scheduler Task로 Cron을 지정해주어 background에서 동작하도록 한다면 특정 시간대에만 갱신되기에 무리를 최대한 줄일 수 있으리라 생각했습니다. 헌데, 이러한 일련의 ..

잡다한 개발 2023.08.31

dev'log 1주일 회고

2023년 8월 18일(금)부터 현재(2023년 8월 24일(목))까지, 약 일주일간 git commit을 기반으로 블로그 포스트를 해주는 서비스를 개발했습니다. 배포까지 감안하고 개발을 시작했기에 평소 자주 사용하였던 Java 기반의 Spring framework가 아닌 JavaScript(TypeScript) 기반 (정확히는 node 기반)의 NestJS를 시도하였습니다. (기존까지는 실 서비스를 하는 모든 프로젝트들은 Spring framework를 사용하였고, 간단한 토이프로젝트들만 NestJS를 사용하였습니다.) 사용하고 있는 기술 스택 NestJS (TypeScript) Next.js (TypeScript) MongoDB (6.0.9) 난생 처음으로 Next.js를 현재 시도해보고 있습니다. ..

잡다한 개발 2023.08.24

학교 축제용 디스코드 봇 개발기(記)-2

해당 글은 대구소프트웨어마이스터고등학교에 재학 중인 3학년의 글입니다. 학교 축제인 "대소고 E-SPORTS"에 사용될 디스코드 봇의 소스코드를 주로 다룰 것이며, 이전 글과 이어집니다. 데이터베이스 선정 기준 이전 글에서 언급하였듯 mongoDB를 데이터베이스로 사용하고 있습니다. RDBMS가 아닌 NoSQL인 mongoDB를 택한 이유는 비동기 친화적이며, 대량의 데이터를 처리해야 하는 애플리케이션에 높은 확장성을 제공하기 때문에 택하였습니다. MongoDB를 소스코드에서 접근한 방법 우선 node 생태계에서는 monogoose라는 라이브러리를 지원해주고 있기에 손쉽게 MongoDB에 접근할 수 있습니다. 편리한 접근을 위해서는 model을 객체로 하여 접근하는 것인데, 이 역시 매우 쉽게 지원하고 ..

학교 축제용 디스코드 봇 개발기(記)

해당 글은 대구소프트웨어마이스터고등학교에 재학 중인 3학년의 글입니다. 학교 축제인 "대소고 E-SPORTS"에 사용될 디스코드 봇의 요구사항, 코드들을 주로 다룰 예정입니다. 복잡한 요구사항에 얽매이지 않고, 주도적으로 개발하는 것을 정말 오랜만에 진행해보다 보니, 뭔가 어색합니다. 마음이 정말 평화롭게 개발하며, 천천히 개발에 대한 흥미를 다시금 되찾는 개발기(記)였습니다. 만들게 된 계기 학교 축제인 "대소고 E-SPORTS"를 진행함에 있어 관객들은 굉장히 큰 역할을 수행합니다. 하지만 게임 중계만으로는 관객들의 눈길을 계속해서 끌고 집중을 돕는 데에는 한계가 있습니다. 그렇기에 주체인(실명 대신, 이니셜로만 표현하겠습니다.) YBH의 부탁으로 접근성이 높은 디스코드를 활용한 게임 배팅 기능을 탑..

[잡다한 개발] - CloverDownloader 1.3.0 버그記

문제 발생 작성일 기준(2023-01-31)에 CloverDownloader 의 버전을 업데이트하여 릴리즈하기 앞서 CPU와 메모리의 usage 정도를 파악하는 중에 기존 버전인 1.2.0 은 CPU 사용량이 0에 가까웠는 데 반해 1.3.0은 평균 26%, 다운로드를 할 경우 40%이상을 평균적으로 사용한다는 점을 IntelliJ Profiler를 통해 파악했다. 사진으로 보면 차이가 무척 많이 나는 것을 확인할 수 있다. 아마 1.2.0 에서 1.3.0 을 개발하면서 UI 와 마이너한 버그들을 뜯어고치는 과정에서 CPU와 메모리 관리를 철저히 하지 못한 불찰로 이런 문제가 발생한 것 같다. (추가로 기능들을 여러 추가하기도 했다.) 그래서 CPU와 메모리의 사용량이 전 버전보다 상당한 이유를 어느정도..

자바 소켓을 사용한 단순한 채팅 프로그램

심심해서 개발해보았습니다. 자기만족용 영상입니다. 자바 자체적으로 있는 소켓을 사용하여 1대1 채팅 프로그램을 제작하였습니다. 소스코드는 이링크를 참조해주세요. (스타 눌러주시면 감사하겠습니다..) server를 먼저 실행한 후, client를 실행하면 잘 작동합니다. (아직 오류가 있습니다. 둘 중 하나가 먼저 종료가 되면 null이 끊임없이 출력됩니다.)

마크 가챠 5편

이제 타이머 기능을 추가하여 플러그인을 마무리 짓도록 하겠습니다. 타이머는 보스바로 개발을 하였습니다. 클래스명은 BossBarManagement 로 생성자 호출시, 타이머 기능을 수행하도록 합니다, public class BossBarManagement { public Plugin plugin; public static int time = 60; public static final HashMap timer = new HashMap(); // 고유 아이디, addedTime public static final HashMap userBossBars = new HashMap(); // 고유 아이디, BossBar public BossBarManagement(Player player, Plugin plugin..

마크 가챠 4편

지난번에는 가챠 상자를 정의하고 가챠 상자 이벤트를 만들 준비를 끝냈습니다. 이제 가챠 상자에서 나오는 오브젝트들을 선택하고 나오도록 만들겠습니다. 그리고 실제로 작동하도록 하겠습니다. 실제로 작동하도록 하는 것은 그리 어렵지는 않지만, 이를 기반으로 세팅하는 것은 자바로 직접적으로 연결이 되어있기 때문에 이번 강좌는 자바에 대해 혹은 개발에 대해 아무것도 모르시는 분들께는 어려울 수 있다는 점, 미리 말씀드립니다. 먼저 늘 그래 왔듯이 클래스를 하나 만듭니다. 클래스명은 GachaBoxResult입니다. 먼저 List라는 것을 사용할 것입니다. List를 간단하게 말하자면 자료형을 정하고 많은 자료들을 배열에 비해 편하게 사용을 할 수 있도록 하는 Collection 중 하나입니다. Collection..

마크 가챠 3편

이전에 모든 세팅을 끝내고 연결 코드를 작성하였기 때문에 가챠 상자를 만드는 것을 할 것입니다. 가챠 상자는 가장 상자스러우면 좋겠다고 생각하여 아래 4가지의 상자들을 후보로 선택하였습니다. 위 4가지 중 개인적으로 셜커 상자로 하고 싶어서 셜커 상자로 선택하였습니다. 엔더 상자도 마음에 들긴 하였지만, 열리는 모습이 독특한 셜커 상자로 결정하였습니다. 먼저 누가봐도 가챠 상자임을 확인할 수 있도록 클래스명은 GachaBox로 하였습니다. 그리고 가챠 상자와 해당 상자임을 확인할 수 있는 독특한 메타를 설정하기 위해 멤버 변수로 가챠 상자와 메타 변수를 선언합니다. public static ItemStack gachaBox = new ItemStack(Material.SHULKER_BOX); public..

마크 가챠 2편

지난 번에 모든 세팅을 하였습니다. 이번에는 예정대로 메인 클래스와 플러그인 작동 및 종료 로그를 보내도록 하겠습니다. 먼저 아마 저번에 세팅했던 플러그인 이름이 메인 클래스로 이미 되어 있을 겁니다. public final class 메인 클래스명 extends JavaPlugin { @Override public void onEnable() { // Plugin startup logic } @Override public void onDisable() { // Plugin shutdown logic } } 메인 클래스에 멤버 변수를 선언하여, 간단하게 로그를 보낼 수 있도록 합니다. 더보기 (※멤버변수란? 클래스 내부에 존재하는 변수로서 클래스 변수 혹은 인스턴스 변수로 구분 지을 수 있는 변수 입니다..