회고

[Pre-Project 개발일지]-13

Happy Programmer 2022. 9. 6. 23:50

오늘은 배포에 대한 고민을 계속 하다가 netlify에서 하면 좋을 것 같다는 생각을 하고 알아봤다.
영상이나 자료를 찾아보니 그렇게 복잡하지 않은 것 같아 기본적으로 시도해보니
private으로 레포지토리를 맘대로 만들어뒀기 때문에 유료회원이 아니면 이용할 수 없었다.
다른 컨텐츠도 마찬가지겠지만 이건 클론과제인데 이걸 도대체 왜 비공개로 막아두는지는 이해할 수 없다.

어찌됬건 간단한 깃허브 배포가 막혀서 build 후 직접 올리는 방식을 선택했는데
생각보다 너무 간단했다. 그냥 npm run build를 치고 나온 폴더를 올리자 배포가 성공했다..?
여기에 도메인주소는 사서 올릴수도 있는거고 AWS보다는 훨씬 더 안전(비용폭증)하고 저렴할 것 같다.

일단 정비하기 전 개인적으로 올려서 테스트했지만 서버를 열고 데이터를 받으려고 하자
Mixed content 에러가 생겨버렸다. 이는 https로 관리되는 netlify에서 일반 http로 데이터를 전송해서 일어나는 문제라고 하는데 헤더에
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
를 추가하는 것으로 해결해보려고 하고 있다.
출처 : stackoverflow.com/questions/35178135/how-to-fix-insecure-content-was-loaded-over-https-but-requested-an-insecure-re

이 문제는 해결된 것 처럼 보이지만 다음에는 net::ERR_SSL_PROTOCOL_ERROR라는 에러가 또 떠버렸다..

검색을 통해 확인해보니 redirect로 http 사이트에 https로 맘대로 변경해서 조회하는 문제였다. 이 부분은 아무래도 우회? redirect?쪽을 확인해야 할 것 같은데
netlify docs를 확인해보니 index.html을 통과할 경우 사용하는 것으로 Rewrite a path를 사용하면 될 것 같다.

여러가지 방법을 시도해봤지만 결국 통하는 것은 없었고 
공식적인 답변이나 블로깅을 확인해도 뭔가 깔끔한 대답은 없었다.
전반적으로 클라이언트에서 ssl을 건드릴 수는 없기 때문에 서버측에서 https를 추가해야한다는 것으로 얼추 마무리가 되어
백엔드측에 https로 업그레이드를 요청하고 다시 알아보고 있다.
추가로 1시간 넘게 알아보며 빌드를 계속하고 배포를 도전하고 있지만
적용되는 부분은 없고 이제는 로컬에서도 https로 요청이 됬다는 기록이 나오는데
서버측에서 뭘 건드린 느낌이다.
실제로 서버로 들어가면 기존에 있던 질문지들도 postman으로 조회시 하나도 없는 깡 객체만 나온다.

일단 배포까지는 되는 상황이기 때문에 여기서 전반적으로 css, 기능들은 체크한 후
프론트 팀원분은 일정이 있으셔서 저녁 8시에 만나 통합한 후 netlify에 배포한 다음
Readme에 클라이언트 배포 주소를 올리는 것으로 마무리했다.

결국 서버에서 데이터를 받아오지 못해 최종적으로는 깡통클라이언트가 되어버리긴 했지만
서버에서 받아올 수 있게 신호발산은 계속 하고 있으며 post로 회원가입시도도 하고 있고
조회,삭제기능도 팀원분이 구현하셨기 때문에 어떻게 서버에서 구현만 되시면 바로 돌아갈 수 있지 않을까 생각해본다.
https://verdant-yeot-2486bd.netlify.app/

배포를 완료했지만 서버가 없는 모습


CT(1).1로 만들기 2라는 문제는 조금 까다로웠는데 dp를 구하는 것 까지는 실버3 언더의 난이도지만 그 경로를 역추적해서 출력하라는 부분이 까다로웠다.
처음에는 간단하게 dp를 따라가며 way를 지정해줬지만 그게 최적이 아닌 문제가 생겼기 때문에 dp는 최적으로 쌓아올리며 그 i인 상태에서의 이전값을 기록하는 방식으로 진행했다.
코드는 아래와 같다.

let input = 10
let dp = new Array(input+1).fill(0)
let way = new Array(input+1).fill(0)

for(let i = 2 ; i <= input ; i++){
    dp[i] = dp[i-1] +1
    if(i % 2 === 0){
        dp[i] = Math.min(dp[i], dp[i/2] + 1)
    }
    if(i % 3 === 0){
        dp[i] = Math.min(dp[i] , dp[i/3] + 1)
    }
    if(dp[i]-1 === dp[i/3]){
        way[i] = i/3        
    }
    else if(dp[i]-1 === dp[i/2]){
        way[i] = i/2
    }
    else{
        way[i] = i-1
    }
}

let result = [input]
let now = way[input]

while(now){
    result.push(now)
    now = way[now]
}

console.log(dp[input])
console.log(result.join(' '))



CT(2).10진법에서 3진법, 뒤집기, 10진법으로 변환하는 문제는 간단하게 parseInt(n.toString(3).split('').reverse().join(''),3)로 해결했다.


CT(3).나머지가 1이 되는 수 찾기는 for문으로 2~n-1까지 돌렸다.
n-1은 무조건 1이 나머지가 될 수 있기 때문에 간단하게 해결된다.
또한 break를 중간에 걸어 n-1보다 낮은 값에서 결과가 나온 경우 중지하고 
결과값을 출력할 수 있게 했다.