
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 30
문자열은 알파벳 소문자로만 이루어져 있습니다.
function solution(babbling) {
var answer = 0;
var speak = ["aya","ye","woo","ma"];
for(i = 0; i < babbling.length; i++){
var bab = babbling[i];
for(var j = 0; j < speak.length; j++){
if(bab.includes(speak[j].repeat(2))){
break;
}
bab = bab.split(speak[j]).join(" ");
}
if(bab.split(" ").join("").length === 0){
answer++;
}
}
return answer;
}
babbling[i]를 bab으로 정의해주고 두번 연속으로 발음 할 경우에 반복문에서 탈출 할 수 있게 해준다. 이후 split을 이용해 말 할수 있는 단어를 제거하고 만약 bab의 문자 갯수가 0이라면 발음 가능한 단어이므로 answer에 1을 더해준다.
- 인프라 구성
- 대규모 트래픽처리를 위한 분산 서버 구성
- 업데이트 방식 설계
- 서버 관리, 모니터링 툴 적용
- NAS, 내부망, 클라우드 세팅
- 팀원 모집
- 인프라, 클라우드, DBA, 웹, 게임서버
- 서버 로직 개발
- 오픈 컨텐츠 개발 대응
- 더미테스트, 부하테스트
- 내, 외부 QA 대응
연습만 하던 서버 실전 인프라세팅을 하게됨. => 서버팀의 일이 점점 바빠짐.
서버팀의 1~2명은 하루종일 더미테스트 스크립트만 작성하고 모니터에 뜨는 로그만 쳐다봄.
더미 테스트 : 실제로 의미가 없지만 발생할만한 데이터의 형태를 임의로 케이스별로 만들어서 기능이 장상적으로 동작하는지 확인하는 것.
검증 (Verification)
- 개발자의 관점, 개발한 API, 로직이 정상적으로 동작하는지 확인하는 행위
- 서버내에서 더미테스트, 부하테스트 등 각종 테스트 기법과 도구를 활용
검정 (확인) (Validation)
- 사용자의 관점, 개발한 API, 로직이 정상적으로 동작하는지 확인하는 행위
- 개발이 완료된 서비스에서 사용자의 요구사항을 충족하며 기대값을 보여주는지 확인
- HTTP는 Application layer에서 동작하는 프로토콜이며 transport layer(전송계층)의 위에서 동작.
- 전송계층의 대표적 프로토콜은 TCP/UDP가 있음.
- HTTP는 TCP든 UDP(HTTP/3)든 둘 중 하나의 연결을 통해서 동작
=> TCP/UDP없으면 동작 불가.- HTTP는 비연결성이지만 TCP는 연결지향성임.
- TCP는 데이터교환을 할 때 무조건 연결을 가짐.
- HTTP의 Req ↔ Res 가 발생할때 밑에서 TCP 연결이 이뤄짐.
- TCP는 3-handshake 라고하는 연결 과정을 가지고 있음.
- 서버는 접속 요청을 받기 위한 소켓을 연다. → Listen
- 클라이언트는 소켓을 만들고, 서버에 접속을 요청한다. → Connect
- 서버는 접속 요청을 받아서 클라이언트와 통신할 소켓을 따로 만든다. → Accept
- 소켓을 통해 서로 데이터를 주고 받는다. → Send & Receive ⇒ 반복!
- 통신을 마치면 소켓을 닫는다. → Close ⇒ 상대방은 Receive로 인지할 수 있다.
- 소스 포트번호(16비트): 발신자의 포트 번호.
- 목적지 포트번호(16비트): 수신자의 포트 번호.
- 시퀀스 번호(32비트): 데이터 스트림 내에서 이 세그먼트의 위치를 식별하기 위한 번호.
- 응답 번호(32비트): 다음에 기대하는 데이터의 시퀀스 번호.
- 헤더 길이(4비트): 헤더의 크기를 나타냄.
- 예약된(3비트): 향후 사용을 위해 예약된 공간.
- 플래그(9비트): 연결 설정, 관리, 종료를 제어하는 다양한 플래그.
- 윈도우 크기(16비트): 수신자가 받을 준비가 되어 있는 버퍼의 크기.
- 체크섬(16비트): 오류 검사를 위한 값.
- 긴급 데이터 포인터(16비트): 긴급 데이터의 끝을 가리키는 포인터.
- 옵션(가변 길이): 필요에 따라 추가적인 옵션을 포함할 수 있음.
- 데이터(가변 길이): 실제 전송할 데이터.