본문 바로가기

전체 글

(33)
우분투 서버에 MySQL 설치부터 MySQL Workbench에 연결하기까지 서버 인스턴스: Vultr 실행환경: Ubuntu 23.04 x64 💫 mysql-server 설치 sudo apt-get install mysql-server 💫 외부 접근 허용하기 1. 서버 방화벽 허용하기 sudo ufw allow mysql 해당 명령어로 mysql의 포트(3306)을 허용시킨다. 2. 인스턴스 방화벽 허용하기 서버 뿐만 아니라 인스턴스에도 방화벽이 있을 수 있는데 이것도 3306 포트를 열어두자. 3. 외부 IP 허용하기 vi /etc/mysql/mysql.conf.d/mysqld.cnf 마지막으로 해당 명령어로 vi편집기를 열어 bind-address를 주석처리하여 모든 IP를 허용시킨다. 💫 MySQL 실행하기 [참고] 기본 명령어 systemctl start mysql# 시..
정규표현식 요약지 (Regex Cheatsheet) https://regexr.com/ 💫 문자, 문자 클래스 . . : 줄바꿈을 제외한 임의의 문자 한 개와 매치 더보기 예문 123456789 정규표현식 .5. 결과 123456789 [] [] : 대괄호 내부에 포함된 문자 중 하나와 매치 더보기 예문 hello, world! 정규표현식 [aeiou] 결과 hello, world! +) 대괄호 내에 -를 사용하여 범위를 쉽게 지정할 수 있다. [0-9]는 [0123456789]와 같다. 더보기 예문 hello, world! 정규표현식 [a-z] 결과 hello, world! [^] [^] : 대괄호 내부에 포함되지 않은 문자 중 하나와 매치 더보기 예문 hello, world! 정규표현식 [^aeiou] 결과 hello, world! \d, \D \d ..
SwiftUI에서 GoogleMapsAPI 적용해보기 - 심화 기초편에서 이어지는 내용이므로 이전 포스팅을 보고 오는것을 추천합니다. 💫 화면을 클릭해서 새로운 마커를 찍어보기 1. GMSMapViewDelegate 추가 extension GMSMapViewRepresentable.Coordinator: GMSMapViewDelegate { // 화면을 클릭할 때마다 실행 func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) { let marker = GMSMarker(position: coordinate) marker.snippet = "\(coordinate.latitude)\n\(coordinate.longitude)" marker.icon = GMSMarker.mark..
SwiftUI에서 GoogleMapsAPI 적용해보기 - 기초 우선 공식문서를 보고 프로젝트에 GoogleMaps에 관한 설정을 마쳐놓자. 💫 지도화면 띄워보기 1. API Key 등록 import SwiftUI import GoogleMaps @main struct GoogleMapsTutorialApp: App { init() { GMSServices.provideAPIKey("YOUR_API_KEY") } var body: some Scene { WindowGroup { ContentView() } } } 공식문서에서는 AppDelegate에서 API키를 등록하지만 SwiftUI에서 @main 어노테이션이 있는 객체의 init()에서 등록해도 된다. 2. GMSMapView를 UIViewRepresentable로 감싸기 import SwiftUI import ..
Keychain을 사용해보자 💫 KeychainManager 클래스 정의 final class KeychainManager { } extension KeychainManager { static var service: String { Bundle.main.bundleIdentifier ?? "" } // TODO: 여기에 로직 정의 } KeychainManager와 공통으로 사용할 serviceName을 정의한다. Keychain에서는 account (Key)에 password (Value)를 저장해 놓고 사용하면 된다. +) 에러타입 Enum // Error enum KeychainError: Error { case duplicateItem // account에 데이터가 이미 존재 case noPassword // account에 ..
UserDefaults / Keychain / Core Data iOS앱에 데이터를 저장하는 여러가지 방법들이 있는데 대표적인 3가지 UserDefaults, keychain, Core Data를 언제 써야하는지에 대해서 알아보자! 💫 UserDefaults 가장 일반적이고 쉽게 적용할 수 있는 UserDefaults는 그 이름처럼 사용자의 기본적인 데이터베이스를 저장하기 위해 사용한다. UserDefaults는 Property list 형식으로 저장되어있고, NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary의 타입을 저장할 수 있다. 그 외의 타입은 NSData로 변환해서 사용할 수 있다. ✅ 사용자가 선호하는 캐릭터, 미디어 재생 속도, 게임 최고점, 최근 방문한 지역, 최초 튜토리얼 화면 사용자가 설정한 목..
Alignment Guides 💫 Custom alignment guides Apple 공식문서 Apple Developer Documentation developer.apple.com private struct FirstThirdAlignment: AlignmentID { static func defaultValue(in context: ViewDimensions) -> CGFloat { context.height / 3 } } extension VerticalAlignment { static let firstThird = VerticalAlignment(FirstThirdAlignment.self) } 해당 뷰 높이의 3분의 1지점을 정렬하는 FirstThirdAlignment를 새로 만들고 VerticalAlignment에서 스..
SwiftUI로 CheckBoxTreeView 만들기! 💫 완성화면 git: https://github.com/lee-chance/CheckBoxTreeView 💫 각각의 데이터가 될 객체 만들기 struct Node: Identifiable { typealias ID = String let id: ID let label: String let children: [Node]? init(id: ID = UUID().uuidString, label: String, children: [Node]? = nil) { self.id = id self.label = label self.children = children } init(_ label: String, children: [Node]? = nil) { self.id = label self.label = label ..