백엔드에서 회원가입 요청을 테스트해달라고 해서 같이 회원가입을 진행했다.
이제 회원가입쪽은 잘 진행되고 있지만 로그인 부분은 프론트 팀원분이 만드셨는데
저번에 언급했던 것 처럼 데이터 주고받기는 안되는 상황이다.(json도 안해본 상황이라)
당연히 api도 제대로 명시되지 않았었기 때문에 팀원분의 잘못이라기보다는 진행도의 문제였다고 생각하는데
지금 아이디어가 구체적으로 결정되기 전 프리프로젝트 리팩토링? 정비? 완성?같은 느낌으로 하나씩 기능을 추가하고 있다.
아무래도 같은 기능들을 메인에도 당연히 도입할 수 밖에 없기 때문에 지금 프리프로젝트를 만지고 있어도 메인 프로젝트를 진행하는 듯한 효과를 얻을 수 있다고 생각한다.
멘토님과의 회의를 통해 SWR/리액트쿼리 등의 사용을 추천받았지만 교육과정에 리덕스가 들어있었기 때문에 리덕스를 써도 괜찮고 대신 리덕스를 사용할 경우 리덕스의 장단점에 대해 고민해보며 다른 상태관리툴을 사용했을 경우와 비교해 면접에 대한 준비를 권장해주셨다.
블로그 작성에 대하여 문의도 드렸는데 요즘은 1일 1블로그는 권장하는 사람이 많아서 예전 사교육 열풍마냥 너도나도 한다는 것 같다고 하셨다.
그래서 이 블로깅이 취업을 한 후에도 지속될 수 있는지에 대한 의문이 있고
모두 하는 이런 상황에서 이 블로그만의 차별성을 찾는 것이 중요하다는 말씀도 해주셨다.
아이디어에 대해서는 외부 api에 의존하는 아이디어들이 보이는데 이런 아이디어들은 해당 api를 사용하다 문제가 생길경우 해당 api의 문제인지 받아오는 과정에서 문제인건지 아니면 받아온 상태에서 문제가 생긴건지 원인을 제대로 파악할 수 없기 때문에 4주라는 한정된 시간내에 완성을 할 수 있는지 미지수라서 추천을 하기 어렵다고 하셨다.
저번에도 언급하신 1,2,3차 처럼 규모별로 완성단게를 정해두고 확장해나가는 방식이 완성을 위해 좋은 것 같은데 api가 들어가면 1차부터 필수적으로 들어가기 때문에 1차의 완성조차 어려울 수 있을 것 같다.
멘토님과의 회의가 끝난 후 백엔드분들과 모여서 이것저것 테스트해보다가
modify부분이 아직도 제대로 되지 않아 어디가 문제인지 파악하려고 헀으나
아직까지 해결이 되지 않은 상황이다.
같은 형식의 fetch를 get, post, delet에 사용하고 있기 때문에 이 fetch의 문제는 아닌 것 같지만 백엔드분의 로컬서버에서는 작동하시기 때문에 원인을 알 수 없다고 하셨다.
답변의 저장쪽에서도 이상하게 저장되는 부분들이 보여 수정을 하기로 하고 백엔드와의 대화는 종료했다.
모디파이쪽을 확인하던 중 뭐가 문제인지는 찾지 못했지만 에러핸들링이 왜 중요한지에 대해 알 수 있었는데 기존에는 어디에 어떻게 보내는지 찾아보려고 console도 찍어보고 0.1초도 안되는 시간 잠깐 뭐가 출력되는 모습을 확인하려고 계속 재시도도 해보고 여러 수를 써봤는데
간단하게 .then 내부에 if/else를 통해 res.status가 200이 아닌경우 alert를 출력시키는 방식으로 진행했더니 페이지 이동 전 alert창 먼저 확인할 수 있었고 내부 출력메세지를 현재 주소를 넣거나 fetch요청한 페이지를 출력하는등의 방식을 통해 console보다 안정적으로 메세지를 볼 수 있었다.
9시가 넘어 백엔드쪽 호출을 받고 백엔드 멘토님과 함께 modify부분을 수정하는데
일차적으로는 프론트엔드쪽의 잘못이 있었다. 주소값에 http://부분을 없이 작동시켰던 것이다.
원래는 저 값이 아니었던 것 같은데 포스트맨을 통해 데이터가 들어간다고 해서 포스트맨 주소값을 그대로 복사하다가 저런 실수가 벌어진 것 같다.
(먼저 작성한 글 및 json서버를 이용할 떄 작성한 코드들도 모두 http://가 들어있는 부분을 통해 확인할 수 있었다)
어찌됬건 이제 modify까지는 진행이 되는데 상태 응답이 제대로 넘어오지 않는 것인지 아니면 CORS오류인지는 모르겠지만 응답을 이상하게 받아 에러가 나기 때문에 에러처리로 메인페이지로 이동하게 해도 메인페이지로는 이동하지 않는 오류가 생거벼렸다.
modify는 CRUD의 U부분으로 중요한 기능이기 때문에 잘 해결하고 넘어가야 할 것 같다.
CT(1).1, 2, 3 더하기 8은 피보나치의 0,1을 구하듯 홀수의 갯수, 짝수의 갯수들의 합을 dp로 처리하면 되는 문제였다. 해결 코드는 아래와 같다.
let input = `3
4
7
10`.split('\n').map(Number).slice(1)
let dp = [[0,1],[1,0],[1,1],[2,2],[3,4]]
for(let i = 5 ; i <= Math.max(...input) ; i++){
dp[i] = [(dp[i-1][1]+dp[i-2][1]+dp[i-3][1])%1000000009,(dp[i-1][0]+dp[i-2][0]+dp[i-3][0])%1000000009]
}
let result = []
for(let i = 0 ; i < input.length ; i++){
result.push(dp[input[i]].join(' '))
}
console.log(result.join('\n'))
CT(2).다트 게임은 문제를 잘못 푼 것 같다. 일단 문자열을 숫자+영어+(특문)의 구조이기 때문에 숫자 다음에 문자가 오면 해당 idx를 기억해 slice를 하는 방향으로 잡았는데 10이 있어서 조금 더 까다롭게 처리해야했다. 또한 count가 0인지 아닌지에 따라 slice를 한번 또는 두번 처리해야하는지가 갈려 줄 수가 늘어났고 그 처리된 배열을 다시 쪼개 S,T,D를 구분하고 특수문자가 붙어있는지 조건처리 및 0번째 idx인지 체크하는 과정을 거치다보니 너무 길어졌다. 다른 사람은 짧게 하던데 조금 무식한 방법일지도 모르겠다.
function solution(dartResult) {
let answer = [];
let before = 0
let result = 0
count = 0
for(let i = 2 ; i < dartResult.length ; i++){
if(count === 2){
break
}
else if(!isNaN(Number(dartResult[i])) && !isNaN(Number(dartResult[i+1])) && isNaN(Number(dartResult[i+2])) ){
if(count === 0){
before = i
answer.push(dartResult.slice(0,i))
count++
i++
}
else{
answer.push(dartResult.slice(before,i))
answer.push(dartResult.slice(i))
i++
}
}
else if(!isNaN(Number(dartResult[i])) && isNaN(Number(dartResult[i+1]))){
if(count === 0){
before = i
answer.push(dartResult.slice(0,i))
count++
}
else{
answer.push(dartResult.slice(before,i))
answer.push(dartResult.slice(i))
}
}
}
for(let i = 0 ; i < 3 ; i++){
if(answer[i].includes("S")){
let some = answer[i].split('S')
if(some[1] === ''){
answer[i] = Number(some[0])
}
else if(some[1] === '#'){
answer[i] = -Number(some[0])
}
else if(i === 0){
answer[i] = Number(some[0])*2
}
else if(some[1] === '*'){
answer[i] = Number(some[0])*2
answer[i-1] *= 2
}
}
else if(answer[i].includes("T")){
let some = answer[i].split('T')
if(some[1] === ''){
answer[i] = Number(some[0])**3
}
else if(some[1] === '#'){
answer[i] = -(Number(some[0])**3)
}
else if(i === 0){
answer[i] = 2*(Number(some[0])**3)
}
else if(some[1] === '*'){
answer[i] = 2*(Number(some[0])**3)
answer[i-1] *= 2
}
}
else {
let some = answer[i].split('D')
if(some[1] === ''){
answer[i] = Number(some[0])**2
}
else if(some[1] === '#'){
answer[i] = -(Number(some[0])**2)
}
else if(i === 0){
answer[i] = (Number(some[0])**2)*2
}
else if(some[1] === '*'){
answer[i] = (Number(some[0])**2)*2
answer[i-1] *= 2
}
}
}
for(let i = 0 ; i < 3 ; i++){
result += answer[i]
}
return result;
}'회고' 카테고리의 다른 글
| [Main-Project 개발일지]-8 (0) | 2022.09.15 |
|---|---|
| [Main-Project 개발일지]-7 (0) | 2022.09.14 |
| [Main-Project 개발일지]-5(추석) (0) | 2022.09.12 |
| [Main-Project 개발일지]-4(추석) (0) | 2022.09.11 |
| [Main-Project 개발일지]-3(추석) (0) | 2022.09.10 |
