Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[7주차/마르코] 키워드 제출합니다~~ #10

Open
wants to merge 3 commits into
base: marco/main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions keyword/chapter07/keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
- Database (DB)
- Database의 정의는 무엇일까요?
- 데이터를 체계적으로 저장하고 관리하는 시스템. 여러 데이터를 빠르게 조회, 삽입, 수정, 삭제할 수 있도록 도움
- Database는 어디서 주로 사용될까요?
- 웹 서비스, 모바일 앱, IoT 기기 등 데이터를 저장하고 활용하는 모든 곳에서 사용됨
- Database Management System (DBMS)
- DBMS란 무엇일까요?
- 데이터를 효율적으로 관리하고 사용할 수 있도록 해주는 소프트웨어 시스템. 데이터의 저장, 조화, 수정, 삭제 등의 작업을 지원
- 대표적인 DBMS는 무엇이 있을까요?
- MySQL, PostgreSQL 등
- 관계형 저장 방식은 무엇일까요?
- 테이블 형태로 데이터를 저장하며, 데이터 간의 관계를 외래 키(foreign key) 등을 통해 표현
- 관계형이 아닌 저장 방식에는 무엇이 있을까요?
- 데이터를 JSON 형식, Key-Value 형식 등으로 저장하며, 관계형 제약이 적음. (e.g. MongoDB)
- SQL이란 무엇일까요?
1. DDL(Data Definition Language)
- 데이터베이스 구조를 정의하는 언어 (`CREATE`, `DROP` 등)
2. DML(Data Manipulation Language)
- 데이터베이스에 저장된 데이터를 조작하는 언어 (`INSERT`, `UPDATE`, `DELETE`)
3. ~~DCL(Data Control Language)~~
- Key-Value 구조
- Java나 Kotlin에서 Key-Value를 사용하는 대표적인 자료 구조는 무엇인가요?
- `HashMap`, `Map` 등
- 해당 구조의 특징에는 무엇이 있을까요?
- Key와 Value의 쌍으로 데이터를 저장하며, Key를 통해 빠르게 Value를 조회할 수 있음
- 배열이나 리스트가 아닌 경우 하나의 Key에 여러 값을 넣을 수 있을까요?
- 일반적으로 Key-Value 구조는 하나의 Key에 하나의 Value만 저장하지만, 값에 `List`나 `Set` 등을 저장하여 여러 값을 가질 수 있음
- SharedPreferences
- 하나의 Key에 여러 값을 넣는 방법이 있을까요? (Hint: JSON)
- JSON 형식으로 데이터를 직렬화하여 하나의 Key에 여러 값을 저장할 수 있음
- RoomDB
- RoomDB는 무엇일까요?
- 안드로이드에서 SQLite 데이터베이스를 편리하게 사용하도록 돕는 ORM 라이브러리
- RoomDB 개발 이전에 사용하였고, 현재 RoomDB의 기반인 DBMS는 무엇일까요? → SQLite 기반
- RoomDB는 어떤 방식으로 값을 저장할까요?
- RoomDB는 테이블 구조로 데이터를 저장하며, DAO를 통해 데이터를 조작함
- Firebase
- Firebase는 무엇이고 왜 사용할까요?
- Google에서 제공하는 모바일 및 웹 애플리케이션 개발 플랫폼
- Firebase에서 제공해주는 기능은 어떤 것이 있나요?
- 실시간 데이터베이스, 사용자 인증, 클라우드 스토리지, 푸시 알림, 애널리틱스, 원격 설정, 앱 배포 등의 다양한 기능을 제공
46 changes: 46 additions & 0 deletions keyword/chapter08/keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
- OAuth2 방식
- OAuth2란 무엇일까요?
- Open Authorization 2.0, 인터넷 사용자들이 애플리케이션 또는 서비스에 접근할 수 있도록 인증을 제공하는 프로토콜. 사용자가 애플리케이션의 비밀번호를 직접 입력하지 않고, 신뢰할 수 있는 인증 기관(Google, Facebook 등)을 통해 권한을 부여
- 우리 주변에서 OAuth2 방식이 주로 사용되는 곳은 어디일까요? (Hint: 간편 로그인)
- 간편 로그인(소셜 로그인): Google, Facebook, GitHub, Twitter 계정을 사용하여 타사 앱에 로그인
- 토큰이란 무엇일까요?
- 토큰은 권한을 확인하기 위해 발급되는 교유한 문자열. OAuth2에서 클라이언트와 서버 간의 인증 및 데이터 요청 시 사용됨
- OAuth2에서 사용되는 토큰은 어떤 것이 있고, 각각 어떤 용도일까요?
1. Access Token
- 보호된 리소스에 접근하기 위한 토큰. 제한된 기간동안 유효하며, 주로 클라이언트가 서버로 요청할 때 사용됨
2. Refresh Token
- Access Token이 만료되었을 때 새 Access Token을 발급받기 위해 사용됨. 보통 더 긴 유효기간을 가짐
- OAuth2 방식의 장점과 단점은 무엇일까요?
- 장점
- 비밀번호를 공유하지 않아도 안전하게 권한을 위임할 수 있음
- 여러 애플리케이션 간 권한 관리 용이
- 단점
- 구현 복잡성
- 토큰이 탈취될 경우 보안 위험있음
- Cookie와 Session
- Cookie란 무엇일까요?
- 쿠키는 사용자의 웹 브라우저에 저장되는 작은 데이터 조각으로, 웹사이트가 사용자의 정보를 유지하거나 사용자 추적을 위해 사용됨
- Cookie는 어떤 형식으로 이루어져 있나요?
- Key-Value 쌍으로 이루어져 있으며 옵션으로는 유효 기간, 도메인, 경로, 보안 속성 등이 포함
- Session이란 무엇일까요?
- 서버에 저장된 클라이언트 상태 정보를 관리하기 위한 방법. 사용자가 웹사이트에 접속하면 고유의 세션 ID가 발급되며, 서버는 해당 세션 ID를 기반으로 데이터를 식별
- Cookie와 Session을 사용하는 이유는 무엇일까요?
- 웹이 stateless 프로토콜이기 때문에, 상태 정보를 유지하려면 추가적인 메커니즘이 필요함
- Cookie와 Session의 차이는 무엇일까요?
- Cookie : 클라이언트(브라우저)에 저장. 데이터가 노출될 위험 있음
- Session: 서버에 저장. 클라이언트에는 세션 ID만 전달. 더 안전함
- JWT 방식
- JWT (JSON Web Token)은 무엇일까요?
- JWT는 클라이언트와 서버 간의 데이터 교환에 사용되는 JSON 기반의 토큰. 클라이언트는 서버로부터 JWT를 발급받고, 이후 요청 시 이를 포함하여 인증
- JWT 방식의 토큰은 어떤 구조로 되어있고, 각각 어떤 용도로 사용되나요?
1. Header : 토큰의 타입과 서명 알고리즘 정보
2. Payload : 사용자 정보와 기타 데이터
3. Signature : Header와 Payload를 암호화한 값. 토큰의 무결성을 검증함
- JWT 방식의 장점과 단점은 무엇일까요?
- 장점
- 토큰 자체에 데이터를 포함하므로 서버에 상태 정보를 저장할 필요가 없음
- 다양한 클라이언트(모바일, 웹 등) 에서 사용 가능함
- 단점
- 토큰이 길어 네트워크 대역폭이 증가할 수 있음
- 만료 전 탈취 시 보안 위험성 있음
- 토큰 갱신이 어려움
15 changes: 15 additions & 0 deletions mission/chapter06/recyclertest/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
3 changes: 3 additions & 0 deletions mission/chapter06/recyclertest/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions mission/chapter06/recyclertest/.idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions mission/chapter06/recyclertest/.idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions mission/chapter06/recyclertest/.idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions mission/chapter06/recyclertest/.idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions mission/chapter06/recyclertest/.idea/migrations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions mission/chapter06/recyclertest/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions mission/chapter06/recyclertest/app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
51 changes: 51 additions & 0 deletions mission/chapter06/recyclertest/app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}

android {
namespace = "com.umc.recyclertest"
compileSdk = 35

defaultConfig {
applicationId = "com.umc.recyclertest"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
viewBinding = true
}
}

dependencies {

implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
}
21 changes: 21 additions & 0 deletions mission/chapter06/recyclertest/app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.umc.recyclertest

import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4

import org.junit.Test
import org.junit.runner.RunWith

import org.junit.Assert.*

/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.umc.recyclertest", appContext.packageName)
}
}
26 changes: 26 additions & 0 deletions mission/chapter06/recyclertest/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Recyclertest"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.umc.recyclertest

data class Fruit(
val imageRes : Int,
val name: String,
val price: Int
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.umc.recyclertest

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import java.text.DecimalFormat

class FruitAdapter(private val fruitList: List<Fruit>) : RecyclerView.Adapter<FruitAdapter.FruitViewHolder>() {
inner class FruitViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val fruitImage : ImageView = itemView.findViewById(R.id.fruitImage)
val fruitName : TextView = itemView.findViewById(R.id.fruitName)
val fruitPrice: TextView = itemView.findViewById(R.id.fruitPrice)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FruitViewHolder {
val itemView = LayoutInflater.from(parent.context)
.inflate(R.layout.item_fruit, parent, false)
return FruitViewHolder(itemView)
}

override fun getItemCount(): Int = fruitList.size

override fun onBindViewHolder(holder: FruitViewHolder, position: Int) {
val fruit = fruitList[position]
holder.fruitImage.setImageResource(fruit.imageRes)
holder.fruitName.text = fruit.name
holder.fruitPrice.text = DecimalFormat("#,###").format(fruit.price) + "원"
}
}
Loading