목록분류 전체보기 (393)
나의 발자취

변경 내역일단 신고 테이블이 따로 존재는 하지만, 챌린지 신고의 경우 챌린지 테이블 안에서만 그 수가 계산이 되도록 해놨었다. 신고 당했을 때의 로직을 조금 더 구체화해서,- User에 status 필드 추가: 신고당했을 때 유저의 상태를 크게 세가지 (A:Active, S:Suspended, D:Deactivated)로 나누기로 했다. (D는 유저가 탈퇴했을 때)- 그럼 언제 바꾸나? 신고 유형이 크게 10가지가 있는데, 불법이나 음란물 등 바로 제재를 당해야 하는 것은 신고 누적이 1번만 되어도 바로 조치가 되도록 해야했고, 나머지는 3번 누적이 되어야 이용자 상태가 변경되도록 조치를 하기로 했다.- 마지막으로 신고 당한 유저의 isShow(Post, Comment)의 상태를 false로 하도록 변경..

지난 포스트에 이어서 계속한다. 2024.11.26 - [앱 개발/iOS] - [SwiftUI] Social Login 기능 도입하기 - Apple [SwiftUI] Social Login 기능 도입하기 - Apple+ Capability를 클릭해서 Sign in with Apple ID를 클릭한다. 그리고 새 SwiftUI 뷰를 만들어준다.SignInWithAppleView.swift import 후에 아래 SignInWithAppleButton()메서드를 임포트해준다. (label 생성자가 있는걸로wildguess.tistory.com Kakao Developers에서 앱 추가하기 앱 키 > 네이티브 앱 키를 복사해준다. iOS 플랫폼 등록 > 그리고 내 XCode Project의 번들 아이디..

+ Capability를 클릭해서 Sign in with Apple ID를 클릭한다. 그리고 새 SwiftUI 뷰를 만들어준다.SignInWithAppleView.swift import 후에 아래 SignInWithAppleButton()메서드를 임포트해준다. (label 생성자가 있는걸로) 기본값은 signIn이다. success문은 이렇게 써준다.case .success(let auth): if let credential = auth.credential as? ASAuthorizationAppleIDCredential { let userId = credential.user ..

원격 푸쉬 알림을 알려면, 먼저 서비스 흐름도 이해를 해야한다. 서비스 흐름도 APNS 서버에 우리 앱을 등록하면, 디바이스 토큰을 부여하게 된다. 우리는 그러면 이 토큰을 가지고 APN에 요청을 보낼 수 있는 것이다. 우리가 우리 앱에서 바로 APNS에 들어가지 않는다. 토큰을 받은 다음 알림을 받을 유저에 해당하는 디바이스 토큰만 가지고 와서, APNS 서버에 content와 같이 보내주면 APNS 서버가 우리 대신 그 디바이스들에게 알람을 모두 내보내는 것이다. 구현 단계를 생각해보면, 1. APNS 서버에 디바이스 토큰 요청을 보낸다.2. APNS 서버로부터 디바이스 토큰을 받아서 우리 서버에 요청을 한다.(DB에 저장) 3. 우리 서버가 그 토큰을 가지고 APNS 서버에 요청을 한다. 디바이스..

지난 포스팅2024.11.21 - [앱 개발/iOS] - [UIKit] Notification 기능 구현하기 [UIKit] Notification 기능 구현하기이번에는 UIKit을 이용해서 Noti를 만들어볼것이다.AppDelegate는 app lifecycle 전체를 관리하는 파일이다. AppDelegate.swift알람의 경우에는 이 AppDelegate 파일에서 만들게 된다.didFinishLaunchngWithOptions 안에wildguess.tistory.com 이번에는 SwiftUI에서 알람을 보내는 방법이다.우선적으로 UserNotifications 라이브러리를 불러온다. 그리고 기본적인 틀을 짠다.import SwiftUIimport UserNotificationsstruct Cont..

이번에는 UIKit을 이용해서 Noti를 만들어볼것이다.AppDelegate는 app lifecycle 전체를 관리하는 파일이다. AppDelegate.swift알람의 경우에는 이 AppDelegate 파일에서 만들게 된다.didFinishLaunchngWithOptions 안에 구현을 해준다. UNUserNotificationCenter.current().delegate = selfUN=UserNotification의 줄임말이다.UNUserNotificationCenter.current().delegate = selflet option = UNAuthorizationOptions(arrayLiteral: [.alert, .badge, .sound]) arrayLiteral 안의 요소들은 아래 Not..

개인 설정의 마지막 피날레, 프로필 사진 업로드 기능이 남았다.사진 업로드 기능의 경우, 밸런스투표/게시글 작성/챌린지 인증 등 여러 기능에 재사용되기 때문에 재사용 가능한 모듈로 만드느라 좀 고려할 것들이 많았다. 이미지 파일을 업로드하는데, 로컬에 저장하면 그 주소를 string으로 필드에 넣을 수 있지만 그렇게 하고 싶지 않고 바로 DB에 저장하고 싶어서 BLOB 형식으로 지정하느라 모델과 마이그레이션 파일을 다시 수정해야했다.(기존에는 필드 형식이 string으로 되어있었음) BLOB?Binary Large Object 의 약자로, 데이터베이스에서 대용량 바이너리 데이터를 저장하기 위한 데이터 타입을 의미 따라서 모델과 마이그레이션 파일은 BLOB으로 해주는것이 맞다.- 모델-마이그레이션 파일 ..

미들웨어도 다 문제 없는데 왜 자꾸 날까 생각을... 줄별로 찍어보니, 81번째 줄에서 에러남. 그럼, checkNickname()함수를 갔다 오면서 에러가 난다는건데, 닉네임의 길이를 처리하는 과정에서 에러가 난 모양이다.(인코딩!) checkNickname 함수 내부에서 req.body를 사용하고 있는데, 비동기 함수 호출 후 req.body가 예상과 다르게 변경되는 경우!!) 결국, checkNickname 함수에서 req.body(nickname) 자체 값을 받아서 인코딩을 위한 처리를 할때 값이 변환이 되어서, 비동기처리를 할 때 checkNickname 함수를 끝내고 오면 다음줄로 넘어가야 하는데 req.body가 undefined로 되어버려서 이런 문제가 발생했던 것! 해결 방법checkNi..