일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 쉬운 문제
- socket
- BFS
- dfs
- 소켓
- 타입 챌린지
- Algorithm
- 가천대
- 자바스크립트
- 레벨 1
- 알고리즘
- 크롤링
- 프로그래머스
- 문자열
- 타입스크립트
- ip
- HTTP
- 그래프
- Nestjs
- 백준
- Node.js
- HTTP 완벽 가이드
- Crawling
- typescript
- 수학
- dp
- type challenge
- javascript
- TCP
- 프로그래머스 레벨 2
- Today
- Total
목록분류 전체보기 (499)
kakasoo
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b24uew/btsGdZmM7YC/y41YKDoEiIhnXUAIo7uQO1/img.webp)
서론 이 글에서는 유저가 메타 관리자 페이지에서 비즈니스를 생성하고 광고 계정을 생성, 결제 정보를 연동하는 것까지를 다루려고 한다. 사실 개발자 입장에서는 유저의 플로우를 몰라도 API를 연동하는 데에는 아무런 문제가 없기는 하다. 실제로 나는 그걸 전혀 모르는 상태로 개발을 해온 적이 있었는데, 그래도 알고 있는 편이 수월하기 때문에 다뤄봐야겠단 생각이 들었다. 광고를 만들기 위해서는 일단 비즈니스가 필요하다. 어떤 유저도, 자신의 비즈니스를 생성하지 않고서 광고를 집행할 수는 없다. ( 사업자를 등록해야 한다는 의미는 아니다. ) Meta Business Suite 및 비즈니스 관리자에 로그인하고 액세스하기 Meta Business Suite와 비즈니스 관리자를 사용하면 한곳에서 광고를 만들고 계정..
러스트에는 소유권(Ownership)이라는 개념이 있고, 이는 다른 언어에서는 보기 힘든 특성이다. 일단 소유권의 세 가지 규칙을 먼저 보자. 러스트에서는 변수(variable)가 각 값(value)에 대한 소유권을 가진다. 소유자(owner = variable)가 범위(scope)를 벗어나면 그 값은 해제(deallocate)된다. 특정 시점에 소유자는 단 하나만이 존재할 수 있다. 지난 번에 작성한 코드 use std::io; // 어떤 외부 크레이트를 사용할지는 use로 명시 가능하다. fn main() { let mut input = String::new(); // 구조체를 사용하여 빈 문자열을 생성한다. io::stdin().read_line(&mut input); // 주소를 참조할 수 있도록..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bDgKwI/btsGdEv7lHY/TMUNEQIf2jDT7aPk7ciB60/img.webp)
시작하기 - 마케팅 API - 문서 - Meta for Developers 3단계: 광고 세트를 생성하고 예산, 청구, 최적화 및 기간 정의 광고 세트는 같은 일일 또는 총 예산, 일정, 청구, 최적화 및 타게팅 데이터를 공유하는 광고 그룹입니다. 이 단계에서는 AdSet 클래 developers.facebook.com 이 문서의 내용을 그대로 정리할 뿐인 블로그 글이지만, 위 글은 개발자가 이미 광고 도메인 이해가 있을 것을 전제로 한 듯 하기에 어렵다. 따라서 어차피 도메인에 대해 설명할 겸 한 문장 한 문장을 해석을 달아서 API를 어떻게 호출할 것인지를 설명할 것이다. 다만, 이 글을 보고 그대로 따라한다고 해서 광고를 생성할 수 있다고 보장할 수는 없는데, 이 문서는 자기 계정인 경우에 해당하기..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dzo6rM/btsGeNZGs6H/2r6K5eaJvQUqUgnkn5FgNk/img.webp)
메타 용어 정리 설명하기에 앞서 메타 용어들을 정리하고 가야 할 필요성을 느낀다. 메타의 ERD 구조가 실제로는 어떠한지 모르지만, Meta Marketing API를 호출하면서 광고 자산들의 구조에 대해 대략 생각해볼 수 있다. 생각해보면 위와 같이, 1:M으로만 구성되어 있는 어떤 모습을 상상해볼 수 있는데, 실제로도 저러한지는 알 수가 없다. 아무래도 글로벌 서비스인 탓에, 처음의 설계와 달라진 '허용'들이 생겨나면서 1:1, 1:N, N:M 등 다양한 관계성이 생겨난 것으로 보인다. 최종적으로 그려지는 ERD의 모습은 위와 같이, 유저부터 광고 계정까지 1:M으로 연결되며, 각 연결 지점마다 자산이 있는 걸로 보인다. 메타 서비스의 '유저'는 여러 개의 '비즈니스'를 가지고, '비즈니스'는 다시 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pjwY4/btsF7Ji2bKG/gsHn65lrHFLtiXz4XpHfqk/img.webp)
에러 상황 { "message": "Application does not have permission for this action", "type": "OAuthException", "code": 10, "error_subcode": 1341012, "is_transient": false, "error_user_title": "이 프로필에 대한 액세스 권한 없음", "error_user_msg": "이 프로필에 액세스하는 데 필요한 권한이 없습니다", "fbtrace_id": "(생략)" } Application does not have permission for this action는 액세스 권한이 없을 때 발생한다. Facebook - You don't have required permission to..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ENc5l/btsF5HMcYYR/s7a7qS6nMZHQ8VwA3tl6C0/img.webp)
에러 상황 { "message": "Application request limit reached", "type": "OAuthException", "is_transient": true, "code": 4, "error_subcode": 1504022, "error_user_title": "API 요청이 너무 많음", "error_user_msg": "이 앱에서 너무 많이 호출했습니다. 잠시 기다린 후에 다시 시도해주세요. 자세한 정보는 다음을 참고하세요: https://developers.facebook.com/docs/marketing-api/insights/best-practices/#insightscallload", "fbtrace_id": "(생략)" } { "message": "Applicati..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bcHsys/btsF2Rh5218/lnBmggLM049p8miGdjClm1/img.webp)
에러 상황 { "message": "Service temporarily unavailable", "type": "OAuthException", "is_transient": false, "code": 2, "error_subcode": 1504018, "error_user_title": "요청 시간이 초과되었습니다", "error_user_msg": "기간을 줄이거나 더 적은 데이터를 검색하거나 비동기 작업을 사용하세요", "fbtrace_id": "(생략)" } 일시적으로 서비스를 이용할 수 없다는 메시지인데, 상세한 내용은 `error_user_title`와 `error_user_msg`을 통해 확인할 수 있다. 아마도 message는 카테고리 상 code 2에 해당하는 내용일 것이고 error tit..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ceMG9l/btsF4TFmPqr/hqlkK1MkoVykd6WpLQhXQk/img.webp)
type Fill = T extends [infer H, ...infer R] ? [...L, 0][Start] extends undefined ? Fill : [...L, 0][End] extends undefined ? Fill : Fill : L 위처럼 프로퍼티가 하나 추가된 상황만을 생각해보자. type Fill< T extends unknown[], N, Start extends number = 0, End extends number = T['leng..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vU9Bj/btsF2Oriqo7/TkjHKZSDZIvRZvnKdouywk/img.webp)
type Length = T['length']; type Push = [...T, P]; type NTuple = Length extends N ? T : NTuple; type Add = Length; 이렇게 4개는 타입 챌린지를 풀다 보면 많이들 쓰게 되는 타입들이다. Length는 사실 제네릭 T[’length’]의 접근을 축약한 것이기 때문에 크게 어렵지 않을 것이다. Push는 Tuple T를 받아 P를 담은 새 튜플로 추론되는 타입이다. NTuple은 튜플 T가 N만큼의 크기가 될 때까지 재귀적으로 Push하는 타입이다. Add는 N1, N2를 그 크기만큼의 튜플로 만든 다음, 그 튜플을 합쳐 다시 Length를 구하는 방식으로 두 수의 합을 구하는 타입이다. 이 네 가지 타입이 자주 쓰이는 ..
러스트도 다른 언어와 같이 표준 라이브러리들을 제공한다. ( Node.js로 치면 코어 모듈과 같다 ) 예를 들면 해시맵, 벡터, 그 외 수많은 자료구조가 존재하고 입출력 기본 요소 역시 포함된다. 이를 통해 사용자에게 직접 입력을 받아, 기존의 프로그램이 입력에 의해 동작하게끔 수정할 예정이다. 표준 라이브러리는 외부 크레이트로, 이 크레이트는 기본적으로 모든 곳에서 바로 사용할 수 있단 의미다. std - Rust std - Rust §The Rust Standard Library The Rust Standard Library is the foundation of portable Rust software, a set of minimal and battle-tested shared abstraction..
Basic Data Types Booleans : true 또는 false를 의미하며 Rust에서는 1byte 크기를 가진다. Character : Rust에선 4바이트의 크기이며, Rust에서는 ASCII를 Char로 저장하면 공간을 낭비하게 된다. Integers : 부호가 없는 경우 u, 부호가 있는 경우 i이며 비트에 따라 뒤의 숫자가 달라진다. u8,i8 u16, i16 u32, i32 u64, i64 u128, i128 Floats f32 f64 : f32 대비 2배의 정밀도를 갖는 타입 화성에서 무게를 재는 프로그램 $ cargo new mars_calc # mars_calc라는 프로젝트 폴더를 생성하낟. $ cd marcs_clac $ cargo run # Hello, world! 가 나오..
// main.rs fn main() { println!("Hello, world!"); } 함수의 호출은 위와 같이 작성해서, 다른 프로그래밍 언어와 다르지 않다. 앞서 ‘println!’을 따로 설명하지 않고 넘어갔는데 이는 함수가 아니라 러스트에서는 매크로라고 부르는 대상이다. 매크로는 메타 프로그래밍의 줄임말로 더 많은 코드를 작성하는 코드 작성의 한 가지 방법이라고 한다. 함수 시그니처는 이 함수가 받는 매개변수와 타입 ( = 데이터 유형 )을 반드시 명시해야 하는데, 매크로는 매번 다른 개수의 매개변수와 타입을 받을 수 있도록 작성하는 것이다. 단점은 매크로를 정의하는 게 함수보다 더 복잡하다는 점이 있지만 범용적으로 사용가능한 좋은 기능이다. fn main () { println!("Numb..