Next.js의 server는 어디에 있나?

https://github.com/vercel/next.js/blob/canary/packages/next/src/server/next-server.ts

https://github.com/vercel/next.js/blob/canary/packages/next/src/server/base-server.ts#L2360

노드서버로 구성되어있고, next.js 프레임워크 내부의 서버이다. 하나의 next.js 앱이 띄워지면 next 프레임웍 자체로 해당 서버가 구동된다.

요 서버는 라우팅 및 serverSideProps 수행 및 html 렌더링등의 역할을 함

 protected async renderHTML(
    req: NodeNextRequest,
    res: NodeNextResponse,
    pathname: string,
    query: NextParsedUrlQuery,
    renderOpts: LoadedRenderOpts
  ): Promise<RenderResult> {
    return getTracer().trace(NextNodeServerSpan.renderHTML, async () =>
      this.renderHTMLImpl(req, res, pathname, query, renderOpts)
    )
  }

private async renderHTMLImpl(
    req: NodeNextRequest,
    res: NodeNextResponse,
    pathname: string,
    query: NextParsedUrlQuery,
    renderOpts: LoadedRenderOpts
  ): Promise<RenderResult> {
    if (process.env.NEXT_MINIMAL) {
      throw new Error(
        'Invariant: renderHTML should not be called in minimal mode'
      )
      // the `else` branch is needed for tree-shaking
    } else {
      // Due to the way we pass data by mutating `renderOpts`, we can't extend the
      // object here but only updating its `nextFontManifest` field.
      // https://github.com/vercel/next.js/blob/df7cbd904c3bd85f399d1ce90680c0ecf92d2752/packages/next/server/render.tsx#L947-L952
      renderOpts.nextFontManifest = this.nextFontManifest

      if (this.enabledDirectories.app && renderOpts.isAppPath) {
        return lazyRenderAppPage(
          req.originalRequest,
          res.originalResponse,
          pathname,
          query,
          renderOpts
        )
      }

      // TODO: re-enable this once we've refactored to use implicit matches
      // throw new Error('Invariant: render should have used routeModule')

      return lazyRenderPagesPage(
        req.originalRequest,
        res.originalResponse,
        pathname,
        query,
        renderOpts
      )
    }
  }

서버사이드렌더링 관련 메서드가 존재하는지 여부 판단

   const hasServerProps = !!components.getServerSideProps
    let hasStaticPaths = !!components.getStaticPaths
    const isServerAction = getIsServerAction(req)
    const hasGetInitialProps = !!components.Component?.getInitialProps
    let isSSG = !!components.getStaticProps

-> 이렇게 판별후 renderoption 에 어쩌구저쩌구 넣어줌.