안녕하세요! 저는 주식만 하고 있어서 코인은 잘 모르는데요, 예전에 파이썬으로 자동화 프로그램을 만든 적이 있어서
출근해서 퇴근할 때까지 사용할 자동화 앱을 만들어 보고 싶어 기획 중입니다.
간단하게 현재 UI를 만들고 구상하던 중 DB에 저장해서 사용해야 코인 종목과 가격을 더 편하게 관리할 수 있을 것 같았습니다.
Mysql을 연동해야 하는데, 생각보다 복잡한 방법밖에 안 나오는 것 같아 열심히 검색해서 찾아 결정했습니다.
서론이 길었으니 바로 시작하겠습니다.
MySQLKit 패키지
링크: https://github.com/vapor/mysql-kit
이 패키지를 선택한 이유
- SwiftNIO 기반의 비동기 지원
- 간결한 API
- MySQL 기능 지원
이 패키지를 실행하기 전 해야 할 게 있습니다.
1. MySQL Workbench
링크: https://dev.mysql.com/downloads/workbench/
데이터를 저장하기 위해선 필수로 다운로드하여야 하는 툴입니다.
해야 할 것:
- DB에 로그인
- 스키마 만들기(작성자는 Trading으로 하였습니다.)
2. Xcode
링크: https://apps.apple.com/kr/app/xcode/id497799835?mt=12
AppStore에서 다운로드하실 수 있습니다. 용량이 생각보다 커서 오래 걸립니다.
3. 구현하기
이제 준비는 모두 끝났습니다. 기본적인 건 건너뛰고 바로 코드로 넘어가겠습니다.
저희는 맥북에서 앱을 만들 것이기에 macos 프로젝트를 사용합니다.
MySQLKit 링크를 붙여 넣어 패키지를 다운로드하여줍니다. 저는 이걸 Xcode에 장점이라고 생각합니다. url을 통해 간단하게 필요한 패키지를 다운로드할 수 있다는 것은 초보인 저에게 아주 좋은 기능입니다. (쉘을 잘 못 다룹니다)
@State private var connectionStatus: String = "연결 대기 중..."
var body: some View {
VStack {
Text(connectionStatus)
.padding()
Button("MySQL 연결 테스트") {
Task {
await testMySQLConnection()
}
}
}
}
버튼을 눌러 정상적으로 연결 됐는지 확인하기 위한 간단한 UI입니다.
func testMySQLConnection() async {
let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
defer {
try? eventLoopGroup.syncShutdownGracefully()
}
let logger = Logger(label: "mysql")
let mysqlConfiguration = MySQLConfiguration(
hostname: "localhost",
port: 3306,
username: "MySQL 아이디 입력",
password: "MySQL 비밀번호 입력",
database: "Trading",
tlsConfiguration: .forClient(certificateVerification: .none)
)
do {
let address = try await mysqlConfiguration.address()
let conn = try await MySQLConnection.connect(
to: address,
username: mysqlConfiguration.username,
database: mysqlConfiguration.database!,
password: mysqlConfiguration.password,
tlsConfiguration: mysqlConfiguration.tlsConfiguration,
logger: logger,
on: eventLoopGroup.next()
).get()
defer {
try? conn.close().wait()
}
let rows = try await conn.simpleQuery("SELECT 1").get()
if rows.count > 0 {
await MainActor.run {
connectionStatus = "MySQL 연결 성공!"
}
} else {
await MainActor.run {
connectionStatus = "MySQL 연결 실패: 결과 없음"
}
}
} catch {
await MainActor.run {
connectionStatus = "MySQL 연결 실패: \(error.localizedDescription)"
}
}
}
엄청 간단하죠? 다른 게시물을 제가 많이 찾아봤는데, 설정할 것도 많고 복잡해서 이해가 부족한 저는 따라 하지 못했습니다.
이 코드 하나면 간단하게 확인 가능합니다. 아래는 결과물입니다.
전체 코드가 궁금하신 분들은 댓글 주시면 파일 보내드리겠습니다.!
이제 이어서 작성해야겠습니다!! 감사합니다~
'개발하기 > SwiftUI' 카테고리의 다른 글
Xcode에서 Pod init해결 방법 (2) | 2024.12.06 |
---|---|
error: unable to read property list from file: (1) | 2024.12.03 |
[2탄]The Oxford-IIIT Pet Dataset를 이용해 닮은 동물 ios 앱 만들기 (2) | 2024.09.30 |
[1탄]The Oxford-IIIT Pet Dataset를 이용해 닮은 동물 ios 앱 만들기 (3) | 2024.09.27 |
Xcode 없이 MacOS 앱 실행하기: 개발자를 위한 간단 가이드 (8) | 2024.09.25 |