읽기 설정
이제 pewter.actions.ts 파일로 돌아가서, 로그인, 로그아웃, 그리고 현재 사용자 정보를 가져오는 부분을 확인해야 할 것 같습니다.
인증 기능을 담당하는 함수들과 마찬가지로, 새로운 프로젝트를 생성하는 기능을 추가하고 싶습니다.
이 함수는 프로젝트 정보를 파라미터로 받을 겁니다. 제가 말씀드리는 프로젝트 정보는 여기 있는 프로젝트들을 말하는데요, 제목, 날짜, 그리고 업로드된 이미지까지 포함합니다.
그래서 그 데이터를 AI로 옮겨서 건축 렌더링을 생성할 수 있습니다.
프로젝트 함수는 이 모든 정보와 이미지를 받아 키-값 데이터베이스에 저장해야 합니다. 키-값 스토리지는 나중에 워커 레슨에서 구현하지만, 지금 이 함수는 지난 레슨에서 구현한 다른 함수들을 호출할 것입니다.
이미지를 호스팅하고 해당 URL을 생성해 주셔야 합니다.
자, 이제 export const createProject 라고 만들겠습니다. 이건 객체를 인자로 받아들여서, 아이템 정보와 프로젝트 생성에 필요한 정보를 담고 있는 비동기 함수가 될 것입니다.
프로젝트 생성 파라미터를 타입으로 지정하고, 그러면 프로미스가 반환될 거에요. 디자인 아이템이나 null 또는 undefined로 해결될 거에요.
그리고 마지막으로 함수 블록을 만들 수 있습니다.
이제 이 디자인 항목은 ID, 이름, 원본 이미지, 원본 경로, 그리고 렌더링된 이미지, 렌더링 경로, 그리고 배포된 공개 경로까지 모두 필요하게 됩니다.
그리고 소유자 ID도 필요합니다. 여기서는 cons 프로젝트 ID를 item.id로 설정하겠습니다. 그리고 지난 튜토리얼에서 열심히 만들었던 호스팅에 접근해야 합니다. 따라서 await을 사용하겠습니다.
호스팅 구성 파일을 가져오거나 새로 만들고, 그런 다음 호스팅된 프로젝트에 접근할 수 있게끔 해야 합니다. 호스팅된 소스 코드가 동일하다고 할 때,
프로젝트 ID가 존재한다면, 해당 ID에 이미지를 업로드하기 전에 기다려야 합니다.
호스팅 정보와 함께, 호스팅 자체, 그리고 URL, 즉 item.source와 같은 정보들을 전달해야 합니다.
이미지, 프로젝트 ID, 마지막으로, 소스로 설정될 레이블 정보도 전달해야 합니다.
혹시 프로젝트 ID가 없다면 호스팅할 대상이 없게 됩니다. 최종적으로는 `const hosted render`라고 말하면서 이 호스팅 렌더에 접근하고 싶고, 이것이 맞는지 확인을 할 것입니다.
프로젝트 ID와 아이템 렌더링된 이미지를 사용할 수 있는 경우, 기다리겠습니다.
이미지를 호스팅에 업로드한 후에는 이전과 거의 동일한 파라미터를 전달하고 싶습니다. 호스팅 URL을 사용하지만, 원본 이미지가 아니라 렌더링된 이미지가 될 것입니다.
이미지 프로젝트와 마찬가지로, 이 레이블도 렌더링되므로, 작업 전후 이미지 모두 여기 있어야 할 것 같습니다. 한 줄에 넣는 것이 적절할 것 같으니, 이렇게 진행해도 괜찮을까요? 네, 이렇게요.
또는 null로 설정될 것입니다. 그리고 이제 호스팅된 소스와 호스팅된 렌더링 이미지가 모두 있습니다. 이제 const resolvedSource는 hostedSource.url로 설정하여 해결해야 합니다.
호스팅 URL이 있는지 확인하기 위해 다른 확인을 할 수 있습니다. item.source 이미지를 전달할 수 있습니다.
만약 그렇다면 item.source 이미지를 반환하고, 그렇지 않다면 빈 문자열을 반환할 거예요. 그리고 아마 이걸 이렇게 새로운 줄에 넣어서 무슨 일이 일어나는지 알 수 있을 것 같아요.
자, 이제 해결된 소스에 있는지 빠르게 확인해 봅시다. 해결된 소스가 없다면, 간단하게 새로운 함수 블록을 열고 console.warn 라고 말할 수 있습니다.
원본 이미지를 호스팅하는 데 실패하여 저장을 건너뛰고, 이후 null 값을 반환할 수 있습니다.
하지만 모든 문제가 제대로 해결된다면, 해결된 렌더링 결과물에도 접근하고 싶습니다. 왜냐하면 여기서는 해결된 소스(resolved source)를 받았고, 기억하시겠지만 모든 작업을 두 번 해야 하기 때문입니다.
여기서, const resolved render는 hosted render 질문 부호와 URL이 같다고 말씀드리겠습니다.
만약 그것을 확보하게 된다면, hosted render dot URL에서 가져올 수 있을 겁니다.
만약 그렇지 않다면, 아이템의 렌더링 이미지가 있는지 확인할 수 있습니다. 그리고 호스팅 URL이 아이템의 URL로 설정되어 있는지 확인합니다.
렌더링된 이미지가 있는 경우, 그냥 렌더링된 이미지를 반환하고, 그렇지 않으면 undefined를 반환합니다. 이렇게 하면 결과 렌더링도 얻을 수 있습니다.
그리고 마지막으로, 이제 모든 준비가 완료되었으니, 이를 저희가 만들고자 하는 새로운 객체 안에 담을 수 있습니다. 이 객체는 디자인 항목처럼 다양한 정보 조각들을 모두 포함하고 있어야 합니다.
자, 이렇게 표현될 겁니다. const를 사용하고, item에서 변수들을 분해하여 가져올 수 있습니다. 예를 들어, source path를 분해하고 이름을 변경할 수 있습니다.
이를 밑줄_소스_경로처럼 이렇게 바꿔서, 렌더링된 경로에도 접근해서 렌더링 경로로 이름을 바꿀 수 있고, 마지막으로 동일하게 할 수 있습니다.
그럼 아이템에서 오는 나머지 값들을 펼칠 수 있습니다.
모든 것을 다 분배한 후에는, 디자인 항목에 유용하다고 생각되는 것들을 객체 페이로드 형태로 만들어 Pewter로 전송하면 됩니다.
먼저 나머지 부분을 먼저 가져온 다음, 원본 이미지를 가져와서 해결된 소스(resolved source)로 설정하고, 마지막으로 렌더링된 이미지를 가져와서 해결된 렌더(resolved render)로 설정하겠습니다. 이제...
캐치 블록 안에서 에러를 잡을 수 있습니다. 에러를 콘솔에 기록하거나, '프로젝트 저장에 실패했습니다' 와 같은 메시지를 표시하는 방식으로 처리할 수 있습니다.
만약 모든 것이 순조롭게 진행된다면, 주석 세공인에게 연락을 드려야 합니다.
프로젝트를 KV에 저장하는 것입니다. 키-값 데이터베이스이죠. 지금은 일단 페이로드를 반환하기로 하고, 나중에 pewter 워커를 구현하면 데이터베이스에 저장할 수 있습니다.
지금은 테스트를 해보고, 홈페이지에 있는 이 프로젝트 생성 함수를 호출해서 이 페이로드가 제대로 나오는지 확인해 보고 싶습니다.
자, 그럼 라우트(routes)로 이동한 후, 홈(home)으로 들어가서 홈 상단에서 '프로젝트'라는 새로운 유스 스테이트 스니펫을 만들고, 시작 시 프로젝트를 빈 배열로 설정해 보겠습니다.
그리고 디자인 아이템 배열과 같은 형태로 구성될 것입니다.
그리고 물론, 리액트에서 useState를 불러오는 것을 잊지 마세요. 이제 프로젝트가 여기 있으므로, 단순히 탐색을 다시 하는 대신 새로운 프로젝트를 실제로 만들 수 있습니다.
먼저 새로운 ID를 받고, 그 다음에 예를 들어 '레지던스'로 시작하는 이름을 지정할 수 있습니다. 그런 다음 새로운 ID를 부여하고, 모든 데이터가 포함된 새로운 항목을 얻을 수 있습니다.
새로운 ID로 설정된 ID, 이름(이름으로 대체될 예정), 소스 이미지(매개변수를 통해 들어오는 Base64 이미지), 렌더링된 이미지를 포함해야 합니다.
처음에는 정의되지 않은 상태로 설정될 것이고, 마지막으로 타임스탬프인데, 이건 date.now()로 설정할 겁니다.
그렇게 되면 새로운 프로젝트를 생성하기 위해 필요한 모든 것을 갖추게 됩니다.
따라서, 방금 만들었던 함수를 호출할 수 있습니다. `saved`는 `await create project`의 결과로 설정될 것이고, `create project`는 가져와야 합니다. 그리고 새로운 아이템을 전달해야 합니다.
그리고 여기에서 가시성을 선택할 수 있습니다. 개인적으로 할지 공개적으로 할지 결정할 수 있죠. 만약 성공적으로 저장하지 못했을 때, 존재하지 않는다면, 콘솔에 오류를 표시할 거예요.
프로젝트 생성에 실패했다는 메시지가 표시되고, false를 반환하게 됩니다.
하지만 프로젝트를 성공적으로 생성했다면, state에 있는 프로젝트들을 가져와서 펼쳐 보여주고, 새로운 항목을 추가할 수 있습니다.
하지만 단순히 뒤에 추가하는 대신, 맨 앞에 위치하도록 미리 추가하고 싶습니다. 이렇게요.
마지막으로, 이 새로운 시각화 도구로 넘어가고 싶습니다만, 추가적인 상태 정보도 함께 제공하고 싶습니다. 혹시 기억하신다면, 이 부분에 대해 CodeRabbit이 이전에 말씀하셨던 내용과 정확히 일치합니다.
네, 말씀하신 대로 base64 이미지 파일이 여기 있기는 한데, 아직 이걸 사용하고 있지는 않아요. 초기 이미지를 전달하면서 이 새로운 컴포넌트로 상태를 전달하고 싶습니다.
저장된 소스 이미지와, saved.renderedimage에서 생성된 초기 렌더링 결과(존재하지 않는 경우 null) 및 프로젝트 이름을 함께 저장합니다.
그런 다음, 시각화 도구에서 이전과 이후 결과를 표시하기 위해 이를 활용하겠습니다.
이제 실제 프로젝트들이 바로 여기 있으니, 프로젝트 그리드 안에서 이를 매핑할 수 있습니다. 현재는 가짜 프로젝트가 하나밖에 없었기 때문입니다.
미리보기 카드 바로 위에 이 프로젝트 카드와 함께 'projects.map'이라고 표시할 수 있습니다. 여기서 저희는...
ID, 이름, 렌더링된 이미지, 원본 이미지, 그리고 타임스탬프를 구조 분해할 거예요. 그리고 이 프로젝트 카드 그룹을 자동으로 반환할 겁니다.
프로젝트 카드 그룹이 있는 전체 div를 여기 안에 넣으세요. 그래서 여러 개의 카드를 반환할 수 있고, 단 하나의 카드만 반환하는 것이 아니에요. 제대로 감싸고 있는지 확인해 보겠습니다. 괄호를 닫은 것 같아요.
너무 일러서, 대신 여기 여기에 두고 또 여기 하나를 추가해야 해요. 그러면 프로젝트가 정의되지 않았다는 것을 보실 수 있을 거예요. 한번 확인해 볼까요? 이름이 다른 걸로 지었나 보네요. 아, 제가 오타를 냈었네요.
프로젝트와 설정 프로젝트가 있고, 이제 온라인으로 다시 접속했지만, 아직 프로젝트가 보이지 않는 것은 아직 생성하지 않았기 때문입니다. 하지만 적어도 이제 렌더링은 할 수 있습니다.
예를 들어, 이 h3 대신 실제 데이터를 사용해서 가짜 이름 대신 실제 이름을 보여드릴 수 있습니다. 날짜 역시 새로운 날짜로 렌더링하고 타임스탬프를 전달할 수 있습니다.
그 구간은 지금 그대로 두고 싶고, 제가 변경하고 싶은 부분은 이 이미지입니다.
여기 소스 바로 아래에서 렌더링된 이미지를 전달할 예정입니다. 혹시 렌더링된 이미지가 없다면, 프로젝트와 같은 alt 태그를 가진 원본 이미지를 사용하게 됩니다.
네, 좋습니다. 그런데 여기 약간의 오류가 있는 것 같습니다. 현재 타임스탬프와 함께 새 날짜를 전달하고 있다고 표시되어 있는데, 이 객체 기호를 여기서 제거해야 할 것 같습니다.
타임스탬프만 받아들이는 것 같아요. 그 외에는 이전에 설정된 프로젝트로 되어 있어야 하는데.
그리고 괜찮습니다. 이제 비주얼라이저로 넘어가서 실제로 구현할 수 있습니다. 현재는 완전히 비어 있습니다. 이 새로운 페이지에 전달한 상태에 어떻게 접근할 수 있을까요?
음, 위치 정보를 활용할 텐데, 이 위치 정보는 React Router에서 가져온 것과 동일하게 사용될 것입니다.
그리고 나서, 거기에서 초기 이미지와 이름을 추출할 수 있습니다. 이 이름은 location.state 또는 빈 객체에서 가져오는데, 오류가 발생하지 않도록 하기 위함입니다.
네, 이름과 초기 이미지를 얻으면, 저희가 만들 예정인 섹션 안에 간단히 표시할 수 있습니다. 그 섹션에는 제목을 나타내는 h1 태그를 사용할 예정입니다.
이름이 없다면 '제목 없음' 프로젝트처럼 렌더링될 것이고, 그 아래 h1 태그 아래에 시각화 도구 클래스가 지정된 div를 렌더링할 것입니다. 그리고 그 안에서 초기...
이미지가 존재하면, 여기에서 닫을 수 있는 div를 렌더링할 것이며, 이 div는 특정 클래스를 가질 것입니다.
이미지 컨테이너 내에 제목을 설정하고, 원본 이미지를 표시하는 h2 태그를 추가한 후, 그 아래에 이미지를 배치합니다.
초기 이미지의 소스 및 소스에 대한 alt 태그가 있고, 나중에 전후를 볼 수 있는 컴포넌트를 개발할 예정입니다. 하지만 지금은 전체 흐름을 테스트해 볼 때가 됐어요.
바닥면 이미지 업로드를 해보면, 업로드되는 것을 확인할 수 있을 거예요. 잠시 동안 프로젝트 카드 아래에 표시되는 것을 보셨을 수도 있고, 여기에서 확인할 수 있습니다.
이 건축 프로젝트에 대한 정보, 예를 들어 주거 시설, ID, 그리고 원본 이미지가 여기에 있습니다. 현재는 기본적인 2D 평면도만 포함되어 있지만, 마우스 오른쪽 버튼을 클릭하시면...
이 이미지에서 '새 탭에서 열기'라고 표시되어 있는데, 이미지를 새 탭으로 열면 원본이 이제 'roomify-dash' 아래에 저장되어 있음을 확인하실 수 있습니다. 그리고, 'unique id dot pewter dot site forward slash projects'와 같은 고유한 ID도 있습니다.
저희는 자체 프로젝트를 가지고 있고, 그리고 소스닷제이피지(source.jpeg)라고 합니다. 이것은 저희가 해당 이미지를 인터넷에 성공적으로 업로드하고 호스팅했다는 의미입니다. 특히, 저희를 위해 pewter라는 곳에서 호스팅을 해주고 있습니다.
정말 멋지네요. 이 디자인의 실제 3D 건축 렌더링을 생성하는 데 점점 더 가까워지고 있습니다. 방금 업로드 기능이 작동하는지 확인했고 이미지를 호스팅하는 데 성공했습니다.
이번 풀 리퀘스트에서 저희가 수행해야 할 작업이었습니다. 그럼 바로 현재 브랜치를 확인해 보겠습니다. 혹시 'hosting images'라는 새로운 브랜치를 만드셨기를 바랍니다. `git add .`, `git commit -m` 명령어를 실행할 수 있습니다.
호스트에 이미지를 업로드하신 후에는 git push를 실행하실 수 있습니다. 물론 이전에 생성하신 GitHub의 새로운 브랜치에 대해 업스트림을 설정해 주셔야 합니다.
GitHub로 넘어가시면, 이미지 호스팅 브랜치에 새로운 PR이 생성된 것을 보실 수 있을 거예요. 한번 열어서 확인해 봅시다. 45줄을 삭제하고 445줄을 추가했어요.
그래서 코드래빗이 꼼꼼하게 검토해 줬으면 하는 리뷰입니다. 자, 이제 코드래빗이 한 줄씩 버그와의 전쟁에서 승리하도록 진행해 보도록 할게요.
그리고 정말 빠르게 저희가 구현한 내용 전체에 대한 설명을 드릴 거예요. 이건 규모가 큰 작업이었으니, 어떤 내용이 추가되었는지 살펴보겠습니다.
이미지 업로드 기능을 위한 호스팅 유틸리티를 도입하여 프로젝트 지속성 및 검색 기능을 구현했습니다.
프로젝트 데이터를 준비하고 호스팅된 에셋과 함께 저장하며, 홈페이지에 프로젝트 목록을 동적으로 표시하고, 라우터 네비게이션으로부터 프로젝트 상태를 가져와 시각화 도구를 업데이트하는 기능입니다.
지금 그림이 이와 비슷한 모양으로 보입니다.
사용자가 이미지를 업로드하면, 프로젝트 생성 액션을 호출합니다. 이후 호스팅 구성을 가져오게 됩니다. 그런 다음 Pewter API를 사용하여 호스팅 구성을 검색하거나 새로 생성합니다.
서브도메인과 호스팅 설정을 반환하여, 이미지 업로드를 시작할 수 있게 됩니다.
이미지 블롭을 변환하여, 페테르 API를 통해 호스팅 파일 시스템에 새 파일을 쓰고, 확인 후 호스팅 URL을 반환받습니다.
그렇게 되면, 프로젝트에 대한 모든 정보는 물론 업로드되고 호스팅된 이미지까지 포함하는 전체 디자인 아이템을 최종적으로 반환할 수 있고, 이후 시각화 모듈로 이동하여 렌더링을 진행하게 됩니다.
초기 이미지와 이름을 추출하여 프로젝트를 사용자에게 보여주는 것이 우리의 다음 목표입니다. 곧 AI 건축 3D 렌더링을 만들어서 보여드릴 예정입니다.
시각화 화면에서도 확인해 주시고, 이번 코드 리뷰는 꽤 복잡했습니다. 코드 래빗의 의견도 한번 들어보도록 하겠습니다. 늘 그렇듯이 몇 가지 사소한 의견들이 있는데, 큰 문제는 아니니 원하시면 살펴보셔도 괜찮습니다.
그리고 더 많은 경미한 문제와 중요한 문제점들이 있습니다.
먼저, 로컬 상태는 업로드 전 항목을 저장하고, 저장된 페이로드는 저장하지 않네요. 흥미롭습니다. SetProjects는 원본 Base64 소스 이미지를 가진 새 항목을 삽입하는데, 저장된 항목은 그렇지 않네요.
호스팅된 URL을 사용하고 있습니다. 이는 프로젝트 카드에서 이미지 소스에 Base64로 인코딩된 이미지를 렌더링한다는 뜻인데, 작동은 하지만 저장된 데이터와 일관성이 없고 큰 이미지의 경우 메모리를 많이 차지합니다.
저, 제가 이 부분을 놓쳤던 걸까요? 제안하신 수정은 저장된 것을 그대로 추가하는 건데, 이게 이미지 URL을 포함하고 있어서 Raw Base 64 이미지처럼 용량을 많이 차지하지 않도록 메모리를 효율적으로 관리할 수 있습니다.
그래서 이걸 아주 빠르게 수정할 수 있습니다. 그리고 CodeRabbit은 즉시 커밋 변경을 제공해 줍니다. 이렇게 커밋하면, 방금 여기로 돌아가서 저장된 프로젝트를 검색하면, 거기에 있을 겁니다.
저희 집에서 저장된 프로젝트들이 있거나, 새로운 프로젝트를 만들 수 있습니다. 자, 새로운 항목이 여기 있습니다. 이제 열어보시면 됩니다.
터미널에서 최신 변경 사항을 가져오기 위해 git pull을 실행하시면, 이제 업데이트되었음을 확인할 수 있습니다. 이렇게 하면 코드래빗을 사용하여 매우 빠르게 변경 사항을 적용할 수 있는 또 다른 방법입니다.
지도 프로젝트 카드에 중요한 속성이 빠져 있다는 중요한 문제가 있습니다. 네, 이건 큰 문제입니다. 리액트는 각 요소에 대해 안정적인 키를 가지고 있어야 제대로 렌더링을 조정할 수 있습니다.
우리는 이미 ID를 가지고 있으므로, 간단히 사용하면 됩니다. 이 경우, ID와 동일한 키를 추가하는 커밋 가능한 제안도 받게 되니, 커밋해 보겠습니다. 아주 간단하네요. 그리고 또 다른...
위치 정보 상태가 없을 때, 데이터 가져오기 작업이 실패하는 주요 내용입니다. 사용자가 페이지를 새로 고치거나, URL을 공유하거나, 시각화 ID로 직접 이동하는 경우, 위치 정보 상태는 null이 됩니다.
하지만 이미 경로에 ID가 포함되어 있기 때문에, 상태가 없을 경우 Pewter KV와 같은 영속성 저장소에서 프로젝트를 불러오는 것을 고려해 볼 수 있습니다.
따라서 앱 내 탐색 외에도 페이지는 계속 작동할 수 있습니다. 나중에 분명히 이 기능을 구현할 거고, 상태를 그냥 넘겨주는 것만으로는 충분하지 않습니다.
곧 더 자세한 내용을 알려드리겠지만, 코드래빗의 좋은 발견이었어요. 그리고 저희는 데이터를 저장하고 있습니다. 프로젝트를 만들더라도 아무것도 저장되지 않죠?
네, 맞습니다. 아직 프로젝트를 공식적으로 시작하고 있지는 않습니다.
그리고 그 이유는 저희가 주조공을 불러서 초기 이미지를 보존할 뿐만 아니라, 인공지능을 활용하여 새로운 3D 건축 렌더링을 제작한 후 이 모든 것을 KV에 함께 저장하고자 하기 때문입니다.
코드래빗이 저희에게 구현에 도움이 필요한지 친절하게 물어봐 주셨네요. 걱정 마세요, 곧 그렇게 진행할 예정입니다.
이 점이 매우 중요합니다. 새로 생성된 호스팅 설정은 KV에 저장되지 않습니다. 읽기는 하지만, 새로운 서브도메인을 생성한 후에는 Pewter KV를 통해 다시 쓰여지지 않습니다. 즉, 매번 호출될 때 기존 값이 null로 나타나는 현상이 발생합니다.
새로운 랜덤 슬러그가 새로운 호스팅 서브도메인을 생성하는 반면, 이전에 업로드된 에셋은 이전 서브도메인에 남아, 해당 서브도메인은 삭제되지 않습니다. 만약 이것이 사실이라면, 확실히 큰 문제일 것입니다. 어떠신지요?
해야 할 일은 설정 파일에 접근해서 pewter로 변경한 다음 반환하는 것입니다. 네, 잠재적으로 매우 큰 문제였고, 제가 완전히 간과했습니다. 코드 래빗에서 해결책을 제안해 주셨습니다.
정말 놀랍게도 제가 놓친 정확한 라인을 찾아냈다는 점이요. 이 때문에 저희 기능에 문제가 생겼습니다. 코드로 다시 들어가서 pewter.actions.ts 파일을 확인해 보시면 됩니다.
호스팅 설정을 가져오거나 새로 만들 수 있도록 이동해 주세요.
여기서는 키-값 데이터베이스를 확인하고 있습니다. 만약 존재한다면, 그냥 반환하면 됩니다.
그렇지 않다면, 새로운 호스팅을 생성합니다. 그리고 서브도메인을 반환하고, 생성된 서브도메인은 데이터베이스에 저장하지 않습니다.
따라서 다음 호출에서는 기존 값이 다시 null이 될 것이고, 이는 매번 다시 생성될 것이라는 의미입니다.
그래서 우리가 해야 할 일은 이 레코드를 저장하고, 저장한 후에 pewter.kv.set을 기다려야 합니다.
그리고 이 새로운 레코드를 호스팅 설정에 추가하고 반환하게 되는데요. 이렇게 하면 매번 다시 만들려고 시도하지 않게 됩니다.
코드로비트 덕분에 정말 놀라운 결과를 얻었네요. 이제 제가 변경사항을 적용하기 위해 git add dot, git commit을 실행하고, 코드래빗이 제안한 버그를 수정하고, 푸시를 진행하겠습니다.
아, 풀을 먼저 가져오지 않았네요. 그래서 git 풀을 해야겠어요. 그런데 나중에 추가적인 변경사항을 더했기 때문에 풀을 할 수 없지만, git 풀 --리베이스로 할 수 있고, 이제 git 푸시를 할 수 있을 거예요.
이제 최신 변경사항과 최신 상태가 되었고, 코드래빗을 통해 자동으로 추가된 변경 사항과 저희가 직접 구현한 큰 변경 사항도 포함됩니다. 그리고 이제 이 PR을 병합할 수 있습니다. 정말 큰 작업이었어요.
따라서, 그걸 염두에 두고, 이제 새로운 프로젝트를 성공적으로 만들고 있습니다. 하지만 물론, 저희가 단순히 참고 자료와 현재 2D 이미지를 만들어서 끝내는 게 목표는 아닙니다.
목표는 이 지루한 2D 디자인을 전체 3D 건축 렌더링으로 만드는 것입니다. 자, 다음 강의에서 함께 해 보겠습니다.