본문 바로가기
반응형

전체 글413

NodeJS 구글 로그인 OAuth 인증 방법: Google-auth-library 활용하기 오늘은 구글 OAuth를 이용해 로그인 인증을 하기 위해서,프로젝트를 등록하고, Google-auth-library를 설치해 활용하는 방법에 대해서 정리해 보겠습니다. 1. 구글 OAuth구글 OAuth를 이용하면,외부 애플리케이션이 사용자의 일부 계정 데이터에 접근할 수 있는 권한을 부여해 줍니다. 구글 OAuth를 이용하려면,Google Cloud Console에서 프로젝트를 생성해야 합니다.다른 기능들은 사용한 양에 따라서 요금이 부과될 수 있지만,순수하게 인증기능만 사용하는 경우,무료로 OAuth를 이용할 수 있기때문에,과금에 대해 걱정할 필요는 없습니다. 2. OAuth 인증의 큰 그림구글 OAuth를 이용해서 사용자 로그인을 인증하는 과정은 다음과 같은 과정을 거치게 됩니다.사용자 정보를 요청.. 2026. 4. 16.
Google Analytics에서 OS 및 Android 버전 정보 찾아보기 오늘은 구글 애널리틱스(GA)에서,방문자가 사용하는 운영체제(OS) 및 Android 버전을 확인하는 방법을 보겠습니다. 1. 기술 세부정보 찾기저희가 찾고자 하는 정보는 기술 세부정보 찾기에 위치하는데요.좌측의 네비게이션에서 위에서 두번째인, 보고서 메뉴(홈화면 아이콘 아래)를 클릭해 줍니다. 다음으로 아래 이미지와 같이,'기술 > 기술 세부정보'로 들어갑니다. 여기 나오는 화면에서,아래 이미지와 같이,'브라우저' 드롭다운 메뉴가 보이는데요.여기를 클릭해서 드롭다운 메뉴를 열어줍니다. 그럼 아래와 같이 선택할 수 있는 기준이 나오는데요. 저는 Android 버전을 보고 싶기에,'OS 및 버전'을 선택해 주었습니다.참고로 '앱 버전'을 선택하면 사용자들이 사용중인 앱 버전을 볼 수 있는데요.앱릴.. 2026. 4. 2.
Swift UI @Observable, @State, @Environment, @Bindable, @Binding으로 상태관리 마스터하기 오늘은 SwiftUI에서 상태를 관리할 수 있게 해주는,swift UI @Observable, @State, @Environment, @Bindable, @Binding에 대해 알아보겠습니다. 이 방법은 ios17이상에서만 적용할 수 있는데요.이전의 방법에 대해서는 아래 글을 참조해 주세요.(이 글을 이해하는데 도움이 됩니다.)>> SwiftUI @State vs @Environment, @EnvironmentObject vs @StateObject, @Binding으로 상태관리 이해하기 1. ios17이상에서의 상태관리 변화구체적으로 알아보기 전에, 상태관리에 무엇이 바뀌었는지 볼까요?우선은 이런 변화가 있었다는 것만 보고,아래에서 하나씩 구체적으로 보겠습니다. ios17이상 @Observable사용.. 2026. 2. 26.
SwiftUI VStack, HStack, ZStack, Spacer와 overlay 총정리 오늘은 SwiftUI에서 매우 중요한 역할을 하는,VStack, HStack, ZStack, Spacer와 overlay에 대해 정리하겠습니다. 1. VStack, Hstack 그리고 ZStack각각에 대해 알아보기 전에,3가지를 한 번에 표로 비교해서 전체 그림을 볼까요?대략 이런 것들이 있구나 하고 보시고요.아래에서 하나씩 구체적으로 알아보겠습니다. VStackHStackZStack배치방향수직(세로)수평(가로)깊이(겹침)기본 크기width :자식 뷰 중 가장 넓은 뷰의 너비,height: 모든 자식 뷰 높이의 합width: 모든 자식 뷰 너비의 합, height:자식 뷰 중 가장 높은 뷰의 높이자식 뷰 중 가장 큰 뷰의 크기Spacer() 효과수직방향 확장수평방향 확장영향 없음자식 뷰 배치 순서위에.. 2026. 2. 25.
SwiftUI @State vs @Environment, @EnvironmentObject vs @StateObject, @Binding으로 상태관리 이해하기 오늘은 swiftUI에서 상태관리의 주축을 이루는,@State vs @Environment 그리고 @StateObject와 @EnvironmentObject를 비교하면서 이해해 보겠습니다. 1. @Environment vs @StateSwiftUI에서 @State와 @Environment는,값의 변화를 감지하고,그에 맞춰 UI를 다시 그리는 데 사용되는,프로퍼티 래퍼(Property Wrapper)입니다. 말이 좀 어려운데요. 둘은 어떤 차이가 있을까요?먼저 State부터 살펴보겠습니다. 1-1. State@State는 특정 뷰 내부에서만 생성되고 유지되는,Value Type의 단순한 값들을 관리할 때 사용합니다.점 더 쉽게 말하면,뷰(View)가 데이터를 소유하고 관리하는 것 입니다.(뷰가 관리하니, .. 2026. 2. 24.
Linux Crontab으로 예약 스케쥴링 마스터하기 특정한 시간에,스크립트로 작성한 작업들을 실행시키려 할 때,리눅스의 크론탭이 필요한데요.오늘은 이것을 활용하여 작업을 예약하는 방법에 대해서 정리해 보겠습니다. 1. Crontab(크론탭)crontab은 "cron table"의 줄임말인데요.반복적인 작업을 스케줄링하기 위한 유틸리티입니다. 특정 시간, 날짜 간격으로,스크립트나 프로그램을 실행하도록 스케줄을 설정해,미래의 반복적인 작업을 자동화 할 수 있게 도와줍니다.서버를 운영하는 작업자에게 너무나 중요한 유틸리티이지요. 2. 실행할 스크립트 준비하기2-1. 실행 스크립트 준비크론탭을 정해진 시간에 실행하기 위해,실행할 스크립트를 준비하겠습니다.(간단한 명령어를 등록해 사용할 수도 있지만, 스크립트 사용법도 알아야 하니까요.)일반적으로 크론탭(cront.. 2026. 2. 17.
Swift enum 총정리 오늘은 swift의 enum의 기본적인 정의 방법부터,switch와 함께 다루는 방법들까지,다양한 예제와 함께 정리하겠습니다.1. enum 의 정의와 기본 사용방법enum은 관련된 값들의 그룹을 정의하게 해주는데요.아래와 같이 정의해서 사용합니다. enum Direction { case north case south case east case west} 이는 좀 더 간략하게 한줄로 정의할 수도 있습니다. enum Direction { case north, south, east, west } 이 값에 접근할 때는,아래와 같이 해 줍니다. let currentDirection = Direction.north swift의 다른 속성들에 접근할 때처럼,타입이 명확할 때는 아래와 같이 축약도.. 2026. 2. 7.
Linux 명령어 및 단축키 자주 사용하는 것 위주로 정리 오늘은 자주사용하게 되는 Linux 명령어와 단축키에 대해 정리하겠습니다. 1. 입력 관련 단축키들1-1. 입력을 취소하는 단축키들리눅스는 터미널로 입력하는데,맥이나 윈도우 같은 GUI가 아니라서,취소시에 backspace키로 하나씩 지우다 보면 비효율이 발생합니다. 터미널에 입력한 명령어를 취소하는 아래 단축키들은 꼭 알아둘 필요가 있습니다.Ctrl + U : 커서 기준 왼쪽(시작부분까지) 모두 삭제 [U는 upto의 약자]Ctrl + C : 현재 명령 취소 + 새 프롬프트 표시Ctrl + W: 단어 단위로 삭제(커서를 기준으로 한 단어씩 삭제 됨) 1-2. 입력 관련 단축키터미널에 명령어를 다 작성했는데,맨 앞의 글자만 수정해야하거나,맨 끝으로 이동해야 할 경우는 아래의 단축키들이 도움이 됩니다.C.. 2026. 2. 3.
Swift에서 Typealias 사용하기 오늘은 Swift에서 Typealias 사용하는 방법에 대해 정리하겠습니다. 1. Typealiastypealias는 기존 데이터 타입에 새로운 이름을 부여하는 기능입니다. 이를 사용하면,코드의 가독성을 높이고,복잡한 타입을 간결하게 표현할 수 있게 해줍니다.특히 Dictionary의 key값이 String을 사용할 경우에는 더없이 유용하지요. 사용방법은 아래와 같습니다. typealias 새이름 = 기존타입 아래와 같이, String, Int와 같은 값 대신,명시적인 typealias를 사용해 줄 수 있습니다. typealias UserName = Stringtypealias UserID = Inttypealias Point = (x: Double, y: Double)typealias Completio.. 2025. 5. 6.
SwiftUI body에 사용할 수 없는 것과 대안들 : 변수선언, 조건문, 반복문 오늘은 SwiftUI body에 사용할 수 없는 것들에 대해 정리하겠습니다. 1. SwiftUI body에 사용할 수 없는 것들SwiftUI는 명령형이 아닌,선언형 프로그래밍 방식을 따르는데요.SwiftUI View의 body에서는,UI의 상태와 구조만을 '선언'하도록 하고 있습니다. 그래서, body안에 사용할 수 없는 것들이 있는데요.이에 대해 명확히 알아 둘 필요가 있습니다. SwiftUI body에 사용할 수 없는 것들은 다음과 같습니다.변수 선언 (var 키워드)명령형 조건문 (if, switch 등을 값 할당에 사용할 때)명령형 반복문 (for, while 등)예를 들어,아래와 같이 코드를 작성하면,컴파일 에러가 발생합니다.  struct ContentView: View { var bod.. 2025. 3. 22.
iOS Image Slicing 해서 resizableImage 만들기 앱을 만들다 보면,말풍선처럼 특정부분을 늘려서 사용해야하는 경우가 있는데요.안드로이드에서는 9patch라는 것을 이용했는데요.ios에서는 Slicing한 후, Stretch(늘어나도록) 설정을 해서 이와 같은 효과를 얻을 수 있습니다.오히려 이미지에 여기저기 칠하지 않아도 되어서 좋기도 합니다.오늘은 이 방법에 대해 정리하겠습니다. 1. Asset Catalog에서 Slicing 설정 찾기AssetCatalog에서 직접 이미지를 슬라이싱 할 수 있는데요.먼저 아래와 같이 Slicing 섹션을 찾아서, Slices와 Center를 설정해 줍니다.Xcode의 Asset Catalog에서 이미지 선택Attributes Inspector에서 'Slicing' 섹션 찾기(하단)Slices: 'Horizontal .. 2025. 3. 22.
iOS 앱 최소버전 결정 기준 정리 iOS앱을 개발을 시작하면,최소버전을 몇으로 해야할지 결정해야 하는 순간이 옵니다.오늘은 이럴 때,어떤 기준들을 가지고 결정할 수 있는지,정리해 보겠습니다. 1. 애플이 제시하는 사용 현황가장 먼저 살펴볼 것은 iOS버전별로,사용현황을 보는 것인데요.구체적인 정보를 알고 있는 애플은,이 정보를 웹사이트에 게시하고 있습니다.2025년 1월 기준으로는 아래와 같은데요.   이 정보는 구글에서 "ios appstore 지원"이라고 검색하면,처음으로 나오는 애플의 사이트에서 얻을 수 있는데요.이것만 보면, ios16이하는 5%밖에 안되는 군요. 그런데 사실 우리가 고민하는 지점은,iOS15인가 16인가하는 경우가 많습니다.SwiftUI를 사용하면서,async 등 이런저런 기능을 사용하면서,최소한의 버전을 코딩하.. 2025. 3. 21.
자주 사용하는 XCode 단축키 총정리 오늘은 XCode에서 자주 사용하는 단축키에 대해 총정리하겠습니다. 1. 코드 자동완성자동완성 단축키는,에디터를 사용할 때,가장 먼저 알아두어야 할 단축키이지요.아래와 같이 해주면 됩니다.Ctrl + Space또는 아래 명령어를 사용해도 가능합니다.Ctrl + . 2. Menu 검색하기(Quick Actions)아래 단축키로 메뉴를 검색해서 실행할 수도 있습니다.Cmd + Shift + Axcode에서 단축키 하나만 알아야 한다면,이것만 외울것 같습니다.   같이 알아두면 좋을 단축키가 아래인데요.마우스 우측클릭과 유사하게,선택할 수 있는 컨텍스트 메뉴들이 나옵니다.Ctrl + Click참고로 rename의 경우,미리 지정된 단축키가 없어서,컨텍스트 메뉴에서 접근하기도 하는데요. 아래와 같이 Refact.. 2025. 3. 20.
SwiftUI 빈 공간에 사용하는 Color.clear 와 EmptyView 오늘은 SwiftUI에서 빈공간에 사용하는,Color.clear와 EmptyView에 대해 정리하겠습니다. 1. Color.clear와 EmptyViewColor.clear와 EmptyView()는,둘다 시각적으로 보이지 않는 요소를 만들 때 사용되는데요. 하지만 실제 사용할 때 둘은 큰 차이가 있습니다.  Color.clearEmptyView주요 용도투명 오버레이, 공간 예약, 이벤트 캡처아무것도 표시 안 함을 명시적으로 나타낼 때 사용공간 차지지정된 크기의 공간을 차지함지정하지 않으면,부모 뷰가 제공하는 공간을 채움공간을 전혀 차지하지 않음사용자 상호작용가능 (.contentShape 등으로 설정 가능)공간이 없어 불가능Modifer적용가능대부분 불가능onAppear/onDisappear트리거 됨트리.. 2025. 3. 19.
SwiftUI 커스텀 폰트(Font) 사용하기 오늘은 swiftui에서 커스텀 폰트를 지정해서 사용하는 방법에 대해 정리하겠습니다. 1. Font 등록하기폰트를 등록하기 전에,먼저 폰트를 프로젝트에 복사해 줍니다.이 때 어느 그룹에 넣어서 관리하건 문제되지 않습니다.그룹은 단순히 논리적인 구조로 실제하는 물리적 구분이 아니기 때문입니다. 그럼 이제 프로젝트 설정에서 아래와 같은 순서로,Font를 등록해 줍니다.좌측의 네비게이터에서 최상단의 프로젝트 선택'Info' 탭 클릭여러 섹션 중, 맨 위의 'Custom iOS Target Properties' 섹션 열기"+" 버튼을 클릭하여 새 항목을 추가키 이름으로 'Fonts provided by application' 검색해 선택 후 아이템 추가(배열 타입임)배열 항목 옆의 "+" 버튼을 클릭하여 첫 .. 2025. 3. 19.
Swift Parameter Label(매개변수 라벨) as 사용방법 정리 오늘은 Swift Parameter Label(매개변수 라벨)의 사용방법에 대해 정리해 보겠습니다. 1. Swift Parameter Label(매개변수 라벨) asSwift에서 Parameter Label(매개변수 라벨) as는,함수를 호출할 때,각 인자가 어떤 목적으로 사용되는지 알려주어,코드의 가독성을 높여줍니다. as는 "~로써", "~로"라는 의미를 가지고 있는데요.타입자체를 인자로 받는 함수에서,해당 타입이 어떻게 사용될 것인지를 표현할 때 유용합니다.  코드를 보면서 이해해 볼까요? 아래 함수는 T타입을 받아, U타입으로 변환해주는 함수입니다.여기서 as는 특별한 기능을 하는 것은 아니고,하나의 라벨로써,convert함수호출시 어떤 타입으로(또는 타입으로써) 함수에서 사용될지,문장처럼 편하게.. 2025. 3. 15.
Swift Closure의 강한 캡처와 [weak self]의 필요성 오늘은 Swift Closure의 강한 캡처와 [weak self]의 필요성에 대해 알아보겠습니다. 1. Closure의 강한 캡처클로저는 외부 변수를 "캡처"하여 내부에서 사용할 수 있는데요.참조하는 객체를 강하게(strong) 캡처합니다.이로 인해 다음과 같은 문제가 발생할 수 있는데요.강한 참조 순환(메모리 누수): 만약 클래스의 프로퍼티가 클로저를 가지고 있고, 그 클로저가 self를 캡처한다면, 클래스 인스턴스와 클로저가 서로를 강하게 참조하게 되어 메모리에서 해제되지 않아,메모리 누수 발생가능의도치 않은 동작: 객체가 이미 소멸되었어야 하는데 클로저에 의해 계속 살아있으면, 예상치 못한 동작이 발생할 수 있습니다. 2. [weak self]의 필요성이럴 때 필요한 것이, [weak self]인.. 2025. 3. 14.
파라미터, 매개변수 그리고 인자에 대한 용어정리 오늘은 파라미터, 매개변수 그리고 인자에 대한 용어를 정리해 보겠습니다. 1. 파라미터와 매개변수파라미터와 매개변수는 사실 같은 것을 가리킵니다.영어에서는 Parameter라고 하는데요.함수 정의에 사용되는 변수, 즉 함수의 입력값입니다. Parameter 단어를,음으로 읽은 것이 파라미터이고,한국어로 번역한 것이 매개변수입니다. '파라미터'와 '매개변수',두 용어는 완전히 같은 개념을 가리키는 것이었습니다. 일상 대화나 실무에서는 '파라미터'라는 용어도 많이 사용하고요.교육 자료나 공식 문서에서 '매개변수'라는 말도 많이 사용됩니다. 코드를 보면서 이해해 볼까요? 아래에서 name과 age가,바로 파라미터 또는 매개변수입니다. func greet(name: String, age: Int) { pr.. 2025. 3. 13.