1. 문제
-

2. 시도해본 것들

-

 

3. 해결과정

-

 

4. 알게 된 점

-

최종프로젝트 1일차가 시작되었다.

모든 팀중 유일하게 4인팀이 되어서 팀편성표를 보고 씁쓸했다.

특히 다른팀은 대부분 리더, 부리더를 신청한 에이스들이 존재하는 팀이다.

 

팀프로젝트를 잘하려고 그리고 이끌어나갈려는 사람들이기에

더욱 의욕이 넘칠텐데 리더,부리더도 없을 뿐만 아니라

4인조가 되다니 마음이 이상했다.

 

팀원들 또한 같은 마음이었다. 버림받은 기분까지 들었지만

그래도 정해진 결과이니 열심히 해보자 하던 도중 갑자기 팀원 한명을 다른 팀원과

바뀌었다는 매니저의 얘기가 있었다.

 

그러자 다른 팀에서 온 팀원은 굉장히 화가 났다.

우리와 같은 이유다. 5인과 리더가 있는 팀에서

4인과 리더가 없는 팀으로 오니 화가난 것이다.

 

결국 바뀐 결과는 없어졌고, 왜 리더 부리더도 없는 4인팀이 만들어졌냐고 하자

다면평가에서 좋은 평가를 받은 사람들이고, 각자 1인분 하는 사람이기 때문이라고 했다.

 

그래서 더 씁쓸했다. 난 아직 1인분을 하는 실력이 아닌데 4인팀이라니...

그런 소동까지 있어서 팀 분위기는 더 안좋아졌지만

일찍 점심 먹으면서 마음을 다잡자고 팀원끼리 얘기를 나눴고

그 이후로 다 같이 프로젝트 S.A를 작성했다.

 

팀노션, 기획서 작성, ERD, 와이어프레임 등

저녁 10시까지 이야기를 나눴고 어느정도 윤곽이 갖춰졌다.

이제 많은 일을 해야겠지만 우선 기능구현에 대한 압박이 생겨서

산책 다녀온 후 소켓에 대한 공부를 했다.

 

하루종일 많은 일이 있었지만,

주어진 상황에서 최선을 다해야겠다.

728x90

1. 문제
프로그래머스 알고리즘 문제풀이 - 자바스크립트 [ A로 B 만들기]

    2. 시도해본 것들

    30분간 고민해봤다. 이중for문을 사용해야 하는 문제인가?

    근데 중복된 ll pp 같은건 어떻게 검증해야하지?

    내가 아는걸로 풀 수 있는건 맞겠지?

     

    고민을 많이 했지만 풀 수 없었다. 남은 시간 다른 공부를 해야하기 때문에

    검색하여 정답을 찾았다.

     

     

    3. 해결과정

    정답을 보니 이런 방법으로 풀 수 있다니 신기해서 가져왔다.

    우선 풀이과정에서 before / after를 동일하게 만들지 않아도 되는구나

    단순히 sort로 정렬해서 같은지만 보면 되는거였구나?

     

    우선 문자열 상태에서 공백을 없앤다 = split("")  [String]

    배열상태로 분류한다 = sort() [Array]

    다시 , 같은 잡음없이 공백없이 문자열로 변환한다 = join("") [String]

    3항연산자로 true = 1 , false = 0 으로 반환한다 끝!

     

    4. 알게 된 점

    나의 코드

    function solution(my_string) {
    	//실패...
    }

     

    남의 코드

    function solution(before, after) {
        return before.split("").sort().join("") === after.split("").sort().join("")? 1:0;
    }
     
    728x90

    1. 문제
    프로그래머스 알고리즘 문제풀이 - 자바스크립트 [ 중복된 문자 제거 ]

    2. 시도해본 것들

    for문으로 해결할 수 있을꺼라 생각했는데,

    생각보다 로직이 복잡하고 헷갈렸다.

    그래서 우선 중복된 문자를 제거할 방법을 검색했다.

     

     

    3. 해결과정

    문자열을 제거할 방법은 Set()함수가 좋아보였다.

    다만 객체 {  } 로 반환하니 다시 배열로 만들어 줘야한다.

     

    4. 알게 된 점

    나의 코드

    function solution(my_string) {
    	// 문자열 배열로 만들기
        const arr = [...my_string];
        // 중복제거 된 { } 객체를 다시 [ ]로 만들기
        const arr_set = Array.from(new Set(arr));
        // 그냥 String()을 하면 , 가 생기니 join("")으로 문자열 만들기
        return arr_set.join("")
    }

     

    남의 코드

    function solution(my_string) {
        return [...new Set(my_string)].join('');
    }
     

    문자열 자체를 Set함수로 객체{} 만들고 바로 배열만들고 바로 문자열........

    진짜 깔끔하다

    728x90

    1. 문제
    프로그래머스 알고리즘 문제풀이 - 자바스크립트 [ 문자열 정렬하기2 ]

    2. 시도해본 것들

    조건1) 모두 소문자로

    조건2) 알파벳 순서대로 정렬

     

    3. 해결과정

    문자열을 소문자로 바꿔주는 toLowerCase()

    그리고 split으로 하나씩 쪼갠후 sort 정렬하고 다시 join으로 묶기

     

    4. 알게 된 점

    나의 코드

    function solution(my_string) {
      let answer = "";
      answer = my_string.toLowerCase().split("").sort().join("");
      return answer;
    }

     

    남의 코드

    function solution(my_string) {
        return my_string.toLowerCase().split('').sort().join('');
    }
     
     
    728x90

    1. 문제
    프로그래머스 알고리즘 문제풀이 - 자바스크립트 [ 숫자찾기 ]

    2. 시도해본 것들

    숫자를 배열에 바로 넣어보았는데 자꾸 값이 0이 반환되었다.

    숫자를 문자열로 바꾼후 배열에 추가하니 생각대로 되었다.

     

    3. 해결과정

    k와 일치하는 자리수는 인덱스+1이라는 사실을 깨닫고

    for문안에서 검사하여 답을 찾아 +1했다.

    그외에는 -1 반환

     

    4. 알게 된 점

    나의 코드

    function solution(num, k) {
        let str = String(num); //"29183"
        let arr = [...str]; // ["2","9","1","8","3"]
        for(i=0; i<str.length; i++){
            if(Number(arr[i])===k){
                return i+1;
            }
        }    
        return -1
    }

     

     

    남의 코드

    function solution(num, k) {
        var answer = num.toString()
        if (answer.includes(k)) {
            return answer.indexOf(k) + 1;
        } else {
            return -1;
        }
    }
     
    728x90

    1. 문제
    프로그래머스 알고리즘 문제풀이 - 자바스크립트 [ 약수 구하기 ]

    2. 시도해본 것들

    24의 결과값을 봤을때, 약수는 해당 값으로 나눴을때 딱 떨어지는

    나머지가 0인 값이다.

     

    3. 해결과정

    모두 탐색해야하기 때문에 for문을 떠올렸다.

    1부터 모두 돌아서 각각 n을 나눴을때 나머지가 0이 되는 값을 배열에 넣었다.

    도대체 어떻게 풀지라고 생각들었던 것인데,

    왜 정답이 저렇게 나오지?

    라고 생각할때 잘 풀리는 것 같다.

     

    4. 알게 된 점

    나의 코드

    function solution(n) {
        var answer = [];
        for(i=1; i<=n; i++){
            if(n%i === 0){
                answer.push(i)
            }
        }
        return answer;
    }

     

     

    남의 코드

    function solution(n) {
        return Array(n).fill(0).map((v, index) => index+1).filter((v) => n%v===0);
    }

    fill은 처음 보는 함수인데 Array(n)은 Array(20)과 같이 숫자(또는 문자열) 20을 반환할 것 이다.

    그럼 fill(0)은 배열에 20개를 모두 0 으로 가득채운다.

    map으로 각각 요소에 인덱스 번호로 1을 더해주면

    인덱스는 0부터 시작하기에 [1,2,3,4, ... 20]이 들어갈 것이고,

    filter를 통해 해당 요소가 나머지가 0일 때에만 값을 반환하도록 한다.

     

    해당 함수들을 알더라도 위와 같은 풀이로 풀지 못했겠지만,

    새로운 방식과 함수를 배워서 뜻 깊다.

    728x90

    1. 문제

    Table [테이블명] doesn't exist ??

     

    npx sequelize init

    npx sequelize db:create

    npx sequelize model:generate --name User --attributes nickname:string,password:string,confirm:string

     

    모두 작성했고, 회원가입 로직까지 만들어서 post를 보내는데 계속 에러가 난다.

    근데 로직은 맞는 것 같은데 db도 생성했는데 왜 안될까ㅠㅠㅠㅠ

     

    2. 시도해본 것들

     

    구글에 검색해봤다. 테이블이 없을때 발생하는 에러래요~

    뭐야 이 뻔한 얘기는.. 영어로 테이블 없다고 써져있잖......어??

     

    3. 해결과정

     

    npx sequelize db:migrate

    생각해보니 이걸 안했네.....

     

     

    4. 알게 된 점?

     

     

    npx sequelize init

    npx sequelize db:create

    npx sequelize model:generate --name User --attributes nickname:string,password:string,confirm:string

     

    3가지를 하고나면 생성된 모델과 마이그레이션을 수정하느라

    npx sequelize db:migrate 를 까먹게 된다ㅠㅠ

     

    모델 생성하면 다음것도 꼭 해야하는데생성된걸 수정하다보면 까먹는다..... 다음엔 잊지말아야지!

    728x90

    1) map()이란 무엇인가

    모든 배열의 아이템에 function을 실행하는 메서드다.
    그리고 함수의 결과 값으로 새로운 배열을 만든다.

    const days = ["Mon", "Tue", "Wed", "Thurs", "Fri"];
    //함수 자체를 변수에 할당하여 쓰거나
    const addNumber = (day, index) => `#${index+1} 😍${day}`;
    const smilingDays = days.map(addNumber);
    
    // 또는 함수를 직접 넣어 사용
    // const smilingDays = days.map((day, index) => `#${index+1} 😍${day}`);
    console.log(smilingDays)

     

    2) 콜백함수란 무엇인가

     

    정의 : 함수에 파라미터로 들어가는 함수
    용도 : 순차적으로 실행하고 싶을 때 씀
    참고 : 콜백함수가 필요한 함수들에만 콜백함수 사용가능

              잘만들어진 함수를 협업하는 팀원이 가져다 쓰고 싶을 때 사용

              콜백함수로 함수를 디자인하지 말고, Promise도 있고 async, await도 있음.

     

    document.querySelector("button").addEventListener("click", 콜백함수)
    // 버튼을 클릭했을 때, 이 함수가 실행되게 해주세요.
    function first(파라미터){
        console.log(1)
        파라미터()
    }
    function seconde(){
        console.log(2)
    }
    
    // 순차적으로 실행하기 위해 함수의 파라미터에 다른 함수를 넣음(콜백함수)
    first(second)

     

    3) jwt이란 무엇인가? (+ 세션,토큰 차이점)

    로그인 기능을 구현할때
    1. session : 정보가 간단하게 담김 => db확인하느라 처리시간이 김
    2. token(jwt방식) : 정보가 많이 담김 => 정보 보고 바로 통과
    둘 중 하나 이용하여 구현함

    단점 : 디코딩이 쉬움, 시크릿키를 쉽게하면 털림, 남의 jwt 탈취 => 리프레쉬토크

    별일 없으면 역사와 전통의 session 방식이 좋다.
    그러나 많은 데이터를 처리해야한다면 jwt를 써야하는데 보안에 신경써야 한다.


    쿠키: 서버와 사용자간에 주고 받는 데이터(웹에는 있지만, 앱에는 없음)

    세션: 중요한 정보는 모두 서버->DB에 담겨 있음. 유저가 가진 것은 세션ID뿐

    토큰: 서버가 기억하는 이상하게 생긴 문자열(ID카드)
    JWT:  정보를 갖고 있는 토큰(DB없이 검증가능)
           토큰형식. DB를 생성하지 않음. 토큰을 받으면 '사인된 정보'를 유저에게 보냄
           토큰이 유효한지만 검사하고, 암호화하진 않음(비밀번호를 담으면 안됨)

    세션장점 :  모든 정보를 저장. 해당 정보를 이용해 새로운 기능을 추가가능.
                   예를 들어 세션을 삭제하고 쫓아낼 수 있음(ex.넷플리스)
    JWT장점 :  토큰을 추적하지 않음. 토큰 유효성만 검사함. 하지만 강제로그아웃 등 하지 못함.

     

    => 규모가 작을때는 JWT를 추천하지만, 규모가 커진다면 세션을 쓰는게 좋은 편


    4) 미들웨어란 무엇인가

    미들웨어의 정의: 양쪽을 연결해서 데이터를 주고 받을 수 있도록 중간에서 매개 역활을 하는 소프트웨어

     

    [어플리케이션 레벨] app.use(+get post put 등)의 메서드로 미들웨어를 등록할 수 있음.
    [라우터 레벨] router.use는 인스턴스에 바인딩된다는 점을 제외하면 어플리케이션의 레벨과 동일하게 작동한다.
    [오류처리 미들웨어] (err, req, res, next) 꼭 4개의 인수를 사용해야 한다. 하나라도 생략되면 일반 미들웨어로 인식한다.

    [타사 미들웨어] 제 3자가 만든 미들웨어 (body-parser, morgan 등)
    [내장 미들웨어] Express가 내장한 미들웨어들을 뜻한다

    내장 미들웨어

     

    5)  라우팅이란? (+app.use란 무엇인가)


    라우팅은 응용 프로그램이 URI(또는 경로) 및 특정 HTTP 요청 메서드(GET, POST 등)인 특정 끝점에 대한

    클라이언트 요청에 응답하는 방법을 결정하는 것을 말합니다.

    appHTTP 메서드에 해당하는 Express 개체의 메서드를 사용하여 라우팅을 정의합니다 . 

    예를 들어 app.get()GET 요청을 처리하고 app.postPOST 요청을 처리합니다.

    app.use()를 사용하여 미들웨어를 콜백 함수로 지정할 수 있습니다

     

    => 콜백함수 정의 : 함수에 파라미터로 들어가는 함수 / 용도 : 순차적으로 실행하고 싶을 때 씀

     

    응답 방법

    728x90

    + Recent posts