def solution(cards1, cards2, goal):
answer = 'Yes'
cards1_idx = 0
cards2_idx = 0
for word in goal:
if cards1_idx != len(cards1) and word == cards1[cards1_idx]:
# A and B -> A를 먼저 판별 / A에서 통과하면 B를 판별 / A에서 통과하지 않으면 B까지도 가지 않습니다.
cards1_idx += 1
else: # 첫번째 카드뭉치에 없다면
if cards2_idx != len(cards2) and word == cards2[cards2_idx]:
cards2_idx += 1
else: # 두번째 카드뭉치에도 없다면
answer = 'No'
break
return answer
tmux란? tmux는 사용자가 단일 단말기 창 또는 원격 터미널 세션 안에서 여러 별도의 터미널 세션에 액세스할 수 있도록 여러 가상 콘솔을 다중화하는데 사용할 수 있는 응용 소프트웨어이다. 이 응용 프로그램은 명령어 인터페이스로부터 다수의 프로그램을 처리하고 유닉스 셸로부터 프로그램을 분리하는 데에 유용하다
1. 여러 별도의 터미널 세션에 액세스
분할된 타 터미널에서의 동작은 실시간으로 모든 터미널에 영향을 끼친다.
또한 터미널 세션이 관리되어, 원격 액세스가 가능하다는 장점도 있다.(co-working 관점)
2. 여러 가장 콘솔을 다중화
하나의 터미널을 화면 분할 기능을 제공하여, 여러개의 다중 터미널로 각각 프로그래밍이 가능하게끔 도와준다.
FastAPI란? FastAPI는 Pydantic을 기반으로 하며 type hints를 사용하여 데이터를 검증, 직렬화 및 역직렬화합니다. 또한 이를 사용하여 구축된 API에 대한 OpenAPI 문서를 자동으로 생성합니다. FastAPI는 비동기 프로그래밍을 완벽하게 지원하며 Gunicorn 및 Uvicorn 및 Hypercorn과 같은 ASGI 서버에서 실행될 수 있으므로 프로덕션 환경에 적합한 선택입니다. 개발자 친화성을 높이기 위해 프로젝트 초기부터 편집자 지원이 고려되었습니다.
1. Pydantic
웹 서버의 parameter로 주고받는 data를 검증할 수 있게 해주는 파이썬 라이브러리이다.
객체 및 annotation을 활용하여 data validation check를 손쉽게 할 수 있도록 도와준다.
2. type hints
Python의 언어 특성상 변수를 초기화할 때 데이터 타입을 명시하지 않는다. 타입이 명확하지 않은 이런 상황은 많은 오류 가능성을 내포하게 된다. 이를 예방하기 위해 개발자들은 Python에 Data type를 명시하기 시작했고, 여기서 사용되는 것은 type hint이다.
실제로 타입이 다르다고 해서 오류를 발생시키지는 않지만, type hint를 통하여 오류 가능성을 사전에 예방할 수 있다.
현업 개발자들 사이에서 type hint는 찬/반 의견이 있다?
찬성: type 을 명시함으로써 잘못된 data type에서 유발되는 오류 가능성을 사전 예방할 수 있는 장점이 있다. 반대: 일부 여론에서는 python의 탄생 목적과 다르게 그 확장성을 한정하는 것이라는 의견도 있다.
3. Open API(= Swagger)
흔히 우리가 말하는 swagger가 대표적인 Open API 문서이다.
웹 서버에서 제공되는 API의 종류를 하나의 페이지에서 대시보드 형태로 파악할 수 있다.
Input / Output / Validation / Example / Test 등 다양한 기능을 웹 UI 상에서 확인 가능하다.
+ 아래와 같은 화면, Swagger!
4. 비동기 프로그래밍
서버에 들어온 request를 처리할 때, request 처리에 대한 응답을 일일히 기다리지 않는다.
코루틴(co-routine) 이라는 개념을 사용하여 비동기적 처리를 수행한다.
FastAPI를 사용하는 굴지의 기업들 💁🏻
🥇 Netflix
🥈 Uber
🥉 Cisco
FastAPI는 Stack Overflow 2021 개발자 설문조사에서 세 번째로 사랑받는 웹 프레임워크에 등재된 바 있다. 🎁
+ FastAPI에서 hello world! 찍는 방법 🌟
우선 Python이 설치되어 있어야 하고, Python을 실행하여 아래 코드를 작성 후 실행해주자. 👬👬
AAB란? 기존에는 APK(Android Package) 파일을 통해 앱을 설치하였다, 하지만 APK 파일은 불필요한 파일들이 많이 포함되어 있는 완성된 파일이다. 그래서 AAB(Android App Bundle) 파일을 플레이 콘솔에 등록한다. AAB는 Android App을 완성시켜주는 패키지다. AAB을 사용하면 설치되는 기기에 맞게끔 필요한 패키지들만 사용하게 되어 불필요한 파일들의 포함을 줄이고 용량을 줄일 수 있다.
플레이 스토어에 앱을 출시하기까지의 4단계 과정이 필요하다.
1. 내부 테스트
내가 원하는 테스터에게 자체적으로 테스트를 진행하는 방식이다.
소규모로 진행이 가능하고, 원한다면 스스로 진행하면서 생략도 가능하다.
자체 통합테스트라고 보면 무방하다.
2. 비공개 테스트
최근 2023년 11월부터 플레이 콘솔에 등록된 개인 개발자에 한하여 20명 비공개 테스트가 의무화되었다.
구글 입장에서는 가족, 친구, 지인 등에게 링크를 보내서 설치 및 테스트를 해야한다고 한다.
비공개 테스트는 테스터에 등록된 20명의 사람들(안드로이드 유저)이 해당 앱을 설치하기만 하면 된다.
그리고 2주가 지나면 통과이다.
20명 넘기가 쉬운가. -> 생각보다 쉽지 않다. 그래서 카카오톡 오픈 채팅방을 잘 찾아보면 비공개 테스터 품앗이 톡방이 있으니, 여기에서 품앗이를 받아보는 것도 추천한다. 20명이 최초 1회 설치만 하면 되기에 이 방법을 추천한다.
3. 공개 테스트
앱이 플레이스토어에 공개된 상태이다.
비공개로 개발자에게 의견 전달이 가능하다.
생략하고 바로 프로덕션으로 넘어갈 수도 있다.
4. 프로덕션
앱이 플레이스토어에 정상적으로 출시된 상태를 의미한다. 🎁
앱에 광고가 붙어있다면, 실제 광고 수익도 발생 가능하다.
비공개 테스터 20명 의무화는 왜 생겨났을까? 💁🏻
🥇 구글 플레이스토어에 보면 여러가지 저품질의 앱들이 출시되어 있는 것을 볼 수 있다.
🥈 유지보수도 되지 않고, 사용자의 의견도 제대로 반영되지 않은 채 남아있는 좀비 앱들이 점점 늘어나는 것을 방지하고자 구글이 칼을 빼든 것 같다. 🔪
🥉 안드로이드 앱 출시가 IOS처럼 절차 복잡하거나, 비용이 비싸지 않아 진입장벽이 낮았던 부분을 보완한 것으로 추측된다.
| Node.js는 크로스플랫폼 오픈소스 자바스크립트 런타임 환경으로 윈도우, 리눅스, macOS 등을 지원한다. Node.js는 V8 자바스크립트 엔진으로 구동되며, 웹 브라우저 바깥에서 자바스크립트 코드를 실행할 수 있다.[3]
주로 확장성 있는 네트워크 애플리케이션과 서버 사이드 개발에 사용되는 소프트웨어 플랫폼이며, 논블로킹(Non-blocking) I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.
내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며, 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.
- 크로스 플랫폼(Cross-Platform)
장점:
PC환경에서는 Window와 Mac / 모바일 환경에서는 Android와 IOS 운영체제에 모두 동작 가능하다는 의미이다.
최근 들어서는 크로스 플랫폼 프로그램을 통해 하나의 코드로 다수의 운영체제에서 동작되게 하는 개발 방식이 인기를 끌고 있다.
당연히 생산성이 올라간다.
단점:
기존 운영체제 네이티브의 플랫폼보다는 최적화되어있지 않기에 성능적인 이슈가 있을 수 있다.
그러나 이러한 문제도 최근 여러 업데이트를 통해 보완되고 있으며, 실리콘 밸리의 굴지의 기업들도 이러한 크로스 플랫폼 서비스를 운영하고 있다.
- 서버 사이드 개발(Server-Side Development)
서버의 리소스를 사용하여 운영되는 서비스를 개발하는 것을 의미한다.
반대로 클라이언트 사이드 개발이 있다.
- 논블로킹(Non-blocking) I/O
오류가 발생하기 전까지는 인입되는 Inpus request를 계속 받아준다.
비동기 I/O 와 다른 점은 비동기 I/O는 응답을 받아주지만, 논블로킹 I/O는 응답값을 받아주지 않는다.
- 단일 스레드(Single thread)
단일 스레드는 한번에 하나의 동작만 처리할 수 있다는 의미이다.
그러나 하나의 한번의 동작을 비동기적으로 처리하기 때문에, 사용자 입장에서는 속도나 성능에 대한 이슈를 인지할 수 없다.
단일 스레드에서 하나의 함수를 호출하면, 이벤트 루프가 여러개의 이벤트를 처리한다.
- 이벤트 루프(Event loop)
단일 스레드를 지원하는 javascript 프로그램을 다중 스레드(PC)에서 동작시키기 위한 객체이다.
이벤트 루프는 javascript 프로그램에서 실행된 하나의 함수를 여러개의 다중 스레드가 대기하고 있다가 실행하고, 이후 액션을 진행하는 것을 담당한다.
이벤트 루프와 비동기 방식을 통해, 사용자는 javascript 서비스가 단일 스레드여서 느리다고 생각할 수 없게 된다.(실제로도 느리지 않다😲)
누가 만들었을까? 💁🏻
🥇 2009년에 ‘라이언 달’이라는 사람이 만들었다.
🥈 Joyent 라는 회사에서 일하는 사람이고, 현재도 Joyent에서 개발 및 운영 중이다.
🥉 파일 상태를 서버에 쿼리를 통해 확인하는 것을 보고 조금 더 쉬운 방법을 찾다가 고안해 내었다고 한다.
TMI. Joyent는 2016년 삼성전자에 인수되었다.
+ Node.js를 사용하는 기업 Top 3 🌟
아래 언급된 회사 외에도 거의 모든 회사에서 Node.js를 사용하고 있다.
Facebook
Amazon
Google
마이크로서비스 아키텍쳐 시대가 오면서 다양한 서비스 API들이 제공될 수 밖에 없고,
대부분의 회사는 이런 환경에서 Node.js를 사용하고 있다.
맺는말
Node.js는 개발을 하는 사람들이라면, Front, Backend 상관 없이 한번쯤은 모두 들어봤을만한 이름이다. 처음 라이언 달이라는 한 개인의 심플한 고민이 시작이 되어, 이제는 모두에게 생산성과 편의성을 가져다 준 프로그램이 되었다. 이처럼 우리의 작은 고민 하나가 어쩌면 많은 사람들에게 영향력을 줄 수 있을 것이다.