BJSolveAssist Project

Hyeon-Uk·2024년 1월 16일
1

BJSolveAssist

목록 보기
1/4
post-thumbnail

🛒 Marketplace

Intellij Marketplace

Github

Github

❓ 왜 이런 프로젝트를?

평소에 알고리즘 푸는것을 좋아하는데, 문제를 풀때마다 불편한점이 있었습니다.

  • 입력 복사 -> 실행 -> 붙여넣기 -> 두 눈으로 결과 비교

이런 프로세스를 모든 예제 입력마다 실행시키고, 눈으로 검사하고, 반례도 찾아서 하나하나 입력하는것에 불편함을 느꼈습니다.

불편함을 어떻게 해결하면 좋을까? 라는 생각에 IDE에서 프로그래머스, 혹은 JUnit과 같이 버튼 클릭만으로 내 알고리즘 풀이를 검증할 수 있으면 좋을것 같다! 라는 생각에 진행했습니다.

📷 Preview

  • 백준의 번호를 입력하거나 수동으로 테스트 케이스를 추가합니다
  • 실행버튼을 눌러 테스트 케이스를 모두 검증합니다.

⚙ 개발환경

  • Java 17
  • Intellij Plugin SDK
  • Gradle

🔑 Diagram

기능

Load test data

(해당 기능은 백준의 이용 규칙에 위배되기때문에 막아뒀습니다)
돋보기 버튼을 이용하여 해당 문제에 대한 입출력 예제를 가져옵니다.
load test data

Add test case

커스텀 예제 및 추가적인 반례를 검증하기 위해 + 버튼을 눌러 수동으로 테스트 케이스를 추가합니다.
add test

Remove test case

필요없는 테스트 케이스를 - 버튼을 눌러 삭제합니다.
remove test

Run all tests

Run all tests 버튼을 눌러 모든 테스트를 실행합니다.
run all tests

Run test

Run Selected test 버튼을 눌러, 선택된 테스트 케이스를 실행시킵니다.
run test

Run test with context menu

컨텍스트 메뉴에서 Run All Tests 메뉴를 클릭하여 실행시킵니다.
run with context menu

Stop all tests

Stop all tests 버튼을 클릭하여 실행중인 모든 테스트를 중지시킵니다.
stop all tests

😊 회고록

서버만 개발만 집중적으로 공부하다가 intellij plugin 개발이라는 도전을 해보니 막막했습니다. 처음 접하는 Intellij Plugin sdk를 사용하기 위해 Jetbrain에서 공식 document를 읽어보고, 크게 활성화되지 않은 커뮤니티를 뒤져가며 editor에 콘솔화면 넣기, 렌더링 최적화, action bar 추가하는 방법 등을 찾아 프로젝트에 적용했습니다.

해당 프로젝트에서 고민한 점은 다음과 같습니다.
0. 법적인 문제! (젤 중요)
1. Swing을 이용해서 레이아웃을 어떻게 해야할지
2. Thread를 이용해서 동시에 많은 Process를 실행시키고, 안정적으로 관리하는 방법
3. 메모리 낭비를 최소화하자
4. 확장 가능성을 생각하자

❓ 0번 고민

0번은 가장 중요하기 때문에 프로젝트 시작전에 찾아봤습니다. 먼저 백준에서 제공하는 공식 API에 문제 예제를 가져올 수 있는지 찾아봤습니다.
백준 API API로 문제에 대한 여러 정보를 가져올 수 있지만, 입출력 예제에 대한 정보는 포함되지 않아 크롤링을 사용해보자! 라는 생각이 들었습니다.

하지만 크롤링은 법적인 문제가 생기기 때문에, 크롤링을 해도 되는지에 대해 해당 사이트의 Robots.txt를 확인해봤습니다.

하지만, 백준의 이용 규칙에 뚜둔,,,!

위와 같은 규칙이 있기 때문에 후다닥 기능을 막은 뒤 배포하여 매우 눈물이 납니다...🥲 추후 백준에서 API를 제공해준다면,,,API를 이용해서 배포할 것 입니다.

❓ 1번 고민

1번은 저만의 개발자 스러움을 첨가시켜 최대한 사용하기 편한 UI/UX를 제공했다고 생각합니다.(피드백은 달게받는편이니 많은 의견 부탁드립니다....)

❓ 2번 고민

2번은 현재 ThreadPoolExecutor를 이용해서 한정된 자원을 이용하여 여러개의 Thread를 안정적으로 관리할 수 있도록 구현했습니다.

❓ 3번 고민

3번은 다음 릴리즈에 적용할 내용입니다. icon, label, title-border와 같이 컴포넌트에서 중복적으로 사용이 되지만, 변경되지 않는 객체들을 최적화하여 메모리를 아끼기 위해 플라이 웨이트 패턴을 적용할 예정입니다.

❓ 4번 고민

4번은 현재는 백준OJ사이트와 Java언어로만 국한되어있습니다. 이를 추후 다른 사이트와 다른 언어로 확장하기 쉽도록 Crawler 인터페이스와 CodeRunner 인터페이스를 두었고, 이를 다른 사이트와 다른 언어에 맞게 구현하여 Provider에 등록하여 확장할 수 있도록 프로젝트를 설계했습니다.

이런 고민거리들은 추후 다른 포스팅에서 구체적으로 소개할것인데, 이런 고민으로 인해 한층 더 성장할 수 있었고, 불편함을 해결할 수 있었다 라는 생각을 하니 개발자로서 성취감을 느낄 수 있었습니다.

profile
Hi🖐

0개의 댓글