안녕하세요, 패스트 캠퍼스 메가바이트 스쿨 프론트 엔드 3기 수료 중인 김당퀔입니다! 이번 3기 수료 기간은 9월 13일부터 4월 14일까지 총 7개월 과정입니다. 7개월 동안 매주 주말 회고록을 작성해 보려고 합니다.
블로그 제출 기한으로 인해서 지난 금요일부터 해당 주 목요일까지의 사이클로 작성됩니다.
replace(/[^\w-\.]/g, '')
이라고 하면 63개 문자, -, . 으로 시작하는 전부를 빈 문자로 바꾸는 게... 아닌가? 왜 쟤들이 제외되고 아닌 문제들만 빈 문자로 바뀌는 건지 잘은 모르겠다.&&
연산자 사용state = {}
/ setState()
useState()
다들 새해 복 많이 받으세요!
프로그래머스
옹알이 (2)
정규표현식 RegExp.prototype.exec(문자열) 주어진 문자열에서 일치 탐색을 수행한 결과를 배열 혹은 null로 반환.
function solution(babbling) {
// (그룹) + 그룹과 동일한 단어
// 2개의 동일한 단어를 연속적으로 사용해야만 매치된다.
// \1은 정규식의 그룹 중 첫 번째 그룹을 가리킨다.
// 연속적인 발음을 할 수 없으니까 연속적으로 발음이 나타나는 것을 걸러 주게 된다.
const r1 = /(aya|ye|woo|ma)\1/
// 그룹으로 시작하고, 하나 이상 일치하며 그룹으로 끝나야 한다.
const r2 = /^(aya|ye|woo|ma)+$/
let answer = 0
for (let x of babbling) {
const m = r1.exec(x)
if (m) continue
const m2 = r2.exec(x)
if (!m2) continue
answer += 1
}
return answer
}
```
4차 과제 함수 정리
4차 과제 회의
export, import 통일하기
fetch, try...catch, throw에 대해서 정리해 보기
+ 참고 사이트
// createRequest
async function createRequest(url, type, masterKey = true, data, accessToken) {
const res = {
method: type,
headers: { ...store.headers },
};
if (masterKey) {
res.headers.masterKey = true;
}
if (data) {
res.body = JSON.stringify(data);
}
if (accessToken) {
res.headers.Authorization = `Bearer ${accessToken}`;
}
try {
const response = await fetch(store.url + url, {
...res
})
if (!response.ok) {
throw new Error()
}
const json = response.json()
return json
} catch (error) {
console.log(error)
}
}
// 로그인 유지 데이터
export async function keepLogin(accessToken) {
createRequest('/auth/me', 'POST', false, null, accessToken)
}
+ 관리자 페이지 라우터
// router
window.addEventListener('hashchange', router())
function router() {
const routePath = location.hash
const allProducts = store.selector('.all-products')
const addProducts = store.selector('.add-products')
const allTransacs = store.selector('.all-transace')
if (routePath === '#all-products') {
allProducts.classList.add('active')
addProducts.classList.remove('active')
allTransacs.classList.remove('active')
} else if (routePath === '#add-products') {
addProducts.classList.add('active')
allProducts.classList.remove('active')
allTransacs.classList.remove('active')
} else if (routePath === '#all-transacs') {
allTransacs.classList.add('active')
addProducts.classList.remove('active')
allProducts.classList.remove('active')
}
}
프로그래머스
4차 과제 고민!
fetch()로 반환되는 Promise 객체는 HTTP error 상태를 reject 하지 않는다.
// createRequest
async function createRequest({ url, type, masterKey, data, accessToken }) {
const content = {
method: type,
headers: { ...store.headers }
};
if (masterKey) {
content.headers.masterKey = true;
}
if (data) {
content.body = JSON.stringify(data);
}
if (accessToken) {
content.headers.Authorization = `Bearer ${accessToken}`;
}
try {
const response = await fetch(store.url + url, { ...content })
if (!response.ok) throw new Error()
const json = await response.json()
return json
} catch (e) {
return
}
}
// 요청 api
export async function keepLogin() {
return await createRequest({ url: '/auth/me', type: 'POST', masterKey: false, accessToken: store.token})
}
안재원 강사님 강의
CI = false
를 작성하면 warning을 무시한다.property of: Harry Potter
이라고 써 있는 것을 발견했다. 사실 코딩을 하면서 영어 뜻을 모르는 단어는 잘 없었기 때문에 그러려니 넘어갔었던 것 같은데 프로퍼티를 프로그래밍에서만 쓰는 단어인 줄 알았는데 실제로 사용하는 줄 몰랐던 것이다...! 그래서 찾아봤더니 property는 재산권
의 의미를 가지고 있는 단어라고 한다.새해가 돌아왔고, 4차 과제의 2차 제출을 끝냈다! 사실 1차 제출 때와 크게 달라진 것은 없었지만 그래도 바뀌었다는 것을 보여 드리고 싶었는데 멘토님이... 따끔한 말들을 많이 해 주셨다. 서로 소통이 많이 부족했다는 것을 느끼고 있던 상태에서 멘토님도 그렇게 말씀을 하시니 얼마나 엉망이었는지 더 뼈저리게 느끼게 되었다. 팩폭으로 맞으니 꽤나 아프기도 했지만... 조금 더 성장할 수 있는 기회가 주어진 것 같아서 더 열심히 해야겠다는 생각이 들었다. 팀장으로서의 고민도 꽤나 많아졌다. 그 전에도 내가 이렇게 해도 되나? 하는 것들이 있었는데 지금은 그 고민들이 더 는 기분이다. 내가 하는 것처럼 조금 더 타이트한 일정을 잡아도 되는 건가? 팀원들과 의견은 조정할 거지만 내가 조금 더 의견을 내도 되는 걸까? 하는 생각들. 팀원들이랑 합을 잘 맞추는 게 더욱 중요할 것 같다. 그러기 위해선 자주 회의하고 자주 이야기 나누기! 제가 노력하는 만큼... 팀원들도 같이 이야기하려고 해 줬으면 좋겠다는 마음도 크다! 4차 과제를 여기서 끝내는 것이 아닌 조금 더 합을 맞추고 나은 결과물로 바꾸기 위해서 앞으로 학원 기간이 끝날 때까지 같이 갈 텐데 좋은 결과물이 나오면 좋겠다. 싸우더라도 잘 풀고, 서로의 의견을 존중할 줄 아는 사람들이면 좋겠다. 제가... 쓴소리를 해도... 미워하지 말아 주소서.... 아좌작.
지금까지 17주차의 기록을 읽어 주신 여러분, 감사합니다! 김당퀔은 이만 공부하러. 🥕🥕