
안녕하세요, 패스트 캠퍼스 메가바이트 스쿨 프론트 엔드 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주차의 기록을 읽어 주신 여러분, 감사합니다! 김당퀔은 이만 공부하러. 🥕🥕