{"id":26784403,"url":"https://github.com/cmsong111/swing-todo","last_synced_at":"2026-05-17T02:35:45.009Z","repository":{"id":197566481,"uuid":"694787714","full_name":"cmsong111/Swing-todo","owner":"cmsong111","description":"Swing based Todo List application with Spring Data JPA","archived":false,"fork":false,"pushed_at":"2024-06-05T08:42:45.000Z","size":1404,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-06-05T12:59:37.758Z","etag":null,"topics":["kotlin","spring-data-jpa","springboot","swing","swing-gui"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cmsong111.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-21T17:35:13.000Z","updated_at":"2024-06-05T08:41:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"49b2f7d6-df3b-430e-8724-a422402e8854","html_url":"https://github.com/cmsong111/Swing-todo","commit_stats":null,"previous_names":["cmsong111/swing-todo"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmsong111%2FSwing-todo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmsong111%2FSwing-todo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmsong111%2FSwing-todo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmsong111%2FSwing-todo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cmsong111","download_url":"https://codeload.github.com/cmsong111/Swing-todo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246168355,"owners_count":20734441,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kotlin","spring-data-jpa","springboot","swing","swing-gui"],"created_at":"2025-03-29T10:19:50.982Z","updated_at":"2025-10-20T12:08:18.464Z","avatar_url":"https://github.com/cmsong111.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Swing(kotlin)을 활용한 TodoList 구현\n\n## 1. 프로젝트 목표\n\n- Swing을 활용한 TodoList 구현\n- SpringBoot와 연동하여 TodoList 데이터 관리\n    - Spring Data JPA를 활용하여 간단한 CRUD 구현\n- Java대신 Kotlin을 활용하여 개발\n    - Java와 Kotlin의 차이점을 이해하고, Kotlin의 장점을 활용하여 개발\n    - init, object, companion object, data class등을 활용하여 개발\n\n## 2. 프로젝트 구조\n\n### 2.1. 개발 환경\n\n- Kotlin 1.8.22\n- Java 17\n- SpringBoot 3.1.4\n- h2 Database\n- IntelliJ IDEA\n- Gradle\n\n### 2.2. 프로젝트 구조\n\n```text\n📦todo_swing\n ┣ 📂src\n ┃ ┣ 📂main\n ┃ ┃ ┣ 📂kotlin\n ┃ ┃ ┃ ┗ 📂com\n ┃ ┃ ┃ ┃ ┗ 📂gulio\n ┃ ┃ ┃ ┃ ┃ ┗ 📂todo_swing\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂configuration\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ApplicationContextProvider.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂entity\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Todo.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TodoRepository.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂view\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂widget\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CustomMenu.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CustomPopupMenu.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TodoChart.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LoadingPage.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜MainPage.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RefreshController.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TodoForm.kt\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TodoSwingApplication.kt\n ┃ ┃ ┗ 📂resources\n ┃ ┃ ┃ ┣ 📂image\n ┃ ┃ ┃ ┃ ┗ 📜loading_image.png\n ┃ ┃ ┃ ┣ 📂static\n ┃ ┃ ┃ ┣ 📂templates\n ┃ ┃ ┃ ┣ 📜application.yaml\n ┃ ┃ ┃ ┗ 📜data.sql\n```\n\n### 2.3. 프로젝트 특징\n\n+ 느슨한 결합(Loose Coupling)\n  + 'RefreshController.kt' 인터페이스에서 \"refresh()\" 메소드를 정의하고, 이를 구현한 \"TodoChart\" 에서 각각의 기능을 구현하였다.\n  + 이를 통해 다른 클래스에서 \"RefreshController\" 인터페이스를 통해 \"TodoChart\"의 기능을 사용할 수 있게 되었다.\n  \n## 3. 프로젝트 결과\n\n### 3.0. 실행\n\n\u003e 로딩 화면과 함께 SpringBoot가 실행된다.\n\n\u003cimg align=\"center\" src=\"./img/loading_page.png\"\u003e\n\n```bash\n\"C:\\Program Files\\Java\\jdk-17\\bin\\java.exe\" \n\n.   ____          _            __ _ _\n/\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\n( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\\n\\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\n'  |____| .__|_| |_|_| |_\\__, | / / / /\n=========|_|==============|___/=/_/_/_/\n:: Spring Boot ::                (v3.1.4)\n\n2023-10-02T04:33:54.266+09:00  INFO 1564 --- [           main] c.g.todo_swing.TodoSwingApplicationKt    : Starting TodoSwingApplicationKt using Java 17.0.8 with PID 1564 (D:\\Projects\\todo_swing\\build\\classes\\kotlin\\main started by cmson in D:\\Projects\\todo_swing)\n2023-10-02T04:33:54.269+09:00  INFO 1564 --- [           main] c.g.todo_swing.TodoSwingApplicationKt    : No active profile set, falling back to 1 default profile: \"default\"\n2023-10-02T04:33:54.748+09:00  INFO 1564 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.\n2023-10-02T04:33:54.783+09:00  INFO 1564 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 29 ms. Found 1 JPA repository interfaces.\n2023-10-02T04:33:55.105+09:00  INFO 1564 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)\n2023-10-02T04:33:55.113+09:00  INFO 1564 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]\n```\n\n### 3.1. TodoList\n\n\u003e Spring Data JPA를 활용하여 TodoList를 가져온다.\n\n\u003cimg align=\"center\" src=\"./img/main_page.png\"\u003e\n\n```bash\nHibernate: \n    select\n        t1_0.id,\n        t1_0.created_at,\n        t1_0.description,\n        t1_0.status,\n        t1_0.title,\n        t1_0.updated_at \n    from\n        todo t1_0\n2023-10-02T04:33:56.731+09:00  INFO 1564 --- [           main] c.g.todo_swing.view.widget.TodoChart     : Todo(id=1, title='머리 자르기', description='학교 마치고 잊지 말고 머르 자르기', status=false, createdAt=2023-10-02 04:33:56.55495, updatedAt=2023-10-02 04:33:56.55495)\n2023-10-02T04:33:56.731+09:00  INFO 1564 --- [           main] c.g.todo_swing.view.widget.TodoChart     : Todo(id=2, title='별다방 커피 사기', description='맛있는 커피는 하루의 필수', status=false, createdAt=2023-10-02 04:33:56.55495, updatedAt=2023-10-02 04:33:56.55495)\n2023-10-02T04:33:56.731+09:00  INFO 1564 --- [           main] c.g.todo_swing.view.widget.TodoChart     : Todo(id=3, title='집갈 때 계란 한판 사가기', description='내일 아침밥', status=false, createdAt=2023-10-02 04:33:56.55495, updatedAt=2023-10-02 04:33:56.55495)\n```\n\n### 3.2. TodoList 추가\n\n\u003cimg  align=\"center\" src=\"./img/add_todo.gif\"\u003e\n\n### 3.3. TodoList 수정\n\n\u003cimg  align=\"center\" src=\"./img/edit_todo.gif\"\u003e\n\n### 3.4. TodoList 완료\n\n\u003cimg  align=\"center\" src=\"./img/done_todo.gif\"\u003e\n\n### 3.5. TodoList 삭제\n\n\u003cimg  align=\"center\" src=\"./img/delete_todo.gif\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmsong111%2Fswing-todo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcmsong111%2Fswing-todo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmsong111%2Fswing-todo/lists"}