y.developer
[TIL] Day 79 기술 면접 준비 part 02 본문
2024.01.25 목
1. Next.js의 page router로 구현하기로 했는데 app router로 변경하신 것 같네요. 이유가 있을까요?
프로젝트 전반에 걸쳐 큰 틀이 될 프레임워크의 버전이므로 큰 고민을 했습니다. 두 부분 모두 장단점이 존재했기 때문입니다. 결론적으로는 모바일 친화적인 서비스를 제작하고 있으며, PWA 추후에는 앱으로 확장할 가능성이 있기 때문에 성능적으로 더 이점이 있는 App Router를 사용하기로 결정했습니다.
Page Router는 비교적으로 오래전부터 써오던 기술이기 때문에 다수의 회사에서 여전히 사용하고 있습니다. 그 이유에는 App Router와는 운영 방법이 다르기 때문에 마이그레이션을 진행하기 어렵다는 이유도 있을 것입니다. 그리고 Page Router에 대한 문서및 정보가 App Router보다 많은 편입니다. 안정성에 있어서도 App Router는 아직 불안정한 실험적인 기능들이 있습니다.
App Router는 Next에서 내놓은 신기술로서 서버 중심의 라우팅 유형을 지니고 있습니다. 서버 구성 요소를 지원하며 유연성이 돋보이고, 최적화, 선능적인 측면에서도 이점이 있습니다. 새롭게 시스템을 구축하는 스타트업과 과감하게 마이그레이션을 진행하는 회사 같은 경우 App Router를 선택할 것입니다.
정답이 없는 문제라서 더 어려웠습니다. 지금 시기가 굉장히 애매한 과도기라고 생각합니다. 그렇기 때문에 두가지의 방법을 모두 알고 있으면 큰 도움이 될 것이라고 생각합니다.
▶ 튜터님과 기술면접 진행시 답변한 내용 정리
- page router vs app router의 장단점
- 최종적으로 원하는 것 → PWA & 앱으로 확장을 하고자 함 → 성능적으로 이점을 가져올 수 있는 app router를 채택
- 새로운 서비스의 경우 app router로 마이그레이션을 진행할 것 같다라는 생각이 들었다.
- 성능적으로 좋다?
- 서버 중심의 라우팅 기능 & 서버 친화적으로 구성?
- page router → ssr
- app router → server component
▶ 보완 사항
SSR vs Server Component 에 대한 개념을 이해해보기
참고
- https://nextjs.org/docs#app-router-vs-pages-router
- https://nextjs.org/docs/app/building-your-application/upgrading/app-router-migration
- https://tech.kakaopay.com/post/react-server-components/
2. 서버리스 함수에 대해 아는대로 설명해주세요.
A)
서버리스 함수(Serverless Functions)는 개발자가 서버 관리 없이 코드를 실행하고 호스팅할 수 있는 컴퓨팅 모델을 말합니다. 서버리스에서는 개발자가 인프라스트럭처나 서버 관리에 대해 걱정할 필요가 없으며, 함수 단위로 코드를 실행하고 필요한 만큼 자원을 동적으로 할당합니다.
예를 들어, AWS Lambda, Google Cloud Functions, 또는 Azure Functions 같은 서버리스 플랫폼에서는 사용자가 자신의 코드를 업로드하면 해당 코드를 실행하고 필요한 리소스만 할당해줍니다. 함수는 특정 이벤트(예: HTTP 요청, 파일 업로드, 데이터베이스 변경 등)가 발생할 때만 실행되며, 실행이 끝나면 자동으로 종료되어 비용을 절감할 수 있습니다.
간단한 예제로 AWS Lambda를 사용한 서버리스 함수를 살펴보겠습니다. 이 예제는 Node.js로 작성된 함수로, 이메일 전송 요청이 발생했을 때 해당 이메일을 전송하는 기능을 합니다.
AWS Lambda에 업로드되고, API Gateway와 연결되어 HTTP 요청을 처리할 수 있습니다. HTTP POST 요청이 발생하면 함수가 실행되어 이메일을 전송하고 응답을 반환합니다. 개발자는 서버나 인프라 관리 없이 필요한 기능을 간단하게 작성하고 배포할 수 있습니다.
B)
Supabase의 함수들도 서버리스 함수에 해당합니다. Supabase는 오픈 소스 데이터베이스 및 서버리스 기능을 제공하는 플랫폼으로, 사용자들이 서버 및 인프라 관리 없이 백엔드 기능을 구축하고 실행할 수 있도록 지원합니다. Supabase 함수는 이벤트 기반으로 동작하며, 예를 들어 데이터베이스 변경, HTTP 요청 등의 이벤트가 발생할 때 실행될 수 있습니다.
Supabase 함수는 JavaScript로 작성되며, Supabase에서 제공하는 클라우드 함수 기능을 활용하여 배포 및 실행됩니다. 사용자는 자신의 비즈니스 로직을 함수로 작성하고, 필요한 이벤트에 함수를 바인딩하여 자동으로 실행되도록 설정할 수 있습니다.
이를 통해 Supabase 사용자는 서버 관리 없이 백엔드 로직을 개발하고 실행할 수 있습니다. Supabase의 서버리스 함수는 사용자에게 높은 유연성과 편의성을 제공합니다.
- auth
- onAuthStateChange
- getUser
- signInWithOAuth
- signOut
- realtime
- from
- select
- update
- insert
▶ 튜터님과 기술면접 진행시 답변한 내용 정리
- 개발자가 서버에 대해서 부담을 덜고 코드에 집중할 수 있는 함수
- supabase를 활용했다. 서버리스 함수를 지원해준다.
- realtime이나 auth와 관련된 함수들 & table에 접근하고 수정 삭제하는 것을 제공함
▶ 보완 사항
BaaS vs FaaS에 대해서 다시 학습해봅시당
참고 링크
3. RESTful API에 대해 설명해주세요.
RESTful API(Representational State Transfer)는 웹 서비스를 설계하고 통신하기 위한 아키텍처 스타일 중 하나입니다. RESTful은 자원(Resource)을 표현하고 상태(State)를 전송하는 방식으로, 간결하고 확장 가능한 웹 서비스를 구축하는 데 사용됩니다.
- 자원 (Resource): 모든 자원은 고유한 식별자(URI)를 가지며, 이를 통해 자원에 접근합니다. 예를 들어, 사용자, 게시물, 주문과 같은 것들이 자원이 될 수 있습니다.
- 표현 (Representation): 자원의 상태는 표현을 통해 전송됩니다. 대표적으로 JSON 또는 XML 형식의 데이터를 사용하여 자원의 정보를 나타냅니다.
- 상태 전이 (Stateless): RESTful은 상태를 서버에 저장하지 않고, 각 요청이 독립적으로 처리되며 요청 간의 상태 정보가 유지되지 않는 특징을 가지고 있습니다.
- 통일된 인터페이스 (Uniform Interface): 특정 리소스에 대한 표준화된 인터페이스를 제공합니다. 이를 통해 클라이언트와 서버 간의 통신이 간단하고 일관성 있게 이루어집니다.
- 가능한 Stateless 서버 (Stateless Server): 서버는 각각의 요청을 개별적으로 이해하고 처리할 수 있도록 설계되어야 합니다.
RESTful API의 예를 들어보겠습니다. 사용자 정보를 다루는 간단한 RESTful API에서 사용자 목록을 가져오는 요청은 다음과 같이 표현될 수 있습니다
GET/users
"users"라는 자원에 대한 GET 요청을 나타내며, 서버는 해당 자원의 목록을 클라이언트에게 응답할 것입니다. 다양한 HTTP 메서드(GET, POST, PUT, DELETE 등)를 활용하여 자원을 다루는 다양한 동작을 수행할 수 있습니다.
▶ 튜터님과 기술면접 진행시 답변한 내용 정리
- 브라우저에서 통신을 할 때, 좀 더 유니크하게 상태를 정의하고 보내는 방법
- HTTP 메서드들 중 하나인 POST, GET, PATCH 등의 함수를 명시적으로 표시하고
- 확장 가능하게 구성을 하는 방법 중의 하나.
▶ 보완 사항
약속, 규약
참고
- https://www.youtube.com/watch?v=iOueE9AXDQQ
- https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html