청소 플랫폼 만들기 (17)
리전과 CDN
프로그래머스공부하며 느낀 점
참조한 페이지
잘 만든 팀
오늘 프로젝트의 중간 발표가 있었다.
잘 만든 팀들은 단순히 프로젝트만 잘 만든게 아니라 발표도 잘 했다.
구체적으로는 사용 기술 스택에 대해 설명할 때 후보 기술들의 장,단점을 설명하고 최종적으로 선정된 기술의 이유를 설명해줬다.
함수의 목적에 맞는 리턴
컨트롤러 외에서 return
의 내용으로 에러코드와 메시지를 주는 것은 좋지 않다. 함수의 목적에 맞지 않는 리턴이기 때문이다.
try catch 문
catch (err) {}
과 같이 캐치문 안에 아무것도 넣지 않는 것은 에러가 일어났을 때 아무것도 하지 않는다는 의미이다. 즉, 개발자가 에러를 알 수 없다.
트래픽 대처
스케쥴러를 돌려야한다면 별의 스케쥴러용 서버를 만들어두자.
서비스적 관점
서비스적 관점에서 로그를 남기는 것은 매우 중요하다.
캐시
복사본을 나와 물리적으로 가까운 곳에 두어서 빠르게 읽어오는 모든 형태를 말한다.
메일 인증코드처럼 양이 작고, 짧은 시간 존재하는 내용만 넣는것이 좋다. 반대로 채팅상담처럼 길게 남을 것을 넣는 것은 좋지 않다.
AWS의 리전과 CDN에 대해 잘못 알고 있는 것 같애서 다시 알아봤다.
리전 Region
전 세계에 분포되어 있는 AWS의 서비스를 제공하는 물리적인 서버의 위치이다. = IDC
리전별로 제공하는 서비스가 다르기 때문에 확인해야한다.
CDN Content Delivery Network
캐싱의 한 형태이다.
변하지 않는 웹 리소스의 복사본을 고객과 가까운 곳에 배치하는 서비스이다.
클라이언트에서 요청이 있다면, 콘텐츠를 캐싱해둔다. 이후 같은 요청이 있으면 캐싱한 것을 제공해서, 속도와 서버부하를 모두 잡는다.
AWS에서는 Cloud Front 라는 이름으로 서비스한다.
Edge Location = 캐시서버
오리진 서버가 CDN 서비스를 위해 콘텐츠를 캐싱 하는 지점이다.
리전보다 더 많은 숫자로 여러곳에 분포되어 있다고 한다.
Regional Edge Cache
에지 로케이션 보다 용량과 보관 기간이 길기 때문에 콘텐츠를 더 길게 가지고 있다.
요청 콘텐츠가 에지 로케이션에 없을 때 이곳을 본다.
즉, 클라이언트 → 에지 로케이션 -(CF의 요청)→ 리저널 에지 캐시 → 오리진 순으로 연결되어있다.
나의 풀이
for 문으로 배열에 숫자를 넣고 정렬시킨다음에 다시 정수로 반환시키면 될 것같다.
각각의 값은 0~9 이기 때문에 sort 관련 알고리즘을 가져오기 보다는 그냥 거꾸로 값을 세는 것도 좋아보인다.
function solution(n) {
var answer = 0;
let arr = [];
// 주어진 숫자를 문자로 바꿔서 배열로 만들기
n = (n + '').split('')
const lengthOfN = n.length
// 작은숫자부터 빼내기 (0~9)
for (let j = 0 ; j < 10 ; j++){
// 현재 빼낼 숫자와 같은 경우에만 빼내기
for (let i = 0 ; i < lengthOfN ; i++) {
let num = Number(n[i])
if (j === num) {
arr.push(Number(n[i]))
}
}}
// 정렬이 끝난 배열을 10^i 해서 더하기(자릿수 개념)
for (let i = 0 ; i < lengthOfN ; i++){
answer += arr[i]*10**i
}
return answer
}
우리가 원하는건 큰 순서고, 컴퓨터는 첫 자리를 0부터 세기 때문에 반대로 배열을 한다음에 그것을 으로 계속 더해나갔다.
다른 사람의 풀이1
function solution(n) {
// 문자풀이
return parseInt((n+"").split("").sort().reverse().join(""));
}
(n+"").split("")
을 하여 문자열로 만든건 같았는데 sort().reverse()
로 간단하게 구현했다.
마지막에 join("")
를 사용한 것은 덤
다른 사람의 풀이2
function solution(n) {
//숫자가 분명히 더 빠름
var nums =[];
do{
nums.push(n%10);
n=Math.floor(n/10);
} while(n>0)
return nums.sort((a,b)=>b-a).join('')*1;
//문자는 느림
return (n+"").split('').sort((a,b)=>b-a).join('')*1;
}
생각했던 구현법중 하나인데 형변환이 없어서인지 이게 더 빠르다는 것같다.
마지막에 *1
은 문자열로 반환 된 것을 숫자로 바꾸기 위함이라고 한다.
속도비교
나 : 14.375 ms
풀이1 : 4.625 ms
풀이2 숫자 : 6.25 ms
풀이2 문자 : 5.1875 ms
???.... 숫자가 더 빠르다메요...
다른 조들에 비해서 중간 결과물도 계획도 발표도 많이 부실했던 것 같다. 좀 더 구체적으로 선택집중을 해야겠다.
[AWS] 리전, 가용영역, CDN
AWS - 리전/엣지 로케이션/CDN/가용영역