글 시작 전, 말 마디 🐴
다들 안녕하세요! 버뮤다입니다.
저는 항상 새로운 기술과 기능을 배우는 것을 좋아하지만 금방 어려움을 느끼곤 합니다..
그럴 때마다 코딩과 개발 세계는 공부의 연속이라는 느낌이 듭니다.
그래서 강의를 집에서 듣다가도 가끔씩 집을 가고 싶습니다.. 🏠
모르는 내용들이 많을수록 저도 그만큼 더 발전할 수 있다는 긍정 회로를 돌려봅니다.
그렇다면 오늘 5주 차 회고 내용은??
아직 배워야 할 것이 많아서 오늘 다루는 내용에는 조금 두려움이 있지만, 제가 실습하고 조사한 내용을 기반으로 SwiftData와 파이어베이스에 대해 주로 이야기하겠습니다.
그럼! 잡담은 그만하고 <<테킷 앱 스쿨 : iOS 5기 5주 차 회고>> 시작하겠습니다!
🧐 5 주차에 무엇을 했을까?
2024.04.22 ~ 2024.04.26 기간에 진행된 5주 차는크게 SwiftData와 파이어베이스 실습으로 진행하였습니다.
● SwiftData
SwiftData는 WWDC2023에서 공개된 새로운 데이터 관리 프레임워크인데요. SwiftData는 이번 메모앱 실습에서 처음 접했습니다.
구글링을 해보면 SwiftData 관한 포스팅들도 많지만 대부분 CoreData를 대체할 수 있는지에 대한 내용들이 많았습니다.
강사과 멘토님 설명을 들어보면 현재까지는 SwiftData가 현업에서 널리 사용되지 않는 것으로 보입니다. (대부분 Realm을 더 많이 사용한다고 언급) 협업에서는 새로운 기술을 즉시 도입하지 않는다고는 하셨지만... 시간이 흐르면 SwiftData도 협업에서 보다 많이 사용될 것으로 생각됩니다! 그래서 SwiftData 회고내용으로는 메모앱에서 일어났던 이슈와 개인적으로 조사한 내용을 다루겠습니다.
1. SwiftData Color 이슈
SwiftData 이슈 원인
SwiftData의 @Model을 사용하여 메모 앱을 실습하던 중, Color 프로퍼티를 직접 사용할 수 없는 이슈가 발생했습니다.
SwiftData에서는 모델의 속성이 Codable을 준수했어야 했는데 Color가 Codabe 프로콜을 준수하지 않았기 때문에 발생했습니다.
(데이터를 저장하려면 데이터베이스와 Swift 모델이 일치해야 하며, 모델을 구성할 때는 데이터베이스가 이해할 수 있는 형식으로 변환해서 사용해야 함. )
SwiftData 이슈 해결 방법
Color 대신에 Stirng 혹은 Int로 색상을 표현하는 방법을 사용하며, Color 확장을 추가해 16진수 문자열에서 Color 인스턴스를 생성하는
이니셜라이저를 구현하는 방법으로 해결했습니다.
//강의에서 솔루션으로 사용하신 코드 첨부
@Model
class Memo {
...
var colorHex: String // Color 대신 String을 사용하여 색상을 표현
...
init(... colorHex: String, ...) {
...
self.colorHex = colorHex
...
}
var color: Color {
Color(hex: colorHex)
}
}
// Color 확장을 추가
extension Color {
init(hex: String) {
let scanner = Scanner(string: hex)
var rgbValue: UInt64 = 0
scanner.scanHexInt64(&rgbValue)
let r = Double((rgbValue & 0xFF0000) >> 16) / 255.0
let g = Double((rgbValue & 0x00FF00) >> 8) / 255.0
let b = Double(rgbValue & 0x0000FF) / 255.0
self.init(red: r, green: g, blue: b)
}
}
Color 대신 16진수 문자열을 사용해 메서드를 호출할 수 있게 되었고, @Model에서 Color 프로퍼티를 직접 사용하지 않고도 색상을 저장 할 수 있도록 수정하였습니다.
//강의에서 솔루션으로 사용하신 코드 첨부
func addMemo(_ text: String, color: Color) {
let hexString = String(format: "%02X%02X%02X", Int(color.rgba.red * 255), Int(color.rgba.green * 255), Int(color.rgba.blue * 255))
let memo = Memo( ... colorHex: hexString, ...))
modelContext.insert(memo)
}
위의 코드는 강의에서 솔루션으로 사용된 코드를 첨부했지만..(이해하기 더 좋은 코드라고 판단)
일전에 간단하게라도 다뤄본 데이터베이스 덕분에 이슈를 문제를 이해하고 해결할 수 있었지 않았나 합니다.
나중에 데이터베이스를 다룰 때, 위의 경험을 상기시켜 코드를 짜보려고 합니다.
2. SwiftData vs CoreData vs Realm 비교
SwiftData Color 이슈가 발생한 후.. 좀 더 추가적인 조사가 필요할 듯하여 강의에 배운 내용을 복습할 겸 세 개의 데이터베이스 프레임워크를 비교하여 공부를 진행해 보았습니다. 간단하게 표로 비교해서 표현하자면 아래와 같은 내용입니다.
SwiftData | CoreData | Realm | |
언어 | Swift | Objective-C, Swift | Swift |
데이터 베이스 | RDBMS | SQLite | 내장 데이터베이스 (NoSQL) |
데이터 모델 | 클래스 또는 구조체 | .xcdatamodel 파일로 정의 |
객체 모델 |
쿼리 | SQL을 사용 X | NSPredicate, NSFetchRequest 사용 | Query API를 사용 |
제가 이해한 내용으로 표를 만들었지만 정확하게 이 세 개의 데이터베이스 프레임워크를 이해할 수 있다고 말씀드릴 수가 없어서 나중에
좀 더 자세한 내용으로 포스팅할 예정입니다!
● 파이어베이스
이전에는 SQLite를 다뤄 본 경험은 있지만 이번 수업으로 파이어베이스를 처음 접하게 되었습니다. 그렇다면 파이어베이스의 첫인상은?🥁
서버 코드 없이도 데이터베이스를 사용하고 실시간으로 데이터를 처리할 수 있다니..
개발 과정 왕왕 간편하게 최소화할 수 있겠다.. 난 왜 이걸 왜 지금 알았냐.. 흙흙.. 💧
네.. 부끄럽게도 이번에 파이어베이스를 처음 접해서 기본적인 기능들을 실습해 봤는데 클라우드 기반 데이터베이스 시스템이라 해서 신기했습니다. 그리고 클라우드 기반으로 관리되니 개발과정이 간편해지니 나중에 토이 프로젝트를 진행할 때, 큰 도움을 받을 수 있을 거라는 기대가 들었습니다. 여담.. 파이어베이스 공식문서가 자세하게 되어있어서 강의 후 따로 파이어베이스를 사용을 할 때 큰 어려움이 없지 않을 것이라고 생각했습니다. 거짓말 퍽퍽!! 👊 😂 그렇다면 어떤 실습을 했을까요?
1. 로그인 실습 (with 파이어베이스)
실습 진행 순서로는 애플 로그인을 먼저 실습하고 그다음이 소셜 로그인(구글)을 진행했습니다.
실습 전 간단한 설명으로는 애플에서 애플 로그인을 밀고 있다는 내용과 함께 애플 로그인과 소셜 로그인을 비교 설명을 해주셨습니다.
아래 표는 설명 들은 내용을 정리하여 간단한 표 형식으로 작성해 봤습니다.
애플 로그인 | 소셜 로그인 |
애플이 제공하는 식별 서비스 | 다른 소셜 미디어 플랫폼(예: 페이스북, 구글, 트위터 등)의 계정 사용 |
사용자는 애플 ID를 사용하여 로그인 토큰을 암호화하여 제공 -> 토큰을 서비스로 전송하여 사용자 인증 |
사용자는 소셜 미디어 플랫폼의 계정을 사용하여 로그인 |
사용자의 개인 정보를 보호하기 위한 익명의 로그인 방식 제공 | 사용자의 소셜 미디어 프로필 정보를 활용하여 사용자 경험 개선 가능 |
개인 정보 보호에 중점 사용자에게 개인정보에 대한 제어 부여 |
사용자 프로필 정보를 활용하여 개인화된 서비스 제공 가능 |
요즘 로그인 트렌드가 많은 과정을 거쳐가지 않고 간단하게 접속할 수 있는 소셜 로그인 형식으로 변화하고 있는 것 같습니다.
간편한 만큼 소셜로그인을 사용했을 때, 사용자 개인 정보에 대한 우려들도 많다고 생각합니다. 하지만 이번 파이어베이스 로그인 실습 내용에서 애플로그인의 차별점에 대한 강의 내용을 듣고 나니 애플이 개인정보에 많이 신경을 쓰고 있음을 알 수 있었습니다. 그리고 애플에서
제공하는 애플 로그인이다 보니ASAuthorizationAppleIDButton() 버튼으로손쉽게작성할 수 있었습니다.
파이어베이스 실습 관련한 회고이기에 코드 관련한 내용을 위주로 다룰까 하다가 사용자 입장에서 우려되는 개인정보를 세심하게 개발해야 하는 생각 또한 필요한 부분이지 않을까 하여 비교 내용으로만 작성하게 되었네요. 애플로그인과 소셜로그인은 지역스터디에서 진행하는 클론코딩 로그인 화면에 활용해 보려고 추후 계획 중입니다.
● 주저리 요약
1. SwiftData은 편하고 좋지만, 아직 현업에서는 사용하지 않는 걸로 추정.
2. SQLite보다 파이어베이스가 간편하기에 토이프로젝트에 많이 사용할 예정이지만, 처음 배웠기에 공부 과정을 거친 후 사용 예정.
'테킷 앱 스쿨 : iOS 5기' 카테고리의 다른 글
🚀 멋쟁이 사자처럼 로켓단 7기 - 1개월 인턴십 회고 (0) | 2025.04.01 |
---|---|
[테킷 앱 스쿨 : iOS 5기] 4주차 회고 (0) | 2024.04.20 |
[테킷 앱 스쿨 : iOS 5기] 3주차 회고 (0) | 2024.04.19 |
[테킷 앱 스쿨 : iOS 5기] 스터디 개설 (0) | 2024.04.07 |
[테킷 앱 스쿨 : iOS 5기] 도서 수령 및 리뷰 (0) | 2024.04.07 |