Skip to content

gd452/hello-kotlin

Repository files navigation

Hello Kotlin - Spring Boot ν”„λ‘œμ νŠΈ

Kotlinκ³Ό Spring Bootλ₯Ό ν™œμš©ν•œ μ‹€μ „ ν”„λ‘œμ νŠΈ ν•™μŠ΅ Repository

πŸš€ ν”„λ‘œμ νŠΈ μ†Œκ°œ

이 ν”„λ‘œμ νŠΈλŠ” Kotlin & SpringBoot μ‹€μ „ λ§ˆμŠ€ν„° 3단계 λ‘œλ“œλ§΅μ˜ 첫 번째 단계 ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€. κ°„λ‹¨ν•œ Hello API와 Todo CRUD κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ—¬ Kotlinκ³Ό Spring Boot의 κΈ°λ³ΈκΈ°λ₯Ό 읡힐 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ›  기술 μŠ€νƒ

  • Language: Kotlin
  • Framework: Spring Boot 3.x
  • Build Tool: Gradle (Kotlin DSL)
  • Database: H2 (In-memory)
  • Dependencies:
    • Spring Web
    • Spring Data JPA
    • H2 Database
    • Kotlin Coroutines

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

src/main/kotlin/com/example/hellokotlin/
β”œβ”€β”€ HelloKotlinApplication.kt    # 메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜
β”œβ”€β”€ controller/                  # REST 컨트둀러
β”‚   β”œβ”€β”€ HelloController.kt       # Hello API
β”‚   └── TodoController.kt        # Todo CRUD API
β”œβ”€β”€ entity/                      # JPA μ—”ν‹°ν‹°
β”‚   └── Todo.kt                  # Todo μ—”ν‹°ν‹°
β”œβ”€β”€ repository/                  # JPA λ ˆν¬μ§€ν† λ¦¬
β”‚   └── TodoRepository.kt        # Todo λ ˆν¬μ§€ν† λ¦¬
└── kotlin_learning/             # Kotlin ν•™μŠ΅ 예제
    β”œβ”€β”€ 01_basics.kt             # κΈ°λ³Έ 문법
    β”œβ”€β”€ 02_oop.kt                # 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°
    β”œβ”€β”€ 03_functional.kt         # ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°
    β”œβ”€β”€ 04_advanced.kt           # κ³ κΈ‰ κΈ°λŠ₯
    β”œβ”€β”€ 05_practice_missions.kt  # μ‹€μŠ΅ λ―Έμ…˜
    β”œβ”€β”€ KOTLIN_LEARNING_GUIDE.md # ν•™μŠ΅ κ°€μ΄λ“œ
    └── notebooks/               # μΈν„°λž™ν‹°λΈŒ ν•™μŠ΅μš© λ…ΈνŠΈλΆ
        β”œβ”€β”€ 01_basics_notebook.ipynb
        β”œβ”€β”€ 02_oop_notebook.ipynb
        β”œβ”€β”€ 03_functional_notebook.ipynb
        β”œβ”€β”€ 04_advanced_notebook.ipynb
        └── 05_practice_missions_notebook.ipynb

πŸ“š Kotlin ν•™μŠ΅ κ³Όμ •

🎯 ν•™μŠ΅ 방법 선택

1. Kotlin 파일둜 ν•™μŠ΅ (μΆ”μ²œ: λΉ λ₯Έ μ‹€ν–‰)

  • 각 .kt νŒŒμΌμ—λŠ” main() ν•¨μˆ˜κ°€ μžˆμ–΄ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ κ°€λŠ₯
  • IntelliJ IDEAμ—μ„œ 파일 μ—΄κ³  main ν•¨μˆ˜ μ™Όμͺ½μ˜ β–Ά λ²„νŠΌ 클릭
  • SpringBoot Runner둜 μ‹€ν–‰:
    ./gradlew bootRun --args="basics"    # κΈ°λ³Έ 문법
    ./gradlew bootRun --args="oop"       # 객체지ν–₯
    ./gradlew bootRun --args="functional" # ν•¨μˆ˜ν˜•
    ./gradlew bootRun --args="advanced"   # κ³ κΈ‰ κΈ°λŠ₯
    ./gradlew bootRun --args="practice"   # μ‹€μŠ΅

2. Jupyter Notebook으둜 ν•™μŠ΅ (μΆ”μ²œ: μΈν„°λž™ν‹°λΈŒ ν•™μŠ΅)

  • 각 κ°œλ…μ„ λ‹¨κ³„λ³„λ‘œ μ‹€ν–‰ν•˜λ©° ν•™μŠ΅
  • μ¦‰μ‹œ κ²°κ³Ό 확인 κ°€λŠ₯
  • μ½”λ“œ μˆ˜μ • ν›„ μž¬μ‹€ν–‰ 용이

Jupyter μ„€μΉ˜ 및 μ‹€ν–‰:

# Kotlin Kernel μ„€μΉ˜
pip install jupyter
conda install -c jetbrains kotlin-jupyter-kernel

# λ…ΈνŠΈλΆ μ‹€ν–‰
jupyter notebook
# λΈŒλΌμš°μ €μ—μ„œ .ipynb 파일 μ—΄κΈ°

πŸ“‹ ν•™μŠ΅ λ‚΄μš©

  1. κΈ°λ³Έ 문법 (01_basics.kt / 01_basics_notebook.ipynb)

    • λ³€μˆ˜ μ„ μ–Έ (val, var) - Java의 finalκ³Ό 비ꡐ
    • ν•¨μˆ˜ μ •μ˜μ™€ 호좜 - Python의 κΈ°λ³Έκ°’ λ§€κ°œλ³€μˆ˜ 지원
    • 쑰건문 (if, when) - Java의 switch보닀 κ°•λ ₯
    • 반볡문 (for, while) - Python의 range와 μœ μ‚¬
    • Null Safety - NullPointerException λ°©μ§€
  2. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° (02_oop.kt / 02_oop_notebook.ipynb)

    • ν΄λž˜μŠ€μ™€ μƒμ„±μž - Java보닀 κ°„κ²°ν•œ 문법
    • 데이터 클래슀 - Python의 @dataclass와 μœ μ‚¬
    • 상속과 λ‹€ν˜•μ„± - 기본적으둜 final, open ν‚€μ›Œλ“œλ‘œ 상속 ν—ˆμš©
    • μΈν„°νŽ˜μ΄μŠ€ - Java 8+처럼 κΈ°λ³Έ κ΅¬ν˜„ κ°€λŠ₯
    • Sealed 클래슀 - νƒ€μž… μ•ˆμ „ν•œ μƒνƒœ ν‘œν˜„
    • 싱글톀 객체 - μ–Έμ–΄ 레벨 싱글톀 지원
  3. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° (03_functional.kt / 03_functional_notebook.ipynb)

    • λžŒλ‹€ ν‘œν˜„μ‹ - Java 8 λžŒλ‹€λ³΄λ‹€ κ°„κ²°
    • κ³ μ°¨ ν•¨μˆ˜ - ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ, λ°˜ν™˜κ°’μœΌλ‘œ
    • μ»¬λ ‰μ…˜ μ—°μ‚° (filter, map, reduce) - Java Stream API와 μœ μ‚¬
    • μ‹œν€€μŠ€μ™€ μ§€μ—° 평가 - λŒ€μš©λŸ‰ 데이터 효율적 처리
    • ν•¨μˆ˜ ν•©μ„± - μž‘μ€ ν•¨μˆ˜λ“€μ„ μ‘°ν•©
  4. κ³ κΈ‰ κΈ°λŠ₯ (04_advanced.kt / 04_advanced_notebook.ipynb)

    • ν™•μž₯ ν•¨μˆ˜ - κΈ°μ‘΄ ν΄λž˜μŠ€μ— λ©”μ„œλ“œ μΆ”κ°€
    • κ°’ 클래슀 (Inline Classes) - λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œ μ—†λŠ” 래퍼
    • μœ„μž„ (Delegation) - by ν‚€μ›Œλ“œλ‘œ μœ„μž„ νŒ¨ν„΄ κ΅¬ν˜„
    • 코루틴 - 비동기 ν”„λ‘œκ·Έλž˜λ°
    • DSL ꡬ좕 - 도메인 νŠΉν™” μ–Έμ–΄ λ§Œλ“€κΈ°
  5. μ‹€μŠ΅ λ―Έμ…˜ (05_practice_missions.kt / 05_practice_missions_notebook.ipynb)

    • Todo μ•± κ΅¬ν˜„ - κΈ°λ³Έ CRUD와 μƒνƒœ 관리
    • 계산기 κ΅¬ν˜„ - Sealed 클래슀둜 νƒ€μž… μ•ˆμ „ν•œ μ—°μ‚°
    • 가계뢀 μ•± κ΅¬ν˜„ - 데이터 뢄석과 리포트 생성

πŸ“– μΆ”κ°€ ν•™μŠ΅ 자료

μžμ„Έν•œ ν•™μŠ΅ κ°€μ΄λ“œλŠ” KOTLIN_LEARNING_GUIDE.mdλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

πŸƒβ€β™‚οΈ μ‹€ν–‰ 방법

1. ν”„λ‘œμ νŠΈ 클둠

git clone https://github.com/gd452/hello-kotlin.git
cd hello-kotlin

2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

./gradlew bootRun

3. H2 Console 접속

πŸ“‘ API μ—”λ“œν¬μΈνŠΈ

Hello API

  • GET /hello
    • κ°„λ‹¨ν•œ 인사 λ©”μ‹œμ§€ λ°˜ν™˜
    • Response: "Hello, SpringBoot + Kotlin!"

Todo API

  • GET /todos

    • λͺ¨λ“  Todo λͺ©λ‘ 쑰회 (μ΅œμ‹ μˆœ μ •λ ¬)
  • GET /todos/{id}

    • νŠΉμ • Todo 쑰회
  • POST /todos

    • μƒˆλ‘œμš΄ Todo 생성
    • Request Body:
      {
        "title": "ν•  일 제λͺ©",
        "description": "ν•  일 μ„€λͺ…",
        "completed": false
      }
  • PUT /todos/{id}

    • Todo μˆ˜μ •
    • Request Body:
      {
        "title": "μˆ˜μ •λœ 제λͺ©",
        "description": "μˆ˜μ •λœ μ„€λͺ…",
        "completed": true
      }
  • DELETE /todos/{id}

    • Todo μ‚­μ œ

πŸ§ͺ API ν…ŒμŠ€νŠΈ μ˜ˆμ‹œ

Todo 생성

curl -X POST http://localhost:8080/todos \
  -H "Content-Type: application/json" \
  -d '{"title":"Kotlin κ³΅λΆ€ν•˜κΈ°","description":"Spring Boot와 ν•¨κ»˜"}'

Todo λͺ©λ‘ 쑰회

curl http://localhost:8080/todos

πŸš€ ν•™μŠ΅ λ‘œλ“œλ§΅

ν˜„μž¬ 단계: 1단계 - Kotlin & SpringBoot μ‹€μ „ μž…λ¬Έ βœ…

  • βœ… Kotlin κΈ°λ³Έ 문법 ν•™μŠ΅
  • βœ… SpringBoot 기초 (Hello API, CRUD)
  • βœ… H2 인메λͺ¨λ¦¬ DB 연동
  • βœ… μΈν„°λž™ν‹°λΈŒ ν•™μŠ΅ 자료 제곡 (Jupyter Notebook)

λ‹€μŒ 단계

2단계: 법인차 μš΄ν–‰κΈ°λ‘λΆ€ 생성 μ„œλΉ„μŠ€ (슀λͺ° ν”„λ‘œμ νŠΈ)

  • μ‹€μ œ 업무 μžλ™ν™” ν”„λ‘œμ νŠΈ
  • μž…λ ₯κ°’ 기반 μš΄ν–‰κΈ°λ‘ μžλ™ 생성
  • κ·œμΉ™ 기반 데이터 처리
  • CSV/Excel 좜λ ₯ κΈ°λŠ₯

3단계: νˆ¬μžλΆ„μ„/정리 μ„œλΉ„μŠ€ (μ’…ν•© ν”„λ‘œμ νŠΈ)

  • μ’…λͺ©/거래 관리
  • 투자 μ§€ν‘œ 뢄석
  • 리포트 생성
  • ν™•μž₯ κ°€λŠ₯ν•œ μ•„ν‚€ν…μ²˜ 섀계

각 λ‹¨κ³„λ³„λ‘œ μ μ§„μ μœΌλ‘œ λ³΅μž‘λ„κ°€ μ¦κ°€ν•˜λ©°, μ‹€μ „μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” κΈ°μˆ λ“€μ„ 읡힐 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’‘ ν•™μŠ΅ 팁

  1. Java 개발자: Kotlin의 null safety와 ν™•μž₯ ν•¨μˆ˜μ— μ£Όλͺ©ν•˜μ„Έμš”
  2. Python 개발자: 정적 νƒ€μž…μ˜ μž₯점을 ν™œμš©ν•˜λ©΄μ„œλ„ κ°„κ²°ν•œ 문법 즐기기
  3. C/C++ 개발자: λ©”λͺ¨λ¦¬ 관리 없이 μ•ˆμ „ν•œ ν”„λ‘œκ·Έλž˜λ° κ²½ν—˜ν•˜κΈ°

🀝 κΈ°μ—¬ 방법

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“ License

이 ν”„λ‘œμ νŠΈλŠ” ν•™μŠ΅ λͺ©μ μœΌλ‘œ λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.


Built with ❀️ using Kotlin and Spring Boot

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •