alt

Spring Framework 입문과 백엔드 개발

Shared on June 5, 2026

[{"createdAt":1780532691865,"relativeStart":0,"segments":[{"start":0,"end":5000,"text":"여러분들한테 먼저 슬픔이가 올라오는지 확인을 한 거예요.","speaker":""},{"start":5000,"end":10000,"text":"물론 이렇게 얘기해도 여러분들 실제 겪기 전까지는","speaker":""},{"start":10000,"end":14000,"text":"또 아직 마음 한구석에 불안한 마음들이 있기는 할 거예요.","speaker":""},{"start":14000,"end":19000,"text":"일단 우리가 3일 동안 하나씩 내용 다뤄가면서 이해해보도록 할게요.","speaker":""},{"start":19000,"end":27000,"text":"자 그러면 일단 본격적으로 우리 백엔드 과정 같이 한번 진행해보도록 할 건데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532712857,"relativeStart":27000,"segments":[{"start":27000,"end":33940,"text":"일단 백엔드는 제가 앞서 얘기한 것처럼 새로운 걸 배우는 과정이 그렇게 많지는 않다고 했죠.","speaker":""},{"start":33940,"end":40540,"text":"그래서 기본적인 이론, 우리가 현재 백엔드에서 사용할 이 스프링이라는 개념이 있어요.","speaker":""},{"start":40540,"end":48100,"text":"그래서 이 스프링이라는 개념에 대한 이론적인 부분들을 조금 다루고 그 이론을 가져다가 실제 하나의","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532733847,"relativeStart":48094,"segments":[{"start":48094,"end":52534,"text":"서버를 아주 간단하게 구현하는 과정을 진행을 하도록 할 거예요.","speaker":""},{"start":52534,"end":58334,"text":"그러다 보니까 지금처럼 전체적인 목차를 봤을 때도","speaker":""},{"start":58334,"end":63334,"text":"8개의 목차가 있기는 하지만 사실 그중에 3번 목차였죠.","speaker":""},{"start":63334,"end":69794,"text":"챕터 3 여기까지는 여러분들이 그렇게 타이핑하면서 작성할 내용이 많지는 않아요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532755610,"relativeStart":69795,"segments":[{"start":69795,"end":73955,"text":"아주 조금밖에 없어요. 기본적인 이론에 대한 개념이다 보니까.","speaker":""},{"start":73955,"end":82135,"text":"그리고 그 이후에 진행될 과정들도 챕터 4부터 진행될 과정들도 본격적으로 작성하는 내용들이 있어야 하겠지만","speaker":""},{"start":82135,"end":91675,"text":"역시나 새로운 걸 배우는 게 아니라 자바에서 다뤘었던 클래스나 인터페이스 이런 개체들을 다루는 과정들이 주가 될 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532777872,"relativeStart":91682,"segments":[{"start":91682,"end":93682,"text":"라고 생각해보시면 돼요.","speaker":""},{"start":93682,"end":97122,"text":"그래서 일단은 우리는 첫 번째 챕터부터","speaker":""},{"start":97122,"end":100122,"text":"쭉쭉쭉쭉 총 8개의 챕터까지","speaker":""},{"start":100122,"end":102122,"text":"내용을 진행해보도록 할 거예요.","speaker":""},{"start":102122,"end":106622,"text":"자 그래서 일단 어떤 걸 다루게 되는 건지","speaker":""},{"start":106622,"end":110442,"text":"아주 간단하게 과정 오버뷰를 한번 보도록 할게요.","speaker":""},{"start":110442,"end":113262,"text":"그래서 우리는 백인들","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532797845,"relativeStart":113265,"segments":[{"start":113265,"end":117045,"text":"그러니까 이름 그대로 눈앞에 보이는 게 아니라","speaker":""},{"start":117045,"end":123545,"text":"뒤에서 무언가 진행되는 이러한 서버를 개발하는 과정을 배우는 거예요.","speaker":""},{"start":123545,"end":124805,"text":"라고 할 수 있는데","speaker":""},{"start":124805,"end":127865,"text":"서버를 다루는, 서버를 개발할 때 사용하는","speaker":""},{"start":127865,"end":131825,"text":"각각의 프레임워크 혹은 방식들이 여러 가지가 있기는 해요.","speaker":""},{"start":131825,"end":133585,"text":"근데 우리는 그중에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532826011,"relativeStart":133583,"segments":[{"start":133583,"end":141023,"text":"대표적으로 엄청 많이 사용되는 이 스프링 프레임워크라는 걸 가져다가 적용을 시키도록 할 거예요.","speaker":""},{"start":141023,"end":151523,"text":"그렇기 때문에 여러분들은 이 스프링 프레임워크가 어떤 건지 대략적으로는 알아야 우리가 사용하는 게 뭐구나 라는 걸 이해할 수 있다는 거예요.","speaker":""},{"start":151523,"end":161523,"text":"그래서 기본적으로 스프링과 그리고 추가적인 스프링 부트라는 걸 활용을 해서 백앤 개발하는 방법을 학습을 하도록 할 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532848793,"relativeStart":161528,"segments":[{"start":161528,"end":166888,"text":"이러한 과정을 통해서 우리는 RESTful API 설계라는 것과","speaker":""},{"start":166888,"end":170528,"text":"그리고 여러분들이 다루고자 하는 그 서비스를 분할하거나","speaker":""},{"start":170528,"end":173388,"text":"혹은 서비스를 통합하는 과정들","speaker":""},{"start":173388,"end":179688,"text":"추가로 데이터 연동은 우리 흔히 얘기하는 데이터 베이스 있죠?","speaker":""},{"start":179688,"end":184788,"text":"실제 여러분들이 다뤄야 되는 데이터들을 저장해주는 공간","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532870808,"relativeStart":184781,"segments":[{"start":184781,"end":189181,"text":"그래서 공간에 접근해서 내가 원하는 데이터를 저장하거나","speaker":""},{"start":189181,"end":193781,"text":"원하는 데이터를 가지고 오는 방법까지도 알아보고","speaker":""},{"start":193781,"end":200381,"text":"이러한 전체적인 걸 포함해서 서버를 어떻게 운영하기 위해 환경을 구축해야 되는지","speaker":""},{"start":200381,"end":204381,"text":"이러한 내용들을 실습 위주로 익혀보는 거예요.","speaker":""},{"start":204381,"end":206481,"text":"라고 생각하시면 되겠죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532892824,"relativeStart":206483,"segments":[{"start":206483,"end":217163,"text":"그래서 간단하게 얘기해, 서버를 구현하기 위해서 필요한 기능들을 하나씩 하나씩 하나씩 배워가는 거예요. 라고 보시면 돼요.","speaker":""},{"start":217163,"end":228043,"text":"그래서 앞에 여러 가지 내용들이 있기는 한데, 일단은 여기 있는 각각의 내용들은 우리가 전부 다 다루지는 않을 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532912791,"relativeStart":228032,"segments":[{"start":228032,"end":232632,"text":"그렇기 때문에 지금 이미지를 보고서는'아, 이러한 서비스도 있구나'","speaker":""},{"start":232632,"end":238032,"text":"'이런 걸 스프링에서는 지원을 해주는 거구나' 라는 정도로만 생각해 주시면 돼요.","speaker":""},{"start":238032,"end":242332,"text":"그래서 그냥 여러 가지 많은 기능들이 있다. 그 정도만 알고 계시면 되고","speaker":""},{"start":242332,"end":248912,"text":"뒤에 가서 조금 더 자세히 우리가 좀 더 스프링에 가까워지면서 자세히 설명을 드리도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532933776,"relativeStart":248906,"segments":[{"start":248906,"end":256046,"text":"자 그래서 우리는 이러한 스프링을 통한 백엔드 개발을 3일 동안 진행을 하게 되는 거죠.","speaker":""},{"start":256046,"end":265626,"text":"3일 동안 학습을 하게 될 건데 일단은 1일차에는 정말 스프링이 어떤 건지 그에 따른 기초를 알아보도록 할 거고","speaker":""},{"start":265626,"end":269126,"text":"그래서 스프링 프레임워크가 뭔지 알았고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532953747,"relativeStart":269123,"segments":[{"start":269123,"end":270303,"text":"여기 중요한","speaker":""},{"start":270303,"end":272563,"text":"IOC, DI","speaker":""},{"start":272563,"end":273923,"text":"우리가 이거를","speaker":""},{"start":273923,"end":275943,"text":"IOC는 역전의 제어","speaker":""},{"start":275943,"end":277823,"text":"DI는 의존성 주입","speaker":""},{"start":277823,"end":279283,"text":"이렇게 얘기하긴 하는데","speaker":""},{"start":279283,"end":280663,"text":"이러한 과정들이","speaker":""},{"start":280663,"end":282203,"text":"스프링에서는 어떻게","speaker":""},{"start":282203,"end":283403,"text":"더 편리해지는지","speaker":""},{"start":283403,"end":285423,"text":"간단하게 이론적인 부분들을","speaker":""},{"start":285423,"end":286243,"text":"익히도록 할 거예요.","speaker":""},{"start":286243,"end":287743,"text":"그리고","speaker":""},{"start":287743,"end":289203,"text":"다음으로는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532974283,"relativeStart":289204,"segments":[{"start":289204,"end":292924,"text":"스프링부트의 환경을 구축을 하도록 할 건데","speaker":""},{"start":292924,"end":300844,"text":"여기에는 스프링부트가 뭔지 그거는 제가 실제 스프링부트 환경을 구축하면서 설명을 드리도록 할게요.","speaker":""},{"start":300844,"end":305424,"text":"그래서 일단은 스프링부트라는 걸 사용을 하기 위해 환경을 구축을 하고","speaker":""},{"start":305424,"end":309904,"text":"그리고 서버에서는 어떤 식으로 클라이언트와 소통하는지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780532998051,"relativeStart":309893,"segments":[{"start":309893,"end":314193,"text":"조금 더 자세하게 이해할 수 있는 MVC 패턴이라는 것과","speaker":""},{"start":314193,"end":319493,"text":"그리고 우리가 소통하기 위해 사용하는 특정 규칙","speaker":""},{"start":319493,"end":322893,"text":"REST라는 거에 대해서도 알아보도록 할 거예요.","speaker":""},{"start":322893,"end":327573,"text":"그래서 이 앞에 있는 REST는 여러분들 이후에 들어보면 아시겠지만","speaker":""},{"start":327573,"end":329112,"text":"그렇게 낯설지 않아요.","speaker":""},{"start":329112,"end":333453,"text":"사실 여러분들이 이미 알고 있는 개념이라고 볼 수도 있는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533018773,"relativeStart":333450,"segments":[{"start":333450,"end":337610,"text":"그래서 1일차에 이런 과정들을 한번 알아볼 거고","speaker":""},{"start":337610,"end":341250,"text":"자, 2일차에는 우리 JPA&Service라고 되어 있죠.","speaker":""},{"start":341250,"end":344190,"text":"그래서 JPA라는 걸 배울 건데","speaker":""},{"start":344190,"end":348410,"text":"이거는 앞서 제가 데이터베이스가 이렇게 있으면","speaker":""},{"start":348410,"end":352590,"text":"우리는 데이터베이스에다가 원하는 데이터를 저장하고","speaker":""},{"start":352590,"end":354810,"text":"원하는 데이터를 가져다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533039776,"relativeStart":354814,"segments":[{"start":354814,"end":357314,"text":"쓸 수 있게끔 진행을 해요.","speaker":""},{"start":357314,"end":359754,"text":"데이터를 관리해요. 라고 얘기를 했었죠.","speaker":""},{"start":359754,"end":364154,"text":"그래서 이러한 데이터의 연동을 담당해주는 게","speaker":""},{"start":364154,"end":367314,"text":"바로 JPA가 된다. 라고 보시면 돼요.","speaker":""},{"start":367314,"end":371914,"text":"그래서 이러한 JPA를 어떻게 다루는지 알아보도록 하고","speaker":""},{"start":371914,"end":375374,"text":"JPA를 실제로 다룰 수 있는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533067928,"relativeStart":375368,"segments":[{"start":375368,"end":381768,"text":"Spring Data JPA 그리고 우리가 사용할 Repository라는 개념까지도 알아보도록 하고","speaker":""},{"start":381768,"end":383788,"text":"이후에는 Service Layer","speaker":""},{"start":383788,"end":388368,"text":"이거는 우리가 실제로 다루고자 하는 서비스들이 있죠.","speaker":""},{"start":388368,"end":395068,"text":"각각의 책을 만들거나 혹은 책을 삭제를 하거나 수정하는","speaker":""},{"start":395068,"end":398488,"text":"이런 서비스들을 어떤 식으로 나누어 줄 수 있는지","speaker":""},{"start":398488,"end":400608,"text":"그에 대한 레이어를 조금 알아보고","speaker":""},{"start":400608,"end":403328,"text":"여기서 발생할 수 있는 예외 처리까지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533088924,"relativeStart":403329,"segments":[{"start":403329,"end":405189,"text":"사용자 정의 예외까지도","speaker":""},{"start":405189,"end":406469,"text":"직접 알아볼 수 있을 거예요.","speaker":""},{"start":406469,"end":409089,"text":"그리고 나서 마지막","speaker":""},{"start":409089,"end":410089,"text":"3일차에는","speaker":""},{"start":410089,"end":413029,"text":"본격적인 레스트 API를","speaker":""},{"start":413029,"end":414769,"text":"구현을 해서 여러분들이","speaker":""},{"start":414769,"end":417309,"text":"만들고자 하는 프론트엔드의","speaker":""},{"start":417309,"end":418889,"text":"가장 기반 기본","speaker":""},{"start":418889,"end":420789,"text":"CRUD죠.","speaker":""},{"start":420789,"end":422989,"text":"이런 기능들을 구현해서","speaker":""},{"start":422989,"end":424509,"text":"클라이언트와","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533110955,"relativeStart":424508,"segments":[{"start":424508,"end":433448,"text":"서버가 실제로 이렇게 소통할 수 있게끔 만들어 보도록 할 거예요.","speaker":""},{"start":433448,"end":439248,"text":"그래서 이런 과정들을 3일에 거쳐서 진행할 거예요. 라고 보시면 돼요.","speaker":""},{"start":439248,"end":442568,"text":"그래서 일단은 처음 접하는 내용들이 조금 있기 때문에","speaker":""},{"start":442568,"end":446488,"text":"제가 각각의 내용들을 조금은 자세히 설명을 드렸어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533131935,"relativeStart":446479,"segments":[{"start":446479,"end":453659,"text":"그래서 여러분들은 이런 과정을 진행을 하게 되면 어떤 목표를 이룰 수 있냐면","speaker":""},{"start":453659,"end":463199,"text":"지금처럼 스프링부트, MVC, JP 등 서버 개발에 필요한 라이브러리들을 직접 가져다가 사용해볼 수 있다는 게 첫 번째","speaker":""},{"start":463199,"end":466999,"text":"그리고 이런 과정들을 가져다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533152930,"relativeStart":466999,"segments":[{"start":466999,"end":473639,"text":"RESTful API 형식의 백엔드 서버를 만들어 보는 게 두 번째 목표고","speaker":""},{"start":473639,"end":479239,"text":"그리고 최종적으로는 이러한 두 개를 복합적으로 합쳐서","speaker":""},{"start":479239,"end":483759,"text":"여러분들이 미니 프로젝트에서 기존에 만들었었던 북 서비스","speaker":""},{"start":483759,"end":486239,"text":"우리 원래 제이슨 서버로 구현이 되어 있었죠.","speaker":""},{"start":486239,"end":488659,"text":"그래서 그 제이슨 서버로 된 걸","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533184161,"relativeStart":488649,"segments":[{"start":488649,"end":491789,"text":"지금 배운 백엔드를 접목시켜서","speaker":""},{"start":491789,"end":495529,"text":"서버를 대체할 수 있는 과정을 진행을 하는 거예요.","speaker":""},{"start":495529,"end":498809,"text":"그래서 그거는 미니 프로젝트에서 진행이 될 거예요.","speaker":""},{"start":498809,"end":502329,"text":"그래서 여러분들은 이런 과정들을 진행을 하게 되면","speaker":""},{"start":502329,"end":505449,"text":"실제로 나는 백엔드 전문가야.","speaker":""},{"start":505449,"end":508229,"text":"실무 날아서 백엔드 다르고 서버 만들 수 있어.","speaker":""},{"start":508229,"end":511729,"text":"이 정도의 수준까지 올라오기는 당연히 힘들 수 있을 거예요.","speaker":""},{"start":511729,"end":514649,"text":"하지만 백엔드라는 개념을 봤을 때","speaker":""},{"start":514649,"end":519249,"text":"'어! 이 백엔드는 어떻게 동작하고 이렇게 돌아가는 거구나'","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533209000,"relativeStart":519261,"segments":[{"start":519261,"end":525321,"text":"그러니 이런 흐름을 가지고 있네 라는 걸 파악할 수 있는 실력까지","speaker":""},{"start":525321,"end":529701,"text":"끌어올릴 수 있을 거에요 라고 말씀을 드리도록 할게요.","speaker":""},{"start":529701,"end":534141,"text":"그래서 일단은 여기까지가 기본적인 우리가 백엔드에서 다루고자 하는","speaker":""},{"start":534141,"end":536981,"text":"과정 목표가 될 거에요.","speaker":""},{"start":536981,"end":541861,"text":"자 그러면 이제는 간단하게 과정 오버뷰에 대한 내용은 진행을 했으니까","speaker":""},{"start":541861,"end":544601,"text":"우리가 본격적으로 챕터 1.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533240998,"relativeStart":544590,"segments":[{"start":544590,"end":548610,"text":"스프링 입문 과정부터 하나씩 진행을 해보도록 할게요.","speaker":""},{"start":548610,"end":556270,"text":"자 그리고 이러한 스프링은 일단 우리가 자바를 뗄래야 뗄 수 없다고 했었죠.","speaker":""},{"start":556270,"end":559550,"text":"자바의 위에서 동작을 하는 거기 때문에","speaker":""},{"start":559550,"end":563890,"text":"그래서 우리가 저번에 작성했었던 코드를 다시 볼 수밖에 없어요.","speaker":""},{"start":563890,"end":568250,"text":"근데 이거를 인텔리제일을 따로 켜서 보지는 않고","speaker":""},{"start":568250,"end":570930,"text":"그냥 슬라이드 상으로만 보도록 할게요.","speaker":""},{"start":571610,"end":575990,"text":"어차피 한번 작성을 했었던 거니까 크게 어렵지 않게 이해하실 수 있을 테니","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533264802,"relativeStart":575994,"segments":[{"start":575994,"end":580554,"text":"그래서 일단은 먼저 브릿지 연결하는 과정이죠.","speaker":""},{"start":580554,"end":585554,"text":"그래서 우리가 만든 자바에서 어떻게 스프링으로 바뀔 수 있는지","speaker":""},{"start":585554,"end":591834,"text":"어떤 부분이 더 편해지고 스프링의 어떤 기능들을 가지고 있는지 알아보는 과정이 될 거예요.","speaker":""},{"start":591834,"end":595134,"text":"그래서 첫 번째 슬라이드를 보면","speaker":""},{"start":595134,"end":600114,"text":"자 우리 왼쪽과 같은 코드를 한번 작성을 했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533284765,"relativeStart":600109,"segments":[{"start":600109,"end":607789,"text":"order 서비스라는 클래스를 만들고 여기서 payment method 이거 interface였죠.","speaker":""},{"start":607789,"end":620569,"text":"그래서 각각의 카카오페이, 네이버페이, 신용카드 이러한 결제 방법들을 조금 넘겨받아서 진행할 수 있는 interface를 하나를 만들었고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533308848,"relativeStart":620561,"segments":[{"start":620561,"end":628761,"text":"그 인터페이스는 우리 생성자를 통해서 넘겨받고 지정해주는 역할 코드 작성했었어요.","speaker":""},{"start":628761,"end":634601,"text":"그리고 프로세스라는 메소드에서는 본격적으로 금액을 넘겨받은 뒤","speaker":""},{"start":634601,"end":644321,"text":"우리가 지정해준 결제 방식을 통해서 실제 결제 페이까지 진행하는 코드 작성을 했었을 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533330854,"relativeStart":644321,"segments":[{"start":644321,"end":649961,"text":"자 여러분들 이거 다 기억나죠? 우리 오더 서비스 다 기억나시죠?","speaker":""},{"start":649961,"end":654821,"text":"우리 japa 4일차 뺏은 마지막에 한 시간 정도 했었던 거예요.","speaker":""},{"start":654821,"end":666501,"text":"버려보니까 이제 또 슬픔이가 올라오긴 하죠. 자 근데 이제 이 코드가 우리는 더","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533352872,"relativeStart":666495,"segments":[{"start":666495,"end":668815,"text":"편해질 수 있다는 거예요.","speaker":""},{"start":668815,"end":671535,"text":"그래서 일단 오른쪽에 있는","speaker":""},{"start":671535,"end":672775,"text":"메인 코드까지 같이 보면","speaker":""},{"start":672775,"end":673935,"text":"우리는 여기","speaker":""},{"start":673935,"end":675815,"text":"뉴 키워드를 통해서","speaker":""},{"start":675815,"end":677795,"text":"카카오페이","speaker":""},{"start":677795,"end":680415,"text":"이 결제 방식을 구현을 하고","speaker":""},{"start":680415,"end":682995,"text":"구현체를 생성자에 넘겨주며","speaker":""},{"start":682995,"end":685375,"text":"그 생성자에서의 매개변수는","speaker":""},{"start":685375,"end":686335,"text":"넘겨받은 걸","speaker":""},{"start":686335,"end":688215,"text":"그대로 디스페이먼트","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533376930,"relativeStart":688213,"segments":[{"start":688213,"end":692953,"text":"본인의 필드에다가 저장을 시켜주고","speaker":""},{"start":692953,"end":697253,"text":"그럼 요 페이먼트는 우리가 넘겨준 카카오페이의 방식을","speaker":""},{"start":697253,"end":699973,"text":"구현 받았으니 사용하는게 가능해요.","speaker":""},{"start":699973,"end":702753,"text":"이런 식으로 흘러갈 수가 있었다는 거죠.","speaker":""},{"start":702753,"end":708873,"text":"자 그런데 우리 이 왼쪽에 있는 오더 서비스의 코드를 잠깐 보면","speaker":""},{"start":708873,"end":712713,"text":"기존에 우리가 작성했던 코드와는 조금 다른","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533402284,"relativeStart":712716,"segments":[{"start":712716,"end":716376,"text":"뭔가 추가적인 키워드가 하나가 더 붙어있는 걸 확인할 수 있어요.","speaker":""},{"start":716376,"end":721156,"text":"혹시 어떤 게 붙었는지 확인될까요?","speaker":""},{"start":721156,"end":728776,"text":"여기 코드를 자세히 보면 기존에 우리가 작성을 하지 않았던 추가적인 뭔가가 붙어있어요.","speaker":""},{"start":728776,"end":734556,"text":"그쵸. 우리가 이 필드를 선언할 때 원래는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533428140,"relativeStart":734552,"segments":[{"start":734552,"end":740432,"text":"private 그리고 payment method, interface나 클래스 이름 작성해주고","speaker":""},{"start":740432,"end":745292,"text":"그 뒤에 사용할 변수의 이름을 작성을 하는 게 일반적이었을 거예요.","speaker":""},{"start":745292,"end":752192,"text":"그런데 지금 여기 보면 final이라는 키워드가 추가로 붙어있어요.","speaker":""},{"start":752192,"end":754172,"text":"우리가 처음 보는 거죠.","speaker":""},{"start":754172,"end":757472,"text":"그래서 아니 강사님, 이 final 뭐죠?","speaker":""},{"start":757472,"end":760012,"text":"우리 이거 배운 적 없는데 왜 붙어있나요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533453226,"relativeStart":759999,"segments":[{"start":759999,"end":763999,"text":"라고 생각을 할 수 있는데 이 파이널은 진짜 간단해요.","speaker":""},{"start":763999,"end":768999,"text":"자, 우리 파이널이라는 단어 자체의 사전적인 의미를 보면","speaker":""},{"start":768999,"end":771999,"text":"이거 무슨 의미를 갖고 있다 할 수 있죠?","speaker":""},{"start":771999,"end":775999,"text":"파이널이라는 키워드가 가지고 있는 사전적인 의미.","speaker":""},{"start":775999,"end":780939,"text":"그렇죠? 여러분들이 지금 얘기하는 것처럼 뭔가 파이널에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533474213,"relativeStart":780941,"segments":[{"start":780941,"end":785941,"text":"최종적인 혹은 마지막, 최후의 이런 의미를 가지고 있어요.","speaker":""},{"start":785941,"end":791341,"text":"대신 말해 뭔가가 이렇게 있다면 그 끝을 가리키고 있다는 거죠.","speaker":""},{"start":791341,"end":797781,"text":"그래서 지금 앞에 있는 이 파이널 키워드가 붙은 변수의 경우는","speaker":""},{"start":797781,"end":801401,"text":"한 번 가진 값 자체가 최종 값이에요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533500077,"relativeStart":801394,"segments":[{"start":801394,"end":805894,"text":"다시 말해 변경 자체가 불가능하게 되으라는 거죠","speaker":""},{"start":805894,"end":812914,"text":"그래서 예를 들어 제가 여기에 final int num","speaker":""},{"start":812914,"end":815014,"text":"이거 우리 일반적인 자바코드죠","speaker":""},{"start":815014,"end":819574,"text":"그리고 이 num에다가 10의 값을 한 번 저장을 시켜주게 되면","speaker":""},{"start":819574,"end":823614,"text":"그때는 final이라는 키워드가 붙었으므로","speaker":""},{"start":823614,"end":827674,"text":"num이라는 변수의 값은 변경이 불가능하다는 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533522087,"relativeStart":827668,"segments":[{"start":827668,"end":834388,"text":"왜냐? 지금 저장해준 이 10의 값이 최종적인 값이 되기 때문에","speaker":""},{"start":834388,"end":841468,"text":"그러므로 앞에 있는 이 payment에는 이 변수 또한","speaker":""},{"start":841468,"end":847008,"text":"처음에 가진 값을 딱 한 번만 갖고 더 이상 변경이 불가능하게 되는 거구나","speaker":""},{"start":847008,"end":849228,"text":"라고 생각을 해보시면 되겠죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533554848,"relativeStart":849369,"segments":[{"start":849369,"end":855089,"text":"그러면 이 파이널 키워드 이게 지금 무슨 역할인지 이해하실 수 있겠죠?","speaker":""},{"start":855089,"end":858969,"text":"일단은 여기까지. 우리 처음 보는 키워드니까","speaker":""},{"start":858969,"end":863349,"text":"파이널 키워드 이해되신 분들은 엄지 이모지 한 번씩 눌러주세요.","speaker":""},{"start":863349,"end":868109,"text":"슬픔이 또 올라오는데","speaker":""},{"start":868109,"end":872609,"text":"자 우리 그러면 질문","speaker":""},{"start":872609,"end":875909,"text":"저 질문이 바로 올라오죠?","speaker":""},{"start":875909,"end":878949,"text":"일단은 첫 번째 질문부터 한번 보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533577899,"relativeStart":878951,"segments":[{"start":878951,"end":884451,"text":"첫 번째 질문, 프라이빗은 접근 제한자였죠.","speaker":""},{"start":884451,"end":890611,"text":"그래서 접근 제한자는 접근할 수 있는 위치를 지정해주는 거였어요.","speaker":""},{"start":890611,"end":897691,"text":"그래서 프라이빗은 본인의 클래스 안에서만 접근할 수 있게 만드는 거였고","speaker":""},{"start":897691,"end":901951,"text":"그리고 우리 많이 사용한다고 했었던 퍼블릭은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533599923,"relativeStart":901952,"segments":[{"start":901952,"end":909192,"text":"본인의 클래스 외부에서도 접근이 가능하게 만들어주는 역할이었죠.","speaker":""},{"start":909192,"end":915192,"text":"그래서 접근 영역만 정해주는 게 접근 제한자의 역할이요.","speaker":""},{"start":915192,"end":923192,"text":"그러니 우리가 프라이빗으로 필드를 지정해준다고 하면 프라이빗은 이 클래스 내부에서는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533621928,"relativeStart":923198,"segments":[{"start":923198,"end":925518,"text":"얼마든지 변경하는 게","speaker":""},{"start":925518,"end":926578,"text":"가능했었죠.","speaker":""},{"start":926578,"end":929078,"text":"심지어 우리 세터라는 걸 만들어서","speaker":""},{"start":929078,"end":930018,"text":"죄송합니다. 제가 못 본 거.","speaker":""},{"start":930018,"end":933518,"text":"세터를 통해 필드의 값을 계속 계속 바꾸는 거","speaker":""},{"start":933518,"end":935118,"text":"가능하게 만들었었죠.","speaker":""},{"start":935118,"end":936757,"text":"그렇기 때문에","speaker":""},{"start":936757,"end":938938,"text":"프라이빗은 접근 영역","speaker":""},{"start":938938,"end":940818,"text":"범위만 지정해주는 역할이고","speaker":""},{"start":940818,"end":943257,"text":"그에 반해서 파이널은","speaker":""},{"start":943257,"end":945338,"text":"영역이 아닌","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533642923,"relativeStart":945338,"segments":[{"start":945338,"end":950078,"text":"접근 그 영역이 아닌 값 자체를 변경할 수 없게 만드는 거예요.","speaker":""},{"start":950078,"end":955098,"text":"그러니 우리가 알고 있는 그 상수 개념 있죠. 상수.","speaker":""},{"start":955098,"end":963058,"text":"제가 항상 같은 수예요. 그래서 얘는 한 번 가지고 있는 값을 변경할 수 없어요. 라고 했었죠.","speaker":""},{"start":963058,"end":966838,"text":"그래서 그 상수와 같은 개념이라고 보시면 돼요. 파이널은.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533665441,"relativeStart":966836,"segments":[{"start":966836,"end":971516,"text":"그래서 일단은 프라이빗과의 차이점을 한번 설명드렸는데","speaker":""},{"start":971516,"end":972936,"text":"이거 이해하실 수 있을까요?","speaker":""},{"start":972936,"end":976316,"text":"네, 이해되신 것 같고","speaker":""},{"start":976316,"end":979116,"text":"그리고 한 번 더 설명해 주실 수 있나요? 라고 해주셨는데","speaker":""},{"start":979116,"end":983116,"text":"혹시 파이널이 상수와 같은 개념이다","speaker":""},{"start":983116,"end":985576,"text":"라고 조금 설명을 드렸는데","speaker":""},{"start":985576,"end":987016,"text":"이 내용으로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533688241,"relativeStart":987002,"segments":[{"start":987002,"end":989002,"text":"충분했을까요?","speaker":""},{"start":989002,"end":993002,"text":"조금'아직은 어려워요'라고 하면 다시 한번 설명드릴 수 있어요.","speaker":""},{"start":993002,"end":999002,"text":"어? 네. 일단은 한 번에 두 개 질문에 대한 답변이 된 것 같죠?","speaker":""},{"start":999002,"end":1005002,"text":"네. 그리고 여러분들 또 다른 질문 있으면은","speaker":""},{"start":1005002,"end":1007002,"text":"질문해주시면 돼요.","speaker":""},{"start":1007002,"end":1009282,"text":"어? 그쵸?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533708203,"relativeStart":1009277,"segments":[{"start":1009277,"end":1013537,"text":"우리 const랑 같은 건가요? 라고 해주셨어요.","speaker":""},{"start":1013537,"end":1014777,"text":"여기 const.","speaker":""},{"start":1014777,"end":1019517,"text":"이거는 여러분들이 이제 우리 자바스크립트에서 제기했어야죠?","speaker":""},{"start":1019517,"end":1023717,"text":"자바스크립트에서 const는 상수 선언하는 거요 라고 얘기를 했었죠.","speaker":""},{"start":1023717,"end":1029517,"text":"그래서 그것과 완전히 똑같은 거 아니지만 비슷한 역할이라고 보시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533732002,"relativeStart":1029510,"segments":[{"start":1029510,"end":1034290,"text":"그래서 자바에서는 실제로 const라는 키워드가 아예 없어요.","speaker":""},{"start":1034290,"end":1038250,"text":"그래서 변경이 안 되는 변수를 선언할 때는","speaker":""},{"start":1038250,"end":1039790,"text":"이 final을 사용한다.","speaker":""},{"start":1039790,"end":1044770,"text":"그래서 어떻게 보면 const의 대체 키워드다 라고 보시면 돼요.","speaker":""},{"start":1044770,"end":1048710,"text":"그래서 const를 이해하시면 final도 이해하시기가 수월할 거예요.","speaker":""},{"start":1048710,"end":1052010,"text":"그러면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533751731,"relativeStart":1052004,"segments":[{"start":1052004,"end":1055964,"text":"컨스트랑 같은 건가요? 라는 질문에 대해서도 답이 조금 됐을까요?","speaker":""},{"start":1055964,"end":1066004,"text":"네. 그래서 일단은 여기 우리가 조금 처음 보는 생소한 키워드가 나왔기 때문에","speaker":""},{"start":1066004,"end":1068264,"text":"이걸 간단하게 다시 한번 설명을 드린 거고","speaker":""},{"start":1068264,"end":1072344,"text":"마지막으로 한번 얘기하자면 이거 상수와 같은 개념이다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533772977,"relativeStart":1072339,"segments":[{"start":1072339,"end":1077019,"text":"처음에 값 지정되면 변경 안 되는 거예요 라고 보시면 돼요.","speaker":""},{"start":1077019,"end":1082019,"text":"그래서 일단은 우리가 여기 자바에서 작성했었던","speaker":""},{"start":1082019,"end":1087899,"text":"가장 마지막에 작성했었던 코드를 잠깐 다시 한번 회상하는 슬라이드가 돼요.","speaker":""},{"start":1087899,"end":1093359,"text":"그래서 우리는 이 패턴을 그대로 스프링에서도 적용을 시키는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533794989,"relativeStart":1093365,"segments":[{"start":1093365,"end":1097305,"text":"제가 얘기했다시피 조금은 변경되고 있어요.","speaker":""},{"start":1097305,"end":1101665,"text":"어떻게 더 편하게 만들어질 수 있다는 거죠.","speaker":""},{"start":1101665,"end":1109165,"text":"그래서 어떤 식으로 이 코드가 흘러갔고 어떻게 변경할 수 있는지 순차적으로 알아보면","speaker":""},{"start":1109165,"end":1115005,"text":"지금 앞에 작성된 이 코드는 제가 얘기했다시피 먼저 메인에서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533817008,"relativeStart":1114999,"segments":[{"start":1114999,"end":1122239,"text":"new라는 키워드를 통해 어떤 결제 방식을 사용할 거예요 라고 지정을 해주고 있었죠.","speaker":""},{"start":1122239,"end":1127839,"text":"그래서 여기 o1이라는 해당 객체에서는","speaker":""},{"start":1127839,"end":1134799,"text":"카카오페이라는 결제 방식을 사용할 거예요 라고 지정해서 넘겨준 거고","speaker":""},{"start":1134799,"end":1137659,"text":"그리고 o2라는 객체에서는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533841072,"relativeStart":1137662,"segments":[{"start":1137662,"end":1144682,"text":"네이버 페이라는 걸 사용을 할 거예요 라고 지정해서 넘겨준 거였죠","speaker":""},{"start":1144682,"end":1152242,"text":"그렇기 때문에 우리는 직접 new라는 키워드를 통해 어떤 방식을 사용을 할 건지","speaker":""},{"start":1152242,"end":1157182,"text":"수동적으로 지정해주고 넘겨줬어야 됐어요 라는 거죠","speaker":""},{"start":1157182,"end":1161282,"text":"실제로 우리 코드상으로 매번 이렇게 작성을 해줬던 거죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533864101,"relativeStart":1161270,"segments":[{"start":1161270,"end":1168590,"text":"그래서 우리는 이러한 어떤 결제 방식, 어떤 구현체를 사용할 건지 지정해주는 걸","speaker":""},{"start":1168590,"end":1172830,"text":"의존성을 주입한다라고 얘기해줄 수 있어요.","speaker":""},{"start":1172830,"end":1179450,"text":"인터페이스가 어떤 구현체에 의존할 건지 라고 생각해보시면 되겠죠.","speaker":""},{"start":1179450,"end":1184610,"text":"그래서 이렇게 끼워 넣는 것도 우리가 직접 일일이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533884860,"relativeStart":1184608,"segments":[{"start":1184608,"end":1186428,"text":"진행이 됐었어요라는 거죠.","speaker":""},{"start":1186428,"end":1190488,"text":"그런데 이런 방식이","speaker":""},{"start":1190488,"end":1191248,"text":"스프링에서는","speaker":""},{"start":1191248,"end":1195628,"text":"이 어노테이션이라는 걸 사용을 해줌으로써","speaker":""},{"start":1195628,"end":1198648,"text":"우리가 직접 일일이 지정을 해줄 필요가","speaker":""},{"start":1198648,"end":1200168,"text":"없어진다는 거예요.","speaker":""},{"start":1200168,"end":1202988,"text":"그래서 메인에 가서","speaker":""},{"start":1202988,"end":1205248,"text":"뉴 키워드를 작성을 하고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533914297,"relativeStart":1205246,"segments":[{"start":1205246,"end":1207566,"text":"카카오페이를 쓸 건지 아니면","speaker":""},{"start":1207566,"end":1210146,"text":"뉴 네이버페이를 쓸 건지","speaker":""},{"start":1210146,"end":1214886,"text":"이런 걸 굳이 지정해주는 과정이 필요가 없어진다는 거죠.","speaker":""},{"start":1214886,"end":1218586,"text":"물론 지금은 상당히 추상적이긴 해요.","speaker":""},{"start":1218586,"end":1221306,"text":"그러면 코드가 어떻게 바뀐다는 거지?","speaker":""},{"start":1221306,"end":1224286,"text":"기존의 코드가 사라지고 뭐가 생기는 거지?","speaker":""},{"start":1224286,"end":1226766,"text":"이렇게 조금 추상적인 개념일 수 있긴 한데","speaker":""},{"start":1226766,"end":1230946,"text":"아직은 우리 그냥 이론적인 부분 짚고 넘어가는 거라고 얘기했죠.","speaker":""},{"start":1230946,"end":1234006,"text":"그래서 전부 다 이해하실 필요는 없고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533935023,"relativeStart":1234001,"segments":[{"start":1234001,"end":1237401,"text":"그냥 스프링에서는 이러한 어노테이션이 붙고","speaker":""},{"start":1237401,"end":1242201,"text":"이 어노테이션이 뭔가 자동화, 알아서 해주는 거구나","speaker":""},{"start":1242201,"end":1245741,"text":"라는 것 정도만 이해를 해주시면 된다는 거예요.","speaker":""},{"start":1245741,"end":1250361,"text":"그래서 기존의 코드가 바뀐다는 것만 이해를 해주시면 되고","speaker":""},{"start":1250361,"end":1252781,"text":"추가로 한 가지 더 얘기를 할 게","speaker":""},{"start":1252781,"end":1255201,"text":"우리 이런 어노테이션은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533951923,"relativeStart":1255196,"segments":[{"start":1255196,"end":1257916,"text":"사실 스프링에서 처음 본 건 아니죠.","speaker":""},{"start":1257916,"end":1261856,"text":"우리 기존의 자바에서도 어노테이션을 사용을 했었고","speaker":""},{"start":1261856,"end":1266776,"text":"어떤 어노테이션을 주로 많이 사용을 했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780533977270,"relativeStart":1266777,"segments":[{"start":1266777,"end":1272177,"text":"그래서 우리가 메서드를 재정의할 때 사용해요 라고 했었던","speaker":""},{"start":1272177,"end":1278577,"text":"오버라이드라는 어노테이션을 사용을 했었어요.","speaker":""},{"start":1278577,"end":1285497,"text":"근데 이때 어노테이션을 처음 접하고 여러분들이 했었던 질문들이 또 있어요.","speaker":""},{"start":1285497,"end":1288096,"text":"그래서 그 질문을 다시 기억해보면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534000296,"relativeStart":1288305,"segments":[{"start":1288305,"end":1294705,"text":"우리 오버라이드라는 어노테이션은 별도의 기능이 있다고 했나요? 없다고 했나요?","speaker":""},{"start":1294705,"end":1298505,"text":"실제 질문으로도 한번 나왔었죠?","speaker":""},{"start":1298505,"end":1302305,"text":"그래서 제가 그 질문에 답변을 드렸었는데","speaker":""},{"start":1302305,"end":1310005,"text":"그렇죠. 오버라이드 어노테이션은 별도의 기능을 갖고 있지 않아요 라고 했었어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534024648,"relativeStart":1310006,"segments":[{"start":1310006,"end":1323406,"text":"실제로 여러분들 중에서 특정 에이블러님이'어 강사님 이거 지워도 어노테이션 붙이지 않아도 정상적으로 잘 돌아가던데요? 이거 왜 필요한 거죠?' 라고 질문을 했었어요.","speaker":""},{"start":1323406,"end":1334286,"text":"그래서 제가 답변 드리기로는'아 이거는 그냥 오버라이드 됐어요. 오버라이딩 됐어요'라는 걸 명시해주는 역할일 뿐이지 기능 자체는 없어요' 라고 얘기했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534044322,"relativeStart":1334289,"segments":[{"start":1334289,"end":1338469,"text":"그래서 여러분들도'어? 기능은 없어요'라고 대답할 수 있는 거예요.","speaker":""},{"start":1338469,"end":1342969,"text":"자, 그런데 스프링으로 넘어와서는 조금 달라져요.","speaker":""},{"start":1342969,"end":1349169,"text":"이 어노테이션이 그냥 붙는 게 아니라 추가적인 기능을 가지고 있게 돼요.","speaker":""},{"start":1349169,"end":1354549,"text":"다시 말해, 어노테이션을 붙였을 때와 붙이지 않았을 때는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534066357,"relativeStart":1354556,"segments":[{"start":1354556,"end":1357576,"text":"엄연한 차이들이 존재한다는 거죠.","speaker":""},{"start":1357576,"end":1363236,"text":"그렇기 때문에 우리 자바에서 생각했었던 이 오버라이드","speaker":""},{"start":1363236,"end":1367256,"text":"이 어노테이션을 떠올리면서","speaker":""},{"start":1367256,"end":1369436,"text":"아 이거 어노테이션 그냥 생략해도 되네","speaker":""},{"start":1369436,"end":1372496,"text":"라고 얘기하면 안 된다는 거예요.","speaker":""},{"start":1372496,"end":1375216,"text":"반드시 붙여줘야 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534086315,"relativeStart":1375211,"segments":[{"start":1375211,"end":1376451,"text":"라고 보시면 되겠죠.","speaker":""},{"start":1376451,"end":1379151,"text":"그래서 이 어노테이션을 붙여야","speaker":""},{"start":1379151,"end":1384751,"text":"우리는 추가적인 자동화 기능들을 사용하는 게 가능하다라고 생각해 주시면 될 거예요.","speaker":""},{"start":1384751,"end":1388271,"text":"그래서 이거는 반드시 잘 기억해 주셔야 돼요.","speaker":""},{"start":1388271,"end":1390951,"text":"그래서 일단은 여기까지","speaker":""},{"start":1390951,"end":1395431,"text":"어노테이션이 추가적인 기능을 가지고 있다는 내용까지는 이해하실 수 있겠죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534110904,"relativeStart":1395596,"segments":[{"start":1395596,"end":1400596,"text":"조금은 추상적인 개념이다 보니까 제가 중간중간 확인하면서 넘어가는 거예요.","speaker":""},{"start":1400596,"end":1405096,"text":"이해되신 분들은 엄지에너지 한 번씩 눌러주세요.","speaker":""},{"start":1405096,"end":1410196,"text":"어노테이션은 반드시 붙여주셔야 돼요.","speaker":""},{"start":1410196,"end":1418436,"text":"물론 여기서 강사님 근데 서비스, 오토아이더 이게 뭐죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534131899,"relativeStart":1418428,"segments":[{"start":1418428,"end":1425308,"text":"무슨 기능이죠? 라고 할 수 있는데 이건 우리가 나중에 직접 사용하면서 그때 다시 한번 설명드리도록 할 거예요.","speaker":""},{"start":1425308,"end":1430528,"text":"이런 게 있다, 붙여진다 라는 개념 제체가 중요한 거예요.","speaker":""},{"start":1430528,"end":1439108,"text":"그러면 여기까지 일단은 어노테이션이라는 걸 붙여서 자동화를 시켜준다 라고 볼 수가 있는 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534154943,"relativeStart":1439100,"segments":[{"start":1439100,"end":1446340,"text":"추가로 우리는 이러한 상태에 대한 차이까지도 나타내줄 수 있어요.","speaker":""},{"start":1446340,"end":1451980,"text":"그래서 우리가 기존의 오더 서비스를 잠깐 다시 봐요.","speaker":""},{"start":1451980,"end":1458420,"text":"그러면 이 오더 서비스를 봤을 때 우리는 결제를 담당해주는 클래스니까","speaker":""},{"start":1458420,"end":1462080,"text":"그러면 이 클래스에다가 잔액을 나타내줄 수 있는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534176933,"relativeStart":1462067,"segments":[{"start":1462067,"end":1466747,"text":"밸런스라는 추가적인 필드를 가져다가 사용하면 되지 않을까요?","speaker":""},{"start":1466747,"end":1471307,"text":"그래서 필드를 가져다가 클래스 안에 선언해두고","speaker":""},{"start":1471307,"end":1474507,"text":"사용하는 과정으로 진행할 수 있어요.","speaker":""},{"start":1474507,"end":1478307,"text":"자바라면 이렇게 진행을 하는 게 맞아요.","speaker":""},{"start":1478307,"end":1484587,"text":"그런데 스프링에서는 지금과 같은 상태 자체를 가지고 있지는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534197937,"relativeStart":1484595,"segments":[{"start":1484595,"end":1488355,"text":"안게끔 작성을 하게 돼요.","speaker":""},{"start":1488355,"end":1494635,"text":"왜냐하면 일반적인 자바 프로그램의 경우는 우리가 한 번 실행을 시키고","speaker":""},{"start":1494635,"end":1498795,"text":"그리고 쭉 진행하다가 프로그램을 중지를 해요.","speaker":""},{"start":1498795,"end":1502055,"text":"이렇게 중지 버튼 눌러서 중지를 시키면","speaker":""},{"start":1502055,"end":1505715,"text":"그러면 기존에 가지고 있었던 정보들이 모두 다 사라지죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534222781,"relativeStart":1505706,"segments":[{"start":1505706,"end":1513706,"text":"그런데 우리가 지금 만들고자 하는 서버는 중지시킨다고 해서 가지고 있던 정보가 모두 다 사라지면","speaker":""},{"start":1513706,"end":1518586,"text":"아주 큰일이 나겠죠? 엄청난 큰일이 날 거예요.","speaker":""},{"start":1518586,"end":1523706,"text":"그래서 이러한 데이터들이, 중요한 데이터들이 사라지면 안 되기 때문에","speaker":""},{"start":1523706,"end":1530106,"text":"아예 클래스 자체적으로는 뭔가 값을 나타내주는, 상태를 나타내주는 이러한","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534244027,"relativeStart":1530107,"segments":[{"start":1530107,"end":1533767,"text":"필드나 데이터들은 다루지 않아요 라는 거죠.","speaker":""},{"start":1533767,"end":1540287,"text":"그러면 이러한 잔액과 같은 상태를 나타내 주는 데이터를","speaker":""},{"start":1540287,"end":1543667,"text":"어떻게 다뤄야 되나요? 라고 생각할 수 있는데","speaker":""},{"start":1543667,"end":1551087,"text":"이때는 우리 추가적인 데이터를 저장하기 위한 공간이 따로 있죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534263989,"relativeStart":1551083,"segments":[{"start":1551083,"end":1561323,"text":"데이터베이스, 그래서 데이터베이스 DB에다가 바로바로 저장하고 바로바로 가져다 쓰는 형식으로 진행을 하게 돼요.","speaker":""},{"start":1561323,"end":1571763,"text":"그래서 이런 식으로 밸런스라는 내용을 따로 필드상으로 가지고 있지 않고 변수상으로 가지고 있지 않고 아예 DB에다가 위임을 해서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534291894,"relativeStart":1571754,"segments":[{"start":1571754,"end":1577014,"text":"소통을 통해 들어오는 잔액이 있으면 그 잔액을 저장하고","speaker":""},{"start":1577014,"end":1584274,"text":"그리고 잔액이 필요하면 DB에서 가져다가 꺼내 쓰게 된다는 거죠.","speaker":""},{"start":1584274,"end":1588234,"text":"그래서 상태를 DB에다가 위임을 시켜줬기 때문에","speaker":""},{"start":1588234,"end":1595714,"text":"실제로 서버가 꺼지더라도 별개의 DB가 잘 구현이 되어 있으면","speaker":""},{"start":1595714,"end":1599274,"text":"데이터는 문제없어요라고 얘기할 수 있다는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534312894,"relativeStart":1599278,"segments":[{"start":1599278,"end":1604337,"text":"그래서 이런 식으로 상태를 가지고 있지 않나요? 라고 해서","speaker":""},{"start":1604337,"end":1614538,"text":"우리는 이걸 state list, 상태라는 스테이트에다가 뒤에 list가 붙었으니까 상태가 없어요 라는 의미가 될 수 있겠죠?","speaker":""},{"start":1614538,"end":1620817,"text":"그래서 이런 식으로 상태는 DB가 갖고 있게 된다 라고 보시면 될 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534335934,"relativeStart":1620810,"segments":[{"start":1620810,"end":1631590,"text":"그래서 일단은 여기까지가 java와 spring 이 두 개가 코드상의 어떤 차이가 발생할 수 있는 거구나 라는 내용에 대한 차이가 될 거고","speaker":""},{"start":1631590,"end":1638590,"text":"이 과정을 우리가 다시 한번 간단하게 오늘 할 일로서 정리를 해보면","speaker":""},{"start":1638590,"end":1643150,"text":"예를 들어서 아직 spring 프레임워크가 뭔지는 배우지 않았어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534355903,"relativeStart":1643136,"segments":[{"start":1643136,"end":1647336,"text":"그래서 얘가 뭔지 이해하고 제가 아까 얘기했었던 역전해지요.","speaker":""},{"start":1647336,"end":1653636,"text":"IOC, 의전성주입 DI, 그리고 추가로 비닐이라고 우리가 다뤄주는 비닐이라는 개념 이해하고","speaker":""},{"start":1653636,"end":1660436,"text":"환경 구축하고 첫 컨트롤러까지도 작성을 하는 걸 일단 목표로 잡고 있기는 해요.","speaker":""},{"start":1660436,"end":1663436,"text":"그래서 일단 이런 과정들을 진행을 할 거다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534376889,"relativeStart":1663436,"segments":[{"start":1663436,"end":1665436,"text":"라고 생각해주시면 될 거예요.","speaker":""},{"start":1665436,"end":1668036,"text":"그래서 일단은 여기까지 진행하면","speaker":""},{"start":1668036,"end":1670796,"text":"자바에서 스프링으로서의 변환","speaker":""},{"start":1670796,"end":1673876,"text":"넘어가는 방식이 어떻게 달라질 건지","speaker":""},{"start":1673876,"end":1676656,"text":"그리고 어떤 걸 진행할 건지 알아볼 수 있는데","speaker":""},{"start":1676656,"end":1678616,"text":"자 여기까지는 이해할 수 있겠죠.","speaker":""},{"start":1678616,"end":1680696,"text":"벌써 슬픔이고 올라왔어요.","speaker":""},{"start":1680696,"end":1682136,"text":"여기까지는 이해할 수 있겠죠.","speaker":""},{"start":1682136,"end":1684676,"text":"여기까지는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534398395,"relativeStart":1684682,"segments":[{"start":1684682,"end":1691342,"text":"자 근데 우리 벌써 슬픔이가 있다 보니까 얘기를 하지만","speaker":""},{"start":1691342,"end":1695362,"text":"여러분들 코드가 어떻게 바뀌어야 되는구나","speaker":""},{"start":1695362,"end":1697022,"text":"이걸 생각할 필요는 없어요","speaker":""},{"start":1697022,"end":1699262,"text":"그냥 코드가 바뀌는구나","speaker":""},{"start":1699262,"end":1701642,"text":"어노테이션이라는 걸 사용을 하고","speaker":""},{"start":1701642,"end":1703522,"text":"그냥 상태라는 게 없어지는구나","speaker":""},{"start":1703522,"end":1705142,"text":"이것만 이해하시면 돼요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534425267,"relativeStart":1705134,"segments":[{"start":1705134,"end":1707574,"text":"사실 이게 중요해요","speaker":""},{"start":1707574,"end":1713434,"text":"일단은 엄지가 많이 올라오죠","speaker":""},{"start":1713434,"end":1716594,"text":"아직은 사실 우리 본격적인 이론은 아니에요","speaker":""},{"start":1716594,"end":1719794,"text":"여기까지 그냥 이런 느낌이구나","speaker":""},{"start":1719794,"end":1722354,"text":"그 정도만 느끼셔도 상관없어요","speaker":""},{"start":1722354,"end":1728594,"text":"그러면 이제 정말로 우리가 사용할 스프링 프레임워크라는","speaker":""},{"start":1728594,"end":1732374,"text":"이 개념이 뭔지에 대해서 한번 알아보도록 할 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534446258,"relativeStart":1732371,"segments":[{"start":1732371,"end":1739811,"text":"자 근데 이것도 아무래도 이론적인 개념이다 보니까 여러분들이 조금은 어려워하실 수 있기는 해요.","speaker":""},{"start":1739811,"end":1753691,"text":"근데 제가 먼저 드리고 싶은 얘기는 여러분들이 지금 시대가 아니라 만약 더 옛날 시대 예를 들어 2000년대 중반? 여러분들한테 너무 옛날인가요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534470333,"relativeStart":1753684,"segments":[{"start":1753684,"end":1764204,"text":"2000년대 중반 그쯤에서 내가 백엔드 개발자, 서버 개발자 돼야지 라고 공부를 했었다면 진짜 어려웠을 거예요.","speaker":""},{"start":1764204,"end":1771864,"text":"왜냐? 이 스프링 프레임워크라는 걸 정말 하나도 빠짐없이 다 익히고 이해를 했어야 되기 때문이에요.","speaker":""},{"start":1771864,"end":1777124,"text":"근데 지금 26년도에는 그렇게까지 하실 필요는 없어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534493373,"relativeStart":1777123,"segments":[{"start":1777123,"end":1782283,"text":"왜냐? 이후에 다룰 스프링, 부트라는 게 있다고 했었죠.","speaker":""},{"start":1782283,"end":1790503,"text":"그래서 얘가 스프링이라는 이 개념을 엄청 편리하게 사용할 수 있게끔 만들어주기 때문이에요.","speaker":""},{"start":1790503,"end":1795303,"text":"그래서 우리는 어차피 스프링 부트를 사용을 할 거고","speaker":""},{"start":1795303,"end":1800683,"text":"그렇기 때문에 스프링 프레임워크가 뭔지 정말 하나부터 열, 백까지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534517191,"relativeStart":1800681,"segments":[{"start":1800681,"end":1804861,"text":"이거를 다 일일이 하나하나 다 알 필요는 없다는 거예요.","speaker":""},{"start":1804861,"end":1810361,"text":"그냥 스프링 프레임워크가 어떤 거구나 라는 것 정도만","speaker":""},{"start":1810361,"end":1813001,"text":"아주 살짝 발만 담근다고 생각하시면 돼요.","speaker":""},{"start":1813001,"end":1816261,"text":"왜냐? 그 정도는 담가봐야","speaker":""},{"start":1816261,"end":1820401,"text":"그래도 내가 현재 이 스프링 부트라는","speaker":""},{"start":1820401,"end":1824001,"text":"물에서 놀 수 있는지 없는지 그거를 이해하고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534538426,"relativeStart":1824002,"segments":[{"start":1824002,"end":1830142,"text":"제대로 놓을 수 있기 때문이에요. 그래서 너무 걱정하실 필요는 없어요. 라고 얘기하는 거예요.","speaker":""},{"start":1830142,"end":1839442,"text":"일단은 조금의 우려 때문에 제가 말이 길어지긴 하는데 바로 한번 스프링이 어떤 건지 프레임워크가 어떤 건지 한번 알아보도록 할게요.","speaker":""},{"start":1839442,"end":1845262,"text":"그래서 일단 첫 번째 장을 보면 스프링 프레임워크라고 얘기하죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534560185,"relativeStart":1845264,"segments":[{"start":1845264,"end":1852924,"text":"그러면 우린 앞에 있는 Spring을 알기 전에 프레임워크가 뭔지부터 이해하고 넘어가는 게 중요해요.","speaker":""},{"start":1852924,"end":1859724,"text":"그래서 이 프레임워크는 가장 많이 헷갈리는 게 라이브러리와의 차이점이라고 얘기할 수 있는데","speaker":""},{"start":1859724,"end":1867024,"text":"라이브러리는 여러분들이 지금 개발 그리고 프로그래밍을 진행할 때 상당히 많이 사용했던 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534581193,"relativeStart":1867016,"segments":[{"start":1867016,"end":1882536,"text":"그래서 라이브러리는 제가 도서관이라고 얘기를 하면서 이 도서관에다가 필요한 데이터들을 저장을 해놨다가 이 데이터가 필요해지는 시점에서 라이브러리를 불러와 사용할 수 있게 만들어주는 거예요.","speaker":""},{"start":1882536,"end":1888296,"text":"라고 했었죠. 이 데이터를 가져다가 사용할 수 있게 만들어주는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534602433,"relativeStart":1888296,"segments":[{"start":1888296,"end":1897656,"text":"그래서 여러 가지 기능들이 있다면 그 기능들을 한 곳에 모아서 저장해 줄 수 있는 뭔가의 공간이다 라고 생각하시면 돼요.","speaker":""},{"start":1897656,"end":1906796,"text":"근데 이 프로그래밍을 진행을 할 때는 여러분들이 위에서부터 흐름을 하나씩 하나씩 작성을 해나가죠.","speaker":""},{"start":1906796,"end":1909036,"text":"코드를 하나하나 작성을 해나가요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534624199,"relativeStart":1909035,"segments":[{"start":1909035,"end":1914335,"text":"그리고 이 시점에 수학적인 계산이 조금은 필요한데","speaker":""},{"start":1914335,"end":1918335,"text":"그러면 numpy 라이브러리 써야겠다 라고 해서","speaker":""},{"start":1918335,"end":1922335,"text":"얘를 가져다가 써서 여기서 특정 기능을 수행하게 만들고","speaker":""},{"start":1922335,"end":1927735,"text":"그리고 이 결과 값을 가져다가 또 다음 코드 다음 코드 다음 코드 다음 코드","speaker":""},{"start":1927735,"end":1931235,"text":"이런 식으로 중간중간 라이브러리를 써가면서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534646208,"relativeStart":1931243,"segments":[{"start":1931243,"end":1934943,"text":"그 흐름을 만들어 나가는 게 일반적이에요.","speaker":""},{"start":1934943,"end":1939943,"text":"이게 라이브러리를 쓰면서 개발을 진행하는 거예요.","speaker":""},{"start":1939943,"end":1944243,"text":"근데 프레임워크는 이게 달라져요.","speaker":""},{"start":1944243,"end":1953023,"text":"프레임워크는 이런 식으로 말 그대로 상자 하나, 그 흐름 자체를 이미 만들어 놓은 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534666438,"relativeStart":1953028,"segments":[{"start":1953028,"end":1960268,"text":"예를 들어 스프링에서는 서버 구동시키려면 위에서부터 이것도 하고 이것도 하고 이것도 하고","speaker":""},{"start":1960268,"end":1968868,"text":"이렇게 해서 서버가 종료될 때는 이런 과정들을 하면 돼 라고 이미 그 흐름 자체를 다 만들어 둔 거죠","speaker":""},{"start":1968868,"end":1973828,"text":"근데 개발자가 들어가서 할 일은 그러면 이 흐름","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534690250,"relativeStart":1973835,"segments":[{"start":1973835,"end":1980675,"text":"예를 들어 이 사이, 한 이 시점에는 책을 생성할 수 있는 기능을 추가하고","speaker":""},{"start":1980675,"end":1985435,"text":"또 이 시점에는 그러면 책을 수정할 수 있는 기능 코드 추가하고","speaker":""},{"start":1985435,"end":1990095,"text":"또 아래 이 시점에는 책을 삭제할 수 있는 기능을 또 추가하고","speaker":""},{"start":1990095,"end":1997755,"text":"이런 식으로 짜여져 있는 그 흐름에다가 중간중간 들어가서 기능들만 추가해주면 된다는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534711229,"relativeStart":1997747,"segments":[{"start":1997747,"end":2004347,"text":"그렇기 때문에 프레임워크와 라이브러리의 가장 큰 차이점은","speaker":""},{"start":2004347,"end":2008847,"text":"누가 그 흐름의 주체가 되느냐가 차이가 되면 돼요","speaker":""},{"start":2008847,"end":2014587,"text":"그래서 앞에 화면에 있는 것처럼 개발자가 흐름의 주도권을 가지고","speaker":""},{"start":2014587,"end":2018347,"text":"필요하면 라이브러리 써야지 이렇게가 아니라","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534732222,"relativeStart":2018334,"segments":[{"start":2018334,"end":2023774,"text":"전체적인 그 흐름 자체를 Spring 프레임워크라는 게 같고","speaker":""},{"start":2023774,"end":2031354,"text":"그리고 이 중간중간에 개발자가 작성해둔 코드를 가져다가 쓴다는 거죠.","speaker":""},{"start":2031354,"end":2035174,"text":"나와있는 것처럼 나 Spring 프레임워크인데","speaker":""},{"start":2035174,"end":2037834,"text":"네가 작성한 코드 컨트롤 내가 대신 조절해줄게.","speaker":""},{"start":2037834,"end":2039774,"text":"내가 만들어둔 흐름이 있으니까","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534763461,"relativeStart":2039766,"segments":[{"start":2039766,"end":2045526,"text":"여기다가 너가 작성한 코드 가져다 쓰고 알아서 내가 소멸까지도 해줄게.","speaker":""},{"start":2045526,"end":2047206,"text":"이런 식으로 되는 거예요.","speaker":""},{"start":2047206,"end":2051546,"text":"그래서 라이브러리는 개발자가 전체적인 흐름을 만들지만","speaker":""},{"start":2051546,"end":2058086,"text":"프레임워크는 개발자가 진행하는 게 아니라 프레임워크가 관리한다.","speaker":""},{"start":2058086,"end":2059446,"text":"라고 보시면 돼요.","speaker":""},{"start":2059446,"end":2063966,"text":"그래서 이 내용을 조금 디테일하게 설명하는 이유는","speaker":""},{"start":2063966,"end":2068966,"text":"여러분들이 나중에 실무에 나가서도 이 두 개를 차이점을 잘 설명을 못하고","speaker":""},{"start":2068966,"end":2070886,"text":"헷갈리는 경우가 많기 때문이요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534793413,"relativeStart":2070883,"segments":[{"start":2070883,"end":2076423,"text":"그래서 그 흐름을 누가 가지고 있는지 그걸 포인트로 두고 잘 생각해 주시면 돼요.","speaker":""},{"start":2076423,"end":2081943,"text":"자 그러면 우리가 이러한 프레임워크를 알아봤으니","speaker":""},{"start":2081943,"end":2086783,"text":"그럼 앞에 있는 스프링 프레임워크가 뭔지를 알아보도록 할 건데","speaker":""},{"start":2086783,"end":2089943,"text":"일단은 스프링 프레임워크는 제가 얘기한 것처럼","speaker":""},{"start":2089943,"end":2095983,"text":"서버를 만들기 위해서 누군가 그 흐름을 만들어둔","speaker":""},{"start":2095983,"end":2100003,"text":"더 편리하게 서버를 만들 수 있게 만들어둔 프레임워크예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534814405,"relativeStart":2100195,"segments":[{"start":2100195,"end":2102195,"text":"라고 생각해주시면 돼요.","speaker":""},{"start":2102195,"end":2109195,"text":"그리고 여기서 중요한 게 앞에 자바 기반이라는 단어가 상당히 중요해요.","speaker":""},{"start":2109195,"end":2118195,"text":"그래서 자바 기반의 오픈소스 애플리케이션 프레임워크 애플리케이션을 만들 수 있는 프레임워크라는 거고","speaker":""},{"start":2118195,"end":2121115,"text":"제가 앞에 자바 기반이 중요해요 라고 했죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534835386,"relativeStart":2121120,"segments":[{"start":2121120,"end":2135420,"text":"이게 왜 중요하냐면 만약에 자바 기반이 아니었다면 여러분들이 스프링을 가져다가 실제 서버를 개발할 때 새로운 언어를 도입해서 진행을 했어야 됐을 거예요.","speaker":""},{"start":2135420,"end":2142300,"text":"그런데 그렇게 되면 기존에 스프링이 나오기 전에 자바로 쭉 만들어놨었던 것을","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534856391,"relativeStart":2142298,"segments":[{"start":2142298,"end":2145058,"text":"스프링에 맞춰서 다시 리워크","speaker":""},{"start":2145058,"end":2146498,"text":"바꾸는 과정","speaker":""},{"start":2146498,"end":2148398,"text":"리팩토리 과정을 진행을 해줘야 돼요.","speaker":""},{"start":2148398,"end":2149858,"text":"그러면","speaker":""},{"start":2149858,"end":2152118,"text":"코드 몇천 몇만 줄이 있는데","speaker":""},{"start":2152118,"end":2155018,"text":"그거 일일이 다 스프링의 코드로 다 바꾸려면","speaker":""},{"start":2155018,"end":2157378,"text":"아무래도 머리가 많이 아프겠죠.","speaker":""},{"start":2157378,"end":2161178,"text":"오히려 스프링이 편리하다고 얘기할 수가 없어질 거예요.","speaker":""},{"start":2161178,"end":2163258,"text":"그런데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534876355,"relativeStart":2163257,"segments":[{"start":2163257,"end":2172257,"text":"현재 Spring은 Java 기반이기 때문에 기존의 Java로 만들어둔 걸 그대로 가져다가 사용하는 게 가능하다는 거죠.","speaker":""},{"start":2172257,"end":2177257,"text":"그래서 우리는 이걸 보고 포조 기반이라고 얘기할 수 있어요.","speaker":""},{"start":2177257,"end":2183317,"text":"그리고 포조를, 여기에다가 제가 풀어서 한번 작성을 하면 포조는 Plain,","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534898373,"relativeStart":2183321,"segments":[{"start":2183321,"end":2188321,"text":"old, java, object가 돼요.","speaker":""},{"start":2188321,"end":2196321,"text":"그러니 지금의 단어 그대로 java에서 사용하던 객체, 즉 클래스들을","speaker":""},{"start":2196321,"end":2201321,"text":"그대로 가져다가 쓰는 게 가능해요. 라고 볼 수 있다는 거죠.","speaker":""},{"start":2201321,"end":2205221,"text":"그래서 특별한 규칙이 없는 일반 java 클래스들을","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534918346,"relativeStart":2205225,"segments":[{"start":2205225,"end":2208625,"text":"'bin'이라는 개념으로 등록해서 사용이 가능해요.","speaker":""},{"start":2208625,"end":2210425,"text":"라고 할 수 있는데","speaker":""},{"start":2210425,"end":2213165,"text":"'bin'이 어떤 건지는 우리가 조금 있다가","speaker":""},{"start":2213165,"end":2214765,"text":"슬라이드 몇 장 넘어가서","speaker":""},{"start":2214765,"end":2217165,"text":"조금 더 자세하게 설명을 드리도록 할게요.","speaker":""},{"start":2217165,"end":2220265,"text":"그래서 일단 첫 번째","speaker":""},{"start":2220265,"end":2222165,"text":"스프링 프레임워크의 특징은","speaker":""},{"start":2222165,"end":2225485,"text":"기존 여러분들이 다루던 자바의 클래스들을","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534943943,"relativeStart":2225492,"segments":[{"start":2225492,"end":2228492,"text":"그대로 적용시켜서 사용하는 게 가능하다.","speaker":""},{"start":2228492,"end":2233852,"text":"그리고 두 번째, 병량 컨테이너라는 게 있어요.","speaker":""},{"start":2233852,"end":2240992,"text":"이 컨테이너는 우리 진짜 간단하게 생각해서","speaker":""},{"start":2240992,"end":2244852,"text":"컨테이너라고 하면 가장 먼저 떠오르는 게 뭐죠?","speaker":""},{"start":2244852,"end":2249312,"text":"이거를 이해하기 위해 머릿속으로 조금 그려보면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534970323,"relativeStart":2249303,"segments":[{"start":2249303,"end":2252442,"text":"컨테이너라고 했을 때","speaker":""},{"start":2252442,"end":2254342,"text":"가장 먼저 떠오르는 거","speaker":""},{"start":2254342,"end":2254822,"text":"뭐죠?","speaker":""},{"start":2254822,"end":2258083,"text":"그렇죠","speaker":""},{"start":2258083,"end":2259922,"text":"여러분 이미","speaker":""},{"start":2259922,"end":2262583,"text":"자바에 대한 혹은 스프링에 대한","speaker":""},{"start":2262583,"end":2263982,"text":"백엔드 지식이 있으신 분들은","speaker":""},{"start":2263982,"end":2265743,"text":"독허라고 얘기할 수 있기는 해요","speaker":""},{"start":2265743,"end":2267882,"text":"근데 우리가","speaker":""},{"start":2267882,"end":2270063,"text":"일상에서 덮할 수 있는 걸 얘기하면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780534994121,"relativeStart":2270059,"segments":[{"start":2270059,"end":2272099,"text":"화물 컨테이너, 물류 컨테이너.","speaker":""},{"start":2272099,"end":2279179,"text":"우리 엄청 커다랗게 있는 화물선에 실을 때, 짐 실을 때 사용하는 철제 상자 있죠?","speaker":""},{"start":2279179,"end":2283459,"text":"철제 상자. 그걸 보통 우리가 컨테이너라고 많이 얘기를 하죠.","speaker":""},{"start":2283459,"end":2285859,"text":"그래서 얘도 똑같아요.","speaker":""},{"start":2285859,"end":2289399,"text":"이런 식으로 커다란 상자가 하나가 있는 거예요.","speaker":""},{"start":2289399,"end":2294259,"text":"그리고 이 상자가 객체들을 자동으로 생성 및 관리","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535016142,"relativeStart":2294258,"segments":[{"start":2294258,"end":2298858,"text":"즉 객캐들을 생성해서 상자 안에다가 이렇게 담아두고","speaker":""},{"start":2298858,"end":2303258,"text":"필요할 때마다 가둬다가 쓰고 다시 상자에 넣어놓고","speaker":""},{"start":2303258,"end":2306258,"text":"이런 식으로 다뤄주는 게 가능하다는 거예요.","speaker":""},{"start":2306258,"end":2311858,"text":"그래서 객체를 스프링 자체가 알아서 만들고 알아서 사용을 해주다 보니까","speaker":""},{"start":2311858,"end":2316658,"text":"우리는 경량, 프로그램 자체가 더 가벼워질 수","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535038153,"relativeStart":2316651,"segments":[{"start":2316651,"end":2323251,"text":"있다는 거죠. 그래서 우리가 이걸 조금 더 자세히 얘기하면 IOC 컨테이너라고 할 수 있는데","speaker":""},{"start":2323251,"end":2331911,"text":"뒤에서 더 자세히 다루도록 하고 일단 스프링이 객체 생성 및 관리를 자동으로 해줘서","speaker":""},{"start":2331911,"end":2338191,"text":"가볍고 빠른 실행 환경을 구성하는 게 가능해요. 라고 생각해 주시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535059155,"relativeStart":2338183,"segments":[{"start":2338183,"end":2340763,"text":"그래서 컨테이너는 상자","speaker":""},{"start":2340763,"end":2342823,"text":"근데 상자가 가벼우니까","speaker":""},{"start":2342823,"end":2345023,"text":"가볍고 빠른 실행 환경이다","speaker":""},{"start":2345023,"end":2346703,"text":"라고 보시면 되겠죠","speaker":""},{"start":2346703,"end":2348783,"text":"그래서 애가","speaker":""},{"start":2348783,"end":2349403,"text":"두 번째","speaker":""},{"start":2349403,"end":2351803,"text":"스프링 프레임워크의 특징이 되고","speaker":""},{"start":2351803,"end":2354223,"text":"마지막 세 번째는","speaker":""},{"start":2354223,"end":2355803,"text":"모듈식 구두라고 되어 있어요","speaker":""},{"start":2355803,"end":2359123,"text":"그래서 이 모듈이라는 건","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535079115,"relativeStart":2359125,"segments":[{"start":2359125,"end":2366625,"text":"간단하게 얘기해서 특정 부품들을 상황에 따라서 끼워 넣는다 라고 생각해주시면 돼요.","speaker":""},{"start":2366625,"end":2379845,"text":"그래서 여러분들은 스프링 프레임워크라는 이 개념이 있으면 이 개념을 사용하기 위해 얘의 모든 걸 전부 다 가져다가 한 번에 쓰는 게 아니라 내가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535100112,"relativeStart":2379848,"segments":[{"start":2379848,"end":2388848,"text":"필요한 모듈들만 선택적으로 필요한 부품들만 빼서 붙여 쓰는 게 가능하다는 거죠.","speaker":""},{"start":2388848,"end":2391848,"text":"그래서 여기 앞에 나와 있는 것처럼","speaker":""},{"start":2391848,"end":2397348,"text":"Core Web Data Security 이런 내용들이 있어요.","speaker":""},{"start":2397348,"end":2400208,"text":"그러면 우리는 기본적으로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535126483,"relativeStart":2400199,"segments":[{"start":2400199,"end":2402199,"text":"만들거죠. 웹서버.","speaker":""},{"start":2402199,"end":2406199,"text":"그렇기 때문에 웹이라는 모듈 당연히 필요해요.","speaker":""},{"start":2406199,"end":2407199,"text":"가지고 와요.","speaker":""},{"start":2407199,"end":2410199,"text":"그리고 각각의 데이터들도 다뤄야 되겠죠.","speaker":""},{"start":2410199,"end":2412199,"text":"DB와 소통하려면.","speaker":""},{"start":2412199,"end":2415199,"text":"그러니 데이터라는 이 모듈도 가지고 오는 거죠.","speaker":""},{"start":2415199,"end":2422199,"text":"자, 그런데 지금 나는 어차피 간단하게 예제 만들고","speaker":""},{"start":2422199,"end":2426599,"text":"하나의 프로젝트 해보는 거니까 보안은 딱히 신경 쓰지 않을 거야.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535147204,"relativeStart":2426591,"segments":[{"start":2426591,"end":2432231,"text":"라고 하면 security라는 모듈은 굳이 쓸 필요가 없다는 거예요.","speaker":""},{"start":2432231,"end":2437511,"text":"근데 나중에 더 나아가서 이렇게 구성을 했다가","speaker":""},{"start":2437511,"end":2442191,"text":"보안에 대한 내용도 이제는 본격적으로 한번 신경을 써봐야 되겠다","speaker":""},{"start":2442191,"end":2446751,"text":"라고 하면 security모듈을 가져다가 사용을 해주면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535168203,"relativeStart":2446993,"segments":[{"start":2446993,"end":2452153,"text":"그래서 굳이 사용하지도 않을 불필요한 것들을 가지고 있을 필요 없이","speaker":""},{"start":2452153,"end":2456473,"text":"내가 필요한 것만 가져다가 선택적으로 사용을 해서","speaker":""},{"start":2456473,"end":2459333,"text":"더 가벼운 환경을 만드는 게 가능하다.","speaker":""},{"start":2459333,"end":2463713,"text":"그러니 결국 무거운 기능들을 강제시키지 않아요.","speaker":""},{"start":2463713,"end":2468113,"text":"쓰지도 않을 거면서 굳이 갖고 있을 필요는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535193049,"relativeStart":2468104,"segments":[{"start":2468104,"end":2469604,"text":"없다라는 거예요.","speaker":""},{"start":2469604,"end":2473264,"text":"그래서 일단은 여기까지 하면","speaker":""},{"start":2473264,"end":2475364,"text":"스프링 프레임워크가 가지고 있는","speaker":""},{"start":2475364,"end":2477424,"text":"세 가지 특징을 설명을 해줄 수 있는데","speaker":""},{"start":2477424,"end":2480364,"text":"여기까지 내용은 다들 이해하실 수 있을까요?","speaker":""},{"start":2480364,"end":2483724,"text":"살짝 발만 담근 거예요.","speaker":""},{"start":2483724,"end":2485944,"text":"이해되시는 분들은 언제 한번 눌러주세요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535215563,"relativeStart":2490818,"segments":[{"start":2490818,"end":2495818,"text":"근데 이거 어떻게 되는 건가요?","speaker":""},{"start":2495818,"end":2497218,"text":"다 신경 쓸 필요는 없어요.","speaker":""},{"start":2497218,"end":2499218,"text":"스프링 부트 쓸 거니까","speaker":""},{"start":2499218,"end":2502158,"text":"그래서 그냥 이런 느낌, 이런 느낌","speaker":""},{"start":2502158,"end":2504258,"text":"이렇게만 생각해 주시면 돼요.","speaker":""},{"start":2504258,"end":2508318,"text":"자, 그러면 이제 우리가 또 스프링의 핵심","speaker":""},{"start":2508318,"end":2510998,"text":"아까 제가 강조 얘기했었던 IOC","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780535239878,"relativeStart":2511000,"segments":[{"start":2511000,"end":2513240,"text":"그리고 DI","speaker":""},{"start":2513240,"end":2516840,"text":"역전의 제어와 의존성에 대해서 알아보도록 할 건데","speaker":""},{"start":2516840,"end":2518380,"text":"일단은 지금 시간이","speaker":""},{"start":2518380,"end":2521700,"text":"쉬는 시간을 먼저 갖고 진행하는 게 조금 더 좋을 것 같아요","speaker":""},{"start":2521700,"end":2523760,"text":"그래서 10시 7분이니까","speaker":""},{"start":2523760,"end":2525100,"text":"우리 17분까지","speaker":""},{"start":2525100,"end":2527540,"text":"10분 쉬었다가 진행해보도록 할게요","speaker":""},{"start":2527540,"end":2529260,"text":"자 10분 쉬었다 진행할게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536006443,"relativeStart":2530656,"segments":[{"start":2530656,"end":2539976,"text":"직접 뉴 키워드로 지정을 해줬었죠. 카카오페인지 네이버페인지 신용카드인지 직접 지정을 해줬었는데","speaker":""},{"start":2539976,"end":2544116,"text":"이런 과정들이 굳이 진행되지는 않아요 라는 거죠.","speaker":""},{"start":2544116,"end":2553656,"text":"그래서 진행될 필요 없이 외부에서 누가 스프링이 알아서 주입해주는 방식이 될 거다라는 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536028728,"relativeStart":2553657,"segments":[{"start":2553657,"end":2558377,"text":"이때 사용하는 게 지금은 조금 이해하기 어렵지만","speaker":""},{"start":2558377,"end":2563577,"text":"Auto-Wired라는 어노테이션을 붙여주기만 하면","speaker":""},{"start":2563577,"end":2567837,"text":"알아서 스프링이 얘는 뭘 사용하면 되겠네? 주입","speaker":""},{"start":2567837,"end":2570637,"text":"이런 식으로 동작하는 게 가능하다는 거죠","speaker":""},{"start":2570637,"end":2576457,"text":"물론 더 정확히 어떻게 찾아서 어떻게 주입해주고 어떻게 사용하는 건가요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536052789,"relativeStart":2576455,"segments":[{"start":2576455,"end":2579455,"text":"라고 이제 머릿속으로는 의문이 들 수 있는데","speaker":""},{"start":2579455,"end":2581995,"text":"그것까지는 우리가 알 필요 없다는 거예요.","speaker":""},{"start":2581995,"end":2587075,"text":"그냥 자동으로 해주는구나 라는 게 가장 중요하다는 거죠.","speaker":""},{"start":2587075,"end":2593435,"text":"그래서 지금처럼 객체 생성 및 소멸을 관리하지 않는 게 제어의 역전","speaker":""},{"start":2593435,"end":2600155,"text":"그리고 인터페이스에서 어떤 구현체를 사용할지 지정해 두지 않는 게","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536075829,"relativeStart":2600147,"segments":[{"start":2600147,"end":2603387,"text":"바로 DI, 의존성 주입이다라는 거예요.","speaker":""},{"start":2603387,"end":2608047,"text":"근데 여기까지만 들으면 역시나 조금은 추상적이죠.","speaker":""},{"start":2608047,"end":2614607,"text":"그래서 여러분들이 이 내용을 조금은 이해하기 쉽게 비유할 수가 있는 게","speaker":""},{"start":2614607,"end":2619967,"text":"특히 IOC, 제어의 역전에 대해서 이해하기 쉽게 비유할 수 있는 게","speaker":""},{"start":2619967,"end":2623287,"text":"바로 운전하는 걸 예시로 들어보면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536096813,"relativeStart":2623283,"segments":[{"start":2623283,"end":2628663,"text":"그래서 여러분들이 만약 본인의 차를 가지고 있어요.","speaker":""},{"start":2628663,"end":2633903,"text":"그러면 이 차를 통해서 특정 목적지에 가려고 한다면","speaker":""},{"start":2633903,"end":2643663,"text":"조금 더 큰 범위로 보면 내가 어떤 차를 사야지, 어떤 모델을 사야지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536116782,"relativeStart":2643668,"segments":[{"start":2643668,"end":2647248,"text":"그리고 또 모델 안에서도 여러 가지 옵션 성능들이 있죠.","speaker":""},{"start":2647248,"end":2650068,"text":"그래서 그것들을 이제 잘 추려가지고","speaker":""},{"start":2650068,"end":2652288,"text":"나는 이 차를 구매를 할 거야.","speaker":""},{"start":2652288,"end":2654368,"text":"그래서 차를 구매를 하고","speaker":""},{"start":2654368,"end":2655628,"text":"이 차에","speaker":""},{"start":2655628,"end":2657868,"text":"뭐 튜닝을 하고 싶으면 튜닝도 하겠죠.","speaker":""},{"start":2657868,"end":2659048,"text":"그래서 튜닝을 하고","speaker":""},{"start":2659048,"end":2661208,"text":"아 그럼 이제 이 차를 끌고서는 내가","speaker":""},{"start":2661208,"end":2662588,"text":"어느 지점에 가야겠다.","speaker":""},{"start":2662588,"end":2664568,"text":"예를 들어 뭐 서울역에 가야겠다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536139818,"relativeStart":2664559,"segments":[{"start":2664559,"end":2675099,"text":"라고 목적지를 정해도 그 서울역까지 차를 열심히 주행을 해서 엑셀도 밟고 브레이크도 밟고 핸들을 돌려가면서 목적지에 도착을 해야 돼요.","speaker":""},{"start":2675099,"end":2682459,"text":"그러면 여기까지는 우리가 하나부터 열까지 모든 내용을 전부 다 만든 거죠.","speaker":""},{"start":2682459,"end":2687599,"text":"그래서 그 과정이 기존의 자바의 방식이었다는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536160812,"relativeStart":2687594,"segments":[{"start":2687594,"end":2696654,"text":"정말 하나부터 열까지 특정 목적을 수행하기 위해서 스택을 계속 쌓고 다 만들어 나가는 게 자화의 방식이었다면","speaker":""},{"start":2696654,"end":2701734,"text":"스프링은 더 편한 택시를 타는 거예요.","speaker":""},{"start":2701734,"end":2708054,"text":"그럼 얘는 내가 서울역 가야지 라고 딱 생각하고 택시","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536182839,"relativeStart":2708046,"segments":[{"start":2708046,"end":2716286,"text":"불러요. 그리고 택시 오면 탑승해서\"기사님 서울역 가주세요\"라고 하면은 우리는 더 할 게 없죠.","speaker":""},{"start":2716286,"end":2724506,"text":"그냥 뒤에 앉아서 핸드폰도 좀 하고 업무를 볼 게 있으면 업무를 좀 보다 보면은 서울역 도착할 수 있죠.","speaker":""},{"start":2724506,"end":2730146,"text":"그렇기 때문에 우리가 원하는 목적 자체만 이룰 수 있다 보니까","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536205876,"relativeStart":2730152,"segments":[{"start":2730152,"end":2736632,"text":"굳이 번거로운 과정들을 진행할 필요 없이 본질에만 집중이 가능하게 만들어주는 거예요.","speaker":""},{"start":2736632,"end":2744032,"text":"그러니 우리가 실제로 차량 구매하고 차량 정비하거나 핸들, 엑셀 브레이크 다 밟는 거는","speaker":""},{"start":2744032,"end":2747872,"text":"이 스프링이라는 운전기사가 알아서 해줄 뿐이에요.","speaker":""},{"start":2747872,"end":2753112,"text":"그렇기 때문에 이러한 불필요한 부분들은 굳이 신경 쓰지도 않고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536225850,"relativeStart":2753102,"segments":[{"start":2753102,"end":2755682,"text":"우리가 생각할 필요도 없다는 거죠.","speaker":""},{"start":2755682,"end":2758022,"text":"예를 들어 여러분들 택시 타서","speaker":""},{"start":2758022,"end":2759522,"text":"서울역 어디 목적지 가는데","speaker":""},{"start":2759522,"end":2762142,"text":"기사님이 지금 타이밍에 브레이크 밟나","speaker":""},{"start":2762142,"end":2763962,"text":"엑셀 밟나 핸들 어떻게 돌리나","speaker":""},{"start":2763962,"end":2766162,"text":"이런 거 다 보면서 가지는 않죠.","speaker":""},{"start":2766162,"end":2768242,"text":"우리는 목적지 도착하는 것만","speaker":""},{"start":2768242,"end":2769642,"text":"생각을 하면 된다는 거예요.","speaker":""},{"start":2769642,"end":2771662,"text":"그래서 이런 식으로","speaker":""},{"start":2771662,"end":2773302,"text":"제어권 자체가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536246836,"relativeStart":2773302,"segments":[{"start":2773302,"end":2778802,"text":"내가 가지고 있다가 다른, 스프링이라는 곳에 넘어간 게 IOC다.","speaker":""},{"start":2778802,"end":2781302,"text":"라고 생각해 주시면 돼요.","speaker":""},{"start":2781302,"end":2787902,"text":"자, 그래서 지금의 이러한 추상적인 개념을 여러분들이 일상에서 접할 수 있는","speaker":""},{"start":2787902,"end":2791302,"text":"실제 상황에 한번 비유를 해서 설명을 드렸고","speaker":""},{"start":2791302,"end":2794002,"text":"이 과정을 다시 한번 코드로 보면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536270632,"relativeStart":2794007,"segments":[{"start":2794007,"end":2798007,"text":"우리 계속 얘기했었던 객자 생성하는 거 이 과정 있죠?","speaker":""},{"start":2798007,"end":2802007,"text":"이거를 이렇게 바꿔주기만 하면","speaker":""},{"start":2802007,"end":2806007,"text":"메인의 이런 코드들은 아예 필요가 없어진다는 거죠.","speaker":""},{"start":2806007,"end":2812007,"text":"그래서 어노테이션 통해서 스프링 프레임워크를 사용하는 게 가능해요.","speaker":""},{"start":2812007,"end":2814007,"text":"라고 보시면 되는데","speaker":""},{"start":2814007,"end":2817807,"text":"그러면 이런 과정들이 어떻게 진행되는 건가요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536291884,"relativeStart":2817801,"segments":[{"start":2817801,"end":2823801,"text":"라고 생각이 들 수도 있어요. 그래서 이때는 아까 제가 얘기했었던","speaker":""},{"start":2823801,"end":2830801,"text":"ioc 컨테이너라는 걸 한번 생각을 해주시면 돼요. 그래서 우리 컨테이너는 커다란","speaker":""},{"start":2830801,"end":2838681,"text":"철제 상자, 이런 상자를 의미해요 라고 얘기했었죠. 그리고 이 상자 안에다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536311856,"relativeStart":2838675,"segments":[{"start":2838675,"end":2840035,"text":"각각의","speaker":""},{"start":2840035,"end":2843415,"text":"필요한 객체들을 자동으로 만들고","speaker":""},{"start":2843415,"end":2845615,"text":"필요하면은 가져다가 쓰고","speaker":""},{"start":2845615,"end":2847755,"text":"다시 상자에 넣을 수 있게끔","speaker":""},{"start":2847755,"end":2849815,"text":"만들어주는 게 컨테이너이요","speaker":""},{"start":2849815,"end":2850715,"text":"라고 얘기를 했었어요.","speaker":""},{"start":2850715,"end":2853275,"text":"그래서 지금처럼","speaker":""},{"start":2853275,"end":2854755,"text":"상자 안에 들어가 있는","speaker":""},{"start":2854755,"end":2855555,"text":"이러한","speaker":""},{"start":2855555,"end":2857915,"text":"각각의 객체들 있죠?","speaker":""},{"start":2857915,"end":2859435,"text":"이 객체들을","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536331835,"relativeStart":2859432,"segments":[{"start":2859432,"end":2862832,"text":"우리는 빈이라고 불러줄 수 있어요.","speaker":""},{"start":2862832,"end":2865672,"text":"여러분들이 알고 있는 그 빈, 콩 있죠? 콩?","speaker":""},{"start":2865672,"end":2867432,"text":"그 콩이라고 생각하시면 돼요.","speaker":""},{"start":2867432,"end":2870772,"text":"그래서 객체들을 여러 개 이렇게 담아두고","speaker":""},{"start":2870772,"end":2873372,"text":"필요할 때마다 가져다가","speaker":""},{"start":2873372,"end":2876792,"text":"하나씩 하나씩 꺼내서 쓸 수 있게 만들어주는 게","speaker":""},{"start":2876792,"end":2879452,"text":"IOC 컨테이너다라는 건데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536352826,"relativeStart":2879445,"segments":[{"start":2879445,"end":2885345,"text":"이때 여러분들이 만들어준 각각의 객체들, 클래스들을","speaker":""},{"start":2885345,"end":2890225,"text":"이 컨테이너 안에 있는 빈으로 사용하기 위해서는","speaker":""},{"start":2890225,"end":2894465,"text":"추가적인 어노테이션들을 붙여주셔야 돼요.","speaker":""},{"start":2894465,"end":2900145,"text":"그래서 기본적으로 비즈니스 로직을 담당해주는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536374842,"relativeStart":2900151,"segments":[{"start":2900151,"end":2904711,"text":"클래스한테는 이런 식으로 서비스라는","speaker":""},{"start":2904711,"end":2907151,"text":"어노테이션을 붙여주면 되고","speaker":""},{"start":2907151,"end":2912711,"text":"그리고 데이터베이스에 접근해서 데이터를 다루는 클래스에는","speaker":""},{"start":2912711,"end":2917191,"text":"우리가 리퍼지토리라는 어노테이션을 붙여주면 돼요.","speaker":""},{"start":2917191,"end":2922471,"text":"그리고 각각의 이러한 서비스나 리퍼지토리를","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536397870,"relativeStart":2922477,"segments":[{"start":2922477,"end":2931077,"text":"제어해주는 컨트롤 해주는 클래스에다가는 컨트롤러라는 어노테이션을 붙여주면 돼요.","speaker":""},{"start":2931077,"end":2936077,"text":"그래서 지금처럼 어노테이션을 붙이는 이러한 과정들은","speaker":""},{"start":2936077,"end":2944857,"text":"지금 만들어진 클래스는 우리 ioc 컨테이너에서 다루고자 하는 클래스들이야.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536419873,"relativeStart":2944853,"segments":[{"start":2944853,"end":2952853,"text":"그리고 각각의, 얘는 서비스, 얘는 레퍼지토리 데이터에 접근, 얘는 제어해주는 컨트롤러","speaker":""},{"start":2952853,"end":2956853,"text":"각각의 역할들을 구분해서 붙여주는 거죠","speaker":""},{"start":2956853,"end":2961853,"text":"그러면 Spring은 이 어노테이션이 붙은 컨트롤러들을 쭉 스캔해서","speaker":""},{"start":2961853,"end":2966933,"text":"어? 얘네는 어노테이션이 있네? 아 그럼 내가 자동으로 관리해줘야겠구나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536440885,"relativeStart":2966925,"segments":[{"start":2966925,"end":2972605,"text":"라고 판단하고 여기에 하나씩 하나씩 만들어서 넣어두는 거죠.","speaker":""},{"start":2972605,"end":2978585,"text":"그래서 얘가 바로 IOC 컨테이너가 돼요. 라고 보시면 돼요.","speaker":""},{"start":2978585,"end":2987865,"text":"그래서 이런 식으로 붙여주면 이 order 서비스라는 클래스는 앞으로 스프링이 자동으로 관리해줄 클래스.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536463934,"relativeStart":2987867,"segments":[{"start":2987867,"end":2993187,"text":"그리고 하나의 빈으로 등록된다라고 볼 수 있다는 거죠.","speaker":""},{"start":2993187,"end":2998747,"text":"그럼 일단은 여기까지 우리 IOC 컨테이너라는 것과","speaker":""},{"start":2998747,"end":3007027,"text":"우리 어노테이션이 붙어있는 클래스들은 빈이라고 불러주는 개념이 돼서","speaker":""},{"start":3007027,"end":3011087,"text":"이 컨테이너 안에 하나씩 차곡차곡 들어간다는 여기까지 내용","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536494895,"relativeStart":3011087,"segments":[{"start":3011087,"end":3012427,"text":"이해하실 수 있을까요?","speaker":""},{"start":3012427,"end":3016267,"text":"이해되시는 분들은 엄지 한 번씩 눌러주세요.","speaker":""},{"start":3016267,"end":3023507,"text":"일단은 여기까지.","speaker":""},{"start":3023507,"end":3027187,"text":"우리 이론적인 부분이라서 조금은 어려우실 수 있어요.","speaker":""},{"start":3027187,"end":3029567,"text":"원래 개발은 손으로 작성을 해야 되는데","speaker":""},{"start":3029567,"end":3034547,"text":"일단 여기까지는 여러분들이 잘 이해해 주신 것 같아요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536515900,"relativeStart":3034544,"segments":[{"start":3034544,"end":3036924,"text":"비록 슬픔이가 조금 있기는 하지만","speaker":""},{"start":3036924,"end":3041604,"text":"그래서 일단 IOC는 여기까지 한번 다뤄봤고","speaker":""},{"start":3041604,"end":3044544,"text":"이후 우리 DI, 의존성 주입도","speaker":""},{"start":3044544,"end":3046304,"text":"간략하게 조금만 알아보도록 할게요","speaker":""},{"start":3046304,"end":3049704,"text":"그래서 DI, 이거 한","speaker":""},{"start":3049704,"end":3052844,"text":"벌써 지금 1시간 정도밖에 안 됐는데","speaker":""},{"start":3052844,"end":3054763,"text":"DI 거의 3, 4번 얘기하죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536535607,"relativeStart":3054760,"segments":[{"start":3054760,"end":3057020,"text":"그만큼 조금은 중요하고","speaker":""},{"start":3057020,"end":3059600,"text":"이걸 스프링이 대신해줌으로써","speaker":""},{"start":3059600,"end":3061040,"text":"아주 편리해지기 때문에","speaker":""},{"start":3061040,"end":3062640,"text":"계속 계속 얘기를 하게 되는 거예요.","speaker":""},{"start":3062640,"end":3065480,"text":"그래서 일단은 여기","speaker":""},{"start":3065480,"end":3067140,"text":"기존에 작성했던 코드","speaker":""},{"start":3067140,"end":3068980,"text":"제가 한번 설명했었던 코드죠.","speaker":""},{"start":3068980,"end":3071380,"text":"그래서 이 코드를","speaker":""},{"start":3071380,"end":3073940,"text":"스프링이 담당을 하게 되면","speaker":""},{"start":3073940,"end":3075520,"text":"여기","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536558889,"relativeStart":3075516,"segments":[{"start":3075516,"end":3079276,"text":"생성자에다가 어떤 구현체를 사용을 할 거야","speaker":""},{"start":3079276,"end":3081556,"text":"라고 넘겨주는 과정이 있었죠","speaker":""},{"start":3081556,"end":3084316,"text":"New 카카오페이 이런 거","speaker":""},{"start":3084316,"end":3088696,"text":"이런 거를 따로 신경 쓰지 않아도 돼요 라는 거죠","speaker":""},{"start":3088696,"end":3092516,"text":"그래서 이 인터페이스 변수가","speaker":""},{"start":3092516,"end":3097756,"text":"어떤 구현체에 의존할지를 지정해 주지 않아도 된다는 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536580924,"relativeStart":3097757,"segments":[{"start":3097757,"end":3101997,"text":"그래서 의존성을 직접 만들지 않는다는 게","speaker":""},{"start":3101997,"end":3105197,"text":"지금처럼 뉴를 따로 생성하지 않고","speaker":""},{"start":3105197,"end":3110257,"text":"외부, 스프링으로부터 알아서 이렇게 받는 거죠","speaker":""},{"start":3110257,"end":3116117,"text":"그리고 이때 받는 게 빈이라고 보시면 돼요","speaker":""},{"start":3116117,"end":3120277,"text":"스프링 컨테이너, IOC 컨테이너가 가지고 있는 빈들 중에서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536601904,"relativeStart":3120269,"segments":[{"start":3120269,"end":3121209,"text":"여기에","speaker":""},{"start":3121209,"end":3124209,"text":"대입할 수 있는 걸","speaker":""},{"start":3124209,"end":3125808,"text":"스프링이 알아서 찾아서","speaker":""},{"start":3125808,"end":3127269,"text":"이렇게 넘겨주는 거예요.","speaker":""},{"start":3127269,"end":3130048,"text":"그리고 이때는","speaker":""},{"start":3130048,"end":3132269,"text":"생성자를 통해서 주입을 받아요.","speaker":""},{"start":3132269,"end":3134389,"text":"외부에서 생성자에다가","speaker":""},{"start":3134389,"end":3136068,"text":"넘겨주면서 값을","speaker":""},{"start":3136068,"end":3137369,"text":"주입을 시켜주는 거고","speaker":""},{"start":3137369,"end":3139548,"text":"그리고 중요한 거","speaker":""},{"start":3139548,"end":3141529,"text":"이런","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536622902,"relativeStart":3141531,"segments":[{"start":3141531,"end":3143991,"text":"외부에서부터 주입을 받기 위한","speaker":""},{"start":3143991,"end":3145491,"text":"필드의 경우는","speaker":""},{"start":3145491,"end":3147611,"text":"파이널 필드를 사용을 해주셔야 돼요.","speaker":""},{"start":3147611,"end":3149371,"text":"프라이빗은","speaker":""},{"start":3149371,"end":3151951,"text":"당연히 접근이 불가능하게 만들기 위해","speaker":""},{"start":3151951,"end":3152931,"text":"붙이는 거고","speaker":""},{"start":3152931,"end":3155651,"text":"파이널의 경우는 말 그대로","speaker":""},{"start":3155651,"end":3158071,"text":"처음 의존성이 주입이 됐다면","speaker":""},{"start":3158071,"end":3159771,"text":"그 의존성이 이후","speaker":""},{"start":3159771,"end":3162051,"text":"누군가에게 혹은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536644932,"relativeStart":3162051,"segments":[{"start":3162051,"end":3168731,"text":"실제 개발하는 개발자한테서도 변경되지 않게끔 파이널로 지정을 해주셔야 된다는 거예요.","speaker":""},{"start":3168731,"end":3173531,"text":"그래야지만 의존성이 안정적으로 유지될 수 있다는 거죠.","speaker":""},{"start":3173531,"end":3179731,"text":"만약 처음에 스프링이 나 카카오페이로 의존성 알아서 주입을 시켜줬는데","speaker":""},{"start":3179731,"end":3184271,"text":"개발자가 코드를 작성을 하다가 실수로 정말 의도치 않게","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536666936,"relativeStart":3184275,"segments":[{"start":3184275,"end":3188655,"text":"네이버 페이로 구현체를 바꿨대요.","speaker":""},{"start":3188655,"end":3192075,"text":"그러면 스프링의 입장에서는","speaker":""},{"start":3192075,"end":3195795,"text":"'아니 나는 카카오페이로 해서 로직 쭉 진행하고 있는데","speaker":""},{"start":3195795,"end":3197915,"text":"중간에 바꿔버렸네'라고 하면","speaker":""},{"start":3197915,"end":3202195,"text":"자동화하는 과정에서 무언가 엄청나게 꼬일 수가 있겠죠.","speaker":""},{"start":3202195,"end":3206255,"text":"그렇기 때문에 이러한 불상사가 발생하지 않게끔","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536687941,"relativeStart":3206247,"segments":[{"start":3206247,"end":3213147,"text":"처음부터 그냥 파이널로 작성을 해서 변경 자체를 막아버리게 해준다는 거예요.","speaker":""},{"start":3213147,"end":3219707,"text":"그래서 반드시 private final 필드를 갖고 있게끔 만들어줘야 돼요.","speaker":""},{"start":3219707,"end":3226647,"text":"라는 건데 이때 의존성을 주입할 수 있는 방식이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536714808,"relativeStart":3226649,"segments":[{"start":3226649,"end":3228249,"text":"두 가지가 있기는 해요.","speaker":""},{"start":3228249,"end":3232989,"text":"그래서 어떤 방식이 있는지 같이 한번 알아보도록 하면","speaker":""},{"start":3232989,"end":3237629,"text":"일단은 여기 자동주입하는 거 지금 이미 설명한 거예요.","speaker":""},{"start":3237629,"end":3241009,"text":"이전 슬라이드에서 여기 건너뛰어서","speaker":""},{"start":3241009,"end":3245149,"text":"여기 생성자 주입 방식에 대해서 한번 알아보도록 할 거예요.","speaker":""},{"start":3245149,"end":3249568,"text":"그래서 방식은 여러 가지 방식들이 있기는 해요.","speaker":""},{"start":3249568,"end":3254408,"text":"크게 다룬다면 한 세 가지 혹은 네 가지 방식들이 있는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536735800,"relativeStart":3254408,"segments":[{"start":3254408,"end":3260408,"text":"우리는 그중에 생성자 주입 방식을 가장 많이 사용하고","speaker":""},{"start":3260408,"end":3266408,"text":"얘가 실제 개발 실무에서도 가장 흔히 권장되는 방식이에요.","speaker":""},{"start":3266408,"end":3271408,"text":"그래서 생성자 주입은 사실 우리가 기존에 진행하는 거예요.","speaker":""},{"start":3271408,"end":3275448,"text":"그냥 생성자 하나를 작성을 해두고 이 생성자에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536757809,"relativeStart":3275451,"segments":[{"start":3275451,"end":3280451,"text":"매개변수에다가 주입하고자 하는 구현체를 넣어놓아요.","speaker":""},{"start":3280451,"end":3288251,"text":"그러면 생성자 내부에서 어떤 구현체를 사용할 건지 지정해주는 방식이 된다는 거죠.","speaker":""},{"start":3288251,"end":3296831,"text":"그래서 우리가 기존에 사용하던 방식이 생성자 주입 방식이라고 보시면 되고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536778819,"relativeStart":3296832,"segments":[{"start":3296832,"end":3302992,"text":"그 외에 또 선택할 수 있는 한 가지가 바로 생성자 없이","speaker":""},{"start":3302992,"end":3306372,"text":"그냥 필드를 하나를 작성을 해두고","speaker":""},{"start":3306372,"end":3309372,"text":"여기다가 AutoWired를 붙여주게 되면","speaker":""},{"start":3309372,"end":3313592,"text":"그때는 어? 스프링이 판단하고","speaker":""},{"start":3313592,"end":3318092,"text":"아 여기 AutoWired니까 이 Auto는 자동으로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536800815,"relativeStart":3318094,"segments":[{"start":3318094,"end":3322094,"text":"와이어, 철선을 얘기하죠.","speaker":""},{"start":3322094,"end":3325334,"text":"그래서 자동으로 연결해줘야 되겠네.","speaker":""},{"start":3325334,"end":3332094,"text":"그러니 여기에다가 외부, IOC 컨테이너에 있는 빈들 중에서","speaker":""},{"start":3332094,"end":3337094,"text":"주입할 수 있는 걸 찾아서 주입시켜주는 게 가능하다는 거예요.","speaker":""},{"start":3337094,"end":3339654,"text":"즉, 이렇게 해줘도","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536822847,"relativeStart":3339660,"segments":[{"start":3339660,"end":3342180,"text":"알아서 의존성 주입이 된다는 거죠.","speaker":""},{"start":3342180,"end":3348700,"text":"그런데 얘를 권장하지 않는 이유는 생성자를 통해 진행하는 게 아니다 보니까","speaker":""},{"start":3348700,"end":3351300,"text":"파이널이 사용이 안 돼요.","speaker":""},{"start":3351300,"end":3356620,"text":"왜냐하면 객체는 이미 한 번 만들어졌고","speaker":""},{"start":3356620,"end":3361860,"text":"그리고 만들어진 이후에 외부에서 접근해 수정하는 거라","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536842817,"relativeStart":3361851,"segments":[{"start":3361851,"end":3365251,"text":"파이널 키워드가 적용이 되지 않는다는 거죠.","speaker":""},{"start":3365251,"end":3370091,"text":"그리고 조금 어렵게 내용을 볼 수 있는데","speaker":""},{"start":3370091,"end":3373191,"text":"순한 의존성을 런타임에서야 발견.","speaker":""},{"start":3373191,"end":3376591,"text":"이거는 내용이 조금 어려워서 조금 풀어야게 하면","speaker":""},{"start":3376591,"end":3382451,"text":"컴파일 단계, 예를 들어 Shift+F10 누르면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536863805,"relativeStart":3382455,"segments":[{"start":3382455,"end":3383975,"text":"실행할 수 있었죠.","speaker":""},{"start":3383975,"end":3387095,"text":"근데 실행 단계에서 확인하는 게 아니라","speaker":""},{"start":3387095,"end":3389835,"text":"아무 문제 없는 것처럼 실행이 되다가","speaker":""},{"start":3389835,"end":3392455,"text":"중간에 프로그램이 터져버린다는 거예요.","speaker":""},{"start":3392455,"end":3397615,"text":"그러면 처음부터 우리가 처음 테스트 단계에서는","speaker":""},{"start":3397615,"end":3399815,"text":"내용을 확인하기가 쉽지가 않겠죠.","speaker":""},{"start":3399815,"end":3403115,"text":"그렇기 때문에 실제 돌아가다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536886844,"relativeStart":3403110,"segments":[{"start":3403110,"end":3409510,"text":"중간에야 발견이 돼서 치명적인 오류가 될 수도 있다는 거고","speaker":""},{"start":3409510,"end":3415910,"text":"그리고 마지막으로 의존관계가 코드만 봐서는 명확하지 않다는 거예요.","speaker":""},{"start":3415910,"end":3419110,"text":"그래서 이러한 생성자로 작성이 되어 있으면","speaker":""},{"start":3419110,"end":3423350,"text":"'아, 어떤 식으로 주입을 하는 거구나'라는 걸 파악할 수 있지만","speaker":""},{"start":3423350,"end":3425670,"text":"그냥 필드만 떡하니 있으면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536908849,"relativeStart":3425655,"segments":[{"start":3425655,"end":3431115,"text":"얘는 지금 어떻게 주입하는 거지? 라는 거 쉽게 파악이 되지는 않는다는 거예요.","speaker":""},{"start":3431115,"end":3437075,"text":"그래서 여러분들은 오른쪽 방식, 이거 조금은 이해가 잘 안 돼요.","speaker":""},{"start":3437075,"end":3439815,"text":"라고 하더라도 큰 문제는 없는 게","speaker":""},{"start":3439815,"end":3443855,"text":"어차피 여기 생성자를 하나를 만들어두고","speaker":""},{"start":3443855,"end":3447855,"text":"기존에 사용하던 것처럼 필드를 통해서 넘겨받아","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536930870,"relativeStart":3447846,"segments":[{"start":3447846,"end":3455706,"text":"그대로 필드에 저장, 의존성을 주입시켜주는 이 방식을 사용하면 된다라고만 보셔도 되기 때문이에요.","speaker":""},{"start":3455706,"end":3461226,"text":"물론 이후에 우리가 직접 코드 작성해가면서 다시 한번 이해하도록 할 거예요.","speaker":""},{"start":3461226,"end":3465606,"text":"그래서 일단은 여기까지 내용을 정리할 수 있으며","speaker":""},{"start":3465606,"end":3469786,"text":"지금의 계속 얘기하는 DI, 의존성 주입을 한 줄 요약하면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536950852,"relativeStart":3469784,"segments":[{"start":3469784,"end":3477884,"text":"자바에서는 직접 손으로 작성을 해줘야 했던 걸 이제는 스프링이 알아서 진행할 수 있게끔 만들어주는 거고","speaker":""},{"start":3477884,"end":3483884,"text":"이 과정을 보면 메인에서 New Cacao 페이 지정해줘야 했었지만","speaker":""},{"start":3483884,"end":3490144,"text":"이거를 그냥 스프링 방식에서는 서비스라는 어노테이션만 붙이고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536971843,"relativeStart":3490135,"segments":[{"start":3490135,"end":3493115,"text":"오토와이어즈 어노테이션만 있으면","speaker":""},{"start":3493115,"end":3495855,"text":"여기 생성자를 통해","speaker":""},{"start":3495855,"end":3497975,"text":"알아서 지정해주지","speaker":""},{"start":3497975,"end":3499455,"text":"않아도 돼요","speaker":""},{"start":3499455,"end":3499955,"text":"라는 거죠","speaker":""},{"start":3499955,"end":3502935,"text":"그렇기 때문에 우리는","speaker":""},{"start":3502935,"end":3505455,"text":"무엇을 만들지에 대한 로직에만","speaker":""},{"start":3505455,"end":3507895,"text":"집중해주시면 된다는 거예요","speaker":""},{"start":3507895,"end":3511095,"text":"그래서 여기까지가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780536993335,"relativeStart":3511094,"segments":[{"start":3511094,"end":3514154,"text":"DI에 대한 의존성 주입에 대한","speaker":""},{"start":3514154,"end":3515934,"text":"개점이 될 거예요.","speaker":""},{"start":3515934,"end":3519334,"text":"자 그러면 여기까지 의존성 주입","speaker":""},{"start":3519334,"end":3520874,"text":"대략적으로 이해할 수 있을까요?","speaker":""},{"start":3520874,"end":3524794,"text":"이거는 여러분들 나중에 코드로 다시 한번 작성하면서","speaker":""},{"start":3524794,"end":3527154,"text":"이해할 수 있기는 해요.","speaker":""},{"start":3527154,"end":3532054,"text":"이해되시는 분들은 엄지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537017154,"relativeStart":3532052,"segments":[{"start":3532052,"end":3533392,"text":"아니신 분들은 슬픔이","speaker":""},{"start":3533392,"end":3536912,"text":"놀람이도 있기는 하죠","speaker":""},{"start":3536912,"end":3539112,"text":"근데 여러분들","speaker":""},{"start":3539112,"end":3542192,"text":"일단은 슬픔이가 많기는 한데","speaker":""},{"start":3542192,"end":3543352,"text":"제가 얘기했던 것처럼","speaker":""},{"start":3543352,"end":3544692,"text":"이거 지금 당장","speaker":""},{"start":3544692,"end":3547552,"text":"우리 첫 시간부터 다 이해하고 넘어갈 필요는 없어요","speaker":""},{"start":3547552,"end":3549352,"text":"그냥 스프링이","speaker":""},{"start":3549352,"end":3551992,"text":"이런 부분이 있구나라는 것만","speaker":""},{"start":3551992,"end":3553652,"text":"이해하셔도 된다는 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537039182,"relativeStart":3553652,"segments":[{"start":3553652,"end":3561652,"text":"왜냐? 나중에 코드로 작성하면서 우리가 따로 막 생각하지 않아도 그냥 알아서 알아서 다 돼요.","speaker":""},{"start":3561652,"end":3569652,"text":"그러다 보니까 이 원리를 다 이해할 필요는 없지만 그래도 알고 있으면 좋은 개념이라서 설명을 드리는 거예요.","speaker":""},{"start":3569652,"end":3575652,"text":"실제로 코드 작성하다 보면 우리 전에도 막 이론만 들었을 때는 슬픔이가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537058883,"relativeStart":3575657,"segments":[{"start":3575657,"end":3577757,"text":"팍 올라오다가 실제 실습","speaker":""},{"start":3577757,"end":3578897,"text":"뭐 하나 두 개 해보니까","speaker":""},{"start":3578897,"end":3581197,"text":"슬픔이들이 이제 막 따봉으로 바뀌면서","speaker":""},{"start":3581197,"end":3582537,"text":"이해되는 경우들이 많았죠.","speaker":""},{"start":3582537,"end":3584857,"text":"그래서 지금은 백엔드도 똑같아요.","speaker":""},{"start":3584857,"end":3588017,"text":"머리로만 이해하지 말고 손으로 작성하다 보면","speaker":""},{"start":3588017,"end":3589417,"text":"자연스럽게 이해가 될 거예요.","speaker":""},{"start":3589417,"end":3592257,"text":"그래서 일단은 여기까지 하면","speaker":""},{"start":3592257,"end":3593837,"text":"우리 계속 나오던","speaker":""},{"start":3593837,"end":3595777,"text":"DI 일단은 한 번","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537079103,"relativeStart":3595772,"segments":[{"start":3595772,"end":3599772,"text":"정리를 해볼 수가 있을 거예요.","speaker":""},{"start":3599772,"end":3602712,"text":"자, 그래서 여기까지 한번 진행하고","speaker":""},{"start":3602712,"end":3605452,"text":"추가로 우리가 조금은 알아볼 수가 있는 게","speaker":""},{"start":3605452,"end":3607392,"text":"아까 제가 얘기했었던","speaker":""},{"start":3607392,"end":3610452,"text":"우리 이 annotation 있죠?","speaker":""},{"start":3610452,"end":3612652,"text":"그래서 이 annotation의 종류를","speaker":""},{"start":3612652,"end":3615452,"text":"최종적으로 한번 정리를 시켜두면","speaker":""},{"start":3615452,"end":3616352,"text":"기본적으로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537111368,"relativeStart":3616360,"segments":[{"start":3616360,"end":3619680,"text":"사용할 수 있는 게 컴포넌트 어노테이션이에요.","speaker":""},{"start":3619680,"end":3622800,"text":"그래서 얘를 붙여주면","speaker":""},{"start":3622800,"end":3625740,"text":"특정 클래스, 유틸리티라는 클래스가 있으면","speaker":""},{"start":3625740,"end":3628420,"text":"이 클래스를 빈으로 만들어주세요.","speaker":""},{"start":3628420,"end":3631440,"text":"라는 의미의 어노테이션이 돼요.","speaker":""},{"start":3631440,"end":3636360,"text":"그리고 두 번째 서비스 어노테이션의 경우는","speaker":""},{"start":3636360,"end":3640300,"text":"서비스 어노테이션이 붙은 이 클래스는","speaker":""},{"start":3640300,"end":3644400,"text":"실제로 무언가의 비즈니스 로직, 무언가 요청이 들어온다면","speaker":""},{"start":3644400,"end":3648260,"text":"실제 그 요청을 어떤 식으로 처리할지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537133129,"relativeStart":3648254,"segments":[{"start":3648254,"end":3650294,"text":"로직을 작성하는 클래스예요.","speaker":""},{"start":3650294,"end":3652634,"text":"라는 걸 명시해주는 게","speaker":""},{"start":3652634,"end":3654834,"text":"바로 서비스 어노테이션이요.","speaker":""},{"start":3654834,"end":3657374,"text":"실제 요청을 어떻게 처리할지","speaker":""},{"start":3657374,"end":3658374,"text":"예를 들어","speaker":""},{"start":3658374,"end":3660694,"text":"천원 결제가 들어오면","speaker":""},{"start":3660694,"end":3661754,"text":"이 결제에 대해서","speaker":""},{"start":3661754,"end":3663734,"text":"어떻게 어떻게 처리를 하고","speaker":""},{"start":3663734,"end":3665874,"text":"어떤 조건들을 거쳐서 검증하고","speaker":""},{"start":3665874,"end":3668154,"text":"실제 결제 과정이 어떻게 되는지","speaker":""},{"start":3668154,"end":3670194,"text":"이런 로직들을 처리하는 게","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537154114,"relativeStart":3670191,"segments":[{"start":3670191,"end":3671771,"text":"서비스 어노테이션","speaker":""},{"start":3671771,"end":3673411,"text":"그리고","speaker":""},{"start":3673411,"end":3674931,"text":"레퍼스토리는","speaker":""},{"start":3674931,"end":3677811,"text":"아까 제가 얘기했었던 DB 있죠","speaker":""},{"start":3677811,"end":3678911,"text":"데이터베이스","speaker":""},{"start":3678911,"end":3681211,"text":"데이터베이스에다가","speaker":""},{"start":3681211,"end":3683611,"text":"데이터들을 요청을 하면","speaker":""},{"start":3683611,"end":3685971,"text":"이런 로직을 처리하는 과정에서","speaker":""},{"start":3685971,"end":3689631,"text":"들어오는 데이터를 저장해서","speaker":""},{"start":3689631,"end":3691251,"text":"새로운 데이터를 만들거나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537175101,"relativeStart":3691251,"segments":[{"start":3691251,"end":3699551,"text":"아니면 기존에 가지고 있던 데이터를 가지고 와서 사용할 수 있게 만들어주는 게 이 리포지토리 어노테이션이에요.","speaker":""},{"start":3699551,"end":3706791,"text":"그리고 컨트롤러는 말 그대로 중앙 관제탑이라고 보시면 돼요.","speaker":""},{"start":3706791,"end":3709131,"text":"전체적으로 컨트롤, 제어를 해주는 거죠.","speaker":""},{"start":3709131,"end":3711811,"text":"그래서 특정 요청이 들어왔을 때","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537196112,"relativeStart":3711805,"segments":[{"start":3711805,"end":3716485,"text":"HTTP 요청은 클라이언트로부터의 요청이 될 거예요.","speaker":""},{"start":3716485,"end":3719605,"text":"그래서 클라이언트로부터 요청이 들어오면","speaker":""},{"start":3719605,"end":3723525,"text":"이 요청이 어떤 서비스를 실행을 해야 되네?","speaker":""},{"start":3723525,"end":3727605,"text":"라고 판단해서 그 서비스 로직을 호출하거나","speaker":""},{"start":3727605,"end":3732665,"text":"아니면 특정 데이터가 새롭게 만들어져야 되네?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537219147,"relativeStart":3732662,"segments":[{"start":3732662,"end":3736362,"text":"그러면 레퍼지토리를 통해서 뭔가 만들거나","speaker":""},{"start":3736362,"end":3741102,"text":"이러한 과정들, 상황에 맞게끔 누구를 호출해야 되는지","speaker":""},{"start":3741102,"end":3746342,"text":"관제탑처럼 보고 있다고 호출해 두는 게 컨트롤러라고 보시면 돼요.","speaker":""},{"start":3746342,"end":3751902,"text":"물론 얘네도 우리 나중에 다 직접 사용을 하면서 다시 한번 설명드릴 거예요.","speaker":""},{"start":3751902,"end":3755702,"text":"그래서 흔하게 사용하는 어노테이션은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537241147,"relativeStart":3755697,"segments":[{"start":3755697,"end":3758297,"text":"이렇게 4개가 존재해요.","speaker":""},{"start":3758297,"end":3760137,"text":"라고 보시면 되고","speaker":""},{"start":3760137,"end":3762057,"text":"기본적으로","speaker":""},{"start":3762057,"end":3763637,"text":"컴포넌트뿐만 아니라","speaker":""},{"start":3763637,"end":3766097,"text":"서비스, 리포지토리, 컨트롤러","speaker":""},{"start":3766097,"end":3767137,"text":"모두 다","speaker":""},{"start":3767137,"end":3769957,"text":"빈으로 만들어주는 기능은 동일해요.","speaker":""},{"start":3769957,"end":3771637,"text":"그래서 여기 보면","speaker":""},{"start":3771637,"end":3774037,"text":"기능적으로는 모두 컴포넌트와","speaker":""},{"start":3774037,"end":3775057,"text":"동일하다는 거죠.","speaker":""},{"start":3775057,"end":3777657,"text":"오더 서비스 클래스나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537261132,"relativeStart":3777651,"segments":[{"start":3777651,"end":3781711,"text":"붕 레퍼시토리나 붕 컨트롤러 모두 다 빈으로 등록되는 거예요.","speaker":""},{"start":3781711,"end":3786791,"text":"하지만 제가 얘기한 것처럼 그냥 다 컴포넌트만 붙어버리면","speaker":""},{"start":3786791,"end":3791191,"text":"이게 지금 어떤 클래스인지 구분하기가 쉽지가 않겠죠.","speaker":""},{"start":3791191,"end":3798391,"text":"그렇기 때문에 가독성 측면 그리고 역할 구분을 위해서 따로 분리를 해준 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537282126,"relativeStart":3798390,"segments":[{"start":3798390,"end":3800390,"text":"라고 보시면 된다는 거죠.","speaker":""},{"start":3800390,"end":3805390,"text":"그래서 여기까지가 주로 사용할 어노테이션이 될 거고","speaker":""},{"start":3805390,"end":3810390,"text":"그러면 지금 다룬 내용들을 간략하게 정리를 해보면","speaker":""},{"start":3810390,"end":3814390,"text":"자, 스프링 컨테이너가 하나가 존재하고","speaker":""},{"start":3814390,"end":3819270,"text":"여기에 우리가 각 어노테이션을 붙여준 이러한 내용들이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537303107,"relativeStart":3819265,"segments":[{"start":3819265,"end":3823825,"text":"하나의 빈이 되어서 컨테이너가 관리할 수 있게끔 되요 라고 했죠.","speaker":""},{"start":3823825,"end":3832005,"text":"그리고 이 빈들을 가져다가 우리는 자동주입, 의존성 주입까지도","speaker":""},{"start":3832005,"end":3834345,"text":"알아서 진행해주는 게 가능하다는 거죠.","speaker":""},{"start":3834345,"end":3840425,"text":"그래서 결국 개발자는 이 빈들을 우리도 모르게 사용을 하게 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537323079,"relativeStart":3840426,"segments":[{"start":3840426,"end":3841426,"text":"자동으로.","speaker":""},{"start":3841426,"end":3844626,"text":"그리고 이때 얘기하는 키워드","speaker":""},{"start":3844626,"end":3847326,"text":"iocdi 그리고 빈.","speaker":""},{"start":3847326,"end":3850926,"text":"빈은 컨테이너가 관리하는 객체라고 얘기했죠.","speaker":""},{"start":3850926,"end":3851726,"text":"클래스.","speaker":""},{"start":3851726,"end":3854126,"text":"그래서 여기까지 진행을 하면","speaker":""},{"start":3854126,"end":3858226,"text":"기본적인 스프링 프레임워크의 핵심을 알아볼 수 있어요.","speaker":""},{"start":3858226,"end":3860446,"text":"근데 제가 얘기했던 것처럼","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537344076,"relativeStart":3860440,"segments":[{"start":3860440,"end":3873440,"text":"여러분들 만약 옛날 시대였으면 이거 더 깊이 들어가서 어떻게 비늘 만들어주고 어떻게 스프링 관리해주는지 이거 다 이해했어야 했는데 지금은 이해할 필요 없다고 했죠.","speaker":""},{"start":3873440,"end":3881460,"text":"그래서 정말 함축 함축 함축한 내용이 지금의 내용이 될 거예요. 그래서 이 정도만","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537367375,"relativeStart":3881466,"segments":[{"start":3881466,"end":3883706,"text":"대략적으로 이해를 해도","speaker":""},{"start":3883706,"end":3887346,"text":"스프링 부트를 통해 사용하는 게 가능하다라고 얘기하는 거죠.","speaker":""},{"start":3887346,"end":3889446,"text":"자, 그럼 여기까지 내용","speaker":""},{"start":3889446,"end":3892886,"text":"잠시만요. 질문에 대한 내용이 있죠.","speaker":""},{"start":3892886,"end":3896986,"text":"어노테이션을 잘못 작성하면 프로그램 실행에 문제가 생기나요?","speaker":""},{"start":3896986,"end":3898066,"text":"라고 해주셨어요.","speaker":""},{"start":3898066,"end":3900966,"text":"그러면 예를 들어","speaker":""},{"start":3900966,"end":3903786,"text":"잠시만요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537392717,"relativeStart":3903775,"segments":[{"start":3903775,"end":3908955,"text":"예를 들어 여기 앞에 북서비스가 있으면","speaker":""},{"start":3908955,"end":3912335,"text":"예를 들어 북서비스가 아니라 컨트롤러","speaker":""},{"start":3912335,"end":3916015,"text":"이런 식으로 붙이면 어떻게 되나요?","speaker":""},{"start":3916015,"end":3919515,"text":"라고 볼 수 있는 걸까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537425233,"relativeStart":3919513,"segments":[{"start":3919513,"end":3923013,"text":"그쵸? 제가 얘기한 이 내용이 맞는 것 같죠?","speaker":""},{"start":3923013,"end":3931513,"text":"그래서 지금처럼 서비스 클래스에 대해 만약 어노테이션을 컨트롤러 혹은 레파지토리 이렇게 붙여도","speaker":""},{"start":3931513,"end":3934213,"text":"얘기한 것처럼 동작 자체는 돼요.","speaker":""},{"start":3934213,"end":3939213,"text":"왜냐하면 어차피 빈을 만들어주는 건 동일하다고 얘기했었죠?","speaker":""},{"start":3939213,"end":3943673,"text":"그래서 에러가 발생하지는 않고 동작은 되기는 해요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537447242,"relativeStart":3943667,"segments":[{"start":3943667,"end":3954767,"text":"그런데 이렇게 작성을 하게 되면 나중에 스프링한테 내용을 알려준 것 자체가 거짓이 돼버려요","speaker":""},{"start":3954767,"end":3965967,"text":"그래서 스프링은 예를 보고 로직을 가지고 있는 거냐 라고 생각해야 되지만 컨트롤러가 붙어버리는 순간 하나의 관제탑으로 인식을 해버린다는 거죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537468239,"relativeStart":3965959,"segments":[{"start":3965959,"end":3976639,"text":"그렇기 때문에 거짓말을 하게 되는 것이므로 나중에 유지보수 과정 자체, 유지보수 측면에서 큰 문제가 발생할 수 있어요.","speaker":""},{"start":3976639,"end":3986659,"text":"실제로 사람도 어노테이션만 보고 판단할 텐데 이 어노테이션을 보고'어? 왜 매칭이 안 되지?' 라고 이해 못하는 경우들이 생길 수가 있겠죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537488462,"relativeStart":3986648,"segments":[{"start":3986648,"end":3995128,"text":"이후 지금 당장 눈에 보이지는 않지만 중간중간에 다른 문제가 발생할 가능성들이 내포되게 돼요.","speaker":""},{"start":3995128,"end":3999928,"text":"그렇기 때문에 어노테이션은 반드시 맞춰주셔야 된다.","speaker":""},{"start":3999928,"end":4006788,"text":"지금 당장은 잘 돌아가는 것처럼 보이지만 잠재적인 여러 문제들이 발생해서 맞춰주셔야 된다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537511249,"relativeStart":4006797,"segments":[{"start":4006797,"end":4012937,"text":"라고 보시면 될 것 같아요. 이해 되셨을까요? 답변해주시면 되었을까요?","speaker":""},{"start":4012937,"end":4018457,"text":"그쵸. 제가 얘기한 내용을 오히려 한 줄로 잘 정리를 해주셨어요.","speaker":""},{"start":4018457,"end":4023857,"text":"런타임 오류. 우리가 실행 도중에 프로그램 동작 도중에 발생할 수 있는 오류","speaker":""},{"start":4023857,"end":4029477,"text":"그리고 개발자가 봤을 때 얘가 어떤 역할이구나라고 할 수 있는 개발자 가독성.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537541716,"relativeStart":4029629,"segments":[{"start":4029629,"end":4032569,"text":"이 두 가지를 중점적으로 이해해보시면 좋을 것 같아요.","speaker":""},{"start":4032569,"end":4037429,"text":"네. 일단은 추가적인 질문이 있어서","speaker":""},{"start":4037429,"end":4040509,"text":"질문에 대해서는 다들 알고 있으면 좋을 것 같아","speaker":""},{"start":4040509,"end":4042149,"text":"바로 반반 답변을 드렸어요.","speaker":""},{"start":4042149,"end":4046049,"text":"자 그러면 여기까지 내용 다들 이해되셨을까요?","speaker":""},{"start":4046049,"end":4047849,"text":"우리 엄지 한번 눌러서 확인해볼게요.","speaker":""},{"start":4047849,"end":4055889,"text":"여전히 슬픔이 있긴 해요. 놀랍이도 있고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537565783,"relativeStart":4055886,"segments":[{"start":4055886,"end":4064486,"text":"자 그러면 일단은 계속 얘기하지만 사실 스프링 프레임워크 전부 다 이해할 필요 없다고 했어요","speaker":""},{"start":4064486,"end":4067086,"text":"이거는 제가 거짓말 아니에요","speaker":""},{"start":4067086,"end":4077346,"text":"여러분들 그동안\"아 여러분들 쉬워요\" 이전 거 했는데\"지금 다음 거는 쉬워요\" 라고 하면서 조금 선의의 거짓말들을 해오긴 했는데 지금은 거짓말 아니에요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537588809,"relativeStart":4077351,"segments":[{"start":4077351,"end":4082071,"text":"진짜 스프링 부트 쓰다보면 이런 거 다 생각이 안 날 수도 있을 만큼","speaker":""},{"start":4082071,"end":4084111,"text":"합해된 내용이 될 거예요.","speaker":""},{"start":4084111,"end":4088431,"text":"그래서 이제 본격적으로 스프링 프레임워크 알아봤으니까","speaker":""},{"start":4088431,"end":4092611,"text":"스프링 부트를 사용하는 과정을 진행해보도록 할게요.","speaker":""},{"start":4092611,"end":4097651,"text":"그러기 위해서는 이 스프링 부트에 대해서 간단하게","speaker":""},{"start":4097651,"end":4099951,"text":"개요를 조금만 알아보도록 할 건데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537610837,"relativeStart":4099947,"segments":[{"start":4099947,"end":4106887,"text":"일단 앞에 화면을 보면 제가 스프링 프레임워크와 스프링 부트는 다른 거라고 얘기했죠.","speaker":""},{"start":4106887,"end":4113847,"text":"그래서 스프링 프레임워크는 정말 스프링에 대한 기본적인 개념들을 모두 다 담고 있는 거예요.","speaker":""},{"start":4113847,"end":4121867,"text":"그런데 옛날 세대에 2000년대 세대에 스프링이라는 개념을 가져다 쓰려면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537630787,"relativeStart":4121867,"segments":[{"start":4121867,"end":4134867,"text":"설정하는 과정들 자체가 엄청나게 복잡해요. 아까 제가 얘기하기로 웹이라는 모듈도 있고 그리고 데이터라는 모듈도 있고 그리고 세큐리티라는 모듈도 있어요.","speaker":""},{"start":4134867,"end":4142107,"text":"막 이렇게 얘기했었죠. 그럼 여기서 필요한 것들만 가져다가 쓸 수는 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537654611,"relativeStart":4142117,"segments":[{"start":4142117,"end":4149617,"text":"이런 것들을 가져다가 쓰게끔 XML이라는 추가적인 방식을 통해서","speaker":""},{"start":4149617,"end":4151917,"text":"일일이 작성을 해줘야 된다는 거예요.","speaker":""},{"start":4151917,"end":4154617,"text":"그래서 가져다 쓰는 건 편한데","speaker":""},{"start":4154617,"end":4156917,"text":"가져다 쓰게끔 코드를 작성하는","speaker":""},{"start":4156917,"end":4161617,"text":"이런 식으로 코드를 작성해주는 것 자체가 많이 번거롭고","speaker":""},{"start":4161617,"end":4165857,"text":"만약 코드를 작성을 하는 과정에서 문제가 된다면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537674839,"relativeStart":4165860,"segments":[{"start":4165860,"end":4171360,"text":"그때는 또 정상적으로 실행이 안 되는 경우들이 엄청나게 많아져요.","speaker":""},{"start":4171360,"end":4178080,"text":"그래서 이러한 가더라가 쓰기 위한 의존성을 직접 하나씩 관리를 해줘야 되고","speaker":""},{"start":4178080,"end":4183540,"text":"그리고 서버를 직접 띄워서 테스트 용도로 확인을 해보기 위해","speaker":""},{"start":4183540,"end":4186180,"text":"Tomcat이라는 서버를 사용을 하는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537695826,"relativeStart":4186178,"segments":[{"start":4186178,"end":4189418,"text":"이 톰캣도 별도로 설치를 해줘야 돼요.","speaker":""},{"start":4189418,"end":4195518,"text":"그리고 실제 서버를 구동하기 위해서 설정 파일들을 작성을 하다보면","speaker":""},{"start":4195518,"end":4199418,"text":"한 두 줄로 끝나는 게 아니라 수십 수백 줄이 되다 보니까","speaker":""},{"start":4199418,"end":4205198,"text":"설정하는 게 많이 불필요해요. 번거로워요 라고 볼 수 있다는 거죠.","speaker":""},{"start":4205198,"end":4206678,"text":"근데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537716822,"relativeStart":4206681,"segments":[{"start":4206681,"end":4214621,"text":"제가 여러분들한테 지금 시대에서는 다 알 필요 없고 알아서 관리해주는 스프링 부트가 있어요 라고 했겠죠.","speaker":""},{"start":4214621,"end":4219341,"text":"그래서 스프링 부트는 우리가 일일이 설정해주지 않아도 돼요.","speaker":""},{"start":4219341,"end":4226521,"text":"물론 어느 정도는 설정해주는 게 있긴 하지만 기본적으로는 설정 없이 바로 시작해줄 수 있어요.","speaker":""},{"start":4226521,"end":4228521,"text":"왜냐?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537740638,"relativeStart":4228517,"segments":[{"start":4228517,"end":4232517,"text":"필요한 내용들을 어느 정도는 자동으로 설정을 해주고","speaker":""},{"start":4232517,"end":4238517,"text":"그리고 이 서버를 직접 돌려서 눈으로 조금 웹상으로 확인할 수 있게끔","speaker":""},{"start":4238517,"end":4241977,"text":"매장 톰캣이라는 것도 가지고 있기 때문에","speaker":""},{"start":4241977,"end":4245977,"text":"별도로 설치하거나 연결시켜줄 필요가 없다는 거죠.","speaker":""},{"start":4245977,"end":4251657,"text":"그리고 불이 잠깐 꺼졌어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537763412,"relativeStart":4251653,"segments":[{"start":4251653,"end":4256053,"text":"그리고 앞에 있는 xml 설정 있죠? 이 설정.","speaker":""},{"start":4256053,"end":4259893,"text":"여러분 당황하지 않으셔도 돼요.","speaker":""},{"start":4259893,"end":4261893,"text":"앞에 있는 xml 설정 있죠?","speaker":""},{"start":4261893,"end":4267413,"text":"이것도 굳이 xml이라는 복잡한 랭귀지를 사용할 필요 없이","speaker":""},{"start":4267413,"end":4274953,"text":"여기 야불이라는 추가적인 내용을 통해서 몇 줄 이내로 설정하는 게 가능하다는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537783645,"relativeStart":4274957,"segments":[{"start":4274957,"end":4280957,"text":"그래서 훨씬 더 편리해진다 라고 보시면 돼요.","speaker":""},{"start":4280957,"end":4287197,"text":"그래서 아래에 간단하게 작성된 코드만 보더라도 왼쪽은 XML을 사용한 거예요.","speaker":""},{"start":4287197,"end":4295097,"text":"그러면 얘는 우리 이름 자체가 뭔가 조금 떠오르는 게 하나가 있죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537793355,"relativeStart":4295106,"segments":[{"start":4295106,"end":4299426,"text":"어떤 게 떠오르죠? 프로트핸드에서 다뤘었던","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537817429,"relativeStart":4299433,"segments":[{"start":4299433,"end":4303873,"text":"그쵸? 우리 html 당연히 떠오를 거예요.","speaker":""},{"start":4303873,"end":4309773,"text":"그래서 html 얘는 마크업 랭귀지기 때문에 태그가 있어야 되요라고 했었죠.","speaker":""},{"start":4309773,"end":4312573,"text":"그러면서 xml도 한번 얘기를 하긴 했었어요.","speaker":""},{"start":4312573,"end":4319493,"text":"그래서 우리는 지금처럼 매번 태그를 열고 닫고 열고 닫고 작성을 해줘야 되는데","speaker":""},{"start":4319493,"end":4323013,"text":"야물이라는 추가적인 방식을 사용을 해주면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537840464,"relativeStart":4323017,"segments":[{"start":4323017,"end":4329857,"text":"태그라는 개념이 없다 보니까 코드 작성하는 게 훨씬 더 간결해질 수 있어요 라는 거죠.","speaker":""},{"start":4329857,"end":4336757,"text":"그래서 지금처럼 설정하는 것 자체가 엄청나게 수월해진다.","speaker":""},{"start":4336757,"end":4339817,"text":"그래서 이 내용을 조금 더 자세히 보면","speaker":""},{"start":4339817,"end":4345997,"text":"얘기한 것처럼 특정 어노테이션, Spring Boot Application이라는 어노테이션 하나로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537862232,"relativeStart":4346001,"segments":[{"start":4346001,"end":4349301,"text":"필요한 기능들을 모두 다 설정을 시켜줄 수 있고","speaker":""},{"start":4349301,"end":4354501,"text":"그리고 내장 톰캣, 고양이, 톰캣이라는 게 있어요.","speaker":""},{"start":4354501,"end":4360781,"text":"이런 서버가 내장되어 있어서 별도 서버 없이 그냥 자동으로 실행하면","speaker":""},{"start":4360781,"end":4362921,"text":"서버까지도 띄워주게 돼요.","speaker":""},{"start":4362921,"end":4367961,"text":"그래서 아주 간단하게 서버 설치하지 않아도 확인할 수 있고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780537874137,"relativeStart":4367955,"segments":[{"start":4367955,"end":4371195,"text":"그리고 스타터이존성이라는 게 있어요.","speaker":""},{"start":4371195,"end":4373695,"text":"그래서 이거는 아까 제가 얘기했었던","speaker":""},{"start":4373695,"end":4376955,"text":"웹 데이터 그리고 시큐리티","speaker":""},{"start":4376955,"end":4378195,"text":"이런 것들이 있었죠.","speaker":""},{"start":4378195,"end":4380855,"text":"그래서 이런 것들도 그냥","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538118237,"relativeStart":4380948,"segments":[{"start":4380948,"end":4391148,"text":"하지만, mave는 xml이라는 문법을 사용해서 설정 파일을 작성하게 되요.","speaker":""},{"start":4391148,"end":4401548,"text":"근데 아까 얘기하기로 xml은 사용하기가 조금은 불편해요. 번거로워요 라고 얘기했었죠. 왜냐하면 이 태그를","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538140271,"relativeStart":4401536,"segments":[{"start":4401536,"end":4407036,"text":"매번 작성하고 매번 닫아주는 과정이 있었기 때문이에요.","speaker":""},{"start":4407036,"end":4411475,"text":"그래서 얘는 정통적인 방식이기는 하지만","speaker":""},{"start":4411475,"end":4417655,"text":"이런 식의 설정 파일을 작성하는 것 자체가 조금은 많이 번거롭다라는 거죠.","speaker":""},{"start":4417655,"end":4423356,"text":"그래서 우리는 조금은 전통적인 방식 말고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538162288,"relativeStart":4423355,"segments":[{"start":4423355,"end":4428855,"text":"현재 실무에서 많이 사용하는 그레이들 방식을 사용할 거다 라는 거고","speaker":""},{"start":4428855,"end":4433855,"text":"그레이들은 그룹이나 코틀린이라는 추가적인 내용을 사용하는데","speaker":""},{"start":4433855,"end":4441355,"text":"그냥 간단하게 얘기해서 복잡한 빌드 로직을 쉽게 표현하는 게 가능하다 라고만 생각해주셔도 돼요.","speaker":""},{"start":4441355,"end":4445355,"text":"그래서 일단 빌드 도구를 너무 깊이 들어갈 필요는 없고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538183274,"relativeStart":4445360,"segments":[{"start":4445360,"end":4449020,"text":"그냥 실무에서 많이 사용하는 그레이드를 선택한다.","speaker":""},{"start":4449020,"end":4450620,"text":"라고 보시면 돼요.","speaker":""},{"start":4450620,"end":4453740,"text":"그래서 얼마나 많이 사용하냐면","speaker":""},{"start":4453740,"end":4456560,"text":"우리 여기 기본 설정값 자체가","speaker":""},{"start":4456560,"end":4458540,"text":"그레이드 그루비로 되어 있을 만큼","speaker":""},{"start":4458540,"end":4462580,"text":"실무에서 많이 사용하는 기본 빌드 도구가 된다.","speaker":""},{"start":4462580,"end":4463580,"text":"라고 보시면 돼요.","speaker":""},{"start":4463580,"end":4466900,"text":"그래서 앞에 있는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538205040,"relativeStart":4466892,"segments":[{"start":4466892,"end":4468432,"text":"빌드 도구를 선택을 해줄 거고","speaker":""},{"start":4468432,"end":4470672,"text":"제가 아까 전에 XML은","speaker":""},{"start":4470672,"end":4473592,"text":"설정 파일 작성하는 게 조금은 번거롭다고 했었죠.","speaker":""},{"start":4473592,"end":4476972,"text":"그래서 다음 슬라이드를 통해","speaker":""},{"start":4476972,"end":4479312,"text":"아주 간단한 예시를 보도록 하면","speaker":""},{"start":4479312,"end":4482332,"text":"자, 메이브를 사용을 했을 때","speaker":""},{"start":4482332,"end":4484152,"text":"설정 파일의 기본 값이에요.","speaker":""},{"start":4484152,"end":4488492,"text":"그러면 태그가 열고 닫히고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538226293,"relativeStart":4488492,"segments":[{"start":4488492,"end":4493492,"text":"그 사이에 여러 개의 태그들이 존재하는 걸 볼 수 있죠.","speaker":""},{"start":4493492,"end":4498492,"text":"벌써부터 코드의 양이 길고 눈이 조금은 아프죠.","speaker":""},{"start":4498492,"end":4506492,"text":"그런데 이 과정에 그레이들로 바꿔서 진행을 하면 똑같은 설정 파일임에도 불구하고","speaker":""},{"start":4506492,"end":4509272,"text":"플러그인의 아이디는 자바예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538250084,"relativeStart":4509266,"segments":[{"start":4509266,"end":4512206,"text":"그룹은 com.example이에요.","speaker":""},{"start":4512206,"end":4515666,"text":"버전은 1.0.0을 사용을 한대요.","speaker":""},{"start":4515666,"end":4520426,"text":"그리고 dependencies, 이거는 의존성이라고 해서","speaker":""},{"start":4520426,"end":4523806,"text":"우리가 어떤 기능들을 사용을 할 건지를 나타내 주는 건데","speaker":""},{"start":4523806,"end":4528426,"text":"이것도 아주 간단하게 한 줄로 표현을 해주고 있는 거죠.","speaker":""},{"start":4528426,"end":4533706,"text":"그래서 실제로 위에 복잡한 여러 줄을","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538272110,"relativeStart":4533701,"segments":[{"start":4533701,"end":4538061,"text":"그냥 정말 간단하게 몇 줄로 대체해주다 보니까","speaker":""},{"start":4538061,"end":4544481,"text":"우리가 눈으로 봤을 때의 그 가독성 또한 엄청나게 올라가는 걸 확인할 수 있을 거예요.","speaker":""},{"start":4544481,"end":4550481,"text":"그래서 이것만 봐도 아 그레이드를 쓰는 게 더 편하겠구나라는 걸 이해하실 수가 있겠죠.","speaker":""},{"start":4550481,"end":4555041,"text":"그래서 지금의 그레이드를 선택을 해주도록 할 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538293098,"relativeStart":4555047,"segments":[{"start":4555047,"end":4557767,"text":"다음 두 번째로는","speaker":""},{"start":4557767,"end":4558687,"text":"자, 랭기지","speaker":""},{"start":4558687,"end":4561547,"text":"개발 언어를 선택을 해주시면 돼요","speaker":""},{"start":4561547,"end":4564887,"text":"그래서 여러분들 웹사이트 보시면","speaker":""},{"start":4564887,"end":4566867,"text":"자바, 코틀린, 그루비","speaker":""},{"start":4566867,"end":4569867,"text":"이렇게 세 개의 랭기지를 선택할 수 있는데","speaker":""},{"start":4569867,"end":4571627,"text":"일단 우리가 다룰 건","speaker":""},{"start":4571627,"end":4573367,"text":"당연히 자바겠죠","speaker":""},{"start":4573367,"end":4576227,"text":"그래서 자바를 체크해주시면 돼요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538313066,"relativeStart":4576226,"segments":[{"start":4576226,"end":4582846,"text":"그리고 실제로 요즘에는 이 코틀린이라는 언어가 조금 많이 뜨기는 해요.","speaker":""},{"start":4582846,"end":4591906,"text":"근데 그럼에도 불구하고 시장 자체는 자바가 당연히 베이스가 될 거예요.","speaker":""},{"start":4591906,"end":4596586,"text":"그렇기 때문에 아직까지는 대부분 자바 기반으로 동작하고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538334056,"relativeStart":4596594,"segments":[{"start":4596594,"end":4603494,"text":"실제로 우리가 배운 것도 한 자바니까 자바를 통해서 진행을 한다 라고 보시면 돼요.","speaker":""},{"start":4603494,"end":4609834,"text":"그래서 자바 선택해 주시면 되고 다음은 스프링붓 버전 선택하기요.","speaker":""},{"start":4609834,"end":4617414,"text":"그래서 여러분들 웹사이트 보시면 스프링붓이라고 해서 여러 개의 버전들이 제공이 되고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538355063,"relativeStart":4617704,"segments":[{"start":4617704,"end":4622844,"text":"그중에 우리가 원하는 버전을 하나 선택해서 진행을 해주시면 돼요.","speaker":""},{"start":4622844,"end":4629384,"text":"근데 이 버전이 실제로 계속해서 조금씩 바뀌어요.","speaker":""},{"start":4629384,"end":4633584,"text":"그리고 버전들을 보면 뒤쪽에 스냅샷이라던가","speaker":""},{"start":4633584,"end":4638484,"text":"우리는 RC1 이런 추가적인 접미사들이 붙어있는 걸 확인할 수 있죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538377080,"relativeStart":4639357,"segments":[{"start":4639357,"end":4644797,"text":"그래서 이 접미사들이 어떤 건지 간략하게만 한번 설명을 드리도록 할게요.","speaker":""},{"start":4644797,"end":4653737,"text":"그래서 첫 번째로 스냅샷이라는 버전은 아직은 안정화되지 않은 데일리 빌드 버전이에요.","speaker":""},{"start":4653737,"end":4660397,"text":"다시 말해 스냅샷은 계속해서 업데이트가 되고 있는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538399097,"relativeStart":4660398,"segments":[{"start":4660398,"end":4669498,"text":"실제 하루 매일매일 다르게 계속해서 새로운 기능이 추가 혹은 기능이 없어진 이런 빌드가 되는 버전이라서","speaker":""},{"start":4669498,"end":4675458,"text":"여러분들이 오늘 작성해줬던 코드가 내일 가서 동작하지 않는 경우들도 있어요.","speaker":""},{"start":4675458,"end":4682198,"text":"근데 그러면 당연히 조금의 스트레스가 크겠죠. 그렇기 때문에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538422142,"relativeStart":4682184,"segments":[{"start":4682184,"end":4686244,"text":"이러한 스냅샵 버전은 사용을 하지는 않아요","speaker":""},{"start":4686244,"end":4691124,"text":"그래서 스냅샵 버튼 버전은 사용을 하지는 않는다","speaker":""},{"start":4691124,"end":4695304,"text":"얘는 조금의 불안정성이 있기 때문에 사용하지는 않을 거고","speaker":""},{"start":4695304,"end":4700564,"text":"그리고 여기에 MX라고 해서 M1, M2, M3","speaker":""},{"start":4700564,"end":4705084,"text":"이런 식으로 M 뒤쪽에 숫자가 붙는 버전들이 있어요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538443122,"relativeStart":4705083,"segments":[{"start":4705083,"end":4714243,"text":"그래서 얘는 마일스톤이라고 해서 TV나 프로젝트 정해진 주기마다 배포하는 버전이라고 보시면 돼요","speaker":""},{"start":4714243,"end":4721323,"text":"그래서 우리가 스냅샷을 통해 계속해서 여러 가지 기능들을 추가로 업데이트하는데","speaker":""},{"start":4721323,"end":4726043,"text":"그 중간중간에 점검을 거친 버전이다","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538465129,"relativeStart":4726042,"segments":[{"start":4726042,"end":4728542,"text":"라고 보시면 돼요.","speaker":""},{"start":4728542,"end":4733382,"text":"그래서 실제로 업데이트하는 과정에서 중간 점검을 가진 버전이고","speaker":""},{"start":4733382,"end":4738702,"text":"아까 제가 M1, M2, M3 이런 식으로 숫자가 붙는다고 했었죠?","speaker":""},{"start":4738702,"end":4744702,"text":"그래서 M1의 경우는 현재 마일스톤의 첫 번째 버전이에요 라는 거고","speaker":""},{"start":4744702,"end":4747942,"text":"M2가 붙으면 두 번째 버전","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538486131,"relativeStart":4747946,"segments":[{"start":4747946,"end":4752946,"text":"M3는 세 번째 버전이다 라고 볼 수 있다는 거죠.","speaker":""},{"start":4752946,"end":4758946,"text":"그래서 이거는 중간중간 점검을 마친 버전이다 라고 보시면 돼요.","speaker":""},{"start":4758946,"end":4763946,"text":"여기 나와 있기로는 주요 기능이 구현될 때마다 릴리지 하고","speaker":""},{"start":4763946,"end":4768946,"text":"개발자들이 한번 사용을 해보고 어떤 문제들이 있었는지 피드백 받고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538507130,"relativeStart":4768955,"segments":[{"start":4768955,"end":4773955,"text":"그 피드백을 다시 막 적용시키면서 스냅샷 버전들을 만들어 나가게 되겠죠.","speaker":""},{"start":4773955,"end":4779955,"text":"그래서 M 마일스톤도 일반적으로 개발할 때는 사용을 하지 않아요.","speaker":""},{"start":4779955,"end":4783955,"text":"그리고 다음은 우리 여기","speaker":""},{"start":4783955,"end":4785955,"text":"릴리스 캔디 데이트라고 해서","speaker":""},{"start":4785955,"end":4789995,"text":"얘는 전반적으로 기능과 버그가 모두 수정된","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538527099,"relativeStart":4789998,"segments":[{"start":4789998,"end":4792498,"text":"최종 배포 전 단계예요.","speaker":""},{"start":4792498,"end":4796218,"text":"그래서 여러 피드백을 받아요.","speaker":""},{"start":4796218,"end":4798798,"text":"그래서 문제점을 조금 파악을 하고","speaker":""},{"start":4798798,"end":4801918,"text":"이런 문제들이 있네. 이것들을 수정을 해야 되겠다.","speaker":""},{"start":4801918,"end":4805658,"text":"라고 해서 어느 정도는 수정을 해둔 상태예요.","speaker":""},{"start":4805658,"end":4810438,"text":"하지만 최종 배포 단계는 아니기 때문에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538549111,"relativeStart":4810434,"segments":[{"start":4810434,"end":4813334,"text":"역시나 문제가 발생할 가능성은","speaker":""},{"start":4813334,"end":4814374,"text":"존재해요.","speaker":""},{"start":4814374,"end":4817154,"text":"그래서 조금의 불안정성이 있기 때문에","speaker":""},{"start":4817154,"end":4819594,"text":"RC버전 또한","speaker":""},{"start":4819594,"end":4821334,"text":"사용을 하지는 않게 되겠죠.","speaker":""},{"start":4821334,"end":4823434,"text":"자 그리고","speaker":""},{"start":4823434,"end":4824154,"text":"다음","speaker":""},{"start":4824154,"end":4825734,"text":"GA는","speaker":""},{"start":4825734,"end":4828674,"text":"General Availability라고 해서","speaker":""},{"start":4828674,"end":4830434,"text":"최종 배포 단계에요.","speaker":""},{"start":4830434,"end":4832054,"text":"그래서 얘는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538572143,"relativeStart":4832051,"segments":[{"start":4832051,"end":4835311,"text":"전반적인 피드백에 대한 검증이 모두 다 끝났고","speaker":""},{"start":4835311,"end":4837671,"text":"발생한 버그들 또한 모두 다 잡은 거예요.","speaker":""},{"start":4837671,"end":4841211,"text":"그래서 얘는 최종으로 배포할 거예요.","speaker":""},{"start":4841211,"end":4844251,"text":"라는 의미의 단계가 된다는 거죠.","speaker":""},{"start":4844251,"end":4850451,"text":"그래서 여러분들은 앞과 같이 버전들이 있으면","speaker":""},{"start":4850451,"end":4855491,"text":"이 버전들 중에 GA가 붙은 최종 배포 단계나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538595174,"relativeStart":4855490,"segments":[{"start":4855490,"end":4861490,"text":"아니면 추가적인 접미사가 아예 없는 버전을 사용해주시면 돼요.","speaker":""},{"start":4861490,"end":4866490,"text":"그래서 다시 한번 이 웹사이트 잠깐 보도록 하면","speaker":""},{"start":4866490,"end":4872490,"text":"우리가 얘기했었던 이 스냅샷이라는 거 막 붙어있죠?","speaker":""},{"start":4872490,"end":4878230,"text":"그리고 추가로 RC가 붙어있는 것도 볼 수 있죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538616179,"relativeStart":4878237,"segments":[{"start":4878237,"end":4886237,"text":"그리고 RC1이라는 건 실제 GA가 진행되기 전 1단계를 먼저 진행했다는 거예요.","speaker":""},{"start":4886237,"end":4899677,"text":"그리고 여기 4.0.6 이런 식으로 아무것도 붙지 않은 버전을 선택해서 사용하는 것도 가능하다는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780538617684,"relativeStart":4899669,"segments":[{"start":4899669,"end":4902029,"text":"그래서 여러분들의","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780539488311,"relativeStart":4902120,"segments":[{"start":4902120,"end":4910920,"text":"일단 그룹, comable 뒤쪽에 작성한 북 앱이라는 artifact가 그대로 들어오는 걸 볼 수가 있겠죠.","speaker":""},{"start":4910920,"end":4916220,"text":"그래서 여러분들이 프로젝트 name의 경우는 따로 건드리실 필요는 없어요.","speaker":""},{"start":4916220,"end":4923340,"text":"어차피 그룹과 artifact 작성하면 자동으로 되기 때문에 자동으로 된 거 그대로 쓰시면 된다는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780539508279,"relativeStart":4923349,"segments":[{"start":4923349,"end":4932529,"text":"그래서 지금과 같이 앞에 있는 com.able.book 앱 그대로 사용을 해주도록 할 거고","speaker":""},{"start":4932529,"end":4936029,"text":"그리고 다음 패키징","speaker":""},{"start":4936029,"end":4940169,"text":"이거는 조금은 어려울 수 있기는 해요.","speaker":""},{"start":4940169,"end":4943429,"text":"근데 간단하게 생각해서 우리가 지금","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780539529275,"relativeStart":4943430,"segments":[{"start":4943430,"end":4954310,"text":"스프링부트를 통해 하나의 서버를 만드는 거죠. 그러면 이 서버를 어딘가에다가 배포를 할 때는 별도의 패키지 과정이 필요해요. 패키징 과정.","speaker":""},{"start":4954310,"end":4964310,"text":"다시 말해 얘를 하나로 조금 압축시키는 과정이라고 보시면 되겠죠. 그래서 이 압축시키는 방법이 자르와 와르라는 방식이 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780539529644,"relativeStart":4964321,"segments":[{"start":4964321,"end":4966161,"text":". 그런데 우리는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540645835,"relativeStart":4966236,"segments":[{"start":4966236,"end":4970236,"text":"얘기했던 것처럼 이름에서 알 수 있다시피 데이터베이스예요.","speaker":""},{"start":4970236,"end":4978696,"text":"그래서 여러분들이 알고 있는 MySQL이나 추가로 Oracle에서 사용하는 게","speaker":""},{"start":4978696,"end":4982796,"text":"갑자기 이름이 생각이 안 나는데 MSSQL, 마이크로소프트에서 사용하는 MSSQL","speaker":""},{"start":4982796,"end":4985756,"text":"이런 SQL들 있죠. 데이터베이스들.","speaker":""},{"start":4985756,"end":4991736,"text":"그래서 이러한 데이터베이스들과 마찬가지로 우리는 추가적인 데이터베이스를 얘기하는 건데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540667594,"relativeStart":4991734,"segments":[{"start":4991734,"end":4998354,"text":"H2의 경우는 여러분들이 현재 사용하는 로컬 환경에서 다룰 수 있는 데이터베이스예요.","speaker":""},{"start":4998354,"end":5002194,"text":"근데 JSON 서버처럼 너무 가볍지만은 않아요.","speaker":""},{"start":5002194,"end":5008394,"text":"실제 서버의 데이터베이스로 사용할 수 있을 만큼 기능들을 가지고 있지만","speaker":""},{"start":5008394,"end":5013654,"text":"그 기능들을 조금 빼고 가볍게 사용하는 것도 가능하다는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540688843,"relativeStart":5013655,"segments":[{"start":5013655,"end":5019395,"text":"그래서 스프링부트가 지원하는 오픈소스 관계형 데이터베이스예요","speaker":""},{"start":5019395,"end":5024475,"text":"그리고 얘를 관리해주는 시스템이에요 라고 볼 수가 있다는 거고","speaker":""},{"start":5024475,"end":5028015,"text":"얘는 InMemory DBMS라고 되어 있죠","speaker":""},{"start":5028015,"end":5034255,"text":"그래서 InMemory라는 건 여러분들이 사용하고 있는 컴퓨터의 메모리 있죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540710864,"relativeStart":5034242,"segments":[{"start":5034242,"end":5041882,"text":"컴퓨터에 메모리를 가져다가 DB처럼 쓰게 만들어주는 걸 InMemoryDBMS라고 하시면 돼요.","speaker":""},{"start":5041882,"end":5043182,"text":"생각하시면 돼요.","speaker":""},{"start":5043182,"end":5048182,"text":"데이터베이스 매니지먼트 시스템, 즉 관리 시스템이 되는 거죠.","speaker":""},{"start":5048182,"end":5056302,"text":"그래서 얘는 설정하기에 따라 조금은 다르지만 일반적으로는 애플리케이션을 재가동할 때마다","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540731839,"relativeStart":5056298,"segments":[{"start":5056298,"end":5060698,"text":"데이터를 초기화시켜서 불필요한 데이터를 계속 날리는 거예요.","speaker":""},{"start":5060698,"end":5065598,"text":"그래서 로컬 환경이나 서버를 테스트하는 환경에서","speaker":""},{"start":5065598,"end":5068998,"text":"정말 많이 쓰이는 기본 데이터베이스예요.","speaker":""},{"start":5068998,"end":5074398,"text":"그래서 얘 또한 우리가 이후에 파트를 따로 지정을 해서 다뤄보도록 할 거예요.","speaker":""},{"start":5074398,"end":5077958,"text":"그래서 h2db도 추가를 해준 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540757192,"relativeStart":5077965,"segments":[{"start":5077965,"end":5082505,"text":"추가로 롬복에 대한 질문이 나오긴 했어요.","speaker":""},{"start":5082505,"end":5085305,"text":"롬복 실무에서도 잘 쓰이나요? 라고 했었는데","speaker":""},{"start":5085305,"end":5088085,"text":"실무에서도 정말 많이 쓰여요. 롬복은.","speaker":""},{"start":5088085,"end":5091705,"text":"왜냐? 이런 getter setter 같은 것들을","speaker":""},{"start":5091705,"end":5094265,"text":"매번 작성하지 않게끔 만들어주기 때문에","speaker":""},{"start":5094265,"end":5097805,"text":"실무에서도 잘 쓰이는 개념이라고 보시면 돼요.","speaker":""},{"start":5097805,"end":5101285,"text":"답변이 되셨을까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540780733,"relativeStart":5101287,"segments":[{"start":5101287,"end":5104687,"text":"네 답변 된 것 같아요","speaker":""},{"start":5104687,"end":5107047,"text":"자 그러면 다음으로","speaker":""},{"start":5107047,"end":5108847,"text":"우리 여기 스프링 데이터","speaker":""},{"start":5108847,"end":5110807,"text":"JPA라는 걸","speaker":""},{"start":5110807,"end":5111587,"text":"보도록 할 거예요","speaker":""},{"start":5111587,"end":5115387,"text":"그래서 얘는 우리 JPA라는 거","speaker":""},{"start":5115387,"end":5116927,"text":"역시나 나중에 다룰 거긴 하지만","speaker":""},{"start":5116927,"end":5118227,"text":"간단하게 얘기하면","speaker":""},{"start":5118227,"end":5121327,"text":"방금 데이터베이스 하나 추가했었죠","speaker":""},{"start":5121327,"end":5122507,"text":"H2DB","speaker":""},{"start":5122507,"end":5122807,"text":"H2DB","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540802774,"relativeStart":5122802,"segments":[{"start":5122802,"end":5126842,"text":"그러면 우리가 작성하는 코드상으로","speaker":""},{"start":5126842,"end":5130942,"text":"이 DB와 소통할 수 있게끔 만들어줘야 돼요.","speaker":""},{"start":5130942,"end":5135002,"text":"왜냐하면 기본적으로 서버가 하나가 있고","speaker":""},{"start":5135002,"end":5138862,"text":"그리고 이 서버는 별도의 데이터베이스와","speaker":""},{"start":5138862,"end":5142222,"text":"소통하면서 데이터를 관리를 하기 때문이에요.","speaker":""},{"start":5142222,"end":5144622,"text":"그러므로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540825542,"relativeStart":5144622,"segments":[{"start":5144622,"end":5153122,"text":"우리는 이 소통하는 과정들을 편하게 만들어 줄 수 있는 JPA라는 게 필요해요 라는 거죠.","speaker":""},{"start":5153122,"end":5162222,"text":"그래서 Java 객체와 DB 테이블 간의 맵핑, 접근, 연결시켜주는 것과 직접 접근해 사용하는","speaker":""},{"start":5162222,"end":5167482,"text":"이런 과정들을 편리하고 단순화 시켜줄 수 있는 프레임워크예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540847050,"relativeStart":5167487,"segments":[{"start":5167487,"end":5173167,"text":"그렇기 때문에 JPA를 사용을 해줘야 된다라고 보시면 되고","speaker":""},{"start":5173167,"end":5176467,"text":"조금 한 발자국만 더 나아가서 얘기를 하면","speaker":""},{"start":5176467,"end":5179407,"text":"만약 이러한 JPA가 없다면","speaker":""},{"start":5179407,"end":5183867,"text":"여러분들은 DB에 접근해 데이터를 사용하기 위해서","speaker":""},{"start":5183867,"end":5188247,"text":"SQL 구문을 직접적으로 작성을 해줘야 돼요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540866769,"relativeStart":5188244,"segments":[{"start":5188244,"end":5199964,"text":"근데 SQL은 배워보신 분들은 알겠지만 조금 작성하기가 또 까다롭기도 하고 모르시는 분들은 새롭게 배워야 되는 거다 보니까 귀찮아요.","speaker":""},{"start":5199964,"end":5208443,"text":"근데 그 과정을 조금은 편리하게 만들어주는 개념이다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540891595,"relativeStart":5208443,"segments":[{"start":5208443,"end":5216103,"text":"우리가 굳이 SQL을 몰라도 사용할 수 있게 만들어주는 개념이다 라고 보시면 돼요.","speaker":""},{"start":5216103,"end":5221483,"text":"어 네 그리고 추가로 질문 하나가 왔죠.","speaker":""},{"start":5221483,"end":5227283,"text":"JPA가 ORM 같은 거라고 보면 될까요? 라고 질문을 해주셨어요.","speaker":""},{"start":5227283,"end":5230243,"text":"어 근데 이거는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540911813,"relativeStart":5230229,"segments":[{"start":5230229,"end":5233209,"text":"질문 자체는","speaker":""},{"start":5233209,"end":5234489,"text":"맞기는 해요.","speaker":""},{"start":5234489,"end":5237329,"text":"근데 어떻게 연결할 수 있냐면","speaker":""},{"start":5237329,"end":5239049,"text":"사실은 JPA 자체가","speaker":""},{"start":5239049,"end":5241069,"text":"ORM의 한 종류예요.","speaker":""},{"start":5241069,"end":5243489,"text":"그래서 질문 자체가","speaker":""},{"start":5243489,"end":5245889,"text":"정답이 될 것 같은데","speaker":""},{"start":5245889,"end":5247529,"text":"JPA 자체가","speaker":""},{"start":5247529,"end":5249449,"text":"하나의 ORM의 종류라고 보시면 돼요.","speaker":""},{"start":5249449,"end":5251669,"text":"원래 ORM이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540935882,"relativeStart":5251660,"segments":[{"start":5251660,"end":5255820,"text":"처음 접하시는 분들이 있을 수 있기 때문에 제가 조금 풀어서 얘기하면","speaker":""},{"start":5255820,"end":5264140,"text":"ORM이 오브젝트 그리고 R은 릴레이션식, 아 릴레이션할 그리고 맵핑","speaker":""},{"start":5264140,"end":5270300,"text":"요거를 줄여서 ORM이라고 불러요","speaker":""},{"start":5270300,"end":5275240,"text":"그래서 객체 관계형을 연결시켜주는 개념이다","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540959439,"relativeStart":5275234,"segments":[{"start":5275234,"end":5283174,"text":"그래서 JPA도 ORMA 한 종류다라고 생각해주시면 돼요.","speaker":""},{"start":5283174,"end":5286914,"text":"질문에 대해 답변 드렸는데 이해되셨을까요?","speaker":""},{"start":5286914,"end":5292814,"text":"이미 많은 것들을 조금 알고 계신 것 같아요.","speaker":""},{"start":5292814,"end":5297294,"text":"이렇게 풀었으면 조금 이해되는 경우들이 많아요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780540983243,"relativeStart":5297290,"segments":[{"start":5297290,"end":5302730,"text":"그래서 일단은 jpa 조금 길게 설명하긴 했는데","speaker":""},{"start":5302730,"end":5308630,"text":"그냥 간단하게 db와 편하게 소통하기 위해서 사용하는 거다 라고 보시면 돼요","speaker":""},{"start":5308630,"end":5312290,"text":"그리고 마지막 밸리데이션이 있는데","speaker":""},{"start":5312290,"end":5316350,"text":"이거는 특정 기능을 막 해준다기보다는","speaker":""},{"start":5316350,"end":5321330,"text":"그냥 간단하게 검증을 해주기 위한 라이브러리라고 보시면 돼요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541005268,"relativeStart":5321337,"segments":[{"start":5321337,"end":5333577,"text":"이것도 우리가 나중에 사용할 거지만 notblink, size, email 등등의 어노테이션을 제공해서 검증을 자동화시켜줄 수 있게끔 만들어줘요.","speaker":""},{"start":5333577,"end":5335077,"text":"라고 볼 수 있다는 거죠.","speaker":""},{"start":5335077,"end":5343357,"text":"그래서 여러 개 얘기하지 말고 notblink와 size 이 두 개만 짚어보면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541026257,"relativeStart":5343359,"segments":[{"start":5343359,"end":5350659,"text":"notblank는 말 그대로 얘가 비어있는지 비어있지 않는지를 확인을 해주는 거예요.","speaker":""},{"start":5350659,"end":5357799,"text":"그래서 만약에 비어있게 된다면 오류 처리를 해버릴 수 있게끔 뭔가의 설정을 해주는 거죠.","speaker":""},{"start":5357799,"end":5364559,"text":"그리고 size는 말 그대로 해당 값이 얼만큼의 size까지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541046478,"relativeStart":5364554,"segments":[{"start":5364554,"end":5367794,"text":"허용이 되는지 그런 크기를 지정해주는 역할이다.","speaker":""},{"start":5367794,"end":5370034,"text":"이런 식으로 생각해주시면 돼요.","speaker":""},{"start":5370034,"end":5374934,"text":"그래서 일단은 이런 식으로 총 6개의 모듈","speaker":""},{"start":5374934,"end":5376854,"text":"우리가 앞으로 사용할 모듈들을","speaker":""},{"start":5376854,"end":5381014,"text":"미리 프로젝트를 만들기 전에 추가를 해준 거예요.","speaker":""},{"start":5381014,"end":5385114,"text":"그러면 여기서 한 가지가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541068774,"relativeStart":5385107,"segments":[{"start":5385107,"end":5390807,"text":"강사님 그러면 우리는 앞으로 프로젝트를 생성하는 과정에서만","speaker":""},{"start":5390807,"end":5394187,"text":"이런 의존성들을 선택해 줄 수 있는 건가요?","speaker":""},{"start":5394187,"end":5398227,"text":"추가해 줄 수 있는 건가요? 라고 생각이 들 수도 있어요.","speaker":""},{"start":5398227,"end":5400487,"text":"근데 꼭 그런 건 아니에요.","speaker":""},{"start":5400487,"end":5403027,"text":"나중에 프로젝트를 만들고 동작을 하다가","speaker":""},{"start":5403027,"end":5406467,"text":"'어? 이런 것도 필요하네' 라고 판단이 되면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541089482,"relativeStart":5406471,"segments":[{"start":5406471,"end":5408291,"text":"그때 가서 추가하셔도","speaker":""},{"start":5408291,"end":5409991,"text":"전혀 상관없다는 거죠.","speaker":""},{"start":5409991,"end":5412051,"text":"물론 방식은 조금","speaker":""},{"start":5412051,"end":5413291,"text":"달라지기는 할 거예요.","speaker":""},{"start":5413291,"end":5416531,"text":"그래서 생성할 때","speaker":""},{"start":5416531,"end":5418351,"text":"무조건 다 추가해야 되는 건 아니다.","speaker":""},{"start":5418351,"end":5419771,"text":"만약 그렇게 되면","speaker":""},{"start":5419771,"end":5421471,"text":"너무 무거워질 테니까","speaker":""},{"start":5421471,"end":5423611,"text":"중간중간 추가하는 것도 가능해요.","speaker":""},{"start":5423611,"end":5425691,"text":"이런 정도만 알고 계시면 돼요.","speaker":""},{"start":5425691,"end":5427891,"text":"자, 그러면","speaker":""},{"start":5427891,"end":5428191,"text":"자, 그러면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541111243,"relativeStart":5428189,"segments":[{"start":5428189,"end":5438469,"text":"여기까지 내용을 진행을 하면 우리 앞에 있는 Spring Initializer에서 채워줘야 되는 건 모두 다 채웠다고 볼 수 있어요.","speaker":""},{"start":5438469,"end":5443269,"text":"그래서 이런 식으로 프로젝트를 만들어 주시면 되고","speaker":""},{"start":5443269,"end":5449429,"text":"추가로 의존성에 대해 조금 더 얘기하고 싶었는데 이거는 넘어가도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541133267,"relativeStart":5449418,"segments":[{"start":5449418,"end":5452918,"text":"그냥 간단하게 얘기해서 스프링 부트 환경이 아니라","speaker":""},{"start":5452918,"end":5457658,"text":"스프링 프레임워크 환경에서 이 의존성들을 사용을 하려면","speaker":""},{"start":5457658,"end":5461158,"text":"그때는 간단하게 체크 체크가 아니라","speaker":""},{"start":5461158,"end":5464058,"text":"여러분들이 직접 의존성에 대한 내용","speaker":""},{"start":5464058,"end":5467378,"text":"웹에서 다운받고 설정 파일로 연결해주고","speaker":""},{"start":5467378,"end":5469278,"text":"이런 거 다 진행을 했었어요.","speaker":""},{"start":5469278,"end":5471698,"text":"근데 스프링 부트이기 때문에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541155284,"relativeStart":5471693,"segments":[{"start":5471693,"end":5474693,"text":"그냥 필요한 거 체크 체크만 해주면","speaker":""},{"start":5474693,"end":5476453,"text":"알아서 연결될 수 있다는 거예요.","speaker":""},{"start":5476453,"end":5478953,"text":"이게 스프링부터의 엄청난 강점이요.","speaker":""},{"start":5478953,"end":5483253,"text":"추가적인 내용 짧게나마 설명을 드렸고","speaker":""},{"start":5483253,"end":5486933,"text":"이제는 우리 프로젝트를 만드는 과정을 진행을 할 거예요.","speaker":""},{"start":5486933,"end":5490513,"text":"그래서 여기 제너레이트를 눌러주시면","speaker":""},{"start":5490513,"end":5493273,"text":"지금 우리가 설정한 프로젝트가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541175256,"relativeStart":5493276,"segments":[{"start":5493276,"end":5497076,"text":"하나의 압축 파일로 다운로드가 될 거예요.","speaker":""},{"start":5497076,"end":5504116,"text":"그러면 우리 다운로드하기 전에 먼저 경로를 하나, 홀더란을 만들어 주면 되겠죠.","speaker":""},{"start":5504116,"end":5508956,"text":"우리 프론트엔드나 자바 다룰 때 진행했던 것처럼","speaker":""},{"start":5508956,"end":5513456,"text":"그래서 여러분들은 바탕화면에 기존에 다뤘던","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541196247,"relativeStart":5513459,"segments":[{"start":5513459,"end":5519299,"text":"폴더가 있으면 해당 폴더를 경로로 지정을 해주셔도 되고 저 같은 경우는","speaker":""},{"start":5519299,"end":5526799,"text":"자 여기 저는 이제 여러분들과는 조금 다르게 d드라이브가 있어요 라고 했었죠.","speaker":""},{"start":5526799,"end":5534719,"text":"그래서 d드라이브에다가 만들어주도록 할 거예요. 프론트엔드와 자바에서 했던 것처럼. 그래서 여기에는 이름을 그냥","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541221074,"relativeStart":5534721,"segments":[{"start":5534721,"end":5537121,"text":"백엔드라고 작성을 해줘도 될 것 같아요.","speaker":""},{"start":5537121,"end":5542421,"text":"이렇게 백엔드 폴더 하나를 만들어 줄 거예요.","speaker":""},{"start":5542421,"end":5547061,"text":"여러분들은 이제 없는 경로에다 만들어서 조금 죄송하기는 한데","speaker":""},{"start":5547061,"end":5549761,"text":"여기 백엔드에다 만들어 보도록 할게요.","speaker":""},{"start":5549761,"end":5555441,"text":"자 그리고 폴더 만들었으니 여기다가 다운로드 해주시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541242327,"relativeStart":5555444,"segments":[{"start":5555444,"end":5560284,"text":"그래서 다운로드는 우리 generate 버튼 누르면 된다고 했죠?","speaker":""},{"start":5560284,"end":5567784,"text":"눌러주면 이런 식으로 다운로드 할 수 있는 창이 하나가 나오고","speaker":""},{"start":5567784,"end":5577204,"text":"저는 백엔드 경로 여기 들어가서 해당 파일 저장해 주도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541267426,"relativeStart":5577195,"segments":[{"start":5577195,"end":5578795,"text":"어? 경로 설정이요?","speaker":""},{"start":5578795,"end":5580255,"text":"여러분들 경로","speaker":""},{"start":5580255,"end":5582455,"text":"기존에 프론트엔드나","speaker":""},{"start":5582455,"end":5584835,"text":"여기","speaker":""},{"start":5584835,"end":5586655,"text":"프론트엔드나 자바에서 했던 것처럼","speaker":""},{"start":5586655,"end":5589235,"text":"바탕화면에다가 폴더 만들고 진행하셔도","speaker":""},{"start":5589235,"end":5590115,"text":"상관없어요","speaker":""},{"start":5590115,"end":5592535,"text":"근데 저는 그냥 여기","speaker":""},{"start":5592535,"end":5595275,"text":"D드라이브에다가","speaker":""},{"start":5595275,"end":5595975,"text":"하나 만든 거예요","speaker":""},{"start":5595975,"end":5599355,"text":"경로 꼭 여기로 할 필요 없어요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541288917,"relativeStart":5599352,"segments":[{"start":5599352,"end":5600592,"text":"여러분들 심지어","speaker":""},{"start":5600592,"end":5601972,"text":"디드라이브 없죠?","speaker":""},{"start":5601972,"end":5602832,"text":"웹에서요?","speaker":""},{"start":5602832,"end":5606852,"text":"아! 여기!","speaker":""},{"start":5606852,"end":5610912,"text":"제너레이트 이거 눌러보시면 열릴 거예요.","speaker":""},{"start":5610912,"end":5611752,"text":"혹시 열리시나요?","speaker":""},{"start":5611752,"end":5614692,"text":"이렇게 누르면","speaker":""},{"start":5614692,"end":5616812,"text":"파일 다운로드하는 창 열리죠?","speaker":""},{"start":5616812,"end":5617992,"text":"여기서","speaker":""},{"start":5617992,"end":5620752,"text":"여러분들이 지정해주고자 하는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541309916,"relativeStart":5620750,"segments":[{"start":5620750,"end":5626210,"text":"경로 들어가시면 돼요. 그러면 되신 것 같죠?","speaker":""},{"start":5626210,"end":5633170,"text":"아래 제너레이트 버튼 클릭해주면 돼요. 그래서 저는 클릭하고","speaker":""},{"start":5633170,"end":5638370,"text":"압축 파일로 나오는 게 맞아요. 압축 파일 나오면 정상적으로 나오는 거예요.","speaker":""},{"start":5638370,"end":5641770,"text":"그래서 얘기했던 것처럼 이 경로에다가 다운로드 한번 해볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541333211,"relativeStart":5641759,"segments":[{"start":5641759,"end":5644479,"text":"아마 여러분들도 다 다운로드 되셨을 테니까","speaker":""},{"start":5644479,"end":5647539,"text":"그래서 저장 한번 눌러주면","speaker":""},{"start":5647539,"end":5650979,"text":"저장이 짜라란 될 거예요.","speaker":""},{"start":5650979,"end":5654919,"text":"그러면 이제 프로젝트 다 만든 거예요.","speaker":""},{"start":5654919,"end":5659699,"text":"그리고 저도 얘기했던 것처럼 이렇게 압축 파일로 나오죠.","speaker":""},{"start":5659699,"end":5664239,"text":"그래서 여러분들 또 다음 슬라이드 보면은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541355990,"relativeStart":5664237,"segments":[{"start":5664237,"end":5670117,"text":"generate 클릭해주면 집 압축 파일이 다운로드 되요 라고 했어요.","speaker":""},{"start":5670117,"end":5677957,"text":"그리고 압축 해제를 진행해 주시면 되요. 그래서 저도 바로 한번 해제해 줄게요.","speaker":""},{"start":5677957,"end":5685997,"text":"그래서 압축 해제하고 들어가 보시면 이런 식으로 필요한 내용들이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541379279,"relativeStart":5686005,"segments":[{"start":5686005,"end":5689605,"text":"해당 폴더 안에 생기는 걸 볼 수 있어요.","speaker":""},{"start":5689605,"end":5696745,"text":"우리가 만들어준 북 앱, 이거 이름이었죠?","speaker":""},{"start":5696745,"end":5700545,"text":"아티픽트, 이름 폴더 안에 이런 식으로","speaker":""},{"start":5700545,"end":5703165,"text":"내용들이 존재하는 걸 볼 수 있다는 거죠.","speaker":""},{"start":5703165,"end":5708545,"text":"일단은 여기까지 압축 해제 먼저 진행해 주시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541401053,"relativeStart":5708550,"segments":[{"start":5708550,"end":5711790,"text":"시간은 제가 한 15초 정도 드리고","speaker":""},{"start":5711790,"end":5713510,"text":"한번 확인해보도록 할게요","speaker":""},{"start":5713510,"end":5715770,"text":"벌써 다 되신 분들은 엄지 올라오는 것 같죠?","speaker":""},{"start":5715770,"end":5719090,"text":"다 되신 것 같으니까 바로 한번 확인해볼게요","speaker":""},{"start":5719090,"end":5721490,"text":"혹시 안 되시거나 막힌 부분이 있으면","speaker":""},{"start":5721490,"end":5723230,"text":"슬픔이 잘 되신 분들은 엄지","speaker":""},{"start":5723230,"end":5725430,"text":"한번씩 눌러주세요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780541412716,"relativeStart":5725429,"segments":[{"start":5725429,"end":5728269,"text":"네 일단은","speaker":""},{"start":5728269,"end":5729589,"text":"슬픔은 없는 것 같죠","speaker":""},{"start":5729589,"end":5731869,"text":"자 그러면","speaker":""},{"start":5731869,"end":5734129,"text":"여기까지 진행하면 우리 프로젝트","speaker":""},{"start":5734129,"end":5735869,"text":"만드는 거 끝난거죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545718839,"relativeStart":5735952,"segments":[{"start":5735952,"end":5741052,"text":"처음에는 조금 시간이 걸리겠지만 일정 시간을 기다려주면 앞과 같이","speaker":""},{"start":5741052,"end":5747252,"text":"그레이들이라는 빌드 도구가 여기 각각의 프로젝트를 읽어드려","speaker":""},{"start":5747252,"end":5754812,"text":"정상적으로 읽은 경우에는 아이콘이 지금처럼 클래스 파일의 아이콘으로 바뀌어야 돼요 라고 얘기를 했었어요","speaker":""},{"start":5754812,"end":5757392,"text":"혹시 이거 이제는 다들 바뀌셨을까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545741100,"relativeStart":5757383,"segments":[{"start":5757383,"end":5761423,"text":"바뀌신 분들은 우리 엄지 한번 눌러주시고","speaker":""},{"start":5761423,"end":5763123,"text":"아직 바뀌지 않으신 분들은","speaker":""},{"start":5763123,"end":5766563,"text":"다시 한번 슬픔을 눌러주시면 될 것 같아요","speaker":""},{"start":5766563,"end":5769463,"text":"혹시 아직 안 바뀌신 분들이 있을까요?","speaker":""},{"start":5769463,"end":5773063,"text":"있으시면 채팅 통해서 한 번만 말씀해주세요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545767724,"relativeStart":5773064,"segments":[{"start":5773064,"end":5780564,"text":"어.. 채팅이 없고 슬픔이만 있는 걸로 봐서는 문제는 없는 걸까요?","speaker":""},{"start":5780564,"end":5784564,"text":"하하..","speaker":""},{"start":5784564,"end":5787764,"text":"여러분 만약에 안되는 거 있으면 말씀해주셔야 돼요.","speaker":""},{"start":5787764,"end":5794464,"text":"이게 슬픔이가 어떤 이든지 아직 잘 몰라서 다 된 거 같죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545794089,"relativeStart":5794475,"segments":[{"start":5794475,"end":5800475,"text":"일단은 된 것 같으니까 한번 진행해봐요.","speaker":""},{"start":5800475,"end":5805475,"text":"이게 엄지가 올라왔다가 슬픔이가 올라왔다가","speaker":""},{"start":5805475,"end":5813515,"text":"환경에 대한 것은 조금 맞추고 진행을 해야 되기 때문에 계속 물어보는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545824317,"relativeStart":5813512,"segments":[{"start":5813512,"end":5816592,"text":"자 일단은 그럼 한번 진행을 해보도록 할게요.","speaker":""},{"start":5816592,"end":5818412,"text":"왜냐 채팅을","speaker":""},{"start":5818412,"end":5821552,"text":"어 잠시만요.","speaker":""},{"start":5821552,"end":5824952,"text":"jdk 세팅 문제가 있었는데 다운로드 하려고 했더니","speaker":""},{"start":5824952,"end":5831952,"text":"어 혹시 동일한 문제가 현상이 발생했던 분들 또 계실까요?","speaker":""},{"start":5831952,"end":5836612,"text":"일단은 질문에 대해서 먼저 한번 답변을 드리면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545838643,"relativeStart":5836611,"segments":[{"start":5836611,"end":5841151,"text":"JDK 세팅 문제가 있어서 상위 버전을 설치했다고 해주시는데","speaker":""},{"start":5841151,"end":5844391,"text":"혹시 어떤, 몇 버전으로 설치를 해주셨을까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545876004,"relativeStart":5845497,"segments":[{"start":5845497,"end":5848497,"text":"음... 일단은...","speaker":""},{"start":5848497,"end":5854497,"text":"아, 지금은 다시 17버전으로 설치를 했는데 잘 되는 것 같아요.","speaker":""},{"start":5854497,"end":5859497,"text":"일단은 우리가 18버전의 경우는 사용을 해주셔도 되기는 해요.","speaker":""},{"start":5859497,"end":5861497,"text":"만약 정 안 된다면.","speaker":""},{"start":5861497,"end":5865497,"text":"근데 일단은 17버전으로 맞춰서 진행을 하시는 게 좋고","speaker":""},{"start":5865497,"end":5869497,"text":"'강사님, 17은 진짜 어떻게 해도 안 돼요'라고 하시는 분들은","speaker":""},{"start":5869497,"end":5872357,"text":"우리 17버전 말고 여기...","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545904952,"relativeStart":5872353,"segments":[{"start":5872353,"end":5877793,"text":"기존에 Spring Initializer 여기 사이트 있죠?","speaker":""},{"start":5877793,"end":5881953,"text":"사이트에 있는 21버전을 사용해주시는 게 조금은 좋아요.","speaker":""},{"start":5881953,"end":5883453,"text":"18 말고.","speaker":""},{"start":5883453,"end":5888853,"text":"이게 왜냐면 조금은 다른 내용이기는 한데","speaker":""},{"start":5888853,"end":5891953,"text":"우리가 JDK의 버전이 이게 여러 개가 있어요.","speaker":""},{"start":5891953,"end":5894353,"text":"여러 개가 연두별로 있는데","speaker":""},{"start":5894353,"end":5900953,"text":"JDK 추가로 LTS라는 게 붙어있는 JDK들이 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545926975,"relativeStart":5900956,"segments":[{"start":5900956,"end":5915296,"text":"그래서 이거는 뭐냐면 long-term-support라고 해서 해당 JDK는 오랜 기간 동안 계속해서 업데이트 그리고 보증을 해줄 거예요 라고 붙여준 이름이에요.","speaker":""},{"start":5915296,"end":5923616,"text":"그래서 실제로 스프링부트에서 권장하는 것도, 사용하세요 라고 권장하는 것도 17, 21, 25, 26이죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545951035,"relativeStart":5923619,"segments":[{"start":5923619,"end":5928359,"text":"이러한 JDK들이 모두 다 LTS라는 게 붙어있는 거예요","speaker":""},{"start":5928359,"end":5935739,"text":"그래서 LTS가 붙지 않은 건 실제로 짧아야 1년, 2년 이 정도만 지원을 하고","speaker":""},{"start":5935739,"end":5938639,"text":"더 이상의 업데이트나 보장은 해주지를 않아요","speaker":""},{"start":5938639,"end":5943739,"text":"근데 여러분들이 실제로 서버를 만들고 다루게 되면","speaker":""},{"start":5943739,"end":5946959,"text":"그 서버는 1, 2년만 운용을 할 건 아니겠죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545972797,"relativeStart":5946957,"segments":[{"start":5946957,"end":5951257,"text":"1, 2년마다 계속해서 JDK를 업데이트를 할 수는 없을 거예요.","speaker":""},{"start":5951257,"end":5960577,"text":"그래서 오랫동안 한 10년 정도 보증을 해주는 LTS라는 게 붙어있는 JDK를 사용을 해주세요 라는 거죠.","speaker":""},{"start":5960577,"end":5969837,"text":"그래야 서버를 한번 만들어두면 10년 정도는 오라클에서 이 JDK에 대한 내용을 해당 버전에 대한 내용을 보증을 해주니까","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780545996092,"relativeStart":5969840,"segments":[{"start":5969840,"end":5976920,"text":"그래서 여기 있는 것도 다 생략되긴 했지만 LTS가 붙어있는 버전들이요","speaker":""},{"start":5976920,"end":5981460,"text":"그런데 18버전의 경우는 LTS 버전이 아니에요","speaker":""},{"start":5981460,"end":5986420,"text":"그렇기 때문에 실제 실무에서 사용하는 것과 버전이 다르기도 하고","speaker":""},{"start":5986420,"end":5992200,"text":"가급적 버전을 맞춰서 사용하기 위해서 18 말고 21 써주세요 라고 하는 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546022203,"relativeStart":5992199,"segments":[{"start":5992199,"end":6000039,"text":"만약 17이 진짜 어떻게 해도 안되면 무슨 말인지 이해하실 수 있겠죠? LTS라는 차이?","speaker":""},{"start":6000039,"end":6004419,"text":"다들 이해되시는 분들은 엄지 눌러주시면 돼요.","speaker":""},{"start":6004419,"end":6013639,"text":"그러면 일단은 여기까지 우리 간단하게 환경에 대해서 JDK LTS라는 버전에 대해서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546047538,"relativeStart":6013647,"segments":[{"start":6013647,"end":6017147,"text":"추가적인 내용이긴 한데 설명을 드렸고","speaker":""},{"start":6017147,"end":6022227,"text":"이제는 우리 앞에 있는 프로젝트의 구조를 같이 한번 확인을 해보도록 할 거예요","speaker":""},{"start":6022227,"end":6024247,"text":"그래서 구조를 보면","speaker":""},{"start":6024247,"end":6029207,"text":"제가 아까 얘기했었던 북 앱 어플리케이션 있죠","speaker":""},{"start":6029207,"end":6034967,"text":"이 친구를 한번 더블클릭해서 내부 코드를 보도록 할게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546071866,"relativeStart":6034960,"segments":[{"start":6034960,"end":6042000,"text":"그래서 이런 식으로 보면 제가 잠깐 언급하고 넘어갔었던","speaker":""},{"start":6042000,"end":6044120,"text":"Spring Boot 애플리케이션 있죠?","speaker":""},{"start":6044120,"end":6048120,"text":"이 어노테이션을 한번 확인을 해보실 수 있을 거예요","speaker":""},{"start":6048120,"end":6051460,"text":"그래서 우리는 이 어노테이션 하나를 통해서","speaker":""},{"start":6051460,"end":6056960,"text":"현재 Spring Boot는 여기 있는 코드를 통해서","speaker":""},{"start":6056960,"end":6060940,"text":"서버가 실행되고 서버에 들어가는 진입점이에요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546093874,"relativeStart":6060931,"segments":[{"start":6060931,"end":6068171,"text":"라고 알려준다는 거죠. 그래서 다른 거 생각하실 필요 없이 앞으로 여러분들이","speaker":""},{"start":6068171,"end":6076831,"text":"스프링부트를 실행시킬 때는 북 앱 애플리케이션 여기 와서 실행시킨다 라고 생각해 보시면 될 거예요.","speaker":""},{"start":6076831,"end":6082511,"text":"그래서 여기서 내용을 실행시키도록 할 거고 실제로 여기 안에 있는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546114878,"relativeStart":6082514,"segments":[{"start":6082514,"end":6083874,"text":"메인 메소드 있죠.","speaker":""},{"start":6083874,"end":6086074,"text":"우리가 원래 자바에서는","speaker":""},{"start":6086074,"end":6089714,"text":"메인 메소드 안에다가 실행시키고자 하는 코드들을","speaker":""},{"start":6089714,"end":6092134,"text":"막 추가적으로 작성하고 실행을 시켰었는데","speaker":""},{"start":6092134,"end":6094374,"text":"스프링 부트의 경우는","speaker":""},{"start":6094374,"end":6097014,"text":"여기다가 별도의 코드를 따로 작성을 하지는 않아요.","speaker":""},{"start":6097014,"end":6099214,"text":"일반적으로는","speaker":""},{"start":6099214,"end":6101354,"text":"이 스프링 애플리케이션 런 있죠.","speaker":""},{"start":6101354,"end":6103794,"text":"이거 딱 하나만 두고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546136896,"relativeStart":6103793,"segments":[{"start":6103793,"end":6110453,"text":"실행을 시키게 돼요. 그래서 우리는 이걸 보고 역할 분담이라고 얘기를 해볼 수도 있어요.","speaker":""},{"start":6110453,"end":6118773,"text":"그렇기 때문에 여기에는 별도 코드를 일반적으로는 추가하지 않는다라고만 생각해주시면 되고","speaker":""},{"start":6118773,"end":6124733,"text":"얘를 통해 스프링 부트의 서버를 실행시킨다라고 생각해주시면 될 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546157890,"relativeStart":6124955,"segments":[{"start":6124955,"end":6131955,"text":"그래서 우리는 앞에 있는 슬라이드를 보면 지금과 같이 여러 개의 폴더가 있지만","speaker":""},{"start":6131955,"end":6135755,"text":"자바에서 진행을 했던 것처럼 소스를 하는 폴더,","speaker":""},{"start":6135755,"end":6140455,"text":"여기다가 우리가 다루고자 하는 코드들을 작성을 해주게 되는 거고","speaker":""},{"start":6140455,"end":6146495,"text":"이 하위에 메인, 하위에 자바, 그리고 하위에 들어가면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546179888,"relativeStart":6146487,"segments":[{"start":6146487,"end":6155487,"text":"컴 AbleBook 앱, 이거 우리가 아까 만들어 줬었던 프로젝트의 그룹과 아티팩트 이름이었죠.","speaker":""},{"start":6155487,"end":6165487,"text":"그래서 지금처럼 작성해주고 또 하위에 있는 이 친구가 기본적인 진입적 엔트리 포인트의 역할을 해주게 돼요.","speaker":""},{"start":6165487,"end":6167947,"text":"실행시킬 때는 여기서 실행시켜요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546202683,"relativeStart":6167952,"segments":[{"start":6167952,"end":6169772,"text":"라고 얘기해줄 수 있다는 거죠.","speaker":""},{"start":6169772,"end":6174552,"text":"그래서 앞으로 여러분들이 코드들을 작성을 해주실 때는","speaker":""},{"start":6174552,"end":6182772,"text":"여기 제가 얘기해줬던 대로 여기다가 코드 추가하고 작성을 해주시면 돼요.","speaker":""},{"start":6182772,"end":6185192,"text":"그래서 우리 기존의 소스팔 추가할 때도","speaker":""},{"start":6185192,"end":6189052,"text":"원래는 맨 위에 상단에 있는 소스 폴더에다가 진행을 했었는데","speaker":""},{"start":6189052,"end":6191532,"text":"이제는 조금 다르게 여기","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546232123,"relativeStart":6191526,"segments":[{"start":6191526,"end":6194026,"text":"com-able-book-app","speaker":""},{"start":6194026,"end":6197026,"text":"여기다가 추가를 하게 된다는 거예요.","speaker":""},{"start":6197026,"end":6200786,"text":"물론 이후에는 우리가 또 다른 디렉터리들을","speaker":""},{"start":6200786,"end":6202366,"text":"나눠가며 진행을 할 거긴 하지만","speaker":""},{"start":6202366,"end":6204026,"text":"일단 여기 소스가 아니라","speaker":""},{"start":6204026,"end":6207366,"text":"여기서 진행된다는 걸 먼저 파악해 주시면 돼요.","speaker":""},{"start":6207366,"end":6211026,"text":"자, 그리고 우리는 다음 보면","speaker":""},{"start":6211026,"end":6212826,"text":"아까 제가 얘기했었던","speaker":""},{"start":6212826,"end":6215866,"text":"Spring Boot 애플리케이션이라는 이 어노테이션 있죠.","speaker":""},{"start":6215866,"end":6217766,"text":"이 어노테이션에 대해서","speaker":""},{"start":6217766,"end":6220526,"text":"간단하게 한번 내용을 다시 보도록 하면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546254650,"relativeStart":6220535,"segments":[{"start":6220535,"end":6225535,"text":"자, 얘는 기본적으로 프로젝트를 생성을 하게 되면","speaker":""},{"start":6225535,"end":6229715,"text":"자동으로 애플리케이션이라는 클래스가 만들어져요 라고 할 수 있어요","speaker":""},{"start":6229715,"end":6232874,"text":"실제로 우리도 프로젝트만 만들었는데","speaker":""},{"start":6232874,"end":6235755,"text":"이 친구가 알아서 생성이 되어 있었죠","speaker":""},{"start":6235755,"end":6240095,"text":"그리고 이 친구를 통해서 현재 그레이들이라는 빌드 도구가","speaker":""},{"start":6240095,"end":6243575,"text":"문제없이 읽어왔는지도 확인을 했었던 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546278717,"relativeStart":6243569,"segments":[{"start":6243569,"end":6247669,"text":"그래서 해당 클래스를 자동으로 생성해주게 되고","speaker":""},{"start":6247669,"end":6252169,"text":"해당 클래스는 메인 메서드가 따로 존재한데요","speaker":""},{"start":6252169,"end":6259469,"text":"실제로 우리 public static void main PSVM이 자동으로 생성이 됐었죠","speaker":""},{"start":6259469,"end":6267829,"text":"그리고 그 내부에는 spring application run이라는 메서드를 호출하고 있는 걸 볼 수가 있어요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546301759,"relativeStart":6267835,"segments":[{"start":6267835,"end":6274195,"text":"그리고 우리는 이 코드의 역할이 스프링 애플리케이션을 실행하는 역할이에요","speaker":""},{"start":6274195,"end":6276535,"text":"라고 얘기를 해줄 수 있다는 거죠","speaker":""},{"start":6276535,"end":6280755,"text":"그래서 제가 아까 얘기하기를 우리 앞으로 코드 실행할 때는","speaker":""},{"start":6280755,"end":6284375,"text":"다른 곳이 아니라 북앱 애플리케이션 와서","speaker":""},{"start":6284375,"end":6290095,"text":"이 코드를 실행을 함으로써 스프링 부트를 동작시키는 게 가능해요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546323780,"relativeStart":6290093,"segments":[{"start":6290093,"end":6294573,"text":"라고 얘기했었죠. 그래서 앞으로 여기서 실행을 시키도록 할 거고","speaker":""},{"start":6294573,"end":6302353,"text":"이 어노테이션의 역할은 스프링 부트의 자동 설정, 여러 가지 필요한 설정들을 자동으로 해주고","speaker":""},{"start":6302353,"end":6308333,"text":"그리고 스프링 빈 읽기와 생성이 모두 자동으로 설정된대요.","speaker":""},{"start":6308333,"end":6312333,"text":"다시 말해 우리가 앞서 얘기했었던 컴포넌트","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546348858,"relativeStart":6312335,"segments":[{"start":6312335,"end":6324335,"text":"그리고 서비스, 그리고 여기에 우리가 레퍼지토리, 그리고 컨트롤러","speaker":""},{"start":6324335,"end":6329735,"text":"이런 식으로 각각의 어노테이션을 붙여주면 해당 클래스는","speaker":""},{"start":6329735,"end":6331735,"text":"빈이라는 게 돼요라고 했었죠?","speaker":""},{"start":6331735,"end":6337135,"text":"그래서 이 어노테이션이 붙여진 클래스들을 모두 다 읽어오는 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546371901,"relativeStart":6337124,"segments":[{"start":6337124,"end":6338944,"text":"얘가 실행되는 시점에서","speaker":""},{"start":6338944,"end":6341804,"text":"그래서 전부 다 읽어온 뒤","speaker":""},{"start":6341804,"end":6345124,"text":"IOC 컨테이너라는 게 있었죠","speaker":""},{"start":6345124,"end":6347124,"text":"그래서 이 컨테이너 안에다가","speaker":""},{"start":6347124,"end":6353124,"text":"해당 클래스의 객체들을 하나씩 하나씩 하나씩 만들어두고","speaker":""},{"start":6353124,"end":6354824,"text":"사용하게 된다는 거죠","speaker":""},{"start":6354824,"end":6360184,"text":"그래서 이 앞에 있는 이 어노테이션이 붙은 이 코드가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546392905,"relativeStart":6360175,"segments":[{"start":6360175,"end":6362875,"text":"그 역할을 해준다고 보시면 돼요.","speaker":""},{"start":6362875,"end":6372615,"text":"자, 근데 만약에 그럼 제가 이 annotation, 컴포넌트나 서비스나 레파지토리나 컨트롤러","speaker":""},{"start":6372615,"end":6381895,"text":"이런 annotation이 붙은 클래스를 해당 위치가 아니라 이상한 위치 여기다가 만들 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546414139,"relativeStart":6381893,"segments":[{"start":6381893,"end":6387893,"text":"여기 북 앱 어플리케이션보다 더 상위에 있는 자바","speaker":""},{"start":6387893,"end":6394393,"text":"여기다가 북 서비스 이렇게 만들 거예요.","speaker":""},{"start":6394393,"end":6402013,"text":"그리고 나서 여기다가 서비스라는 어노테이션을 만약 붙이게 된다면 이때는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546436688,"relativeStart":6402008,"segments":[{"start":6402008,"end":6403648,"text":"북앱 어플리케이션이","speaker":""},{"start":6403648,"end":6405348,"text":"북서비스라는","speaker":""},{"start":6405348,"end":6407848,"text":"여기에 어노테이션을","speaker":""},{"start":6407848,"end":6410288,"text":"읽어올 수가 있을까요?","speaker":""},{"start":6410288,"end":6410688,"text":"없을까요?","speaker":""},{"start":6410688,"end":6413588,"text":"다시 말해 북서비스가","speaker":""},{"start":6413588,"end":6416048,"text":"애플리케이션보다 상위에 있으면","speaker":""},{"start":6416048,"end":6418528,"text":"읽어줄 수 있을까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546459463,"relativeStart":6419737,"segments":[{"start":6419737,"end":6423737,"text":"그렇죠. 아마도 읽어줄 수 없을 거예요.","speaker":""},{"start":6423737,"end":6429737,"text":"그래서 제가 아까 얘기하기로는 여기 com.able.book.app","speaker":""},{"start":6429737,"end":6432737,"text":"여기 하위에다가 만들어줘야 되요라고 했었죠.","speaker":""},{"start":6432737,"end":6438737,"text":"그 이유가 지금처럼 여기보다 상위에다가 만들어주게 되면","speaker":""},{"start":6438737,"end":6442537,"text":"그때는 본인보다 상위에 있는 파일을 읽든","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546481475,"relativeStart":6442542,"segments":[{"start":6442542,"end":6443722,"text":"못하기 때문이에요.","speaker":""},{"start":6443722,"end":6446242,"text":"그래서 여기다가 작성해도","speaker":""},{"start":6446242,"end":6448742,"text":"아무리 작성해도 정상적으로 실행이 되지가","speaker":""},{"start":6448742,"end":6450642,"text":"않으니까 반드시","speaker":""},{"start":6450642,"end":6452942,"text":"북앱 애플리케이션과","speaker":""},{"start":6452942,"end":6454882,"text":"동일한","speaker":""},{"start":6454882,"end":6456742,"text":"경로 혹은 그보다","speaker":""},{"start":6456742,"end":6459042,"text":"하위 경로에다가 만들어주셔야 된다는 거예요.","speaker":""},{"start":6459042,"end":6461142,"text":"그래서 얘는","speaker":""},{"start":6461142,"end":6463102,"text":"일단 잘못된 위치에 있는 거니까","speaker":""},{"start":6463102,"end":6464862,"text":"제가 다시 지우도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546503754,"relativeStart":6464851,"segments":[{"start":6464851,"end":6471071,"text":"그래서 지금과 같이 항상 프로젝트의 최상단에 위치해야 된다.","speaker":""},{"start":6471071,"end":6476191,"text":"다른 파일들은 얘보다 동일한 위치 혹은 하위에 존재해야 된다.","speaker":""},{"start":6476191,"end":6482711,"text":"그러면 여기까지 일단은 실행 지점, 엔트리 포인트에 대한 내용","speaker":""},{"start":6482711,"end":6485511,"text":"그리고 이 어노테이션의 역할을 간단히 알아봤고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546524745,"relativeStart":6485506,"segments":[{"start":6485506,"end":6490326,"text":"이후에는 우리가 스트리인 부트에 설정을 해줄 수 있어요.","speaker":""},{"start":6490326,"end":6491686,"text":"라고 얘기했었죠.","speaker":""},{"start":6491686,"end":6495986,"text":"그래서 설정 파일을 같이 한번 확인해 보도록 할게요.","speaker":""},{"start":6495986,"end":6501606,"text":"그래서 이 설정 파일은 여기 보이는 이 경로에 존재해요.","speaker":""},{"start":6501606,"end":6506706,"text":"그래서 우리는 실제 인텔리제이를 통해서 이 경로에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546547260,"relativeStart":6506701,"segments":[{"start":6506701,"end":6511701,"text":"application.yaml이라는 파일을 한번 열어보도록 할게요.","speaker":""},{"start":6511701,"end":6516701,"text":"그래서 여기 보면 우리가 소스를 들어가요.","speaker":""},{"start":6516701,"end":6520701,"text":"그리고 메인을 들어가요.","speaker":""},{"start":6520701,"end":6528701,"text":"그리고 리소스를 들어가면 그 하위에 application.yaml이 존재할 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546565959,"relativeStart":6528706,"segments":[{"start":6528706,"end":6541706,"text":"그래서 여기 소스에서 메인, 메인에서 리소스, 리소스에서 어플리케이션 얌을 들어보시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546593096,"relativeStart":6541705,"segments":[{"start":6541705,"end":6552545,"text":"자 그러면 여기까지 내용이 작성이 됐으면 이제 우리는 이 파일을 통해서 스프링부트의 설정 값들을 지정해주는 게 가능하다는 거죠.","speaker":""},{"start":6552545,"end":6562285,"text":"그래서 저는 어떻게 한번 작성해볼 거냐면 우리 이 앞에 있는 이 코드 있죠. 이 코드 그대로 한번 추가로 작성을 해볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546617411,"relativeStart":6562456,"segments":[{"start":6562456,"end":6570716,"text":"그래서 여기다가 지금은 빠져있는 것 같은데 앞에 서버 작성해요.","speaker":""},{"start":6570716,"end":6574696,"text":"그리고 콜론 작성해요.","speaker":""},{"start":6574696,"end":6581996,"text":"그리고 다음 여기 들여쓰기 잊지 말고 진행해주셔야 돼요.","speaker":""},{"start":6581996,"end":6584396,"text":"그리고 포트.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546632263,"relativeStart":6584393,"segments":[{"start":6584393,"end":6586673,"text":"그리고 8080","speaker":""},{"start":6586673,"end":6589613,"text":"이렇게 한번 작성을 해주도록 할게요.","speaker":""},{"start":6589613,"end":6593513,"text":"흠흠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546675534,"relativeStart":6593513,"segments":[{"start":6593513,"end":6597233,"text":"자 그러면 여기까지는 다들 작성이 되셨겠죠?","speaker":""},{"start":6597233,"end":6598513,"text":"들어와서 여기","speaker":""},{"start":6598513,"end":6602973,"text":"글씨 더 키워드릴까요? 잠시만요","speaker":""},{"start":6602973,"end":6609593,"text":"22 정도?","speaker":""},{"start":6609593,"end":6613993,"text":"혹시 23 정도로 키웠어요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546699851,"relativeStart":6613992,"segments":[{"start":6613992,"end":6624432,"text":"괜찮으실까요? 네, 일단 잘 보이시는 것 같아요. 지금처럼 잘 안 보이는 부분이 있으면 언제든 얘기해주세요.","speaker":""},{"start":6624432,"end":6635532,"text":"제가 조금씩 더 확대를 해드릴 수 있으니까. 자, 그러면 일단 이 코드를 추가로 작성을 해봤고 이거는 무슨 의미냐면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546720839,"relativeStart":6635541,"segments":[{"start":6635541,"end":6640781,"text":"현재 사용하는 스프링포트는 컴캣이라는 4장 서버가 존재해요 라고 했었죠.","speaker":""},{"start":6640781,"end":6645781,"text":"그래서 그 서버에 포트 번호를 지정해주세요.","speaker":""},{"start":6645781,"end":6651081,"text":"그리고 이 포트 번호는 8080이라는 포트를 사용해주세요.","speaker":""},{"start":6651081,"end":6653081,"text":"라는 의미가 된다는 거죠.","speaker":""},{"start":6653081,"end":6656141,"text":"물론 처음에는 이 코드가 없었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546741825,"relativeStart":6656129,"segments":[{"start":6656129,"end":6662889,"text":"그 이유는 현재 코드는 없어도 자동으로 알아서 8080으로 지정을 해줘요.","speaker":""},{"start":6662889,"end":6668369,"text":"근데 우리는 그냥 연습 삼아서 어차피 자동으로 지정해주기는 하지만","speaker":""},{"start":6668369,"end":6671509,"text":"연습 삼아서 추가로 한번 작성을 해본 거예요.","speaker":""},{"start":6671509,"end":6677009,"text":"그래서 지금처럼 작성을 해줬고 이후 아래에 있는 기존에 있었던 건","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546763850,"relativeStart":6677020,"segments":[{"start":6677020,"end":6686400,"text":"아, 스프링, 그리고 그 하위 계층의 어플리케이션, 그리고 하위 계층의 네임, 그리고 네임에는 북앱이라고 되어 있죠.","speaker":""},{"start":6686400,"end":6695140,"text":"아, 그러면 현재 스프링 어플리케이션의 이름은 우리가 지정해준 북앱이 되어 라고 볼 수 있다는 거죠.","speaker":""},{"start":6695140,"end":6699580,"text":"그래서 여러분들은 지금처럼 이 야물이라는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546783829,"relativeStart":6699582,"segments":[{"start":6699582,"end":6707022,"text":"설정 파일을 가져다가 우리가 추가적인 설정을 할 때 필요한 값들을 작성해주는 게 가능하다는 거고","speaker":""},{"start":6707022,"end":6719602,"text":"얘는 실제로 이후에 우리가 h2db를 사용할 때 그때 또 다시 와서 추가적으로 여러 가지 값들을 작성을 해주도록 할 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546807374,"relativeStart":6719596,"segments":[{"start":6719596,"end":6723056,"text":"그래서 일단은 설정 파일이라는 걸 한번 인식해 주시고","speaker":""},{"start":6723056,"end":6725816,"text":"간단하게 저장까지도 한번 해보도록 할게요","speaker":""},{"start":6725816,"end":6729416,"text":"컨트롤 S 눌러서 저장해 주시면 돼요","speaker":""},{"start":6729416,"end":6730376,"text":"혹시 모르니까","speaker":""},{"start":6730376,"end":6736476,"text":"자 그리고 이제 여기까지 설정 파일 확인을 했으면","speaker":""},{"start":6736476,"end":6741416,"text":"저는 다음으로 의존성을 확인해 보도록 할 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546828358,"relativeStart":6741415,"segments":[{"start":6741415,"end":6743495,"text":"그래서 의존성은","speaker":""},{"start":6743495,"end":6745955,"text":"우리가 스프링부트 프로젝트를","speaker":""},{"start":6745955,"end":6748055,"text":"만들 때 필요한 모듈들을","speaker":""},{"start":6748055,"end":6749715,"text":"선택해줄 수 있어요","speaker":""},{"start":6749715,"end":6750635,"text":"라고 얘기했었죠","speaker":""},{"start":6750635,"end":6752155,"text":"그래서 여러가지","speaker":""},{"start":6752155,"end":6754535,"text":"아까 6개 정도의 모듈을","speaker":""},{"start":6754535,"end":6756055,"text":"선택을 했었죠","speaker":""},{"start":6756055,"end":6759595,"text":"그래서 이 모듈들이 정말로 잘 선택이 되어 있는지","speaker":""},{"start":6759595,"end":6761275,"text":"확인을 해보도록 할거고","speaker":""},{"start":6761275,"end":6762835,"text":"이러한","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546849345,"relativeStart":6762830,"segments":[{"start":6762830,"end":6770130,"text":"우리가 선택한 모듈들을 가지고 오는 건 기본적으로는 빌드 도구의 역할이 돼요.","speaker":""},{"start":6770130,"end":6777170,"text":"다시 말해 앞에 얘기했었던'Maven'이나'Grade' 이렇게 두 개의 빌드 도구가","speaker":""},{"start":6777170,"end":6783730,"text":"필요한 모듈을 가지고 오는 역할을 해준다는 거죠. 그래서 우리가 확인을 해줘야 될 건","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546871362,"relativeStart":6783738,"segments":[{"start":6783738,"end":6786778,"text":"그레이들 파일을 확인을 해주면 돼요","speaker":""},{"start":6786778,"end":6790958,"text":"그래서 여기 프로젝트를 다시 한번 가보시면","speaker":""},{"start":6790958,"end":6795038,"text":"여기 아래쪽에 쭉 내려가서","speaker":""},{"start":6795038,"end":6800398,"text":"여기 빌드 그레이들이라는 파일을 하나 확인해 보실 수 있을 거예요","speaker":""},{"start":6800398,"end":6805778,"text":"그래서 그냥 쭉 내리다 보면 여기 코끼리 모양의 빌드 그레이들이 있고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546893396,"relativeStart":6805776,"segments":[{"start":6805776,"end":6808276,"text":"자, 얘를 클릭해서 들어가보면","speaker":""},{"start":6808276,"end":6813616,"text":"여러가지 막 복잡한 내용들이 조금 작성되어 있는 걸 볼 수가 있어요.","speaker":""},{"start":6813616,"end":6816316,"text":"그래서 내용들이 쭉 있고","speaker":""},{"start":6816316,"end":6819436,"text":"뭐 여기 내용들은 id는 java,","speaker":""},{"start":6819436,"end":6822776,"text":"spring framework boot 버전은 4.0.6","speaker":""},{"start":6822776,"end":6824116,"text":"우리가 선택해 준 거죠.","speaker":""},{"start":6824116,"end":6826996,"text":"그리고 뭐 여기 있는 dependency는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546915404,"relativeStart":6826988,"segments":[{"start":6826988,"end":6831768,"text":"우리 추가적으로 디펜던시, 의존성을 가지고 오기 위한 도구의 버전","speaker":""},{"start":6831768,"end":6836488,"text":"그리고 그룹 이름이나 버전 이름 등등 여러 가지들이 작성이 되어 있어요.","speaker":""},{"start":6836488,"end":6840948,"text":"그리고 이 내용 중에서 아래로 쭉 내리다 보면","speaker":""},{"start":6840948,"end":6843548,"text":"우리가 얘기했었던","speaker":""},{"start":6843548,"end":6849048,"text":"디펜던시스라는 의존성에 관한 내용이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546937424,"relativeStart":6849044,"segments":[{"start":6849044,"end":6854544,"text":"중괄호로 묶여있는 걸 보실 수 있을 거예요.","speaker":""},{"start":6854544,"end":6859724,"text":"그래서 이 중괄호 안에 우리가 추가한 의존성에 대한 내용들을","speaker":""},{"start":6859724,"end":6863124,"text":"확인할 수 있다는 거죠.","speaker":""},{"start":6863124,"end":6865844,"text":"그래서 전부 다 찾는 건 아니더라도","speaker":""},{"start":6865844,"end":6868484,"text":"대략적으로 같이 한번 확인을 해보면","speaker":""},{"start":6868484,"end":6870044,"text":"우리 h2 콘솔","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546957391,"relativeStart":6870053,"segments":[{"start":6870053,"end":6875893,"text":"어, 이거 얘는 h2db에 관한 내용이 되겠죠?","speaker":""},{"start":6875893,"end":6879233,"text":"그래서 여기 아래 쭉 내리다 보면은","speaker":""},{"start":6879233,"end":6885793,"text":"어, h2db라고 우리가 선택한 모듈이 들어와 있는 걸 볼 수 있어요.","speaker":""},{"start":6885793,"end":6890193,"text":"그리고 우리 추가로 스프링북 데브툴스","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546979675,"relativeStart":6890185,"segments":[{"start":6890185,"end":6897425,"text":"이것도 개발을 하기 위해서 여러 가지 도구들이 필요한데 얘가 제공해줄 거에요 라고 했었죠.","speaker":""},{"start":6897425,"end":6900785,"text":"그래서 스프링보드 데프 툴즈도 들어와 있고","speaker":""},{"start":6900785,"end":6903885,"text":"또 바로 위에 보니까 롬복도 있네요.","speaker":""},{"start":6903885,"end":6912145,"text":"롬복은 getter나 setup, 중복되는 조금 번거로운 코드들을 자동으로 만들어주는 거에요 라고 얘기했었어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780546999375,"relativeStart":6912359,"segments":[{"start":6912359,"end":6918359,"text":"그리고 또 위에 보면 Spring Boot Starter Web MVC.","speaker":""},{"start":6918359,"end":6925359,"text":"이거는 아까 우리가 Spring Boot Web이라는 걸 추가했었죠.","speaker":""},{"start":6925359,"end":6932419,"text":"그리고 Web은 실제 웹 어플리케이션을 만들 때 필수적인 모듈이라고 얘기했었고,","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547019353,"relativeStart":6932423,"segments":[{"start":6932423,"end":6934503,"text":"그리고 그 외에도","speaker":""},{"start":6934503,"end":6936503,"text":"Spring Data JPA","speaker":""},{"start":6936503,"end":6938383,"text":"그리고 검증을 위한","speaker":""},{"start":6938383,"end":6939083,"text":"Validation","speaker":""},{"start":6939083,"end":6942203,"text":"여러가지 의존성들을 확인할 수 있다는 거죠.","speaker":""},{"start":6942203,"end":6943943,"text":"그래서","speaker":""},{"start":6943943,"end":6944943,"text":"지금과 같이","speaker":""},{"start":6944943,"end":6947443,"text":"그레이들의 파일을 보면","speaker":""},{"start":6947443,"end":6950443,"text":"우리가 추가한 모듈들을 확인할 수 있고","speaker":""},{"start":6950443,"end":6952643,"text":"이뿐만 아니라","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547042391,"relativeStart":6952640,"segments":[{"start":6952640,"end":6955520,"text":"우리는 조금 더 간편하게 볼 수 있는 방법도 있어요.","speaker":""},{"start":6955520,"end":6962420,"text":"어디냐면 여기 아까 전에 아이콘이 코끼리 모양의 아이콘이었죠.","speaker":""},{"start":6962420,"end":6964240,"text":"여기 파일 앞에.","speaker":""},{"start":6964240,"end":6970840,"text":"근데 이 아이콘을 우리는 오른쪽에서도 확인을 해볼 수 있어요.","speaker":""},{"start":6970840,"end":6972040,"text":"여기.","speaker":""},{"start":6972040,"end":6975540,"text":"그래서 이 아이콘을 눌러주면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547062343,"relativeStart":6975539,"segments":[{"start":6975539,"end":6979479,"text":"자, 그레이들에 대한 설정이 나와요","speaker":""},{"start":6979479,"end":6984079,"text":"그레이들이 지금 어떤 것들을 읽고 가지고 오고 있는지","speaker":""},{"start":6984079,"end":6985939,"text":"그에 따른 내용이 나오는데","speaker":""},{"start":6985939,"end":6989239,"text":"여기서 보면은 Dependencies 있죠","speaker":""},{"start":6989239,"end":6991199,"text":"의존성","speaker":""},{"start":6991199,"end":6993499,"text":"의존성을 들어가 보면","speaker":""},{"start":6993499,"end":6995559,"text":"막 여러가지 내용들이 있어요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547086679,"relativeStart":6995553,"segments":[{"start":6995553,"end":6997633,"text":"근데 그냥 아무거나 좀 열어볼게요","speaker":""},{"start":6997633,"end":7000133,"text":"얘도 열어보고 얘도 열어보면","speaker":""},{"start":7000133,"end":7006713,"text":"다시 한번 우리가 봤었던 H2 데이터베이스도 확인되고","speaker":""},{"start":7006713,"end":7010193,"text":"여기 스프링붓 데브 툴스도 확인되고","speaker":""},{"start":7010193,"end":7014413,"text":"H2 콘솔 이거는 데이터베이스와 연결되는 거죠","speaker":""},{"start":7014413,"end":7018993,"text":"그리고 그 위에 롬복도 있고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547111513,"relativeStart":7018992,"segments":[{"start":7018992,"end":7026552,"text":"Spring Boot Starter Web 그러니까 Spring Boot Web도 확인할 수 있고","speaker":""},{"start":7026552,"end":7032372,"text":"Data JPA Validation 똑같이 확인이 가능하죠.","speaker":""},{"start":7032372,"end":7037452,"text":"그래서 우리가 선택해준 모듈들을 직접 다운로드할 필요 없이","speaker":""},{"start":7037452,"end":7043952,"text":"알아서 Spring Boot가 다 가지고와 연결하고 사용할 수 있게 준비해줬구나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547132496,"relativeStart":7043950,"segments":[{"start":7043950,"end":7047950,"text":"라고만 보셔도 된다는 거예요.","speaker":""},{"start":7047950,"end":7049950,"text":"자, 그래서 일단은 여기까지","speaker":""},{"start":7049950,"end":7053950,"text":"우리는 어플리케이션 야물이라는 설정 파일도 확인을 해봤고","speaker":""},{"start":7053950,"end":7059950,"text":"그리고 빌드 그레이드, 빌드 도구가 어떤 의존성들을 추가해 주는지","speaker":""},{"start":7059950,"end":7064950,"text":"실제 우리가 선택한 것들을 추가해 줬는지 같이 한번 확인을 해볼 수 있는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547161683,"relativeStart":7064960,"segments":[{"start":7064960,"end":7067760,"text":"여기까지 내용은 어렵지 않게 이해하실 수 있겠죠?","speaker":""},{"start":7067760,"end":7073360,"text":"그냥 프로젝트 만들 때 설정했던 걸 다시 확인을 한 거예요.","speaker":""},{"start":7073360,"end":7075340,"text":"실제 프로젝트 들어와서","speaker":""},{"start":7075340,"end":7079240,"text":"이해되시는 분들은 엄지, 이모지 한 번씩 눌러주세요.","speaker":""},{"start":7079240,"end":7084579,"text":"끊이지 않는 슬픔위들이 있어요.","speaker":""},{"start":7084579,"end":7090279,"text":"간단하게 추가한 것들을 다시 확인을 한 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547189586,"relativeStart":7090272,"segments":[{"start":7090272,"end":7093752,"text":"야물 파일의 색깔이","speaker":""},{"start":7093752,"end":7097672,"text":"아 이게 초록색이 아닌 걸까요","speaker":""},{"start":7097672,"end":7105792,"text":"이거는 인텔리제이의 버전에 따라서 혹은 그레이들 버전에 따라서 조금씩 차이가 있을 수는 있어요","speaker":""},{"start":7105792,"end":7109572,"text":"근데 제가 아까 얘기했었던 여기 모양 있죠","speaker":""},{"start":7109572,"end":7111572,"text":"얘만 잘 나오면 돼요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547211601,"relativeStart":7111568,"segments":[{"start":7111568,"end":7119008,"text":"얘가 주황색 컷 모양, 그 자바 컷 모양이 아니라 지금의 클래스 파일의 모양으로 나오기만 하면은","speaker":""},{"start":7119008,"end":7121308,"text":"이 아이콘이 다른 건 상관없어요.","speaker":""},{"start":7121308,"end":7125728,"text":"그러면 다들 문제없는 걸까요?","speaker":""},{"start":7125728,"end":7128408,"text":"네.","speaker":""},{"start":7128408,"end":7130568,"text":"문제 없으신 것 같아요.","speaker":""},{"start":7130568,"end":7131848,"text":"일단은 다르면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547232598,"relativeStart":7131852,"segments":[{"start":7131852,"end":7133312,"text":"뭔가 좀 불안하긴 하죠","speaker":""},{"start":7133312,"end":7135152,"text":"자 그러면","speaker":""},{"start":7135152,"end":7136812,"text":"일단은 여기까지는","speaker":""},{"start":7136812,"end":7138072,"text":"다들 이해가 되신 것 같으니까","speaker":""},{"start":7138072,"end":7139192,"text":"이제 우리가","speaker":""},{"start":7139192,"end":7142872,"text":"실제로 스프링 부트를 한번 돌려보도록 할 거예요","speaker":""},{"start":7142872,"end":7145032,"text":"그래서 어떻게 돌릴 거냐면","speaker":""},{"start":7145032,"end":7146672,"text":"그레이들은 우리 잠깐","speaker":""},{"start":7146672,"end":7147792,"text":"다시 꺼주도록 할게요","speaker":""},{"start":7147792,"end":7151032,"text":"버튼 누르면은 다시 없어져요","speaker":""},{"start":7151032,"end":7152932,"text":"자 그래서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547257419,"relativeStart":7152929,"segments":[{"start":7152929,"end":7155929,"text":"아까 확인했었던 진입점이라고 한","speaker":""},{"start":7155929,"end":7157589,"text":"북앱 어플리케이션","speaker":""},{"start":7157589,"end":7158429,"text":"이 파일 있죠?","speaker":""},{"start":7158429,"end":7160329,"text":"이 파일로 들어가요.","speaker":""},{"start":7160329,"end":7163549,"text":"그리고 잠시만요.","speaker":""},{"start":7163549,"end":7164569,"text":"애플리케이션","speaker":""},{"start":7164569,"end":7166509,"text":"오른쪽 아래 전원 버튼","speaker":""},{"start":7166509,"end":7169509,"text":"오른쪽 아래","speaker":""},{"start":7169509,"end":7170809,"text":"여기 전원 버튼이고요?","speaker":""},{"start":7170809,"end":7172389,"text":"일단은 이것도","speaker":""},{"start":7172389,"end":7174109,"text":"상관은 없어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547279196,"relativeStart":7174107,"segments":[{"start":7174107,"end":7177907,"text":"이것도 버전에 따라서 조금의 차이가 있는 것 같아요.","speaker":""},{"start":7177907,"end":7181907,"text":"그래서 일단은 지금 우리가 실행을 한번 해볼 건데","speaker":""},{"start":7181907,"end":7185947,"text":"이때 실행만 잘 되면 아이콘은 크게 상관은 없어요.","speaker":""},{"start":7185947,"end":7189947,"text":"아까 얘기한 그 자바컴보안만 아니면 돼요.","speaker":""},{"start":7189947,"end":7195367,"text":"네. 그러면 우리가 한번 실행을 해보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547301203,"relativeStart":7195370,"segments":[{"start":7195370,"end":7198590,"text":"그래서 아까 얘기한 대로 북 앱 애플리케이션 있죠?","speaker":""},{"start":7198590,"end":7200230,"text":"이 파일로 돌아오세요.","speaker":""},{"start":7200230,"end":7205110,"text":"그리고 여기서 실행을 한번 해보도록 할게요.","speaker":""},{"start":7205110,"end":7211010,"text":"그래서 실행할 때는 이 위쪽에 있는 박스 모양, 박스에 삼각형 모양 있죠?","speaker":""},{"start":7211010,"end":7216970,"text":"얘를 눌러주시면 되고 이때는 북 앱 애플리케이션이 잘 선택되어 있는지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547323219,"relativeStart":7216970,"segments":[{"start":7216970,"end":7219350,"text":"한번 추가로 확인해 주시면 더 좋아요.","speaker":""},{"start":7219350,"end":7222350,"text":"그래서 제가 실행을 한번 눌러볼게요.","speaker":""},{"start":7222350,"end":7224350,"text":"그랬더니","speaker":""},{"start":7224350,"end":7227430,"text":"시간이 조금 걸려요.","speaker":""},{"start":7227430,"end":7232510,"text":"뭔가가 아래쪽에 쭉 나오죠?","speaker":""},{"start":7232510,"end":7236089,"text":"아마 여러분들도 쭉 나올 거예요.","speaker":""},{"start":7236089,"end":7237750,"text":"그래서 쭉 나오다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547345239,"relativeStart":7237760,"segments":[{"start":7237760,"end":7242559,"text":"더 이상의 무언가가 로그가 올라오지는 않고 있어요.","speaker":""},{"start":7242559,"end":7248920,"text":"그리고 이 로그 중에 오른쪽으로 옮겨서 보면은 여기","speaker":""},{"start":7248920,"end":7252260,"text":"자, comable bookapp","speaker":""},{"start":7252260,"end":7255260,"text":"일단 우리가 만든 프로젝트 이름 맞죠?","speaker":""},{"start":7255260,"end":7259440,"text":"그리고 그 뒤에 bookapp application이라고 되어 있네요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547370317,"relativeStart":7259444,"segments":[{"start":7259444,"end":7263524,"text":"어? 그러면 우리가 실행시킨 이 파일이 맞아요","speaker":""},{"start":7263524,"end":7265524,"text":"그리고 뒤쪽에는","speaker":""},{"start":7265524,"end":7271224,"text":"StartedBookAppAppApplication in 1.653seconds 라고 나오죠","speaker":""},{"start":7271224,"end":7275204,"text":"그러면 어? 일단은 실행을 잘 했다는 거예요","speaker":""},{"start":7275204,"end":7279184,"text":"물론 뒤에는 얼만큼의 시간이 소요됐는지 알려주는데","speaker":""},{"start":7279184,"end":7282264,"text":"우리는 Started 이 친구만 보면은","speaker":""},{"start":7282264,"end":7283944,"text":"아 실행이 됐구나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547395416,"relativeStart":7283946,"segments":[{"start":7283946,"end":7287266,"text":"잘 시작됐구나라는 걸 이해해주시면 돼요.","speaker":""},{"start":7287266,"end":7291886,"text":"일단은 여기까지 한번 띄워주시면 될 것 같아요.","speaker":""},{"start":7291886,"end":7296566,"text":"이거 왼쪽에서 오른쪽으로 쭉 옮긴 거예요.","speaker":""},{"start":7296566,"end":7299906,"text":"잘 되신 분들은 엄지, 무지.","speaker":""},{"start":7299906,"end":7304206,"text":"잘 안 되신 분들은 빨리 말씀해주셔야 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547425115,"relativeStart":7304203,"segments":[{"start":7304203,"end":7310603,"text":"여러분들 뭐가 잘 안되나요? 왜? 슬픔이가 왜 꾸준히 올라오죠?","speaker":""},{"start":7310603,"end":7314443,"text":"일단은 잘 되시는 분들은 많은 것 같아요.","speaker":""},{"start":7314443,"end":7319543,"text":"8080포트가 이미 사용중이라고 뜨나요?","speaker":""},{"start":7319543,"end":7325063,"text":"혹시 그러면 이거 아까 전에 한번 실행을 시키셨을까요?","speaker":""},{"start":7325063,"end":7327203,"text":"아니면 인텔리지에 2개가 실행이 되고 있거나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547449686,"relativeStart":7327214,"segments":[{"start":7327214,"end":7333454,"text":"아니면 저도 8080번 포트가 이미 사용 중이라고 떠요","speaker":""},{"start":7333454,"end":7336954,"text":"라고 하시는 분들이 있으면 또 말씀해 주시면 돼요","speaker":""},{"start":7336954,"end":7341754,"text":"만약에 한 명이 문제라면 그때는 1:1 문의로 빠르게 넘겨서","speaker":""},{"start":7341754,"end":7344354,"text":"튜토분들이 해결을 하실 수 있게 도와드릴 거고","speaker":""},{"start":7344354,"end":7348114,"text":"만약 여러 명이 문제라면 같이 해결을 하고 넘어가야 될 것 같아서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547474518,"relativeStart":7348122,"segments":[{"start":7348122,"end":7351002,"text":"여러분들한테 추가로 얘기해주세요 라고 하는 거예요.","speaker":""},{"start":7351002,"end":7356702,"text":"일단은 한 분만 계신 것 같죠?","speaker":""},{"start":7356702,"end":7360182,"text":"그래서 8080번 포트가 이미 사용 중이라면","speaker":""},{"start":7360182,"end":7363122,"text":"시스템을 끄고","speaker":""},{"start":7363122,"end":7365662,"text":"여기 작업관리자 같은 거 들어가서","speaker":""},{"start":7365662,"end":7368222,"text":"자바에 관련된 내용을 모두 다 한번 끄고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547497571,"relativeStart":7368220,"segments":[{"start":7368220,"end":7374280,"text":"프로젝트를 다시 실행시켜서 런까지 눌러보시면 아마 해결이 되는 경우들이 있어요.","speaker":""},{"start":7374280,"end":7379120,"text":"그럼에도 불구하고 안 되는 사람들은 재부팅까지 한번 해줘야 돼요.","speaker":""},{"start":7379120,"end":7386700,"text":"이게 여러분들 눈에 보이지 않는 곳에서 뒷단에서 백그라운드에 숨어가지고 실행되는 경우들이 있기 때문에","speaker":""},{"start":7386700,"end":7391100,"text":"그런 경우는 찾아내는 것보다 빠르게 재부팅이 나을 수도 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547518305,"relativeStart":7391103,"segments":[{"start":7391103,"end":7399103,"text":"만약 그럼에도 불구하고 안 되시는 분들은 따로 그 4명 캡쳐 해가지고 1대 1 문의 남겨주시면 돼요.","speaker":""},{"start":7399103,"end":7407563,"text":"일단은 동일한 문제를 가지신 분들은 없는 것 같으니까 이어서 한번 진행을 해볼게요.","speaker":""},{"start":7407563,"end":7412443,"text":"자 그래서 실행자체는 잘 된 것 같으니까 이번에는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547542362,"relativeStart":7412450,"segments":[{"start":7412450,"end":7416450,"text":"우리가 톰캣 서버에 한번 접근을 해보도록 할게요.","speaker":""},{"start":7416450,"end":7419450,"text":"그래서 접근할 때는 어떻게 하냐면","speaker":""},{"start":7419450,"end":7425450,"text":"아까 웹브라우저 하나 있죠? 이거 한번 다시 띄워주시면 돼요.","speaker":""},{"start":7425450,"end":7430450,"text":"그래서 웹브라우저에다가 도메인을 한번 입력을 해보도록 할게요.","speaker":""},{"start":7430450,"end":7434950,"text":"여기 보면 우리가 어떻게 접근할 거냐면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547562333,"relativeStart":7434944,"segments":[{"start":7434944,"end":7440304,"text":"로컬 호스트, 그리고 뒤쪽에다가는 8080.","speaker":""},{"start":7440304,"end":7444424,"text":"우리 아까 작성했었던 포트 번호 있죠?","speaker":""},{"start":7444424,"end":7447444,"text":"그 포트 번호를 입력을 해주시면 돼요.","speaker":""},{"start":7447444,"end":7452444,"text":"마치 우리가 비트, 프론트엔드에서 비트 서버에 접근을 했던 것처럼.","speaker":""},{"start":7452444,"end":7455384,"text":"그래서 이거 누르고.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547589470,"relativeStart":7455380,"segments":[{"start":7455380,"end":7457380,"text":"엔터 누르면","speaker":""},{"start":7457380,"end":7461380,"text":"어! 강사님 에러 페이지 떠요.","speaker":""},{"start":7461380,"end":7464380,"text":"파이트라벨 에러 페이지가 뜨는데요.","speaker":""},{"start":7464380,"end":7466380,"text":"라고 할 수 있긴 하지만","speaker":""},{"start":7466380,"end":7468380,"text":"이거 뜨는 게 정상이에요.","speaker":""},{"start":7468380,"end":7470380,"text":"안 뜨면 문제가 있는 거고","speaker":""},{"start":7470380,"end":7472380,"text":"이게 떠야 정상이에요.","speaker":""},{"start":7472380,"end":7475380,"text":"왜냐면 파이트라벨 에러 페이지는","speaker":""},{"start":7475380,"end":7479380,"text":"지금 이 도메인을 통해 접근을 했는데","speaker":""},{"start":7479380,"end":7481960,"text":"해당 도메인에서 띄워줄 파일이 없어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547610208,"relativeStart":7481958,"segments":[{"start":7481958,"end":7484258,"text":"라고 문제를 띄워주고 있는 거예요.","speaker":""},{"start":7484258,"end":7486118,"text":"왜냐하면 우리가","speaker":""},{"start":7486118,"end":7488338,"text":"별도의 프론트엔드 단의 페이지를","speaker":""},{"start":7488338,"end":7489438,"text":"만들지는 않았었죠?","speaker":""},{"start":7489438,"end":7491958,"text":"그렇기 때문에 띄울 게 없어요","speaker":""},{"start":7491958,"end":7493098,"text":"라고 하는 것 뿐이지","speaker":""},{"start":7493098,"end":7495458,"text":"접속 자체는 잘 된 거예요.","speaker":""},{"start":7495458,"end":7497958,"text":"그래서 일단은 여기까지","speaker":""},{"start":7497958,"end":7500098,"text":"페이지가 잘 뜨는지 확인해주시면 되는데","speaker":""},{"start":7500098,"end":7501558,"text":"잘 뜨시는 분들은","speaker":""},{"start":7501558,"end":7502958,"text":"우리 엄지, 이모지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547637842,"relativeStart":7502950,"segments":[{"start":7502950,"end":7506050,"text":"역시나 잘 안되시는 분들은 슬픔 한 번씩만 눌러주세요.","speaker":""},{"start":7506050,"end":7510610,"text":"그리고 슬픔이신 분들은 계속 얘기했지만","speaker":""},{"start":7510610,"end":7513310,"text":"빠르게 한 번씩 말씀해주셔야 돼요. 어떤 문제가 있는지.","speaker":""},{"start":7513310,"end":7519790,"text":"네, 일단 여기까지는 다들 잘 되는 것 같죠?","speaker":""},{"start":7519790,"end":7521710,"text":"그래서 제가 얘기했던 것처럼","speaker":""},{"start":7521710,"end":7524350,"text":"어플리케이션 야물 파일이나","speaker":""},{"start":7524350,"end":7527330,"text":"그리고 북 애플리케이션에서 전원 버튼","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547660133,"relativeStart":7527335,"segments":[{"start":7527335,"end":7529975,"text":"이런 거는 조금 달라도 돼요.","speaker":""},{"start":7529975,"end":7531235,"text":"다만","speaker":""},{"start":7531235,"end":7533115,"text":"북 애플리케이션","speaker":""},{"start":7533115,"end":7535635,"text":"북 앱 애플리케이션 이 파일이","speaker":""},{"start":7535635,"end":7538095,"text":"이렇게 이상한 컵 모양으로 나오게 되면","speaker":""},{"start":7538095,"end":7540375,"text":"그때는 아예 인식이 안 된 거니까","speaker":""},{"start":7540375,"end":7543075,"text":"반드시 클래스 파일로 바뀌었는지만","speaker":""},{"start":7543075,"end":7544154,"text":"잘 확인해 주시면 될 거예요.","speaker":""},{"start":7544154,"end":7546194,"text":"자 그러면","speaker":""},{"start":7546194,"end":7548255,"text":"일단 여기까지는","speaker":""},{"start":7548255,"end":7548954,"text":"다들","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547680089,"relativeStart":7548951,"segments":[{"start":7548951,"end":7551151,"text":"문제없이 프로젝트 만들고","speaker":""},{"start":7551151,"end":7553431,"text":"동작까지도 잘 되는 것 같으니","speaker":""},{"start":7553431,"end":7556331,"text":"이제 우리가 실행하는 과정은","speaker":""},{"start":7556331,"end":7557911,"text":"모두 다 마쳤다고 볼 수 있을 거예요.","speaker":""},{"start":7557911,"end":7560571,"text":"그래서 다음으로는","speaker":""},{"start":7560571,"end":7563111,"text":"우리가 여기 실행하는 과정까지","speaker":""},{"start":7563111,"end":7564111,"text":"모두 다 실행한 거예요.","speaker":""},{"start":7564111,"end":7566791,"text":"그리고 다음으로는","speaker":""},{"start":7566791,"end":7569191,"text":"그러면 이 강의에서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547702111,"relativeStart":7569185,"segments":[{"start":7569185,"end":7573065,"text":"현재 프로젝트의 구조를 어떻게 만들어 나갈 건지","speaker":""},{"start":7573065,"end":7576325,"text":"그에 대한 내용까지도 한번 확인을 해보도록 할게요.","speaker":""},{"start":7576325,"end":7580805,"text":"그래서 일단은 앞에 보이는 것처럼","speaker":""},{"start":7580805,"end":7584065,"text":"com-able-book-app","speaker":""},{"start":7584065,"end":7588805,"text":"이게 우리가 지금 기본적으로 가지고 있는 도매인 경로죠.","speaker":""},{"start":7588805,"end":7591605,"text":"그리고 우리는 그 하위에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547723099,"relativeStart":7591595,"segments":[{"start":7591595,"end":7596595,"text":"북앱 애플리케이션 자바 이 파일까지도 확인했고","speaker":""},{"start":7596595,"end":7599995,"text":"이 파일을 통해서 실제 서버를 실행시켜","speaker":""},{"start":7599995,"end":7603595,"text":"파이 트라벨 에러 페이지까지도 접속을 한 거예요.","speaker":""},{"start":7603595,"end":7610194,"text":"자, 그리고 이후 하위에 어떤 파일들을 더 만들도록 할 거냐면","speaker":""},{"start":7610194,"end":7612315,"text":"우리가 앞에서 확인했었던","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547747932,"relativeStart":7612317,"segments":[{"start":7612317,"end":7615317,"text":"관제탑의 역할을 해주는 컨트롤러.","speaker":""},{"start":7615317,"end":7619817,"text":"폴더 만들고, 북 컨트롤러 잡아. 소스팸 만들어요.","speaker":""},{"start":7619817,"end":7625817,"text":"그리고 그 하위, 그리고 또 아래는 서비스 폴더 만들고","speaker":""},{"start":7625817,"end":7628817,"text":"그리고 안에는 북 서비스 잡아.","speaker":""},{"start":7628817,"end":7632317,"text":"그래서 북 서비스는 여러분들이 앞으로","speaker":""},{"start":7632317,"end":7637017,"text":"도서를 등록하거나, 도서를 삭제하거나, 수정하거나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547769181,"relativeStart":7637022,"segments":[{"start":7637022,"end":7645902,"text":"그리고 도서에 대한 내용을 아예 생성하거나 이런 과정에 대한 기능들을 가지고 있을 파일이 될 거예요.","speaker":""},{"start":7645902,"end":7651102,"text":"그리고 또 아래는 우리 Repository라는 폴더가 있죠.","speaker":""},{"start":7651102,"end":7657942,"text":"그래서 Repository는 앞서 이야기하기로 데이터베이스에 접근하는 용도로 사용할 거에요 라고 했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547790172,"relativeStart":7657947,"segments":[{"start":7657947,"end":7663367,"text":"그래서 서비스 로직에서 실제 무언가 책을 등록해주세요 라고 오면","speaker":""},{"start":7663367,"end":7667507,"text":"이 요청에 따라서 데이터베이스에 접근해","speaker":""},{"start":7667507,"end":7673787,"text":"책을 만드는 과정에 허리문을 보낼 수 있는 역할을 해주게 될 거예요","speaker":""},{"start":7673787,"end":7679167,"text":"그리고 맨 아래 우리 북이라는 도메인도 있죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547811173,"relativeStart":7679176,"segments":[{"start":7679176,"end":7692576,"text":"도메인 폴더 안에 book이라는 파일도 있죠. 그래서 이 book 파일은 우리가 앞으로 데이터베이스에서 다루고자 하는 테이블을 만드는 과정이라고 보시면 돼요.","speaker":""},{"start":7692576,"end":7699956,"text":"그래서 테이블이라는 단어가 조금은 생소할 수 있기는 한데 그냥 간단하게 하나의","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547831130,"relativeStart":7699949,"segments":[{"start":7699949,"end":7702509,"text":"데이터베이스를 만든다고 보시면 돼요.","speaker":""},{"start":7702509,"end":7705089,"text":"그래서 보통 데이터베이스 보면은","speaker":""},{"start":7705089,"end":7706089,"text":"우리 여기에","speaker":""},{"start":7706089,"end":7710489,"text":"이런 식으로 표 형식으로 많이 표현을 해주죠.","speaker":""},{"start":7710489,"end":7714089,"text":"그리고 첫 번째는 아이디라는 걸 지정해주고","speaker":""},{"start":7714089,"end":7718609,"text":"두 번째로는 책의 네임, 이름 같은 것도 있을 거고","speaker":""},{"start":7718609,"end":7720089,"text":"그리고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547851108,"relativeStart":7720081,"segments":[{"start":7720081,"end":7727081,"text":"다음으로는 우리 아서, 작가 지은이에 대한 내용도 있을 거고","speaker":""},{"start":7727081,"end":7734081,"text":"또 아래 내용에는 코멘트 같은 또 추가적인 내용들이 있을 거예요.","speaker":""},{"start":7734081,"end":7740221,"text":"그럼 여기다가 데이터를 하나하나하나 이렇게 넣어서 만들어 나가죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547872620,"relativeStart":7740213,"segments":[{"start":7740213,"end":7741953,"text":"마치 엑셀표와 같이","speaker":""},{"start":7741953,"end":7745533,"text":"그래서 이런 하나의 표 자체를","speaker":""},{"start":7745533,"end":7748153,"text":"우리는 테이블이라고 불러요.","speaker":""},{"start":7748153,"end":7753453,"text":"그리고 이 테이블을 만들어주는 용도의 클래스가","speaker":""},{"start":7753453,"end":7755713,"text":"또 부기 될 거예요.","speaker":""},{"start":7755713,"end":7759653,"text":"그래서 이거는 뒤에서 또 설명을 하겠지만","speaker":""},{"start":7759653,"end":7761713,"text":"우리가 지금 바로는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547896421,"relativeStart":7761711,"segments":[{"start":7761711,"end":7769511,"text":"Spring 그리고 Java에서의 클래스가 이런 하나의 테이블이 된다 라고 보시면 돼요.","speaker":""},{"start":7769511,"end":7775431,"text":"아마 이거는 오늘 조금 있다가 같이 한번 진행을 해볼 수 있을 것 같아요.","speaker":""},{"start":7775431,"end":7782111,"text":"그래서 이런 식으로 진행이 돼서 앞에 얘기했던 것처럼 컨트롤러는 요청을 처리하는 역할이 될 거고","speaker":""},{"start":7782111,"end":7785431,"text":"서비스는 실제 실행시킬 로직에 대한 내용을","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547918432,"relativeStart":7785438,"segments":[{"start":7785438,"end":7788178,"text":"레퍼지토리는 DB에 접근하는 내용을","speaker":""},{"start":7788178,"end":7790638,"text":"그리고 도메인은 클래스를","speaker":""},{"start":7790638,"end":7795298,"text":"각각의 테이블로 만드는 엔티티 클래스의 역할을 해준다는 거죠.","speaker":""},{"start":7795298,"end":7799298,"text":"그래서 여러분들은 이런 구조를 가지게 될 거고","speaker":""},{"start":7799298,"end":7801878,"text":"지금 당장 바로 만드는 게 아니라","speaker":""},{"start":7801878,"end":7804278,"text":"하나하나씩 만들어 나가서","speaker":""},{"start":7804278,"end":7806958,"text":"최종적으로는 이 구조가 되는 거다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547938657,"relativeStart":7806953,"segments":[{"start":7806953,"end":7808073,"text":"라고 보시면 돼요.","speaker":""},{"start":7808073,"end":7813893,"text":"그래서 일단은 우리가 여기까지 내용을 진행을 하고","speaker":""},{"start":7813893,"end":7817033,"text":"다음 챕터에서는 어떤 걸 진행을 할 거냐면","speaker":""},{"start":7817033,"end":7821673,"text":"실제 클라이언트와 소통하는 방식들에 대해서","speaker":""},{"start":7821673,"end":7824253,"text":"조금 더 자세하게 알아보도록 할 거예요.","speaker":""},{"start":7824253,"end":7827713,"text":"그래서 어떤 방식을 통해서 소통을 하는지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547961452,"relativeStart":7827710,"segments":[{"start":7827710,"end":7832890,"text":"그리고 우리가 실제 컨트롤러라는 걸 만들어서","speaker":""},{"start":7832890,"end":7837750,"text":"클라이언트의 요청에 맞게 데이터를 처리하는 과정까지도","speaker":""},{"start":7837750,"end":7839770,"text":"아주 간단하게 진행해보도록 할 거예요.","speaker":""},{"start":7839770,"end":7842470,"text":"그러면 일단은 여기까지","speaker":""},{"start":7842470,"end":7846910,"text":"어떤 구조 형식으로 만들 거다라는 것 자체는 이해하실 수 있겠죠?","speaker":""},{"start":7846910,"end":7850130,"text":"여기까지는 이해하실 수 있겠죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547972196,"relativeStart":7850255,"segments":[{"start":7850255,"end":7853615,"text":"엄지 모자 한 번씩만 눌러주세요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780547997284,"relativeStart":7854924,"segments":[{"start":7854924,"end":7864924,"text":"음 그러면 여기까지는 다들 잘 따라오고 계신 것 같아요. 그래서 이번에는 앞서 얘기한 대로 소통 방식에 대해서 한번 알아보도록 할게요.","speaker":""},{"start":7864924,"end":7877944,"text":"자 그래서 우리는 첫 번째로 알아볼게 mvc 패턴 이해라고 할 수 있는데 얘를 바로 설명을 하기보다는 실제 유닛으로 들어가서 하나씩 설명을 해보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548018275,"relativeStart":7878846,"segments":[{"start":7878846,"end":7885606,"text":"그래서 여기 일단 MVC 패턴을 이해하기 위해서는 웹이 동작하는 원리를 알아야 돼요.","speaker":""},{"start":7885606,"end":7889346,"text":"그리고 이 원리는 우리가 처음 보는 건 아니죠.","speaker":""},{"start":7889346,"end":7899326,"text":"우리 프론트엔드에서도 클라이언트 단을 만들려면 어떤 식으로 요청을 하고 그 요청에 대한 응답을 받는지 알아야 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548038236,"relativeStart":7899327,"segments":[{"start":7899327,"end":7904747,"text":"라고 하면서 클라이언트의 입장이 돼서 내용을 설명하고 이해를 했었어요.","speaker":""},{"start":7904747,"end":7911747,"text":"그런데 이번에는 그 입장이 클라이언트에서 서버 쪽으로 넘어온 것 뿐이에요.","speaker":""},{"start":7911747,"end":7916627,"text":"그렇기 때문에 전체적인 흐름이나 로직 자체는 당연히 동일하겠죠.","speaker":""},{"start":7916627,"end":7919567,"text":"그래서 다시 한번 설명을 하면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548059236,"relativeStart":7919560,"segments":[{"start":7919560,"end":7923220,"text":"클라이언트는 우리가 보고 있는 브라우저가 될 거고","speaker":""},{"start":7923220,"end":7928960,"text":"이 브라우저에서는 그에 따른 요청을 보내게 돼요. 리퀘스트를.","speaker":""},{"start":7928960,"end":7934500,"text":"그러면 우리는 이 리퀘스트에 맞춰서 서버에 보내고","speaker":""},{"start":7934500,"end":7940260,"text":"서버는 들어온 리퀘스트, 요청에 맞는 로직들을 처리를 해주게 되겠죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548079210,"relativeStart":7940249,"segments":[{"start":7940249,"end":7952309,"text":"만약 이게 조회해주세요라는 로직이라면 DB에 접근해서 우리가 조회에 필요한 데이터를 읽고 가지고 오는 과정을","speaker":""},{"start":7952309,"end":7960269,"text":"만약 생성하는 과정, 포스트 요청이라면 그때는 등록할 수 있는 SQL 쿼리를 보내고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548101214,"relativeStart":7960280,"segments":[{"start":7960280,"end":7966160,"text":"실제 DB에서 만든 뒤 만들어진 결과를 가져다가 보내주게 될 거예요.","speaker":""},{"start":7966160,"end":7970399,"text":"그리고 수정하는 것도 수정하는 요청에 대한 내용 처리","speaker":""},{"start":7970399,"end":7974899,"text":"삭제하는 것도 DB에 가서 삭제하는 이런 기능들을 할 거예요.","speaker":""},{"start":7974899,"end":7982040,"text":"그래서 이런 식으로 처리가 돼서 결국 요청에 대한 응답, 리스폰스를 넘겨받게 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548124254,"relativeStart":7982031,"segments":[{"start":7982031,"end":7983731,"text":"라고 얘기할 수 있다는 거죠.","speaker":""},{"start":7983731,"end":7985531,"text":"그리고","speaker":""},{"start":7985531,"end":7987911,"text":"여기서 리퀘스트를 보낼 때는","speaker":""},{"start":7987911,"end":7990671,"text":"우리 도메인을 먼저 작성을 했었죠.","speaker":""},{"start":7990671,"end":7992011,"text":"그리고","speaker":""},{"start":7992011,"end":7993991,"text":"http 메소드","speaker":""},{"start":7993991,"end":7996191,"text":"어떤 요청을 할 건지","speaker":""},{"start":7996191,"end":7998791,"text":"get, post, patch, delete","speaker":""},{"start":7998791,"end":8000311,"text":"각각의 메소드를","speaker":""},{"start":8000311,"end":8001511,"text":"사용을 했었죠.","speaker":""},{"start":8001511,"end":8003751,"text":"그리고 response","speaker":""},{"start":8003751,"end":8004951,"text":"응답할 때는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548148059,"relativeStart":8004948,"segments":[{"start":8004948,"end":8008488,"text":"우리 그냥 데이터를 바로 주는 게 아니라","speaker":""},{"start":8008488,"end":8012288,"text":"상태 코드라는 걸 같이 포함해서 준다고 했었어요.","speaker":""},{"start":8012288,"end":8016868,"text":"그래서 현재 요청이 정상적으로 처리가 된 건지","speaker":""},{"start":8016868,"end":8019768,"text":"아니면 문제가 발생했는데","speaker":""},{"start":8019768,"end":8022548,"text":"이 문제가 서버에 의한 문제인지","speaker":""},{"start":8022548,"end":8025668,"text":"아니면 클라이언트에 대한 의한 문제인지","speaker":""},{"start":8025668,"end":8029008,"text":"그 문제를 포함해서 보내준다고 했어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548170078,"relativeStart":8029298,"segments":[{"start":8029298,"end":8033218,"text":"그래서 이런 식으로 전체적인 흐름의 구조를 갖는데","speaker":""},{"start":8033218,"end":8035918,"text":"우리가 지금 중요하게 봐야 될 건","speaker":""},{"start":8035918,"end":8041538,"text":"그러면 서버에서는 실제 어떤 식으로 동작이 이루어지는지","speaker":""},{"start":8041538,"end":8044918,"text":"그 내용을 더 자세히 알아볼 필요가 있다는 거죠","speaker":""},{"start":8044918,"end":8051478,"text":"그래서 이번에는 서버 안에서 이 응답을 어떻게 처리하고 보내주는지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548192109,"relativeStart":8051472,"segments":[{"start":8051472,"end":8065892,"text":"그에 대한 내용을 자세하게 알아보도록 할 건데 지금 시간이 해당 과정까지 다 진행하기에는 조금 애매할 것 같아서 43분이긴 한데 우리 53분까지 10분 쉬었다가 진행을 해보도록 할게요.","speaker":""},{"start":8065892,"end":8073272,"text":"우리가 50분이면 또 쉬는 시간이 되니까 일단 쉬는 시간 먼저 한번 가졌다가 진행할 건데 쉬는 시간 너무 이른가요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548226925,"relativeStart":8073275,"segments":[{"start":8073275,"end":8076415,"text":"아니면 쉬는 시간을","speaker":""},{"start":8076415,"end":8078155,"text":"더 길게 달라는 걸까요","speaker":""},{"start":8078155,"end":8081675,"text":"쉬는 시간 우리 2시까지 주세요라는 걸까요","speaker":""},{"start":8081675,"end":8087155,"text":"그러면 잠시만요 여러분","speaker":""},{"start":8087155,"end":8088895,"text":"뒤에 설명할 거 잠깐만 볼게요","speaker":""},{"start":8088895,"end":8091215,"text":"잠깐 딱 10초?","speaker":""},{"start":8091215,"end":8092095,"text":"10초 20초만","speaker":""},{"start":8092095,"end":8099635,"text":"일단은 설명할 게 조금 많기는 한데","speaker":""},{"start":8099635,"end":8100595,"text":"그래도","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548247915,"relativeStart":8100595,"segments":[{"start":8100595,"end":8105595,"text":"제가 이제 프론트엔드나 자바 진행할 때는 쉬는 시간 더 많이 못 주긴 했죠.","speaker":""},{"start":8105595,"end":8110095,"text":"그래서 오늘 백엔드 첫날이니까","speaker":""},{"start":8110095,"end":8114095,"text":"그럼 14시까지 너무 많이 주는 것 같기는 한데","speaker":""},{"start":8114095,"end":8118595,"text":"14시까지 쉬는 시간 한번 갖도록 할게요.","speaker":""},{"start":8118595,"end":8120995,"text":"그리고 14시부터는 서버 내부에서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780548262253,"relativeStart":8120997,"segments":[{"start":8120997,"end":8124557,"text":"어떤 식으로 요청을 처리하고 응답 보내주는지 알아보도록 할게요.","speaker":""},{"start":8124557,"end":8127397,"text":"14시까지 10분, 아니 10분이죠.","speaker":""},{"start":8127397,"end":8130057,"text":"좀 쉬었다가 진행할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549334745,"relativeStart":8130168,"segments":[{"start":8130168,"end":8138668,"text":"나오고 있어요. 역할 분리 관리가 쉬워져요. 책임을 하나씩 돌리려고 그리고 결합도 완화 라고까지 얘기가 나와요.","speaker":""},{"start":8138668,"end":8151688,"text":"근데 지금 내용들이 모두가 어 뭔가 역할을 분리해주고 이것들을 나중에 우리가 관리하면서 각각의 결합도를 낮춰주기 위해서라고 얘기를 해볼 수 있겠죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549356493,"relativeStart":8151701,"segments":[{"start":8151701,"end":8156341,"text":"그래서 역시나 여러분들이 예상한 내용이 바로 답이 돼요.","speaker":""},{"start":8156341,"end":8163541,"text":"그래서 만약 이 세 개를 따로 나누지 않고 정말로 그냥 하나로 묶어서 다뤄버리게 되면","speaker":""},{"start":8163541,"end":8169281,"text":"그때는 내가 화면에 뭔가 출력해주는 과정에 대해서 변경을 하려고 하면","speaker":""},{"start":8169281,"end":8173301,"text":"그러면 그때는 딱히 연관없는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549380567,"relativeStart":8173301,"segments":[{"start":8173301,"end":8178801,"text":"모델에 대한 내용이나 컨트롤러에 대한 내용들을 다 수정을 해버려야 된다는 거예요.","speaker":""},{"start":8178801,"end":8185101,"text":"로직도 수정하고, 그를 제어해주고 호출해주는 컨트롤러도 수정을 해버려야 되고","speaker":""},{"start":8185101,"end":8189601,"text":"만약 맵핑되어 있는 컨트롤러의 과정을 뭔가 바꾸려고 하면","speaker":""},{"start":8189601,"end":8197341,"text":"역시나 불필요한 화면을 출력해주는 뷰나 로직을 처리하는 모델들까지도 바꿔줘야 된다는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549401548,"relativeStart":8197347,"segments":[{"start":8197347,"end":8205127,"text":"그리고 이 로직들이 한 군데서 막 얽히고 설키다 보면 나중에는 코드 또한 엄청나게 복잡해지겠죠.","speaker":""},{"start":8205127,"end":8219067,"text":"그래서 엉망진창이 되다 보니까 지금의 코드의 가독성도 떨어지고 내가 의도한 바와는 다르게 수정돼서 중간중간 버그가 발생하는 문제들이 정말 많아져요라는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549424595,"relativeStart":8219066,"segments":[{"start":8219066,"end":8230785,"text":"그렇기 때문에 우리는 이렇게 코드가 조금 섞이지 않게끔 내용들을 딱딱 역할을 나눠서 관리를 좀 더 수월하게 만들어주자 라고 얘기할 수 있다는 거죠.","speaker":""},{"start":8230785,"end":8241025,"text":"그래서 이때 내용을 보면 컨트롤러는 말 그대로 특정 요청을 받았을 때 이 요청은 누가 처리하면 되겠다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549444555,"relativeStart":8241290,"segments":[{"start":8241290,"end":8245290,"text":"라고 찾아서 교통정리를 해주는 역할이라고 보시면 돼요.","speaker":""},{"start":8245290,"end":8251730,"text":"만약 특정 로직을 다뤄야 된다면 모델한테 너 이 과정 진행해.","speaker":""},{"start":8251730,"end":8257750,"text":"그리고 그에 따라 응답받고 이걸 가져다가 화면에 그릴 필요가 있다면 뷰한테","speaker":""},{"start":8257750,"end":8261410,"text":"이런 로직 처리했으니까 너가 화면 그려줘.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549464535,"relativeStart":8261405,"segments":[{"start":8261405,"end":8267785,"text":"라고 뷰가 내용을 진행할 수 있게끔 만들어준다는 거죠.","speaker":""},{"start":8267785,"end":8273785,"text":"그리고 이러한 과정들을 잘 나눠두면 나중에는 나 혼자 개발하는 게 아니라","speaker":""},{"start":8273785,"end":8277345,"text":"팀원끼리 여러 인원들이 모여서 개발을 할 때도","speaker":""},{"start":8277345,"end":8281985,"text":"각각의 역할들을 맡아서 담당하고 개발하는 것도","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549488861,"relativeStart":8281992,"segments":[{"start":8281992,"end":8291292,"text":"가능해지겠죠. 그렇기 때문에 여러가지 이점들이 있으므로 MVC 패턴이라는 걸 적용해서 개발을 하게 되요 라는 거죠.","speaker":""},{"start":8291292,"end":8298492,"text":"그래서 지금의 스프링도 이러한 MVC 패턴을 적용해서 개발을 시키게 되고,","speaker":""},{"start":8298492,"end":8305172,"text":"우리는 이걸 제공하는 걸 보고'스프링 MVC'라고 얘기해 줄 수 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549508567,"relativeStart":8305162,"segments":[{"start":8305162,"end":8312462,"text":"그래서 Spring MVC는 Spring 프레임워크에서 제공을 해주는 웹 모듈이라고 보시면 돼요.","speaker":""},{"start":8312462,"end":8319902,"text":"그래서 요청이 왔을 때 이 요청을 어떻게 처리하는지에 대한 내용을 담고 있는 웹 모듈이 되는 거고","speaker":""},{"start":8319902,"end":8325222,"text":"앞에서 얘기한 것처럼 모델, 뷰, 컨트롤러 세 가지 구성 요소를 사용해서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549531860,"relativeStart":8325209,"segments":[{"start":8325209,"end":8330709,"text":"다양한 http 리퀘스트. 이거 우리가 방금 본 거죠.","speaker":""},{"start":8330709,"end":8337209,"text":"클라이언트가 서버 측으로 보내는 요청을 http 리퀘스트라고 했었죠.","speaker":""},{"start":8337209,"end":8339649,"text":"그래서 이러한 요청을 처리하고","speaker":""},{"start":8339649,"end":8342209,"text":"단순한 텍스트 형식의 응답부터","speaker":""},{"start":8342209,"end":8345209,"text":"혹은 화면을 출력해주는 뷰까지도","speaker":""},{"start":8345209,"end":8348409,"text":"HTML을 반환해주는 뷰 응답까지도","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549552595,"relativeStart":8348412,"segments":[{"start":8348412,"end":8352212,"text":"담당할 수 있게 만들어주는 프레임워크다 라는 거예요.","speaker":""},{"start":8352212,"end":8357712,"text":"그래서 얘는 프론트 컨트롤러 패턴에 기초한 웹 MVC 프레임워크","speaker":""},{"start":8357712,"end":8365252,"text":"그래서 프론트 컨트롤러라는 건 컨트롤러가 앞에 배치되어서","speaker":""},{"start":8365252,"end":8369332,"text":"다른 구성 요소들과 상호작용을 하며","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549576654,"relativeStart":8369337,"segments":[{"start":8369337,"end":8374917,"text":"클라이언트 요청을 처리하는 패턴을 프론트 컨트롤러 패턴이라고 불러요.","speaker":""},{"start":8374917,"end":8379397,"text":"조금 더 자세한 구조는 바로 뒷장에서 다루도록 할게요.","speaker":""},{"start":8379397,"end":8385997,"text":"일단은 이러한 내용 컨트롤러가 앞에서 각 내용들을 처리해준다라고 보시면 되고","speaker":""},{"start":8385997,"end":8393737,"text":"이때 앞에서 요청을 처리해주는 건 디스페처 서블렛이라는 걸 통해 처리를 하게 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549602519,"relativeStart":8393739,"segments":[{"start":8393739,"end":8400499,"text":"'어? 강사님 이게 뭔가요? 왜 이름이 이런가요?' 이렇게까지 깊게 들어가실 필요는 없어요.","speaker":""},{"start":8400499,"end":8405799,"text":"'아 그냥 이런 친구가 있고 얘가 어떻게 처리해주는구나' 라는 것만 이해하셔도 돼요.","speaker":""},{"start":8405799,"end":8412499,"text":"그래서 지금처럼 Dispatcher Sublet은 프론트 컨트롤러 패턴에 의해 설계된 진입장으로써","speaker":""},{"start":8412499,"end":8419499,"text":"사용자의 요청을 분석하고 해당 요청을 처리할 컨트롤러를 찾아서 호출하는 역할이 된다는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549622753,"relativeStart":8419490,"segments":[{"start":8419490,"end":8428230,"text":"그래서 일단은 지금의 추상적인 개념들만 다루게 되면은 너무 머리가 아플 수 있으니까 바로 다음 슬라이드로 가서","speaker":""},{"start":8428230,"end":8439750,"text":"요청을 처리하는 순서를 한번 보도록 할게요. 자 그래서 우리는 클라이언트가 이렇게 있어요. 그리고 이 클라이언트는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549643732,"relativeStart":8439757,"segments":[{"start":8439757,"end":8442697,"text":"서버 측으로 요청을 보낼 거예요.","speaker":""},{"start":8442697,"end":8445897,"text":"그래서 요청을 이런 식으로 보내요.","speaker":""},{"start":8445897,"end":8452897,"text":"그러면 이 요청을 우리는 Dispatcher Sublet이라는 이 친구가 받게 되는 거죠.","speaker":""},{"start":8452897,"end":8460217,"text":"그래서 얘는 각각의 상황에 맞는 MVC를","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549664725,"relativeStart":8460209,"segments":[{"start":8460209,"end":8465489,"text":"호출을 해서 그에 따른 로직을 처리하게끔 만들어주는 역할을 하는데","speaker":""},{"start":8465489,"end":8469369,"text":"문제는 여기서도 역할을 또 나누나요.","speaker":""},{"start":8469369,"end":8471809,"text":"어떤 역할을 나눠주냐면","speaker":""},{"start":8471809,"end":8478309,"text":"Dispatcher Sublet의 경우는 각각에 있는 컨트롤러나 뷰 이런 친구도 있죠.","speaker":""},{"start":8478309,"end":8481969,"text":"얘네가 어디에 있는지 몰라요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549685728,"relativeStart":8481961,"segments":[{"start":8481961,"end":8489761,"text":"그것조차도 외부 다른 공간에다가 역할을 위임을 해버린 거죠.","speaker":""},{"start":8489761,"end":8502461,"text":"그래서 바로 컨트롤러를 찾아가는 게 아니라 먼저 핸들러 맵핑이라고 해서 컨트롤러는 어디 있고 뷰는 어디 있고 이 상황에서는 누구를 호출해야 되는지 우리가 정리를 해둔","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549707736,"relativeStart":8502464,"segments":[{"start":8502464,"end":8504544,"text":"컨트롤러, 핸들러","speaker":""},{"start":8504544,"end":8505644,"text":"맵핑이라는","speaker":""},{"start":8505644,"end":8507384,"text":"이 친구한테 가서","speaker":""},{"start":8507384,"end":8509344,"text":"내가 이런 요청 받았어.","speaker":""},{"start":8509344,"end":8512704,"text":"그러니 우리는 어떤 컨트롤러를 호출해야 돼?","speaker":""},{"start":8512704,"end":8514044,"text":"라고 물어보면","speaker":""},{"start":8514044,"end":8515584,"text":"얘가","speaker":""},{"start":8515584,"end":8517364,"text":"지금 상황에는","speaker":""},{"start":8517364,"end":8519924,"text":"이런 특정 컨트롤러를 호출해","speaker":""},{"start":8519924,"end":8522084,"text":"라고 알려주게 돼요.","speaker":""},{"start":8522084,"end":8524824,"text":"그러면 이제는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549728717,"relativeStart":8524824,"segments":[{"start":8524824,"end":8545464,"text":"아, 특정 컨트롤러를 호출해야 되겠구나 라고 인식을 하고 컨트롤러를 찾아가기 위해서 먼저 핸들러 어댑터, 중간에 연결을 해주는, 연결자 다리를 해주는 핸들러 어댑터를 호출해서 얘를 통해 컨트롤러한테 야,","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549749469,"relativeStart":8545462,"segments":[{"start":8545462,"end":8554462,"text":"이런 요청이 와서 우리가 특정 로직을 수행해야 될 것 같아 라고 요청을 또 다시 보내요.","speaker":""},{"start":8554462,"end":8566182,"text":"그러면 컨트롤러는 요청을 받았으니까 내가 어떤 메소드를 실행해야겠구나 라는 걸 이해할 수 있다는 거죠. 그리고 그에 따른 메소드를 실행해서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549771736,"relativeStart":8566167,"segments":[{"start":8566167,"end":8574167,"text":"로직을 쭉 진행을 하면 로직에 대한 결과를 다시 핸들러 어댑터한테 보내서","speaker":""},{"start":8574167,"end":8581167,"text":"얘가 디스페처 서블렛한테 보낼 수 있게끔 만들어주는 거예요.","speaker":""},{"start":8581167,"end":8588167,"text":"그래서 일단은 여기 7번까지의 내용이 이렇게 진행이 된다는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549792737,"relativeStart":8588172,"segments":[{"start":8588172,"end":8593172,"text":"그러면 이 구조를 봤을 때 우리가 이해할 수 있는 건","speaker":""},{"start":8593172,"end":8599292,"text":"정말 각각의 로직을 처리할 수 있는 역할들을 한 군데다가 다 담아두고","speaker":""},{"start":8599292,"end":8605052,"text":"그냥 여기 한 군데 담아두고 요청 오면 여기서 다 처리해서 응답해 주는 게 아니라","speaker":""},{"start":8605052,"end":8609412,"text":"내부적으로는 특정 역할로 가고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549813721,"relativeStart":8609401,"segments":[{"start":8609401,"end":8614801,"text":"응답 받으면 또 다른 역할로 가고 처리하고 또 응답을 받는","speaker":""},{"start":8614801,"end":8620601,"text":"이런 형식으로 역할이 세세하게 분담이 되어 있구나라는 걸 이해할 수 있다는 거예요.","speaker":""},{"start":8620601,"end":8626081,"text":"그래서 지금과 같이 요청에 대한 응답이 왔으면","speaker":""},{"start":8626081,"end":8629021,"text":"우리는 그 다음으로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549834726,"relativeStart":8630276,"segments":[{"start":8630276,"end":8631716,"text":"슬픔이 올라와요.","speaker":""},{"start":8631716,"end":8633176,"text":"그 다음으로","speaker":""},{"start":8633176,"end":8634896,"text":"전달받은 정보를","speaker":""},{"start":8634896,"end":8638096,"text":"뷰 리졸버라는 친구한테","speaker":""},{"start":8638096,"end":8639176,"text":"또 보내고","speaker":""},{"start":8639176,"end":8640976,"text":"그러면","speaker":""},{"start":8640976,"end":8644395,"text":"지금 이 데이터로 화면을 출력하기 위해서는","speaker":""},{"start":8644395,"end":8646196,"text":"누구를 찾아야 되나요?","speaker":""},{"start":8646196,"end":8647515,"text":"라고 물어보는 거예요.","speaker":""},{"start":8647515,"end":8650056,"text":"그럼 뷰 리졸버는","speaker":""},{"start":8650056,"end":8651916,"text":"지금 이 데이터로는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549855706,"relativeStart":8651909,"segments":[{"start":8651909,"end":8655269,"text":"특정 뷰, 누구를 호출해주세요.","speaker":""},{"start":8655269,"end":8657749,"text":"얘를 호출하면 돼요라고 알려주고","speaker":""},{"start":8657749,"end":8661549,"text":"다시 한번 Dispatcher Sublet는","speaker":""},{"start":8661549,"end":8666749,"text":"뷰를 찾아가고 뷰를 통해 화면을 그린 뒤","speaker":""},{"start":8666749,"end":8669509,"text":"그린 내용을 받아서","speaker":""},{"start":8669509,"end":8672269,"text":"그리고 나서 어?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549875684,"relativeStart":8672261,"segments":[{"start":8672261,"end":8678201,"text":"클라이언트한테 너가 호출한 데이터는 이거야","speaker":""},{"start":8678201,"end":8681781,"text":"라고 전달해주게 된다는 거예요.","speaker":""},{"start":8681781,"end":8687101,"text":"그래서 실제로 우리가 매번 그림으로 그릴 때는","speaker":""},{"start":8687101,"end":8692581,"text":"클라이언트 그리고 서버가 이렇게 있으면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549895642,"relativeStart":8692578,"segments":[{"start":8692578,"end":8695878,"text":"그냥 리퀘스트 보내고 리스폰스 받아요.","speaker":""},{"start":8695878,"end":8697778,"text":"이렇게만 얘기를 하지만","speaker":""},{"start":8697778,"end":8702918,"text":"실제 서버의 역할은 계속해서 요청받고","speaker":""},{"start":8702918,"end":8706618,"text":"그에 따른 역할에 맞는 요청 보내고 응답받고","speaker":""},{"start":8706618,"end":8709518,"text":"요청 보내고 응답받고","speaker":""},{"start":8709518,"end":8712718,"text":"또 요청 보내고 응답받는 이러한 과정들이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549915872,"relativeStart":8712727,"segments":[{"start":8712727,"end":8718067,"text":"우리가 생각하는 것보다 훨씬 더 빠르게 진행이 되고 있어요라는 거죠.","speaker":""},{"start":8718067,"end":8725467,"text":"그래서 이게 바로 정통 MVC 방식의 요청 처리 방식이에요.","speaker":""},{"start":8725467,"end":8733027,"text":"앞에서 얘기한 것처럼 역할들을 세세하게 나누고 상황에 맞게끔 그 역할을","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549936872,"relativeStart":8733011,"segments":[{"start":8733011,"end":8739111,"text":"호출하면서 데이터를 처리, 응답, 처리, 응답하는 과정이라는 거죠.","speaker":""},{"start":8739111,"end":8745491,"text":"그래서 여러분들은 지금 이 구조를 봤을 때 이해를 해야 되는 게","speaker":""},{"start":8745491,"end":8749891,"text":"Dispatcher Subleth이 무슨 역할이고, Handler Mapping이 무슨 역할이고,","speaker":""},{"start":8749891,"end":8753891,"text":"Handler, Adapter, Controller, View, 얘네가 무슨 역할이구나.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549959636,"relativeStart":8753885,"segments":[{"start":8753885,"end":8766425,"text":"라는 걸 이해하는 게 아니라 지금처럼 역할을 나눠두고 각각의 상황에 맞는 역할을 후출하는구나 라는 것만 이해하시면 된다는 거예요.","speaker":""},{"start":8766425,"end":8769625,"text":"여기까지는 이해할 수 있을까요?","speaker":""},{"start":8769625,"end":8776165,"text":"이 역할을 이해하는 게 아니라 역할이 분담되어 있고 상황에 따라서 역할을 찾아","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780549987035,"relativeStart":8776160,"segments":[{"start":8776160,"end":8779820,"text":"요청 및 응답을 받는다 라는 것만 이해하시면 돼요.","speaker":""},{"start":8779820,"end":8782300,"text":"여기까지 이해하실 수 있겠죠.","speaker":""},{"start":8782300,"end":8789320,"text":"여기서는 정확히 모델이고 뷰이고 컨트롤러인가요? 라고 해주셨는데","speaker":""},{"start":8789320,"end":8794720,"text":"여기 화면에 보면 컨트롤러와 뷰는 이렇게 있기는 해요.","speaker":""},{"start":8794720,"end":8797620,"text":"근데 모델이 어딨나요? 라고 할 수 있지만","speaker":""},{"start":8797620,"end":8800960,"text":"모델은 현재 그림상으로는 컨트롤러 안에 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550008038,"relativeStart":8800949,"segments":[{"start":8800949,"end":8804169,"text":"안에서 로직을 처리해주는","speaker":""},{"start":8804169,"end":8805649,"text":"모델이 따로 존재하는데","speaker":""},{"start":8805649,"end":8808229,"text":"그걸 그림상으로는 또 따로 표현을 하지는","speaker":""},{"start":8808229,"end":8809949,"text":"않은 거예요. 왜냐하면 그림으로","speaker":""},{"start":8809949,"end":8812189,"text":"표현하면 더 화살표가","speaker":""},{"start":8812189,"end":8813769,"text":"여러 군데로 뻗었다가 들어왔다","speaker":""},{"start":8813769,"end":8815229,"text":"뻗었다가 들어왔다 해야 되기 때문에","speaker":""},{"start":8815229,"end":8817789,"text":"일단은","speaker":""},{"start":8817789,"end":8819809,"text":"이 안에 생략된 거다라고 보시면 돼요.","speaker":""},{"start":8819809,"end":8822029,"text":"그러면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550032595,"relativeStart":8822026,"segments":[{"start":8822026,"end":8826406,"text":"이해되셨을까요? 이해되신 것 같아요.","speaker":""},{"start":8826406,"end":8829966,"text":"우리 다시 한 번 다른 분들도 엄지 한 번 눌러주시면 좋을 것 같아요.","speaker":""},{"start":8829966,"end":8837306,"text":"일단은 역할을 이해하실 필요 없고 역할이 나뉘어져 있다는 걸 이해해주시면 돼요.","speaker":""},{"start":8837306,"end":8843506,"text":"자 그러면 여기서 제가 질문 하나만 해볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550054622,"relativeStart":8843508,"segments":[{"start":8843508,"end":8852888,"text":"어! 우리 이 앞에 MVC 패턴에서 뷰는 화면을 그려주는 역할이에요 라고 설명하기는 했어요.","speaker":""},{"start":8852888,"end":8865468,"text":"근데 우리가 만들 지금 우리 프론트엔드 그리고 백엔드 이거 합쳐서 하나의 프로젝트 서비스 만들거에요 라고 했었죠. 그러면 우리가 만들","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550078178,"relativeStart":8865462,"segments":[{"start":8865462,"end":8873342,"text":"프로젝트에는 이 뷰라는 개념이 있을까요 없을까요?","speaker":""},{"start":8873342,"end":8881022,"text":"여러분들이 생각해보면 우리가 만들 프로젝트에서는 뷰라는 개념이 있을까요 없을까요?","speaker":""},{"start":8881022,"end":8886582,"text":"우리 채팅 통해서 한번 얘기해 볼 수 있을 것 같아요. 있을 것 같은가요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550094310,"relativeStart":8886590,"segments":[{"start":8886590,"end":8887910,"text":"없을 것 같은가요?","speaker":""},{"start":8887910,"end":8894850,"text":"자 일단 있습니다라는 의견은 안","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550105558,"relativeStart":8894849,"segments":[{"start":8894849,"end":8898749,"text":"있습니다 있어요 둘","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550129120,"relativeStart":8898737,"segments":[{"start":8898737,"end":8907837,"text":"자 일단은 더 의견이 나오지 않고 있기는 하는데 사실은 있어요도 정답이고 없어요도 정답이기는 해요.","speaker":""},{"start":8907837,"end":8915037,"text":"근데 조금 정확히 얘기를 하면 이런 뷰의 역할이 서버에 있는 건 아니에요.","speaker":""},{"start":8915037,"end":8921177,"text":"원래 정통 MVC 패턴이라면 우리가 여기 JSP라는 것.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550150363,"relativeStart":8921167,"segments":[{"start":8921167,"end":8928667,"text":"그리고 혹은 타임리프라는 이제 서버에서 화면을 그려서","speaker":""},{"start":8928667,"end":8931547,"text":"HTML로 전송을 해주는 역할이 있어요.","speaker":""},{"start":8931547,"end":8935607,"text":"그래서 이러한 조금은 옛날 구식 방식들을 사용하게 되면","speaker":""},{"start":8935607,"end":8938807,"text":"서버에서의 뷰의 역할이 있기는 하지만","speaker":""},{"start":8938807,"end":8942907,"text":"우리가 만드는 건 이미 리액트를 통해","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550171365,"relativeStart":8942902,"segments":[{"start":8942902,"end":8944902,"text":"프론트엔드를 구성을 해둔 거죠.","speaker":""},{"start":8944902,"end":8947102,"text":"이미 여기 한번 구성을 해둔 거예요.","speaker":""},{"start":8947102,"end":8950302,"text":"그렇기 때문에 우리가 만드는 백엔드에서는","speaker":""},{"start":8950302,"end":8953302,"text":"그 뷰의 역할까지 담당을 할 필요는 없어요.","speaker":""},{"start":8953302,"end":8957902,"text":"그래서 뷰가 있지만 얘는 서버의 바깥쪽","speaker":""},{"start":8957902,"end":8960402,"text":"프론트엔드로 빠져있는 거예요.","speaker":""},{"start":8960402,"end":8961902,"text":"라고 보시면 돼요.","speaker":""},{"start":8961902,"end":8964002,"text":"그래서 지금 앞에 있는 구조는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550194408,"relativeStart":8964012,"segments":[{"start":8964012,"end":8975932,"text":"그냥 정통 MVC 패턴이고 우리가 만드는 건 프론트엔드가 바깥으로 빠져 있으므로 뷰의 역할도 바깥으로 그냥 빠져 있어요 라고 보시면 돼요.","speaker":""},{"start":8975932,"end":8986172,"text":"조금 복잡할 수 있긴 한데 이거는 궁금하실 수 있는 분들도 있을 것 같아서 그냥 추가로 한번 설명을 드린 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550214109,"relativeStart":8986169,"segments":[{"start":8986169,"end":8995349,"text":"그래서 일단은 우리가 각각의 MVC 패턴이 뭔지 역할이 나뉘어져 있다는 걸 이해하기 위해서","speaker":""},{"start":8995349,"end":8997769,"text":"앞에 있는 그 흐름도 그림을 본 거고","speaker":""},{"start":8997769,"end":9002269,"text":"그럼 우리는 이러한 내용을 적용시키기 위해서 어떻게 할 거냐면","speaker":""},{"start":9002269,"end":9006409,"text":"바로 레이어드 아키텍처라고 해서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550237412,"relativeStart":9006402,"segments":[{"start":9006402,"end":9012162,"text":"우리가 각각의 기능들을 나눠주는 계층 분리를 해주도록 할 거예요.","speaker":""},{"start":9012162,"end":9017022,"text":"그래서 지금의 스프링 백엔드에서의 표준 계층 구조를","speaker":""},{"start":9017022,"end":9020422,"text":"구조에 맞춰서 작성을 해보도록 할 거고","speaker":""},{"start":9020422,"end":9024882,"text":"이 표준 계층 구조는 우리가 앞서 계속 얘기했던 거예요.","speaker":""},{"start":9024882,"end":9029302,"text":"그래서 제가 관제탑의 컨트롤러가 필요해요라고 했죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550261470,"relativeStart":9029302,"segments":[{"start":9029302,"end":9032442,"text":"그래서 컨트롤러를 하나를 만들어줄 거고","speaker":""},{"start":9032442,"end":9038822,"text":"그리고 이 컨트롤러는 들어오는 HTTP에 대한 요청을 처리를 할 거예요","speaker":""},{"start":9038822,"end":9042102,"text":"그리고 이 처리를 하기 위해서는","speaker":""},{"start":9042102,"end":9047982,"text":"실제 서비스라는 비즈니스 로직을 담당해주는 역할을 이용할 거고","speaker":""},{"start":9047982,"end":9053502,"text":"그리고 비즈니스 로직을 담당해주는 북서비스 클래스 만들 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550285286,"relativeStart":9053501,"segments":[{"start":9053501,"end":9059180,"text":"그리고 내부에서는 실제 데이터베이스를 접근하고","speaker":""},{"start":9059180,"end":9064060,"text":"데이터 생성, 수정, 조회, 삭제 이런 기능들을 진행할 수 있는","speaker":""},{"start":9064060,"end":9066601,"text":"리퍼디토리라는 걸 사용하는 거죠.","speaker":""},{"start":9066601,"end":9071881,"text":"그래서 얘를 통해서 실제 접근할 수 있게끔 만들어주면","speaker":""},{"start":9071881,"end":9077180,"text":"앞에서 얘기했던 것처럼 그 역할들을 분담해준 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550305514,"relativeStart":9077176,"segments":[{"start":9077176,"end":9081096,"text":"그래서 각각의 계층은 하나의 책임만","speaker":""},{"start":9081096,"end":9083956,"text":"상황에 맞는 요청, 처리","speaker":""},{"start":9083956,"end":9088256,"text":"그리고 여기는 서비스 로직 실행, 여기는 DB 접근","speaker":""},{"start":9088256,"end":9090976,"text":"이런 식으로 책임을 따로 구분을 해줘서","speaker":""},{"start":9090976,"end":9096256,"text":"이후에 코드를 변경하거나 수정하는 유지보수에 용이해줘요","speaker":""},{"start":9096256,"end":9097916,"text":"라고 볼 수 있다는 거죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550327264,"relativeStart":9097916,"segments":[{"start":9097916,"end":9106916,"text":"그리고 이 구조를 우리가 만들고자 하는 도메인 북에 적용을 시킨다 라고 보시면 돼요.","speaker":""},{"start":9106916,"end":9112916,"text":"그래서 이 흐름을 전체적으로 클라이언트까지도 포함해서 한번 내용을 보게 되면","speaker":""},{"start":9112916,"end":9119156,"text":"이런 식으로 우리는 클라이언트가 특정 요청을 보내면 컨트롤러가 받고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550347485,"relativeStart":9119161,"segments":[{"start":9119161,"end":9133261,"text":"서비스 로직 호출하고 서비스 호출하고 서비스는 레파지트를 통해서 데이터베이스에 접근해서 그에 따른 등록, 수정, 생성, 삭제 기능들을 진행한다는 거예요.","speaker":""},{"start":9133261,"end":9139521,"text":"그래서 여기까지 내용을 진행을 하면 우리는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550368492,"relativeStart":9139512,"segments":[{"start":9139512,"end":9150852,"text":"첫 번째 유닛, MVC 패턴의 이해에 해당하는 내용. 그래서 역할을 나누고 우리는 실제로 어떻게 나눌 건지에 대해서 다시 한번 얘기를 볼 수 있는데","speaker":""},{"start":9150852,"end":9160172,"text":"이 구조, 일단 대략적으로 여기까지는 이해하실 수 있겠죠. 제가 그래도 한 5번 넘게 이 구조를 설명하고 있다 보니까","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550396381,"relativeStart":9160167,"segments":[{"start":9160167,"end":9162867,"text":"여기까지는 이해하실 수 있을 것 같아요.","speaker":""},{"start":9162867,"end":9166467,"text":"이 문제 한 번씩 누를 수 있을까요?","speaker":""},{"start":9166467,"end":9171767,"text":"제가 너무 자주 묻다 보니까","speaker":""},{"start":9171767,"end":9173927,"text":"이 문제 누르는 게 조금 귀찮을 수 있기는 해요.","speaker":""},{"start":9173927,"end":9182687,"text":"일단은 이렇게 나눠서 이런 흐름을 가져갈 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550420459,"relativeStart":9182696,"segments":[{"start":9182696,"end":9184576,"text":"라는 것만 봐주시면 돼요.","speaker":""},{"start":9184576,"end":9192076,"text":"자, 그러면 이후에는 이제 우리가 기본적으로 서버에서","speaker":""},{"start":9192076,"end":9197055,"text":"서버에서 동작하는 과정을 먼저 알아봤으니까","speaker":""},{"start":9197055,"end":9203035,"text":"이제는 클라이언트와 서버가 서로 주고받을 때","speaker":""},{"start":9203035,"end":9206856,"text":"응답을 주고받을 때 사용하는 거에 대해서도","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550445550,"relativeStart":9206861,"segments":[{"start":9206861,"end":9208801,"text":"알아보도록 할게요.","speaker":""},{"start":9208801,"end":9214521,"text":"그래서 우리 레스트와 HTTP 이 개념까지 알아보도록 할 거예요.","speaker":""},{"start":9214521,"end":9220821,"text":"그리고 제가 이제 오늘 완전 첫 시간 오전 1교시 때 얘기했던 것처럼","speaker":""},{"start":9220821,"end":9226581,"text":"스프링 백엔드의 경우는 여러분들이 막 새로운 개념을 이해하고","speaker":""},{"start":9226581,"end":9228441,"text":"사용하는 건 많지 않다고 했죠.","speaker":""},{"start":9228441,"end":9231941,"text":"그래서 이론적인 부분이 많아요 라고 얘기를 했었어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550468592,"relativeStart":9231937,"segments":[{"start":9231937,"end":9236937,"text":"그리고 그만큼 뭔가 손으로 작성하는 게 아니라","speaker":""},{"start":9236937,"end":9241937,"text":"계속 그냥 눈으로만 보고'아 이게 뭐구나' 이렇게 대략적으로'뭐구나' 이렇게 이해만 하고 있죠.","speaker":""},{"start":9241937,"end":9247537,"text":"이거는 지금 단계에서는 여러분들 어쩔 수 없어요.","speaker":""},{"start":9247537,"end":9252237,"text":"그래서 조금은 이런 듣는 거 힘들더라도 안 먹어서 좀 졸릴 수 있지만","speaker":""},{"start":9252237,"end":9254677,"text":"조금은 더 힘내서 따라와 주시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550488561,"relativeStart":9254684,"segments":[{"start":9254684,"end":9260964,"text":"만약에 코드까지 작성을 하고 그러려면 우리는 스프링 부트가 아니라 스프링 단계로 들어가야 돼요.","speaker":""},{"start":9260964,"end":9262804,"text":"이거는 너무 어려워요.","speaker":""},{"start":9262804,"end":9269484,"text":"그래서 일단은 이론적으로 그냥 살짝 발만 담근다 보시면 돼요.","speaker":""},{"start":9269484,"end":9274824,"text":"그래서 우리 이제 추가적인 얘기 간단하게 한번 드리겠습니다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550511581,"relativeStart":9274816,"segments":[{"start":9274816,"end":9280116,"text":"사담했으니까 REST와 HTTP라는 내용 알아보도록 할게요.","speaker":""},{"start":9280116,"end":9286316,"text":"그래서 이것도 사실은 새로운 개념이 아니에요. 여러분들이 이미 알고 있는 거예요.","speaker":""},{"start":9286316,"end":9292116,"text":"그래서 어떤 개념인지 간단하게 설명을 해보도록 하면","speaker":""},{"start":9292116,"end":9297436,"text":"일단은 이 REST라는 개념에 대해서 이해를 해줄 필요가 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550533616,"relativeStart":9297429,"segments":[{"start":9297429,"end":9312949,"text":"그래서 rest는 리프레셔널 스테이트 트랜스퍼라고 되어 있는데 내용이 많이 뭔가 어렵죠.","speaker":""},{"start":9312949,"end":9319489,"text":"사실 rest의 경우는 이걸 가져다가 그 언어를 가져다가 번역해서 이해하기로는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550555370,"relativeStart":9319484,"segments":[{"start":9319484,"end":9326484,"text":"조금은 어려워요. 그래서 어떤 개념인지 조금 더 풀어서 설명을 드리도록 하면","speaker":""},{"start":9326484,"end":9335544,"text":"얘는 각각의 웹하고 서버하고 클라이언트하고 서버하고 서로 통신을 주고받을 때 있죠.","speaker":""},{"start":9335544,"end":9341264,"text":"주고받을 때 사용하는 각각의 자원들을 사용할 때","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550575336,"relativeStart":9341270,"segments":[{"start":9341270,"end":9349170,"text":"자원들을 더 편리하게 사용할 수 있게끔 자원의 상태에다가 이름을 붙여서 주고받는 방식이 돼요.","speaker":""},{"start":9349170,"end":9361390,"text":"그래서 제가 북스라는 도메인을 작성을 해주게 되면 그러면 이때는 이 북스라는 도메인에 정보를 주고받을 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550595313,"relativeStart":9361672,"segments":[{"start":9361672,"end":9366172,"text":"라고 명시를 시켜줄 수 있다는 거죠.","speaker":""},{"start":9366172,"end":9370292,"text":"내용이 좀 어렵죠. 이게 단어가 이러다 보니까.","speaker":""},{"start":9370292,"end":9374052,"text":"그래서 우리는 어떤 데이터들을 가지고 다닐 건지","speaker":""},{"start":9374052,"end":9379092,"text":"상태를 나타내준다고 보시면 되는데","speaker":""},{"start":9379092,"end":9381832,"text":"이거를 그냥 바로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550619379,"relativeStart":9381837,"segments":[{"start":9381837,"end":9386517,"text":"다음 슬라이드로 가서 조금 더 쉽게 설명을 해보도록 할게요.","speaker":""},{"start":9386517,"end":9390657,"text":"어떤 방식으로 주고받는지를 이해하면 쉬워질 수 있기 때문에","speaker":""},{"start":9390657,"end":9394877,"text":"그래서 일단 앞에 있는 레스트라는 개념 자체는","speaker":""},{"start":9394877,"end":9401057,"text":"우리가 2000년도에 로이필딩이라는 박사 학위 논문에서 최초로 소개가 된 거예요.","speaker":""},{"start":9401057,"end":9405177,"text":"그래서 이게 왜 이렇게 소개가 된 거냐면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550639332,"relativeStart":9405176,"segments":[{"start":9405176,"end":9407436,"text":"우리가 기본적으로 통신을 할 때는","speaker":""},{"start":9407436,"end":9411916,"text":"HTTP라는 개념을 통해서 통신을 하게 돼요.","speaker":""},{"start":9411916,"end":9417056,"text":"그래서 얘는 Hypertext Transfer Protocol이라고 많이 얘기를 하죠.","speaker":""},{"start":9417056,"end":9422255,"text":"그래서 데이터를 주고받을 때 사용하는 하나의 규약이라고 보시면 되는데","speaker":""},{"start":9422255,"end":9425696,"text":"이러한 규약을 하나를 만들어 놨더니","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550660594,"relativeStart":9425696,"segments":[{"start":9425696,"end":9432696,"text":"아니, 웹을 사용하는데 규약 자체를 제대로 사용을 못하는 거예요.","speaker":""},{"start":9432696,"end":9446156,"text":"정말 좋은 규약을 하나를 만들어 놓고, 그리고 나서 사람들이 사용하는 걸 봤더니","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550684667,"relativeStart":9446165,"segments":[{"start":9446165,"end":9448925,"text":"어? 뭔가 이상하게 쓰는 거예요.","speaker":""},{"start":9448925,"end":9454165,"text":"아니, 자꾸 숟가락을 퍼먹는 용도가 아니라","speaker":""},{"start":9454165,"end":9458185,"text":"숟가락 두 개를 겹쳐서 얘로 젓가락처럼 쓰고 있는 거예요.","speaker":""},{"start":9458185,"end":9462885,"text":"그럼 뭔가 의도와 다르게 더 불편하게 쓰고 있는 거죠.","speaker":""},{"start":9462885,"end":9470165,"text":"그렇기 때문에 이런 방식들을 왜 제대로 못 쓰는 건가요? 라고 해서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550706419,"relativeStart":9470161,"segments":[{"start":9470161,"end":9476641,"text":"더 편하게 쓸 수 있게끔 만들어준 게 바로 REST가 돼요라는 거죠.","speaker":""},{"start":9476641,"end":9485721,"text":"그래서 얘는 각각의 자원의 표현에 의한 상태 전달을 뜻하게 돼요라고 얘기하는데","speaker":""},{"start":9485721,"end":9492181,"text":"이때 자원이라는 건 해당 소프트웨어가 관리하는 모든 것들을 의미를 하게 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550728434,"relativeStart":9492166,"segments":[{"start":9492166,"end":9501706,"text":"그래서 리소스는 이미지, 데이터, 문서 등등의 정말 다루는 모든 것들을 의미하게 되는 거고","speaker":""},{"start":9501706,"end":9508626,"text":"그리고 이것들을 표현하기 위한 그 이름을 또 붙여서 사용을 하게 돼요.","speaker":""},{"start":9508626,"end":9514646,"text":"그리고 얘네에 대한 시점의 상태까지 전달을 하는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550750442,"relativeStart":9514644,"segments":[{"start":9514644,"end":9522644,"text":"이 과정을 우리는 제이슨이라는 개념을 통해서 주고받는다 라고 생각을 해주시면 돼요.","speaker":""},{"start":9522644,"end":9529644,"text":"그래서 간단하게 얘기하면 우리가 지금 다루고자 하는 자원들을 가져다가","speaker":""},{"start":9529644,"end":9536524,"text":"제이슨의 형식으로 아주 간편하게 주고받는다라는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550771179,"relativeStart":9536514,"segments":[{"start":9536514,"end":9541674,"text":"그러니 우리가 북서비스가 있다고 가정을 하면","speaker":""},{"start":9541674,"end":9546074,"text":"그럼 이때 북서비스의 아이디 123","speaker":""},{"start":9546074,"end":9549854,"text":"네임은 존도","speaker":""},{"start":9549854,"end":9553974,"text":"그리고 이메일은 �oneexample.com","speaker":""},{"start":9553974,"end":9557174,"text":"이런 식으로 각 정보들을 표현을 하고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550795255,"relativeStart":9557169,"segments":[{"start":9557169,"end":9561589,"text":"그냥 이 상태를 하나로 묶어서 주고 받으면","speaker":""},{"start":9561589,"end":9567009,"text":"각각의 데이터를 주고 받는 것 자체가 훨씬 더 수월해져요.","speaker":""},{"start":9567009,"end":9567389,"text":"라는 거죠.","speaker":""},{"start":9567389,"end":9572429,"text":"그래서 여러분들이 프론트엔드를 배우고","speaker":""},{"start":9572429,"end":9576809,"text":"프론트엔드에서 제이슨 서버, 간단하게 만들어둔 제이슨 서버","speaker":""},{"start":9576809,"end":9580169,"text":"얘와 소통할 때","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550816237,"relativeStart":9580169,"segments":[{"start":9580169,"end":9585409,"text":"우리가 json이라는 방식을 사용하게 되요 라고 했었죠.","speaker":""},{"start":9585409,"end":9589409,"text":"그래서 json을 사용한 이유가 그 이유가 되는 거예요.","speaker":""},{"start":9589409,"end":9594929,"text":"그래서 만약에 이런 규칙 자체가 명시가 되어 있지 않게 된다면","speaker":""},{"start":9594929,"end":9601609,"text":"그때는 오히려 각각의 데이터를 보내고 받을 때 규칙들이 없다 보니까","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550838264,"relativeStart":9601617,"segments":[{"start":9601617,"end":9603617,"text":"데이터가 어긋나거나","speaker":""},{"start":9603617,"end":9606117,"text":"제대로 전달되지 못하는 상황들이","speaker":""},{"start":9606117,"end":9607617,"text":"발생할 수 있어요.","speaker":""},{"start":9607617,"end":9609617,"text":"라고 보시면 돼요.","speaker":""},{"start":9609617,"end":9612117,"text":"그래서 이러한 레스트가","speaker":""},{"start":9612117,"end":9614117,"text":"어떤 특징을 가지고 있는지","speaker":""},{"start":9614117,"end":9617617,"text":"조금 더 자세하게 알아보도록 하면","speaker":""},{"start":9617617,"end":9621617,"text":"일단은 인터페이스의 일관성이라는 걸 가지고 있어요.","speaker":""},{"start":9621617,"end":9623277,"text":"다시 말해,","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550860021,"relativeStart":9623268,"segments":[{"start":9623268,"end":9628608,"text":"리소스에서 수행할 수 있는 작업에 균일한 인터페이스를 정의해서","speaker":""},{"start":9628608,"end":9636448,"text":"해당 인터페이스만 보더라도 우리는 어떤 과정을 진행하면 되겠구나라는 걸 이해할 수 있다는 거예요","speaker":""},{"start":9636448,"end":9642588,"text":"그리고 그게 바로 HTTP 메소드가 된다는 거죠","speaker":""},{"start":9642588,"end":9645848,"text":"우리 프론트엔드에서 계속 얘기했었던 거 있죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550882037,"relativeStart":9645847,"segments":[{"start":9645847,"end":9649507,"text":"get, post, put, patch, delete.","speaker":""},{"start":9649507,"end":9655527,"text":"그리고 얘는 딱 보자마자 get는 가지고 오는 거, post는 등록하는 거,","speaker":""},{"start":9655527,"end":9662027,"text":"put, patch는 수정하는 거, delete는 삭제하는 거라고 얘기했었죠.","speaker":""},{"start":9662027,"end":9667287,"text":"그래서 last의 경우는 이러한 인터페이스들을 미리 지정을 해둠으로써","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550904040,"relativeStart":9667295,"segments":[{"start":9667295,"end":9669675,"text":"특정 작업을 수행할 때는","speaker":""},{"start":9669675,"end":9672635,"text":"이 메소드를 같이 보내서","speaker":""},{"start":9672635,"end":9675855,"text":"현재 작업하고자 하는 내용을 알려줘","speaker":""},{"start":9675855,"end":9678175,"text":"라고 아예 정해버린 거예요.","speaker":""},{"start":9678175,"end":9683095,"text":"그리고 두 번째로는 무상태성","speaker":""},{"start":9683095,"end":9686875,"text":"스테이틀리스라는 걸 갖게 돼요.","speaker":""},{"start":9686875,"end":9689175,"text":"그래서 얘는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550925043,"relativeStart":9689165,"segments":[{"start":9689165,"end":9695165,"text":"작업을 위한 상태 정보를 따로 저장하거나 관리하지는 않는데요.","speaker":""},{"start":9695165,"end":9701165,"text":"다시 말해, 특정 요청이 들어왔고 그 요청에 대한 내용을 처리를 했다면","speaker":""},{"start":9701165,"end":9710165,"text":"이 처리된 내역을 그대로 가지고 있지 않고 처리함과 동시에 없애버려요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550945273,"relativeStart":9710174,"segments":[{"start":9710174,"end":9717674,"text":"프로그램 자체가 여러 개를 가지고 있을 필요가 없으므로 더 가벼워져요 라는 거죠.","speaker":""},{"start":9717674,"end":9725414,"text":"그래서 지금처럼 세션 정보나 쿠키 정보를 별도로 저장하거나 관리하지 않기 때문에","speaker":""},{"start":9725414,"end":9730954,"text":"API 서버, 우리가 만들고자 하는 서버는 들어오는 요청에 대한 내용만","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550965233,"relativeStart":9730947,"segments":[{"start":9730947,"end":9732927,"text":"처리를 해줄 수 있어요","speaker":""},{"start":9732927,"end":9733367,"text":"라는 거예요.","speaker":""},{"start":9733367,"end":9736227,"text":"그래서 간단히 얘기하면","speaker":""},{"start":9736227,"end":9739187,"text":"이전에 들어왔던 요청에","speaker":""},{"start":9739187,"end":9741167,"text":"대해서는 기억하고 있지","speaker":""},{"start":9741167,"end":9742187,"text":"않는다는 거예요.","speaker":""},{"start":9742187,"end":9744507,"text":"그냥 요청 들어오면","speaker":""},{"start":9744507,"end":9746047,"text":"처리만 해주고 끝","speaker":""},{"start":9746047,"end":9747527,"text":"이라는 거죠.","speaker":""},{"start":9747527,"end":9750427,"text":"그리고 세 번째는","speaker":""},{"start":9750427,"end":9751047,"text":"여기","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780550986218,"relativeStart":9751046,"segments":[{"start":9751046,"end":9753046,"text":"무상태성에 대한 내용 세 번째는","speaker":""},{"start":9753046,"end":9755726,"text":"그러다 보니까 서비스의 자유도가 증가하고","speaker":""},{"start":9755726,"end":9758686,"text":"불필요한 정보들을 관리하지 않아서","speaker":""},{"start":9758686,"end":9761486,"text":"구현이 단순 및 가벼워져요","speaker":""},{"start":9761486,"end":9763386,"text":"라고 얘기할 수 있다는 거죠","speaker":""},{"start":9763386,"end":9765226,"text":"그래서 이걸 보고 우리는","speaker":""},{"start":9765226,"end":9768726,"text":"무상태성이라고 얘기를 해줄 수 있어요","speaker":""},{"start":9768726,"end":9771546,"text":"자 그리고 세 번째","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551008236,"relativeStart":9771549,"segments":[{"start":9771549,"end":9780709,"text":"캐싱은 여러분들이 지금 웹에 대해서 캐싱이라는 개념을 따로 공부하지 않으신 분들은","speaker":""},{"start":9780709,"end":9783229,"text":"이거는 조금 어려울 수 있기는 해요.","speaker":""},{"start":9783229,"end":9786589,"text":"그래서 이거는 간단하게 얘기하면","speaker":""},{"start":9786589,"end":9793169,"text":"HTTP의 웹 표준을 그대로 사용하기 때문에 기존의 웹에서 다루던","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551029234,"relativeStart":9793166,"segments":[{"start":9793166,"end":9802166,"text":"인프라들이 있어요. 그래서 이런 인프라들은 따로 만들거나 생성할 필요 없이 그냥 그대로 가져다가 쓸 수 있다는 거죠.","speaker":""},{"start":9802166,"end":9814285,"text":"그래서 간단하게 얘기하면 특정 웹에서 뭔가 페이지 데이터들을 그릴 때 바뀌지 않는, 고정된 데이터들은 캐시라는 개념을 통해서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551054073,"relativeStart":9814276,"segments":[{"start":9814276,"end":9819276,"text":"캐시라는 개념을 통해서 저장을 시켜두고","speaker":""},{"start":9819276,"end":9824956,"text":"그리고 필요할 때마다 매번 새롭게 데이터를 가지고 오지 않고","speaker":""},{"start":9824956,"end":9827756,"text":"캐시를 가져다가 쓰게 된다는 거예요.","speaker":""},{"start":9827756,"end":9833956,"text":"그래서 여러분들 웹에서 무언가 진행하는데","speaker":""},{"start":9833956,"end":9837296,"text":"계속해서 똑같은 결과만, 분명히 바꿨는데도 불구하고","speaker":""},{"start":9837296,"end":9839176,"text":"똑같은 결과만 나올 때는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551074037,"relativeStart":9839167,"segments":[{"start":9839167,"end":9845087,"text":"어! 여러분들 이거 캐시 한번 제거해보세요. 라고 하면서 한 번쯤은 들어봤을 거예요.","speaker":""},{"start":9845087,"end":9855207,"text":"그래서 그때 바뀌지 않는 데이터들을 가져다가 사용할 수 있게 만들어주는 이런 캐시와 같은 추가적인 기능들도","speaker":""},{"start":9855207,"end":9859927,"text":"웹의 기본 기능들도 그대로 가져다가 쓸 수 있게 만들어주는 게","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551097067,"relativeStart":9859923,"segments":[{"start":9859923,"end":9864783,"text":"또 다른 REST의 특징이 된다고 볼 수 있다는 거예요.","speaker":""},{"start":9864783,"end":9873403,"text":"그래서 지금처럼 인터페이스의 일관성, 무상태성, 그리고 웹에서 사용하는 기존 인프라","speaker":""},{"start":9873403,"end":9879203,"text":"예를 들어 대표적인 캐싱 같은 기능들을 그대로 쓸 수 있게 만들어주기 때문에","speaker":""},{"start":9879203,"end":9882283,"text":"우리가 사용하는데 매우 편리해요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551119111,"relativeStart":9882282,"segments":[{"start":9882282,"end":9894062,"text":"라고 볼 수가 있다는 거죠. 그리고 이 무상태성, 이 친구를 조금 중요하게 봐줘야 되는 게 우리가 앞에서도 무상태성은 한번 얘기를 했었죠.","speaker":""},{"start":9894062,"end":9904182,"text":"데이터에 대한 내용을 가지고 있지 않고 항상 서버한테, DB한테 요청하고 요청받은 데이터를 가져라 쓴다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551139824,"relativeStart":9904169,"segments":[{"start":9904169,"end":9906369,"text":"라고 하면서 언급했었어요.","speaker":""},{"start":9906369,"end":9909729,"text":"이 친구를 조금 더 중요하게 봐주시면 돼요.","speaker":""},{"start":9909729,"end":9915209,"text":"그래서 일단은 여기까지가 레스트의 기본적인 특징이 될 거고","speaker":""},{"start":9915209,"end":9919849,"text":"그러면 이러한 레스트에 대해서 사용하는 메소드들은","speaker":""},{"start":9919849,"end":9923729,"text":"제가 앞과 같이 다섯 가지가 있어요.","speaker":""},{"start":9923729,"end":9925549,"text":"라고 얘기를 했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551161075,"relativeStart":9925550,"segments":[{"start":9925550,"end":9931290,"text":"그래서 이 5가지는 다시 한번 간단하게 언급하면","speaker":""},{"start":9931290,"end":9939630,"text":"get은 조회, post는 생성, put은 전체 수정, patch는 부분 수정, delete는 삭제하는 역할이에요","speaker":""},{"start":9939630,"end":9946170,"text":"그래서 지금처럼 데이터를 가지고 오거나 새 데이터 만들거나 전체 데이터 교체나 일부 변경","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551183097,"relativeStart":9946171,"segments":[{"start":9946171,"end":9948471,"text":"데이터 제거하는 역할들을 진행을 하고","speaker":""},{"start":9948471,"end":9950911,"text":"이러한 요청을 보낼 때는","speaker":""},{"start":9950911,"end":9956471,"text":"우리 메소드와 뒤에 URL을 같이 보내주면 돼요 라고 했었죠.","speaker":""},{"start":9956471,"end":9959631,"text":"그래서 이런 식으로 5개의 메소드를","speaker":""},{"start":9959631,"end":9964191,"text":"프론트엔드에서 달았던 것과 똑같이 다루게 될 거예요.","speaker":""},{"start":9964191,"end":9968331,"text":"그리고 여기서 추가로 알아볼 게","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551207422,"relativeStart":9968328,"segments":[{"start":9968328,"end":9974168,"text":"우리가 클라이언트가 있고 서버가 있으면","speaker":""},{"start":9974168,"end":9979668,"text":"클라이언트가 서버로부터 요청을 보내고","speaker":""},{"start":9979668,"end":9983268,"text":"그리고 그에 따른 응답, 리스폰스를 받게 되면","speaker":""},{"start":9983268,"end":9987948,"text":"이 리스폰스에는 우리 스테이터스 코드라는","speaker":""},{"start":9987948,"end":9992668,"text":"상태 코드가 추가로 포함되어 있어요 라고 얘기를 했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551228412,"relativeStart":9992662,"segments":[{"start":9992662,"end":9997542,"text":"그리고 이 상태 코드 우리는 200번 때는","speaker":""},{"start":9997542,"end":10003862,"text":"정상적인 성공의 상태 코드예요 라고만 얘기를 했었을 거예요","speaker":""},{"start":10003862,"end":10009902,"text":"그런데 실제로는 그 외에도 더 많은 상태 코드들이 있어요 라고 했었죠","speaker":""},{"start":10009902,"end":10013182,"text":"그래서 간략하게 내용을 보면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551249398,"relativeStart":10013165,"segments":[{"start":10013165,"end":10016925,"text":"200번 때는 기본적으로 성공을 나타내주게 되고","speaker":""},{"start":10016925,"end":10019305,"text":"가장 많이 쓰는 건 200","speaker":""},{"start":10019305,"end":10024005,"text":"이거는 요청에 대해서 응답을 잘 받고 수행했어","speaker":""},{"start":10024005,"end":10026105,"text":"OK를 나타내주는 거예요","speaker":""},{"start":10026105,"end":10029505,"text":"그리고 두 번째로는 201번","speaker":""},{"start":10029505,"end":10034945,"text":"Created는 생성에 해당하는 요청을 처리했어요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551270393,"relativeStart":10034951,"segments":[{"start":10034951,"end":10037191,"text":"라는 응답 코드인 거죠.","speaker":""},{"start":10037191,"end":10044131,"text":"그래서 포스트를 보내게 되면 서버에서는 201번 크리에이티드라는 응답 요청을 보내주게 돼요.","speaker":""},{"start":10044131,"end":10049191,"text":"그리고 204번은 노 콘텐트예요.","speaker":""},{"start":10049191,"end":10052371,"text":"그래서 얘는 성공을 하기는 했어요.","speaker":""},{"start":10052371,"end":10055531,"text":"하지만 너에게 줄 본문 자체는 없어.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551294466,"relativeStart":10055724,"segments":[{"start":10055724,"end":10060724,"text":"라고 해서 일반적으로는 딜리트일 때 다뤄주게 돼요.","speaker":""},{"start":10060724,"end":10067004,"text":"왜냐하면 딜리트는 우리가 요청하는 내용에 대해서 데이터만 삭제하면 되고","speaker":""},{"start":10067004,"end":10070044,"text":"삭제된 후에는 뭔가 줄 게 없다고 했었죠.","speaker":""},{"start":10070044,"end":10074204,"text":"그래서 반환되는 것도 없을 거요 라고 했었어요.","speaker":""},{"start":10074204,"end":10079644,"text":"그래서 삭제할 때는 204번 응답 코드를 갖게 되는 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551315447,"relativeStart":10079636,"segments":[{"start":10079636,"end":10086096,"text":"우리는 200번 때 이외에도 400번 때의 응답 코드가 있어요","speaker":""},{"start":10086096,"end":10092336,"text":"그래서 얘는 400은 클라이언트의 오류라고 보시면 돼요","speaker":""},{"start":10092336,"end":10100176,"text":"다시 말해 클라이언트 측에서 응답 자체를 잘못 보냈어 라는 거죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551336445,"relativeStart":10100172,"segments":[{"start":10100172,"end":10106932,"text":"그래서 Bad Request가 뜨며 잘못된 요청이에요 라고 보내줄 수 있다는 거예요","speaker":""},{"start":10106932,"end":10115292,"text":"다시 말해 현재 클라이언트에서는 접근할 수 없는 URL이나 도메인에 접근하려고 할 때 보내줄 수 있겠죠","speaker":""},{"start":10115292,"end":10118312,"text":"혹은 존재하지 않는 내용을 보낼 때","speaker":""},{"start":10118312,"end":10121412,"text":"그리고 나서 404번은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551358194,"relativeStart":10121418,"segments":[{"start":10121418,"end":10129718,"text":"더 나아가서 not found. 아마 여러분들이 가장 쉽게 접할 수 있는 에러 코드가 아닐까 싶어요. 상태 코드가 아닐까 싶어요.","speaker":""},{"start":10129718,"end":10137778,"text":"그래서 얘는 너가 지금 요청한 도메인에 대해서 자원을 아예 찾을 수가 없어. 존재하지 않아.","speaker":""},{"start":10137778,"end":10143298,"text":"너가 접근한 디렉터리는 아예 없는 거야. 라고 얘기해 주는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551376466,"relativeStart":10143423,"segments":[{"start":10143423,"end":10147563,"text":"그래서 찾을 수 없다고 전달을 해주는 거고","speaker":""},{"start":10147563,"end":10151403,"text":"그리고 500번 때의 경우는","speaker":""},{"start":10151403,"end":10153223,"text":"우리 서버 오리라고 볼 수 있어요","speaker":""},{"start":10153223,"end":10157383,"text":"다시 말해 클라이언트는 정상적인 요청을 했어","speaker":""},{"start":10157383,"end":10160043,"text":"하지만 내가 이 로직을 가져다가","speaker":""},{"start":10160043,"end":10162523,"text":"막 처리를 하려고 하는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551409015,"relativeStart":10162620,"segments":[{"start":10162620,"end":10174900,"text":"그래서 그때는 지금처럼 500번 때는 너는 문제없는데 지금 모첨을 보는 서버 측에서 문제가 있어 라고 알려줄 수 있다는 거예요.","speaker":""},{"start":10174900,"end":10183700,"text":"그래서 여러분들이 나중에 이런 개념들을 잘 알고 있으면 실제로 웹을 가져다가 사용을 할 때","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551428987,"relativeStart":10183697,"segments":[{"start":10183697,"end":10185657,"text":"돌아오는 응답 코드를 보고","speaker":""},{"start":10185657,"end":10187437,"text":"지금 뭐가 문제거나","speaker":""},{"start":10187437,"end":10189517,"text":"서버가 문제가 있는 거구나","speaker":""},{"start":10189517,"end":10192937,"text":"혹은 내 쪽에서 클라이언트 쪽에서 문제가 있는 거구나","speaker":""},{"start":10192937,"end":10196557,"text":"라는 그 흐름들을 파악하는 게 가능하다는 거죠.","speaker":""},{"start":10196557,"end":10199757,"text":"그래서 여기까지가","speaker":""},{"start":10199757,"end":10204337,"text":"응답에 대한 요청에 대한 응답을 보낼 때 포함시켜주는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551451762,"relativeStart":10204335,"segments":[{"start":10204335,"end":10206335,"text":"상태 코드에 대한 설명이 되는데","speaker":""},{"start":10206335,"end":10209095,"text":"앞에 내용도 이해하실 수 있겠죠?","speaker":""},{"start":10209095,"end":10214755,"text":"몇백 번대가 어떤 오류 혹은 어떤 응답을 보내주는 건지","speaker":""},{"start":10214755,"end":10220155,"text":"이해되시는 분들은 우리 엄지 한번 눌러주세요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551473526,"relativeStart":10221508,"segments":[{"start":10221508,"end":10226188,"text":"일단은 여기까지는 이해가 되시는 것 같아요.","speaker":""},{"start":10226188,"end":10232748,"text":"근데 아직까지도 계속 이론만 하다 보니까 조금 지루하긴 하죠.","speaker":""},{"start":10232748,"end":10240848,"text":"그런데 조금만 더 참아주시면 조금 있다가 3시부터는 코드를 작성할 수 있을 것 같긴 해요.","speaker":""},{"start":10240848,"end":10242448,"text":"조금만 더 참아주세요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551495547,"relativeStart":10242456,"segments":[{"start":10242456,"end":10250096,"text":"자 그래서 우리가 이제 기본적인 응답 코드에 대해서도 같이 한번 상태 코드에 대해서도 알아봤고","speaker":""},{"start":10250096,"end":10257356,"text":"다음으로는 레스트 API를 설계할 때 지켜줘야 되는 내용 몇 가지만 한번 알아볼게요.","speaker":""},{"start":10257356,"end":10263856,"text":"그래서 이거는 말 그대로 설계라는 것 자체가 우리가 사용해야 되는 URL에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551516537,"relativeStart":10263853,"segments":[{"start":10263853,"end":10267093,"text":"도메인을 지정하는 것을 의미하게 돼요.","speaker":""},{"start":10267093,"end":10270853,"text":"그래서 이때 도메인을 지정할 때는","speaker":""},{"start":10270853,"end":10274653,"text":"규칙적, 반드시 지켜야 되는 건 아니지만","speaker":""},{"start":10274653,"end":10278753,"text":"어느 정도 관리에 따라서 작성을 해주셔야 된다는 거죠.","speaker":""},{"start":10278753,"end":10282753,"text":"그래서 각각의 규칙들을 하나씩 보면","speaker":""},{"start":10282753,"end":10284793,"text":"첫 번째 규칙은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551536493,"relativeStart":10284795,"segments":[{"start":10284795,"end":10289395,"text":"우리 동사보다는 명사를 가져다 써야 돼요","speaker":""},{"start":10289395,"end":10294595,"text":"그리고 대문자보다는 소문자를 사용을 해야 된대요","speaker":""},{"start":10294595,"end":10300795,"text":"그러니 지금처럼 send email 이런 식으로 email을 보내다","speaker":""},{"start":10300795,"end":10305115,"text":"라는 형식의 동사로 작성을 하지는 않아요 라는 거죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551557499,"relativeStart":10305113,"segments":[{"start":10305113,"end":10310613,"text":"그리고 여기 대문자로 썼지만 대문자도 쓰지는 않아요 라는 거예요.","speaker":""},{"start":10310613,"end":10320453,"text":"그래서 기본적으로는 명사로 표현을 하고 단순 명사도 아니라 복수 명사로 표현을 해주셔야 돼요 라는 거죠.","speaker":""},{"start":10320453,"end":10325773,"text":"그래서 이메일에 해당하는 내용들을 다루고자 한다면 우리는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551580536,"relativeStart":10325768,"segments":[{"start":10325768,"end":10329388,"text":"복수 형식으로 이메일스라고 표현을 하는 거고","speaker":""},{"start":10329388,"end":10333288,"text":"그리고 포스트에 해당하는 내용을 다룰 때는","speaker":""},{"start":10333288,"end":10338668,"text":"복수니까 포스트라고 작성해주면 된다는 거예요.","speaker":""},{"start":10338668,"end":10345628,"text":"막 여기다가 리드 포스트 이런 식으로 작성하지는 않는다는 거예요.","speaker":""},{"start":10345628,"end":10349128,"text":"그래서 지금처럼 작성을 해줘야 되고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551601531,"relativeStart":10349123,"segments":[{"start":10349123,"end":10352443,"text":"나중에 우리가 다룰 책에 관한 내용은","speaker":""},{"start":10352443,"end":10354123,"text":"books","speaker":""},{"start":10354123,"end":10357303,"text":"이런 식으로 한번 작성을 해주면 되겠죠","speaker":""},{"start":10357303,"end":10358683,"text":"그래서","speaker":""},{"start":10358683,"end":10361303,"text":"우린 기본적으로 명사로","speaker":""},{"start":10361303,"end":10364143,"text":"그리고 복수 명사로 표현을 해준다","speaker":""},{"start":10364143,"end":10365143,"text":"라고 보시면 되고","speaker":""},{"start":10365143,"end":10367123,"text":"추가로","speaker":""},{"start":10367123,"end":10368823,"text":"고유한 객체를 가지고 올 때는","speaker":""},{"start":10368823,"end":10370423,"text":"리소스 옆에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551623548,"relativeStart":10370419,"segments":[{"start":10370419,"end":10372679,"text":"패스 상의 아이디를 나타낸다.","speaker":""},{"start":10372679,"end":10379419,"text":"다시 말해 이메일 라고 하고 특정 아이디 값을 갖고 올 때는","speaker":""},{"start":10379419,"end":10384059,"text":"지금처럼 슬래시 작성해서 그 뒤쪽에다가 아이디의 번호","speaker":""},{"start":10384059,"end":10391679,"text":"예를 들어 1번, 2번, 3번, 4번 이런 식으로 아이디를 붙여주면 돼요 라는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551645319,"relativeStart":10391681,"segments":[{"start":10391681,"end":10396981,"text":"그리고 세 번째로 마지막에 슬래시는 포함하지 않는데요","speaker":""},{"start":10396981,"end":10404541,"text":"다시 말해 지금처럼 페이지스 마지막에 슬래시를 붙여주게 되면","speaker":""},{"start":10404541,"end":10413621,"text":"그러면 이게 현재 클라이언트나 서버 입장에서는 또 다른 도메인이 있는 건가?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551666561,"relativeStart":10413619,"segments":[{"start":10413619,"end":10420299,"text":"다른 주소가 있는 건가? 라고 해서 잘못된 처리를 진행할 가능성이 있어요.","speaker":""},{"start":10420299,"end":10429419,"text":"그렇기 때문에 이때는 슬래시를 따로 붙이지는 않고 그냥 이렇게 바로 끝나게끔만 작성해주시면 돼요.","speaker":""},{"start":10429419,"end":10434979,"text":"그래제거는 헷갈릴 가능성이 있으니까 슬래시는 붙이지 않는다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551687288,"relativeStart":10434983,"segments":[{"start":10434983,"end":10443743,"text":"라고 보시면 되고 그리고 여기 마지막 언더바 대신에 하이픈을 사용한다라고 보시면 돼요.","speaker":""},{"start":10443743,"end":10455963,"text":"그래서 만약에 유저 프로필 쓰라는 도메인을 사용하려고 한다면 언더바를 쓰는 게 아니라 하이픈을 가져다가 써주세요라는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551708277,"relativeStart":10455958,"segments":[{"start":10455958,"end":10463838,"text":"그리고 이게 왜 이런 식으로 해주세요라는 거냐면 진짜 간단해요. 그냥 가덕성 때문이에요.","speaker":""},{"start":10463838,"end":10476738,"text":"이게 우리가 도메인으로 가서 제가 여기다가 이렇게 user_prophils라고 작성을 하게 되면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551732599,"relativeStart":10476731,"segments":[{"start":10476731,"end":10484531,"text":"이 프로필 언더바가 제대로 보이지 않는 경우가 생각보다 종종 발생해요.","speaker":""},{"start":10484531,"end":10489971,"text":"그렇기 때문에 잘 보일 수 있게끔 아래쪽에 붙는 게 아니라","speaker":""},{"start":10489971,"end":10493971,"text":"중간에 붙는 하이픈을 사용해주세요 라는 거죠.","speaker":""},{"start":10493971,"end":10500631,"text":"아래쪽에 붙어있으면 실제 커서나 여러 가지 문제들 때문에 보이지 않는 경우들이 있어서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551754628,"relativeStart":10500626,"segments":[{"start":10500626,"end":10502586,"text":"하이픈을 사용해주세요라는 거예요.","speaker":""},{"start":10502586,"end":10506266,"text":"물론 언더바 써도 되기는 할 거예요.","speaker":""},{"start":10506266,"end":10510806,"text":"근데 제가 얘기했지만 이건 기본적인 관리라고 얘기했었죠.","speaker":""},{"start":10510806,"end":10514486,"text":"그래서 이런 거 한번 생각해주시면 되고","speaker":""},{"start":10514486,"end":10517226,"text":"추가로 몇 가지가 더 있어요.","speaker":""},{"start":10517226,"end":10519646,"text":"어떤 거냐면 여기","speaker":""},{"start":10519646,"end":10523306,"text":"서로 관련이 있는 요소의 결과를","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551777404,"relativeStart":10523306,"segments":[{"start":10523306,"end":10527246,"text":"URL 상에 나타내 주고 싶을 경우에 사용한다.","speaker":""},{"start":10527246,"end":10531986,"text":"그래서 지금처럼 이런 식으로 작성하지 않고","speaker":""},{"start":10531986,"end":10538986,"text":"우리는 ID를 넣고 그 ID에 특정 프로필을 갖고 와주세요.","speaker":""},{"start":10538986,"end":10541626,"text":"라고 표현을 줘야 된다는 거죠.","speaker":""},{"start":10541626,"end":10546126,"text":"그래서 이 뒤쪽에다가 따로 ID를 붙이는 게 아니라","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551799663,"relativeStart":10546121,"segments":[{"start":10546121,"end":10551181,"text":"먼저 아이디 작성하고 해당 아이디에 유저 프로필을 가져와주세요.","speaker":""},{"start":10551181,"end":10554241,"text":"하는 형식으로 나타내줄 수 있어야 된다는 거예요.","speaker":""},{"start":10554241,"end":10561401,"text":"그리고 여기 URL에는 또 확장자를 붙이지는 않는데요.","speaker":""},{"start":10561401,"end":10568061,"text":"이 확장자는 왜 붙이지 않냐면 확장자를 붙이게 되는 순간","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551820410,"relativeStart":10568059,"segments":[{"start":10568059,"end":10573199,"text":"이 파일은 무조건 PDF 파일로서만 인식이 돼요.","speaker":""},{"start":10573199,"end":10580339,"text":"근데 해당 이름을 가진 파일이 PDF가 아니라 텍스트가 될 수도 있는 거고","speaker":""},{"start":10580339,"end":10583739,"text":"그리고 Word 확장자를 가질 수도 있는 거죠.","speaker":""},{"start":10583739,"end":10588899,"text":"그렇기 때문에 지금처럼 확장자를 직접적으로 명시를 하는 건","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551842172,"relativeStart":10588899,"segments":[{"start":10588899,"end":10592899,"text":"이후에 확장성에 대한 내용이 많이 떨어질 수가 있으므로","speaker":""},{"start":10592899,"end":10596699,"text":"따로 붙이지는 않아요 라고 보시면 돼요","speaker":""},{"start":10596699,"end":10603639,"text":"그리고 마지막 행위는 포함하지 않는다는 거예요","speaker":""},{"start":10603639,"end":10608519,"text":"그래서 행위는 지금처럼 Create New Users","speaker":""},{"start":10608519,"end":10610699,"text":"이런 식으로 따로 표현을 하지는 않아요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551865221,"relativeStart":10610702,"segments":[{"start":10610702,"end":10618902,"text":"왜냐? 행위를 나타내주는 건 이미 HTTP 메소드가 존재하기 때문에","speaker":""},{"start":10618902,"end":10623602,"text":"그래서 우리는 그냥 users라고만 한 뒤","speaker":""},{"start":10623602,"end":10633822,"text":"얘를 호출할 때 포스트라는 특정 메소드를 같이 보내면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551888516,"relativeStart":10633821,"segments":[{"start":10633821,"end":10640821,"text":"이때는 딱 봐도'아, 유저를 하나 만든 거구나' 라는 걸 이해할 수 있다는 거예요.","speaker":""},{"start":10640821,"end":10644521,"text":"그래서 만약에 여기에 행위가 추가로 들어가 버리면","speaker":""},{"start":10644521,"end":10653621,"text":"HTTP 메소드와 의미가 중복되거나 의미가 잘못된, 어긋나는 현상들이 발생할 수가 있기 때문에","speaker":""},{"start":10653621,"end":10657441,"text":"이런 행위는 아예 작성하지 않는다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551910525,"relativeStart":10657446,"segments":[{"start":10657446,"end":10659486,"text":"라고 생각해주시면 돼요.","speaker":""},{"start":10659486,"end":10664386,"text":"그래서 일단은 내용이 조금 많이 길기는 했는데","speaker":""},{"start":10664386,"end":10668286,"text":"여러분들이 이후에 각 도메인들을 추가로 작성을 할 때는","speaker":""},{"start":10668286,"end":10669846,"text":"API를 설계를 할 때는","speaker":""},{"start":10669846,"end":10675266,"text":"여러한 내용들 따로 지켜서 진행을 해주시면 된다는 거고","speaker":""},{"start":10675266,"end":10679286,"text":"물론 이 과정을 다 외우고 있을 필요는 없어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551931524,"relativeStart":10679282,"segments":[{"start":10679282,"end":10688282,"text":"제가 매번 얘기하는 것처럼 일단은 내용을 한번 익히고 그리고 실제로 각각의 도메인들을 작성을 해줄 때는","speaker":""},{"start":10688282,"end":10696282,"text":"여러분들이 상황에 맞게끔 API를 다시 확인하고 규칙에 맞게 작성만 해주시면 돼요.","speaker":""},{"start":10696282,"end":10699902,"text":"언제든 돌아와서 확인하는 건 전혀 문제이지 않아요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551952257,"relativeStart":10699903,"segments":[{"start":10699903,"end":10701903,"text":"시험 보는 거 아니니까.","speaker":""},{"start":10701903,"end":10707563,"text":"그래서 일단은 여기까지 해주면 우리 REST API 설계할 때","speaker":""},{"start":10707563,"end":10712403,"text":"어떤 이름들을 가지고 써야 되는지에 대한 내용도 알아볼 수 있을 건데","speaker":""},{"start":10712403,"end":10714563,"text":"지금 내용 다들 이해하실 수 있겠죠?","speaker":""},{"start":10714563,"end":10720063,"text":"아 또 슬픔이가 올라오기는 하는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551971976,"relativeStart":10720069,"segments":[{"start":10720069,"end":10725769,"text":"아직은 이론만 듣고 실제로 여러분들이 그 API를 붙여보지는 않아서 그래요.","speaker":""},{"start":10725769,"end":10735949,"text":"일단은 이런 내용들이 있다, 규칙들이 있다 라고 이해해주시면 돼요.","speaker":""},{"start":10735949,"end":10740529,"text":"자 그러면 우리 유닛2까지는 이제 다 진행을 했고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780551995012,"relativeStart":10740538,"segments":[{"start":10740538,"end":10742858,"text":"이후에는 제가 첫 컨트롤러","speaker":""},{"start":10742858,"end":10744978,"text":"직접","speaker":""},{"start":10744978,"end":10746938,"text":"실제 손으로 코드들을","speaker":""},{"start":10746938,"end":10748598,"text":"조금 작성해볼거요 라고 했었죠","speaker":""},{"start":10748598,"end":10751238,"text":"그래서 코드를 작성하는 과정","speaker":""},{"start":10751238,"end":10752538,"text":"진행하도록 할건데","speaker":""},{"start":10752538,"end":10760038,"text":"그쵸","speaker":""},{"start":10760038,"end":10762818,"text":"우수한 슬픔이와","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552017533,"relativeStart":10762813,"segments":[{"start":10762813,"end":10767193,"text":"하트 공격들이 올라오고 있죠","speaker":""},{"start":10767193,"end":10769993,"text":"자 그러면","speaker":""},{"start":10769993,"end":10774933,"text":"또 이제 56분까지로 하면 여러분들 슬픔위만 올라오겠죠","speaker":""},{"start":10774933,"end":10778993,"text":"어차피 우리 47분 다 돼가니까","speaker":""},{"start":10778993,"end":10781873,"text":"10? 50?","speaker":""},{"start":10781873,"end":10783793,"text":"10, 50까지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552045966,"relativeStart":10783789,"segments":[{"start":10783789,"end":10787169,"text":"15시까지 괜찮죠?","speaker":""},{"start":10787169,"end":10791989,"text":"자, 15시까지 쉬는 시간 한번 가졌다가","speaker":""},{"start":10791989,"end":10796309,"text":"실제 이론은 조금만 내려두고","speaker":""},{"start":10796309,"end":10800049,"text":"실제 코드들이 작성해 나가는 컨트롤러 만들어 나가는 과정","speaker":""},{"start":10800049,"end":10801269,"text":"진행해보도록 할게요","speaker":""},{"start":10801269,"end":10804189,"text":"일단은 쉬는 시간 한번 가졌다가 진행해볼게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552063907,"relativeStart":10805524,"segments":[{"start":10805524,"end":10807684,"text":"그 상대는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552071045,"relativeStart":10807684,"segments":[{"start":10807684,"end":10809724,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552123784,"relativeStart":10809717,"segments":[{"start":10809717,"end":10813357,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552144512,"relativeStart":10813349,"segments":[{"start":10813349,"end":10816349,"text":"","speaker":""},{"start":10816349,"end":10819629,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552205705,"relativeStart":10819637,"segments":[{"start":10819637,"end":10823457,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552269696,"relativeStart":10823461,"segments":[{"start":10823461,"end":10827161,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552326027,"relativeStart":10827157,"segments":[{"start":10827157,"end":10829157,"text":"멋지군!","speaker":""},{"start":10829157,"end":10834097,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552415874,"relativeStart":10834101,"segments":[{"start":10834101,"end":10836461,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552516747,"relativeStart":10836453,"segments":[{"start":10836453,"end":10842453,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552561559,"relativeStart":10848245,"segments":[{"start":10848245,"end":10851365,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552598403,"relativeStart":10851365,"segments":[{"start":10851365,"end":10854605,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552715669,"relativeStart":10854613,"segments":[{"start":10854613,"end":10859173,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552776085,"relativeStart":10859173,"segments":[{"start":10859173,"end":10861813,"text":"","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552835486,"relativeStart":10861813,"segments":[{"start":10861813,"end":10866053,"text":"자 그러면 이제 또 시간 됐으니까 우리 이어서 한번 진행해보도록 할게요.","speaker":""},{"start":10866053,"end":10872853,"text":"그래서 이번에는 우리 드디어 이제 이론에 관한 내용은 조금 내려두고","speaker":""},{"start":10872853,"end":10876653,"text":"본격적으로 손으로 무언가 작성할 수 있는 시간이 될 거예요.","speaker":""},{"start":10876653,"end":10877933,"text":"라고 얘기를 했었죠.","speaker":""},{"start":10877933,"end":10883893,"text":"그래서 첫 번째 기본적인 컨트롤러에 대한 내용을 작성을 해보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552856737,"relativeStart":10883891,"segments":[{"start":10883891,"end":10887051,"text":"다시 말해 여러분들이 손으로 내용을 작성하고","speaker":""},{"start":10887051,"end":10892731,"text":"어떻게 동작하는지 확인할 수 있는 시간이 되요 라는 거죠","speaker":""},{"start":10892731,"end":10895531,"text":"그래서 내용을 같이 보면","speaker":""},{"start":10895531,"end":10899571,"text":"일단은 먼저 첫 컨트롤러를 만들도록 할게요","speaker":""},{"start":10899571,"end":10904611,"text":"그래서 여기 보면 특정 경로로 들어가서 만들어 주세요 라고 나와 있죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552876693,"relativeStart":10904614,"segments":[{"start":10904614,"end":10908074,"text":"그래서 우리가 바로 같이 한번 만들어 보도록 할게요.","speaker":""},{"start":10908074,"end":10911194,"text":"그래서 저는 인텔리제이로 바로 갈 거예요.","speaker":""},{"start":10911194,"end":10914754,"text":"여러분들 인텔리제이는 다들 실행이 되어 있으시겠죠?","speaker":""},{"start":10914754,"end":10917914,"text":"인텔리제이를 볼 건데","speaker":""},{"start":10917914,"end":10922914,"text":"우리가 아까는 스프링 부트를 한번 실행을 시켜두는 상태죠.","speaker":""},{"start":10922914,"end":10925434,"text":"그렇기 때문에 저는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552900486,"relativeStart":10925438,"segments":[{"start":10925438,"end":10928698,"text":"상단으로 올라가서 스톱 버튼을 눌러","speaker":""},{"start":10928698,"end":10931738,"text":"일단은 종료를 먼저 해주도록 할게요.","speaker":""},{"start":10931738,"end":10934718,"text":"본격적으로 코드를 조금 수정하기 전에","speaker":""},{"start":10934718,"end":10938858,"text":"스톱 버튼을 눌러서 이렇게 종료를 시킬 거예요.","speaker":""},{"start":10938858,"end":10942878,"text":"여러분들도 간단하게 종료 한번 해주시면 되겠죠?","speaker":""},{"start":10942878,"end":10947598,"text":"다들 잘 되셨을 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552922515,"relativeStart":10947594,"segments":[{"start":10947594,"end":10960374,"text":"자 그러면 이제는 우리가 여기 특정 경로를 통해서 파일 하나를 만들건데 제가 아까 전에 얘기하기로는 우리 전체적인 디렉터리 구조를 봤을 때","speaker":""},{"start":10960374,"end":10969334,"text":"각각의 컨트롤러나 서비스나 리포지토리나 도메인이나 모두 다 특정 폴더 안에 있었죠. 그래서 우리는 여기","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552945046,"relativeStart":10969329,"segments":[{"start":10969329,"end":10979549,"text":"com.able.bookapp이라는 이 폴더의 하위에다가 우클릭을 해서 new 패키지를 만들어 주도록 할게요.","speaker":""},{"start":10979549,"end":10987649,"text":"여기 우클릭 new 가서 아닌 패키지를 눌러주도록 할 거예요.","speaker":""},{"start":10987649,"end":10991009,"text":"이거 우리 전에 폴더 만드는 거 한 번 했었죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552967826,"relativeStart":10991132,"segments":[{"start":10991132,"end":10994272,"text":"그래서 패키지 안에 만들어 주실 거고","speaker":""},{"start":10994272,"end":11001132,"text":"여기다가 우리는 이름을 컨트롤러를 만들 거요라고 했으니까","speaker":""},{"start":11001132,"end":11003652,"text":"소문자로 컨트롤러","speaker":""},{"start":11003652,"end":11006312,"text":"이렇게 작성해 주시면 돼요","speaker":""},{"start":11006312,"end":11008512,"text":"컨트롤러","speaker":""},{"start":11008512,"end":11012392,"text":"그리고 여러분들 보면 자동으로 앞에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780552990629,"relativeStart":11012394,"segments":[{"start":11012394,"end":11015794,"text":"com.able.book앱 이거 붙어있죠?","speaker":""},{"start":11015794,"end":11021694,"text":"이거 그냥 그대로 두시고 뒤에다가 이 친구만 추가로 작성해주시면 돼요.","speaker":""},{"start":11021694,"end":11027094,"text":"만약 지우신 분들은 처음부터 다시 쓰시면 되겠죠?","speaker":""},{"start":11027094,"end":11034734,"text":"그래서 내용 작성됐으면 엔터 눌러서 이렇게 파일 하나 만들도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553014937,"relativeStart":11034737,"segments":[{"start":11034737,"end":11037037,"text":"또 잘 안되는게 있을까요?","speaker":""},{"start":11037037,"end":11038037,"text":"하하","speaker":""},{"start":11038037,"end":11041737,"text":"잘 안되는거 있으면 얘기해주세요","speaker":""},{"start":11041737,"end":11045437,"text":"자 그래서 컨트롤러 만들어 주셨으면","speaker":""},{"start":11045437,"end":11047837,"text":"여기에 다시한번 우클릭","speaker":""},{"start":11047837,"end":11049437,"text":"new","speaker":""},{"start":11049437,"end":11050937,"text":"java class","speaker":""},{"start":11050937,"end":11053437,"text":"자 이번엔 요렇게 들어갈게요","speaker":""},{"start":11053437,"end":11055957,"text":"요렇게","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553043614,"relativeStart":11055949,"segments":[{"start":11055949,"end":11069569,"text":"자 그래서 다시 한번 들어가서 자바 클래스 만들건데 이번엔 제가 자 hello controller 라고 작성을 해볼거에요","speaker":""},{"start":11069569,"end":11076549,"text":"이건 우리 임시 컨트롤러 라서 저는 hello controller 라고 작성해 줄게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553063590,"relativeStart":11076550,"segments":[{"start":11076550,"end":11080890,"text":"자 그럼 여기까지 내용 됐으면 다시 한번 엔터 눌러서","speaker":""},{"start":11080890,"end":11085210,"text":"이렇게 만들어 주시면 되겠죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553088151,"relativeStart":11085206,"segments":[{"start":11085206,"end":11091346,"text":"자 그러면 여기까지는 우리 사실 클래스 하나 만드는 거 동일하죠.","speaker":""},{"start":11091346,"end":11093826,"text":"기존에 우리가 다뤘었던 내용과 동일해요.","speaker":""},{"start":11093826,"end":11095706,"text":"자바의 내용과 동일해요.","speaker":""},{"start":11095706,"end":11101386,"text":"그리고 저는 이 클래스 안에다가 메서드를 하나를 만들어 보도록 할 거예요.","speaker":""},{"start":11101386,"end":11108946,"text":"그래서 메서드는 public, 보이리 그리고 소문자로 hello라고 한번 작성을 해볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553097369,"relativeStart":11108936,"segments":[{"start":11108936,"end":11111316,"text":"어플이 리그 보일지","speaker":""},{"start":11111316,"end":11111596,"text":"hello","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553120143,"relativeStart":11112902,"segments":[{"start":11112902,"end":11118842,"text":"그리고 이때 hello의 경우는 어떤 역할을 해줄 거냐면","speaker":""},{"start":11118842,"end":11130102,"text":"우리가 hello spring boot라고 해서 이 문자열을 그냥 그대로 리턴해주는 역할을 할 거예요.","speaker":""},{"start":11130102,"end":11134862,"text":"hello spring boot라는 문자열을 리턴해주는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553147547,"relativeStart":11134856,"segments":[{"start":11134856,"end":11139796,"text":"자 그러면 우리 반환형은 보이드로 되면 안되죠","speaker":""},{"start":11139796,"end":11142956,"text":"반환값이 생겼으니까 반환값의 자료형","speaker":""},{"start":11142956,"end":11146696,"text":"string으로 바꿔주면 메서드 하나 정리할 수 있죠","speaker":""},{"start":11146696,"end":11151756,"text":"자 여기까지 내용은 우리 정말 java의 내용이에요","speaker":""},{"start":11151756,"end":11155016,"text":"그러니 다들 다들 이해하시겠죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553171620,"relativeStart":11155140,"segments":[{"start":11155140,"end":11157140,"text":"클래스 안에 메소드 정의하는 거?","speaker":""},{"start":11157140,"end":11160140,"text":"하하하","speaker":""},{"start":11160140,"end":11163140,"text":"자, 여러분 여기는 슬픔이가 나오면 안 돼요.","speaker":""},{"start":11163140,"end":11165140,"text":"우리 Java 다 배운 거니까.","speaker":""},{"start":11165140,"end":11171140,"text":"자, 그러면 여기에 어떤 걸 한번 추가를 해보도록 할 거냐면","speaker":""},{"start":11171140,"end":11172140,"text":"하하하","speaker":""},{"start":11172140,"end":11177240,"text":"지금 앞에 작성한 이 클래스는 우리가 컨트롤러라고 했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553188503,"relativeStart":11177246,"segments":[{"start":11177246,"end":11182646,"text":"그렇기 때문에 컨트롤러라는 걸 스프링한테 알려줄 필요가 있어요","speaker":""},{"start":11182646,"end":11188606,"text":"그리고 이때는 어떤 걸 통해 알려줄 수 있어요 라고 했었죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553210534,"relativeStart":11188598,"segments":[{"start":11188598,"end":11193318,"text":"자, 그쵸? 아주 잘 기억하고 계시죠?","speaker":""},{"start":11193318,"end":11197638,"text":"어노테이션이라는 걸 통해서 알려주는 게 가능하다고 했었고","speaker":""},{"start":11197638,"end":11200758,"text":"좀 더 자세히는 아예 작성을 해주신 것처럼","speaker":""},{"start":11200758,"end":11203438,"text":"at 컨트롤러","speaker":""},{"start":11203438,"end":11210298,"text":"이 친구, 어노테이션을 통해서 알려주는 게 가능해요 라고 했었어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553239712,"relativeStart":11210288,"segments":[{"start":11210288,"end":11215628,"text":"그래서 우리는 지금의 클래스 위쪽에다가 붙여주도록 할 건데","speaker":""},{"start":11215628,"end":11222288,"text":"이때 그냥 컨트롤러가 아니라 우리는 lastController라는 걸 붙여주도록 할게요.","speaker":""},{"start":11222288,"end":11229828,"text":"그래서 여기다가 lastController를 붙여주도록 할 건데","speaker":""},{"start":11229828,"end":11235108,"text":"어? 강사님 얘는 우리가 계속 봐온 그냥 컨트롤러가 아니라","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553262497,"relativeStart":11235111,"segments":[{"start":11235111,"end":11241051,"text":"왜 REST 컨트롤러인가요? 왜 REST가 붙었나요? 라고 할 수 있죠","speaker":""},{"start":11241051,"end":11243511,"text":"근데 그 이유는 간단해요","speaker":""},{"start":11243511,"end":11250431,"text":"지금의 컨트롤러의 경우는 우리가 앞서 배웠었던 REST API죠","speaker":""},{"start":11250431,"end":11254071,"text":"이 방식에 따른 컨트롤러예요","speaker":""},{"start":11254071,"end":11257911,"text":"즉 REST API용 컨트롤러예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553283237,"relativeStart":11257909,"segments":[{"start":11257909,"end":11259909,"text":"라고 명시를 해주는 거죠.","speaker":""},{"start":11259909,"end":11265409,"text":"그렇기 때문에 컨트롤러이기는 하지만 우리가 앞서 다룬 rest,","speaker":""},{"start":11265409,"end":11273409,"text":"그러니 뭐 post, put, get, delete.","speaker":""},{"start":11273409,"end":11278269,"text":"이러한 rest API를 가져다니까 사용할 컨트롤러의 역할을","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553307307,"relativeStart":11278260,"segments":[{"start":11278260,"end":11285660,"text":"라고 명시해주는 거예요. 그래서 우리는 앞으로 rest api를 쓸 거니까 이 annotation을 붙여주시면 돼요.","speaker":""},{"start":11285660,"end":11294380,"text":"그래서 이런 식으로 작성을 해주면 되는데 여러분들이 해당 annotation을 사용하기 위해서는","speaker":""},{"start":11294380,"end":11301800,"text":"그냥 작성만 하는 게 아니라 위쪽에 별도로 annotation을 import하는 과정이 필요해요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553328294,"relativeStart":11301784,"segments":[{"start":11301784,"end":11309784,"text":"그래서 여기 보면은 지금도 막 빨간색 밑줄로 import class라고 하면서 막 내용 나오죠.","speaker":""},{"start":11309784,"end":11315784,"text":"그래서 우리 전에 import 했었죠. 스캐너 사용할 때도 했었죠.","speaker":""},{"start":11315784,"end":11322784,"text":"그래서 여기다가 import 그리고 org spring 프레임워크","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553350305,"relativeStart":11322776,"segments":[{"start":11322776,"end":11335776,"text":".web.bind.annotation","speaker":""},{"start":11335776,"end":11342396,"text":"그리고 restController라고 작성을 해주셔야 돼요.","speaker":""},{"start":11342396,"end":11344536,"text":"n이 두 개죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553373091,"relativeStart":11344528,"segments":[{"start":11344528,"end":11349568,"text":"자 일단은","speaker":""},{"start":11349568,"end":11350848,"text":"작성해보시면 돼요","speaker":""},{"start":11350848,"end":11352948,"text":"여러분들","speaker":""},{"start":11352948,"end":11355208,"text":"조금 될 수 있지만","speaker":""},{"start":11355208,"end":11357388,"text":"이거 일단은 한번 따라서 작성해볼게요","speaker":""},{"start":11357388,"end":11361208,"text":"그래도 한 번은 작성해봐야죠","speaker":""},{"start":11361208,"end":11363468,"text":"자","speaker":""},{"start":11363468,"end":11364828,"text":"oig.org","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553400471,"relativeStart":11364829,"segments":[{"start":11364829,"end":11374249,"text":"spring프레임워크.web.bind.annotation.restcontroller요","speaker":""},{"start":11374249,"end":11382709,"text":"여러분들 슬픔이 누를 시간에 한 번 한 자라도 더 쓰시면 돼요","speaker":""},{"start":11382709,"end":11384389,"text":"일단은 지금은","speaker":""},{"start":11384389,"end":11386569,"text":"지금 제가 이렇게 얘기해서 죄송한데","speaker":""},{"start":11386569,"end":11388989,"text":"일단 지금은 한 번 써봐야 돼요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553426337,"relativeStart":11388994,"segments":[{"start":11388994,"end":11390994,"text":"왜냐하면 너무 길기는 하죠","speaker":""},{"start":11390994,"end":11392874,"text":"저도","speaker":""},{"start":11392874,"end":11395514,"text":"저도 매번 쓰지 않아요","speaker":""},{"start":11395514,"end":11399034,"text":"자 우리 다 작성되신 분들은","speaker":""},{"start":11399034,"end":11401794,"text":"다시 한번 엄지 이모지 한번 눌러줄게요","speaker":""},{"start":11401794,"end":11407914,"text":"자 여기까지는","speaker":""},{"start":11407914,"end":11409534,"text":"다들 작성이 됐을 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553448353,"relativeStart":11409531,"segments":[{"start":11409531,"end":11412131,"text":"그래서 지금 중요한 건","speaker":""},{"start":11412131,"end":11413131,"text":"어!","speaker":""},{"start":11413131,"end":11415931,"text":"어노테이션을 사용을 하기 위해서는","speaker":""},{"start":11415931,"end":11419431,"text":"앞과 같이 별도의 어노테이션을 사용할 수 있게","speaker":""},{"start":11419431,"end":11421631,"text":"임포트 과정이 필요하다","speaker":""},{"start":11421631,"end":11424131,"text":"라고 얘기할 수 있다는 거죠","speaker":""},{"start":11424131,"end":11425631,"text":"그래야지만","speaker":""},{"start":11425631,"end":11429131,"text":"아까 빨간색이 이제는 노란색으로 바뀌는 걸 볼 수 있죠","speaker":""},{"start":11429131,"end":11430771,"text":"자 그리고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553469354,"relativeStart":11430776,"segments":[{"start":11430776,"end":11440856,"text":"우리는 이 어노테이션을 통해 Hello 컨트롤러라는 게 우리는 하나의 컨트롤러구나 라는 걸 스프링한테 알려줄 수가 있는 거고","speaker":""},{"start":11440856,"end":11446656,"text":"추가로 여기 아래 Hello라고 명시해둔 메소드 있죠?","speaker":""},{"start":11446656,"end":11452056,"text":"이 메소드 위에다가 어노테이션을 하나만 더 붙여보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553491101,"relativeStart":11452056,"segments":[{"start":11452056,"end":11456376,"text":"그래서 이번에도 at을 작성을 해주고","speaker":""},{"start":11456376,"end":11461756,"text":"자 이번에는 getMapping이라고 작성을 해줄거에요","speaker":""},{"start":11461756,"end":11467156,"text":"이렇게 getMapping이라고 해줄게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553516199,"relativeStart":11467143,"segments":[{"start":11467143,"end":11478403,"text":"자 그러면 역시나 getMapping annotation을 사용하기 위해서는 우리가 위쪽에다가 import org.spring 이렇게 작성해야 되는데 또 슬픔이 올라오겠죠?","speaker":""},{"start":11478403,"end":11479503,"text":"슬픔이~","speaker":""},{"start":11479503,"end":11489023,"text":"자 그래서 이거는 여러분들 어떻게 해보시면 되냐면 우리가 여러분들 지금 느끼고 있는 것처럼 이 긴 거를 매번 작성을 할 수는 없어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553536415,"relativeStart":11489029,"segments":[{"start":11489029,"end":11492629,"text":"그래서 아주 간단한 방법이 있어요.","speaker":""},{"start":11492629,"end":11496129,"text":"여기 빨간색 에러 발생하는 곳 있죠?","speaker":""},{"start":11496129,"end":11498769,"text":"여기다가 커서를 두시고","speaker":""},{"start":11498769,"end":11504069,"text":"우리 Alt, 엔터를 눌러보세요.","speaker":""},{"start":11504069,"end":11506869,"text":"Alt, 엔터","speaker":""},{"start":11506869,"end":11509369,"text":"그래서 Alt,","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553559205,"relativeStart":11509363,"segments":[{"start":11509363,"end":11515243,"text":"엔터 누르니까 짜잔 한 줄이 추가됐죠","speaker":""},{"start":11515243,"end":11519323,"text":"우리가 필요한 내용이 알아서 추가됐어요","speaker":""},{"start":11519323,"end":11523123,"text":"그래서 처음에는 작성을 해보기는 했지만","speaker":""},{"start":11523123,"end":11526363,"text":"이제는 어노테이션을 사용하기 위해서","speaker":""},{"start":11526363,"end":11529163,"text":"얘를 자동으로 추가해줄 수도 있어요","speaker":""},{"start":11529163,"end":11531623,"text":"라고 생각해보시면 돼요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553580191,"relativeStart":11531621,"segments":[{"start":11531621,"end":11539621,"text":"그래서 빨간색 밑줄이 발생했을 때는 Alt+Enter 한 번씩 눌러서 임포트를 자동으로 진행해주는 것도 활용을 해보시면 되겠죠.","speaker":""},{"start":11539621,"end":11545621,"text":"그래서 제가 아까 얘기하기를'아 이거 저도 일일이 다 작성하지는 않아요' 라고 했었던 이유에요.","speaker":""},{"start":11545621,"end":11552621,"text":"자 그래서 우리 getMapping이라는 어노테이션을 붙여줬는데 저는 뒤쪽에다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553598634,"relativeStart":11552614,"segments":[{"start":11552614,"end":11554614,"text":"뒤쪽에다가 추가로","speaker":""},{"start":11554614,"end":11556614,"text":"괄호 열고","speaker":""},{"start":11556614,"end":11558494,"text":"괄호 안쪽에다가","speaker":""},{"start":11558494,"end":11560574,"text":"큰 따옴표를 작성을 한 뒤","speaker":""},{"start":11560574,"end":11561934,"text":"여기에","speaker":""},{"start":11561934,"end":11565914,"text":"slash hello라고 작성을 해줄게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553624486,"relativeStart":11565911,"segments":[{"start":11565911,"end":11575131,"text":"자 그래서 여러분들 여기 괄호 안쪽에다가 큰 따옴표 문자일이죠. 문자를 슬래시 hello라고 붙여주시면","speaker":""},{"start":11575131,"end":11587031,"text":"자 이거는 무슨 의미가 될 거냐면 우리가 뒤쪽 도메인에 슬래시 hello를 붙인 이 도메인으로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553646502,"relativeStart":11587039,"segments":[{"start":11587039,"end":11589419,"text":"get이라는 요청이 들어오면","speaker":""},{"start":11589419,"end":11590879,"text":"그때는","speaker":""},{"start":11590879,"end":11592579,"text":"get 메소드 요청이 들어오면","speaker":""},{"start":11592579,"end":11595879,"text":"그때는 이 메소드를 실행시켜주세요","speaker":""},{"start":11595879,"end":11597939,"text":"라는 의미가 되는 거예요","speaker":""},{"start":11597939,"end":11600919,"text":"그러니 해당 도메인의","speaker":""},{"start":11600919,"end":11602139,"text":"get 메소드와","speaker":""},{"start":11602139,"end":11602939,"text":"맵핑","speaker":""},{"start":11602939,"end":11604419,"text":"연결","speaker":""},{"start":11604419,"end":11605579,"text":"매칭시켜주는 거죠","speaker":""},{"start":11605579,"end":11608639,"text":"그래서 연결시켜준다라는 의미가 돼요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553668514,"relativeStart":11608639,"segments":[{"start":11608639,"end":11613639,"text":"그래서 저는 앞과 같이 코드를 작성을 해주고","speaker":""},{"start":11613639,"end":11617939,"text":"그 뒤에 우리가 스프링 부트를 한번 실행을 시켜보도록 할게요","speaker":""},{"start":11617939,"end":11623639,"text":"그래서 실행시킬 때는 여러분들 상단에서 실행시키면 됐었고","speaker":""},{"start":11623639,"end":11626639,"text":"지금 실행 버튼, 런 버튼 누르기 전에","speaker":""},{"start":11626639,"end":11630639,"text":"여기 북 앱 애플리케이션","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553681056,"relativeStart":11630627,"segments":[{"start":11630627,"end":11634227,"text":"이거 잘 되어 있는지 확인해 주시면 돼요.","speaker":""},{"start":11634227,"end":11638447,"text":"얘가 선택되어 있는지 확인하고 run 한번 눌러볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553704883,"relativeStart":11638439,"segments":[{"start":11638439,"end":11648359,"text":"그리고 아래쪽에 이런 식으로 내용 쭉 나오면서 Started Book Application이라고 나오면 정생 실행된 거라고 했었어요.","speaker":""},{"start":11648359,"end":11654599,"text":"일단 여러분들 환경에 따라서 실행하는 데 시간이 조금 더 걸릴 수도 있어요.","speaker":""},{"start":11654599,"end":11662099,"text":"특히나 여러분들은 노트북이다 보니까 저는 데스크탑이라 상대적으로 시간이 더 오래 걸릴 수도 있기는 해요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553728939,"relativeStart":11662099,"segments":[{"start":11662099,"end":11664099,"text":"조금만 기다렸다 해볼게요.","speaker":""},{"start":11664099,"end":11670459,"text":"자 그러면 여기까지는 이제는 다들 되셨을 테니까","speaker":""},{"start":11670459,"end":11672859,"text":"우리가 다시 한번 브라우저 켜서","speaker":""},{"start":11672859,"end":11676539,"text":"여기 브라우저 켜서","speaker":""},{"start":11676539,"end":11682359,"text":"아까 전에는 그냥 로컬 호스트 8080만 작성을 했었는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553742510,"relativeStart":11682366,"segments":[{"start":11682366,"end":11687366,"text":"이번엔 뒤쪽에다가 hello라는 도메인을 추가로 붙여서","speaker":""},{"start":11687366,"end":11690326,"text":"접근을 해보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553766052,"relativeStart":11690327,"segments":[{"start":11690327,"end":11695267,"text":"자 그리고 일단은 실행 한번 하고 결과 보는지 답변드릴게요.","speaker":""},{"start":11695267,"end":11697327,"text":"자 실행을 해보니까","speaker":""},{"start":11697327,"end":11699067,"text":"어! Hello Spring!","speaker":""},{"start":11699067,"end":11702467,"text":"우리가 지금 Hello라는 도메인으로","speaker":""},{"start":11702467,"end":11705067,"text":"Get 요청을 보는 거죠.","speaker":""},{"start":11705067,"end":11707887,"text":"제가 전에 한번 얘기했었지만","speaker":""},{"start":11707887,"end":11711167,"text":"브라우저의 경우는 일반적으로 도메인으로 접근을 하면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553788081,"relativeStart":11711171,"segments":[{"start":11711171,"end":11714611,"text":"get이라는 요청을 보내게 되요 라고 얘기를 썼어요.","speaker":""},{"start":11714611,"end":11719171,"text":"그래서 여기 도메인을 통해 get 요청을 보내니까","speaker":""},{"start":11719171,"end":11723171,"text":"우리가 맵핑시켜준 메소드에 hello가 호출되면서","speaker":""},{"start":11723171,"end":11727171,"text":"반환해줄 거요 라고 했었던 hello spring이","speaker":""},{"start":11727171,"end":11732651,"text":"현재의 클라이언트에게 반환돼 띄워주고 있는 걸 볼 수 있다는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553810089,"relativeStart":11732653,"segments":[{"start":11732653,"end":11738653,"text":"그래서 우리는 아주 간단한 컨트롤러를 하나를 만들고","speaker":""},{"start":11738653,"end":11743753,"text":"웹상으로 호출해서 결과를 보고 있는 거예요 라고 볼 수가 있는 거예요","speaker":""},{"start":11743753,"end":11751453,"text":"그리고 지금 추가적인 질문이 북 애플리케이션에서는 플레이가 되는데","speaker":""},{"start":11751453,"end":11755133,"text":"헬로우에서는 플레이가 왜 뜰까요? 라고 해주셨어요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553820086,"relativeStart":11755131,"segments":[{"start":11755131,"end":11757871,"text":"혹시 Hello 어디서 플레이게 뜬다는 거죠?","speaker":""},{"start":11757871,"end":11758671,"text":"한번 꺼볼까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553846701,"relativeStart":11760895,"segments":[{"start":11760895,"end":11763675,"text":"아, 왜 안 뜨는지?","speaker":""},{"start":11763675,"end":11766715,"text":"아, 여기서는 왜 안 뜨냐면","speaker":""},{"start":11766715,"end":11769635,"text":"여기 얘기하는 걸까요?","speaker":""},{"start":11769635,"end":11770415,"text":"Hello Method?","speaker":""},{"start":11770415,"end":11774115,"text":"아니면 Hello Controller?","speaker":""},{"start":11774115,"end":11776375,"text":"아, 파일 전체.","speaker":""},{"start":11776375,"end":11777475,"text":"여기서는 왜 안 뜨는지.","speaker":""},{"start":11777475,"end":11781555,"text":"이거는 제가 앞서 한번 얘기했었던 거긴 한데","speaker":""},{"start":11781555,"end":11783615,"text":"우리가 기본적으로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553880496,"relativeStart":11783616,"segments":[{"start":11783616,"end":11790416,"text":"스프링부트의 경우는 엔트리 포인트 진입점이 어디라고 얘기했었죠?","speaker":""},{"start":11790416,"end":11793256,"text":"혹시 기억날까요?","speaker":""},{"start":11793256,"end":11798396,"text":"스프링부트에서의 시작 지점은 어디예요? 라고 얘기했었는지 기억날까요?","speaker":""},{"start":11798396,"end":11802336,"text":"우리 컨트롤러?","speaker":""},{"start":11802336,"end":11805936,"text":"잠깐만 제가 교환 잠깐 다시 볼게요.","speaker":""},{"start":11805936,"end":11809036,"text":"마찬가지로 이거 좀 헷갈려 하시는 분들이 있을 수 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553910690,"relativeStart":11809029,"segments":[{"start":11809029,"end":11815429,"text":"앞의 화면 잠깐만 볼게요.","speaker":""},{"start":11815429,"end":11821309,"text":"우리는 여기 스프링부트 애플리케이션이","speaker":""},{"start":11821309,"end":11824789,"text":"기본적인 진입점이라고 얘기를 했었어요.","speaker":""},{"start":11824789,"end":11829629,"text":"그래서 여기 해당 어노테이션이 붙은 파일을 가져다가","speaker":""},{"start":11829629,"end":11832829,"text":"실행을 해야 우리는 기본적인 스프링부트의","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553931697,"relativeStart":11832840,"segments":[{"start":11832840,"end":11837640,"text":"내용들을 자동으로 설정하고 빈도 읽고 생성해주는","speaker":""},{"start":11837640,"end":11840960,"text":"이러한 과정들이 진행이 가능해요 라고 얘기를 했었어요.","speaker":""},{"start":11840960,"end":11844960,"text":"그렇기 때문에 앞으로 스프링부트를 실행을 할 때는","speaker":""},{"start":11844960,"end":11850140,"text":"여기 해당 파일에서부터 실행할 거예요 라고 얘기를 했었죠.","speaker":""},{"start":11850140,"end":11854000,"text":"그렇기 때문에 얘는 실행이 되는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553956523,"relativeStart":11854001,"segments":[{"start":11854001,"end":11857961,"text":"헬로 컨트롤러는 그냥 일반적인 컨트롤러일 뿐이에요.","speaker":""},{"start":11857961,"end":11862881,"text":"다시 말해 스프링 부트 자체에 뭔가 동작을 하는 건 아니기 때문에","speaker":""},{"start":11862881,"end":11868381,"text":"얘는 실행 버튼이 따로 존재하지 않아요라는 거죠. 헬로 컨트롤러는.","speaker":""},{"start":11868381,"end":11871081,"text":"이 차이 이해할 수 있을까요?","speaker":""},{"start":11871081,"end":11875101,"text":"왜 헬로 컨트롤러는?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780553978805,"relativeStart":11875095,"segments":[{"start":11875095,"end":11879835,"text":"실행이 안되지. 그쵸. 채팅을 통해서도 또 의견을 말씀해주시기는 했어요.","speaker":""},{"start":11879835,"end":11885635,"text":"이것도 이해되신 것 같아요. 그래서 얘만 실행하는게 아니라","speaker":""},{"start":11885635,"end":11891055,"text":"우리는 컨트롤러일 뿐이니까 전체 진입점인 이 친구로 실행을 한다.","speaker":""},{"start":11891055,"end":11896895,"text":"앞으로는 여러분들 이 친구로만 실행한다고 생각해주시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554003120,"relativeStart":11896898,"segments":[{"start":11896898,"end":11900957,"text":"자 그러면 일단 다시 돌아가서","speaker":""},{"start":11900957,"end":11906278,"text":"네 앞에 잠시만요 슬라이드가","speaker":""},{"start":11906278,"end":11914378,"text":"자 여기 앞에 있는 코드를 이제 우리가 직접 작성을 해서 요청까지 보낸 거고","speaker":""},{"start":11914378,"end":11919638,"text":"이 내용을 다시 한번 설명을 하면 지금처럼 getMapping이라는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554016176,"relativeStart":11919628,"segments":[{"start":11919628,"end":11924448,"text":"이 친구를 통해서 get 메소드와 요청을 하는 거요라고 했어요.","speaker":""},{"start":11924448,"end":11927948,"text":"그리고 질문이 하나 더 있죠? 잠시만요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554037426,"relativeStart":11927944,"segments":[{"start":11927944,"end":11932944,"text":"일단은 여러분들 또 제가 설명을 드리기 전에","speaker":""},{"start":11932944,"end":11940604,"text":"우리 또 아주 재밌는 질문이 왔기 때문에 이것까지만 답변을 드리도록 할게요","speaker":""},{"start":11940604,"end":11944184,"text":"중간에 좀 흐름이 끊기는 부분이 있을 수는 있지만","speaker":""},{"start":11944184,"end":11948344,"text":"일단 여러분들 알고 계시면 유용한 내용이라서 한 번만 설명하고 갈게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554061473,"relativeStart":11948349,"segments":[{"start":11948349,"end":11953489,"text":"그래서 일단은 우리 클라이언트로부터 요청이 들어왔어요.","speaker":""},{"start":11953489,"end":11958289,"text":"그러면 요청이 들어왔고 지금 우리 눈에는 따로 보이지는 않죠.","speaker":""},{"start":11958289,"end":11963929,"text":"그냥 헬로 스프링 부트가 출력되는구나 라고 생각이 들 수는 있지만","speaker":""},{"start":11963929,"end":11968569,"text":"실질적으로는 디스페처 서블렛이라는 친구가 넘겨받았고","speaker":""},{"start":11968569,"end":11971589,"text":"어떤 컨트롤러를 찾아야 되지 라고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554082487,"relativeStart":11971856,"segments":[{"start":11971856,"end":11973516,"text":"핸들러 맵핑","speaker":""},{"start":11973516,"end":11975616,"text":"들렸다가 왔고","speaker":""},{"start":11975616,"end":11976816,"text":"그리고","speaker":""},{"start":11976816,"end":11979856,"text":"핸들러 어댑터를 또 찾았고","speaker":""},{"start":11979856,"end":11981696,"text":"들어가서 컨트롤러","speaker":""},{"start":11981696,"end":11983556,"text":"이때 실행된 게","speaker":""},{"start":11983556,"end":11984136,"text":"헬로","speaker":""},{"start":11984136,"end":11987016,"text":"컨트롤러가 되겠죠","speaker":""},{"start":11987016,"end":11989536,"text":"그래서 안에 있는 메소드를","speaker":""},{"start":11989536,"end":11990916,"text":"찾아서 실행","speaker":""},{"start":11990916,"end":11992836,"text":"그에 따른 응답 얘가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554107834,"relativeStart":11992832,"segments":[{"start":11992832,"end":11994832,"text":"Hello Spring.","speaker":""},{"start":11994832,"end":11998092,"text":"부트가 되겠죠.","speaker":""},{"start":11998092,"end":12001372,"text":"그래서 그 문제를 가져다가 반환.","speaker":""},{"start":12001372,"end":12009032,"text":"그리고 현재는 뷰는 아주 간단하게 생략이 돼서 넘어가는 거예요.","speaker":""},{"start":12009032,"end":12012232,"text":"일단은 이 부분.","speaker":""},{"start":12012232,"end":12015552,"text":"김남우 에이블러님 질문에 대한 내용.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554133435,"relativeStart":12015546,"segments":[{"start":12015546,"end":12020826,"text":"설명을 드렸는데 어떻게 흘러가는지 이해하셨을까요? MVC 패턴에서?","speaker":""},{"start":12020826,"end":12024326,"text":"이해되신 것 같아요.","speaker":""},{"start":12024326,"end":12029766,"text":"그리고 한 가지 또 질문. 여기 다 페이지 띄웠으니까 질문이 있는데","speaker":""},{"start":12029766,"end":12037666,"text":"MVC에서 V를 뷰를 고려하는 게 REST 컨트롤러라고 생각해도 될까요? 라고 질문해주셨는데","speaker":""},{"start":12037666,"end":12039066,"text":"그렇지는 않아요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554155444,"relativeStart":12039069,"segments":[{"start":12039069,"end":12047069,"text":"뷰를 고려하지 않는 건 우리가 리액트를 따로 뒀기 때문이에요. 프론트엔드를.","speaker":""},{"start":12047069,"end":12053069,"text":"그렇기 때문에 뷰를 고려하지 않는 것 뿐이지, REST API라서 그런 건 아니에요.","speaker":""},{"start":12053069,"end":12060649,"text":"REST API를 사용을 하면서도 우리 서버에서 뷰 만들고 전달해줄 수 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554175404,"relativeStart":12060653,"segments":[{"start":12060653,"end":12064713,"text":"다만 우리가 지금 과정에서는 다루지 않을 뿐이에요.","speaker":""},{"start":12064713,"end":12068333,"text":"그때는 아까 얘기한 JSP나 타임 리프","speaker":""},{"start":12068333,"end":12071833,"text":"이런 것들을 조금 다뤄주셔야 돼요.","speaker":""},{"start":12071833,"end":12076533,"text":"그래서 레스트 APR에는 조금 연관이 없는 거다 라고 보시면 돼요.","speaker":""},{"start":12076533,"end":12079413,"text":"네. 일단은 질문들이 있고","speaker":""},{"start":12079413,"end":12081253,"text":"이런 질문들은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554198188,"relativeStart":12081257,"segments":[{"start":12081257,"end":12083437,"text":"여러분들 되게 좋은 질문이에요.","speaker":""},{"start":12083437,"end":12086597,"text":"그렇기 때문에 제가 1대1문의 남겨주세요라고 하지 않고","speaker":""},{"start":12086597,"end":12088537,"text":"다시 한번 설명드리고 넘어간 거예요.","speaker":""},{"start":12088537,"end":12093397,"text":"충분히 이 흐름을 이해하기 위해서 필요한 내용이라서","speaker":""},{"start":12093397,"end":12098457,"text":"그러면 다시 한번 우리 아까 전에 겟맵핑 과정으로","speaker":""},{"start":12098457,"end":12099757,"text":"다시 한번 넘어가도록 할게요.","speaker":""},{"start":12099757,"end":12103617,"text":"그래서 겟맵핑은 제가 얘기했던 것처럼","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554218158,"relativeStart":12103616,"segments":[{"start":12103616,"end":12110756,"text":"get이라는 요청과 맵핑시켜주는, 연결시켜주는 역할이에요 라고 얘기를 했죠.","speaker":""},{"start":12110756,"end":12117796,"text":"그래서 지금처럼 get 요청이 hello라는 도미인, 우리가 작성해준 hello라는 도미인으로 오게 되면","speaker":""},{"start":12117796,"end":12124436,"text":"이 메소드, 아래 작성되어 있는 hello 메소드를 실행시켜주세요 라고 보는 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554241206,"relativeStart":12124440,"segments":[{"start":12124440,"end":12129440,"text":"이때의 반환값은 즉 HelloSpring 붙겠죠?","speaker":""},{"start":12129440,"end":12135140,"text":"반환값은 이 응답 그대로 본문이 돼서","speaker":""},{"start":12135140,"end":12140760,"text":"JSON 형식으로 묶여서 클라이언트한테 전속을 해주게 돼요.","speaker":""},{"start":12140760,"end":12146640,"text":"그리고 이때는 현재 클라이언트가 요청한 내용","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554264238,"relativeStart":12146631,"segments":[{"start":12146631,"end":12151171,"text":"헬로로 와서 정상적인 값 리턴 반환해주고 있는 거죠.","speaker":""},{"start":12151171,"end":12154091,"text":"그렇기 때문에 200OK.","speaker":""},{"start":12154091,"end":12157131,"text":"너가 보낸 요청 잘 처리했어.","speaker":""},{"start":12157131,"end":12161151,"text":"라고 200OK까지 보내주고 있다는 거죠.","speaker":""},{"start":12161151,"end":12166051,"text":"그래서 여기까지가 현재 get맵핑의 역할이 된다는 거예요.","speaker":""},{"start":12166051,"end":12169651,"text":"그래서 이 도메인을 통해 get요청 보내면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554284212,"relativeStart":12169648,"segments":[{"start":12169648,"end":12175648,"text":"해당 문구가 응답으로 돌아가서 화면상으로 출력이 될 수가 있다는 거죠.","speaker":""},{"start":12175648,"end":12182788,"text":"그래서 우리는 이 과정을 실제로 웹으로 들어가서 같이 한번 확인을 한 거예요.","speaker":""},{"start":12182788,"end":12185708,"text":"그래서 간단하게 Annotation 두 개.","speaker":""},{"start":12185708,"end":12190088,"text":"Let's Controller Get Mapping 사용을 해봤는데 Annotation","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554309564,"relativeStart":12190084,"segments":[{"start":12190084,"end":12197344,"text":"이거 조금 복잡해 보일 수는 있어도 그 역할 자체는 어렵지 않게 이해하실 수 있을 거예요.","speaker":""},{"start":12197344,"end":12199724,"text":"그러면 일단은 여기까지.","speaker":""},{"start":12199724,"end":12205024,"text":"슬픔이가 올라오는데 우리 일단은 여기까지 내용.","speaker":""},{"start":12205024,"end":12207624,"text":"이거 이해하실 수 있을까요?","speaker":""},{"start":12207624,"end":12214204,"text":"우리가 헬로라는 도메인으로 겟 요청 보내서 얘가 실행됐다라고 보시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554318510,"relativeStart":12214198,"segments":[{"start":12214198,"end":12217678,"text":"이해되시는 분들은 엄지 한번 눌러주세요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554342833,"relativeStart":12217672,"segments":[{"start":12217672,"end":12224692,"text":"그래서 일단은 이론 자체는 제가 얘기했던 것처럼 엄청 복잡해 보이고 하기는 하지만","speaker":""},{"start":12224692,"end":12233452,"text":"실제로 코드상으로 구현을 해보니까 우리 입장에서는 스프링 부트가 그걸 다 해주므로서 딱히 신경 쓸 게 없어요","speaker":""},{"start":12233452,"end":12239092,"text":"그냥 어떤 요청이 왔을 때 무슨 코드를 무슨 로직을 실행시키면 되는 거구나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554363567,"relativeStart":12239089,"segments":[{"start":12239089,"end":12241549,"text":"라는 것만 생각하면 된다는 거죠.","speaker":""},{"start":12241549,"end":12243289,"text":"아주 좋은 거죠.","speaker":""},{"start":12243289,"end":12249049,"text":"자, 그러면 이번에는 조금 다르게 작성을 해보도록 할게요.","speaker":""},{"start":12249049,"end":12251629,"text":"그래서 어떻게 해볼 거냐면","speaker":""},{"start":12251629,"end":12252849,"text":"제가","speaker":""},{"start":12252849,"end":12256849,"text":"자, 여기","speaker":""},{"start":12256849,"end":12259129,"text":"이번엔 path_variable이라는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554383549,"relativeStart":12259119,"segments":[{"start":12259119,"end":12262159,"text":"추가적인 어노테이션을 한번 사용을 해보도록 할 거예요.","speaker":""},{"start":12262159,"end":12266319,"text":"그래서 기존에 작성했었던 Hello 메소드를","speaker":""},{"start":12266319,"end":12268039,"text":"조금만 바꿔보도록 할게요.","speaker":""},{"start":12268039,"end":12271539,"text":"그래서 여기 돌아가서","speaker":""},{"start":12271539,"end":12277339,"text":"저는 이 코드는 우리 다시 한번 주석 처리해서 적어줄게요.","speaker":""},{"start":12277339,"end":12279539,"text":"그냥 지우고 변경하려고 했는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554406576,"relativeStart":12279538,"segments":[{"start":12279538,"end":12292378,"text":"그러면 나중에 여러분들 확인하기 조금 어려울 수 있으니까 얘는 제가 그냥 hello@Mapping이라고 작성을 해줄게요.","speaker":""},{"start":12292378,"end":12301638,"text":"이렇게 그리고 전체적으로 주석절이 한번 해서 접어주도록 할 거예요. 우리 전에 했던 것처럼","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554432952,"relativeStart":12301628,"segments":[{"start":12301628,"end":12306508,"text":"내용, 주석절에서 정리하는 거라고 보시면 되겠죠?","speaker":""},{"start":12306508,"end":12310728,"text":"자, 그리고 아래쪽에다가는 조금은 번거로울 수 있지만","speaker":""},{"start":12310728,"end":12316068,"text":"public, 그리고 string, follow라는 메소드를","speaker":""},{"start":12316068,"end":12318848,"text":"다시 한 번만 정의를 해줄게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554463156,"relativeStart":12318841,"segments":[{"start":12318841,"end":12323561,"text":"어? 놀람이? 놀람이가 다 작성이 돼서 다운 걸까요?","speaker":""},{"start":12323561,"end":12326161,"text":"여기까지 작성이 됐으면은","speaker":""},{"start":12326161,"end":12328441,"text":"자 이번엔 어떤 걸 한번 해보도록 할 거냐면","speaker":""},{"start":12328441,"end":12331301,"text":"우리가 기존에는 매개변수가","speaker":""},{"start":12331301,"end":12333241,"text":"해당 메서드에 매개변수가 없었죠?","speaker":""},{"start":12333241,"end":12338241,"text":"근데 여기다가 매개변수 string name을 작성을 할 거예요.","speaker":""},{"start":12338241,"end":12341621,"text":"다시 말해 문자 열을 하나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554485431,"relativeStart":12341621,"segments":[{"start":12341621,"end":12345061,"text":"넘겨받도록 할 거예요 라고 작성해주는 거죠.","speaker":""},{"start":12345061,"end":12349861,"text":"그런데 그냥 매개변수만 작성하는 게 아니라","speaker":""},{"start":12349861,"end":12352581,"text":"해당 매개변수 앞에다가","speaker":""},{"start":12352581,"end":12356161,"text":"우리 pass variable이라는","speaker":""},{"start":12356161,"end":12358621,"text":"annotation을 하나를 붙여주도록 할게요.","speaker":""},{"start":12358621,"end":12362861,"text":"여기 해당 annotation 하나 붙여주시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554513330,"relativeStart":12363103,"segments":[{"start":12363103,"end":12367503,"text":"매개변수 앞에다가 붙여주는 거예요.","speaker":""},{"start":12367503,"end":12372903,"text":"그리고 역시나 해당 어노테이션 사용해주려면","speaker":""},{"start":12372903,"end":12374443,"text":"임포트 거짓이 필요하겠죠.","speaker":""},{"start":12374443,"end":12378343,"text":"그래서 Alt+Enter 다시 한번 눌러주면","speaker":""},{"start":12378343,"end":12381963,"text":"위쪽에 Pass Variable 추가됐죠.","speaker":""},{"start":12381963,"end":12386403,"text":"그러면 얘는 어떤 역할을 해주는 거냐면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554536132,"relativeStart":12386408,"segments":[{"start":12386408,"end":12390548,"text":"우리가 이름 자체 보면 pass, 경로죠.","speaker":""},{"start":12390548,"end":12393468,"text":"그리고 variable은 변수라고 볼 수 있어요.","speaker":""},{"start":12393468,"end":12399688,"text":"그러니 경로를 통해 우리가 접근하는 도메인 경로를 통해서","speaker":""},{"start":12399688,"end":12404508,"text":"특정 값을 넘겨받을 거예요 라고 명시해 줄 수 있다는 거죠.","speaker":""},{"start":12404508,"end":12409208,"text":"그래서 도메인상으로 특정 값을 넘겨받기 위해서는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554558126,"relativeStart":12409206,"segments":[{"start":12409206,"end":12417086,"text":"매개변수를 작성을 하면 되고 해당 매개변수 앞에 pass variable이라는 annotation을 붙이면 된다.","speaker":""},{"start":12417086,"end":12418066,"text":"라고 보시면 돼요.","speaker":""},{"start":12418066,"end":12431106,"text":"그리고 추가로 반환하고자 하는 값은 hello plus name plus 느낌표.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554569922,"relativeStart":12431109,"segments":[{"start":12431109,"end":12437449,"text":"이런 식의 문자열을 return으로 반환해 주도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554596538,"relativeStart":12437449,"segments":[{"start":12437449,"end":12442189,"text":"그리고 나서 역시나 맵핑 요청이 들어왔을 때","speaker":""},{"start":12442189,"end":12444589,"text":"헬러 메서드를 실행할 수 있게끔","speaker":""},{"start":12444589,"end":12447289,"text":"역시나 getMapping 작성해줄 필요가 있겠죠?","speaker":""},{"start":12447289,"end":12452589,"text":"그래서 여기는 getMapping 작성을 해줄 거고","speaker":""},{"start":12452589,"end":12459149,"text":"역시나 괄호 안에 경로를 작성해줄 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554622657,"relativeStart":12459139,"segments":[{"start":12459139,"end":12461139,"text":"어떤 도메인으로 접근할 건지","speaker":""},{"start":12461139,"end":12464359,"text":"그래서 저는 hello","speaker":""},{"start":12464359,"end":12468139,"text":"그리고 뒤쪽에다가","speaker":""},{"start":12468139,"end":12470119,"text":"자, 슬래시를 하나를 더 붙이고","speaker":""},{"start":12470119,"end":12473479,"text":"중괄호 안에 name이라고 해주시면 돼요.","speaker":""},{"start":12473479,"end":12477619,"text":"일단 여기까지 먼저 작성해주세요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554652855,"relativeStart":12478889,"segments":[{"start":12478889,"end":12491369,"text":"자 그러면 앞과 같이 갭맵핑을 다시 작성을 했을 때는 이때 hello라는 도메인 뒤쪽에다가 /name이라는 걸 넘겨줄걸요.","speaker":""},{"start":12491369,"end":12501069,"text":"다시 말해 제가 localhost 8080/hello/한울이라고 넘겨주면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554676927,"relativeStart":12501073,"segments":[{"start":12501073,"end":12503953,"text":"지금 넘겨준 이 도메인의 값 있죠.","speaker":""},{"start":12503953,"end":12509753,"text":"이 한울이라는 걸 우리는 name이라는 걸로 넘겨 받을 거예요.","speaker":""},{"start":12509753,"end":12511753,"text":"라고 명시해준 거죠.","speaker":""},{"start":12511753,"end":12518053,"text":"그리고 이 name은 pass variable로 우리가 따로 연결을 시켜줬죠.","speaker":""},{"start":12518053,"end":12524893,"text":"그러니 여기 입력한 한울이 매개변수 name에 전달이 되고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554700219,"relativeStart":12524884,"segments":[{"start":12524884,"end":12528324,"text":"우리는 이 전달받은 걸 가져다가","speaker":""},{"start":12528324,"end":12532184,"text":"문자열 반환값으로 만들어주면","speaker":""},{"start":12532184,"end":12537144,"text":"펠로 한울 느낌표가 될 수가 있는 거예요.","speaker":""},{"start":12537144,"end":12540464,"text":"그리고 이 문자열을 만들어서","speaker":""},{"start":12540464,"end":12544784,"text":"return, 다시 클라이언트한테 전송을 해주는 거죠.","speaker":""},{"start":12544784,"end":12548184,"text":"그러면 우리","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554721220,"relativeStart":12548171,"segments":[{"start":12548171,"end":12552571,"text":"다시 한번 서버 실행시켜서 확인해보면 되겠죠.","speaker":""},{"start":12552571,"end":12555711,"text":"그래서 여러분들도 서버가 켜져 있으신 분들은","speaker":""},{"start":12555711,"end":12558871,"text":"잠깐 껐다가 다시 실행시켜 보시면 돼요.","speaker":""},{"start":12558871,"end":12561771,"text":"전 아까 질문에 대한 답변을 해드리느라","speaker":""},{"start":12561771,"end":12563971,"text":"잠깐 이미 꺼진 상태가 됐죠.","speaker":""},{"start":12563971,"end":12567371,"text":"그래서 다시 위에 있는 스탑 버튼 누르고","speaker":""},{"start":12567371,"end":12569411,"text":"실행시켜 보시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554730417,"relativeStart":12569417,"segments":[{"start":12569417,"end":12572917,"text":"저도 한번 실행시켜 볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554751179,"relativeStart":12572905,"segments":[{"start":12572905,"end":12582465,"text":"그리고 여기까지 내용 잘 띄워졌는지 제가 한 5초, 10초 정도만 더 기다렸다가 브라우저 통해서 같이 볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554771645,"relativeStart":12584697,"segments":[{"start":12584697,"end":12588737,"text":"그러면 10초 정도 더 기다렸으니까 다시 브라우저 가서","speaker":""},{"start":12588737,"end":12591897,"text":"저는 여기다가 입력을 한번 해보도록 할 거예요.","speaker":""},{"start":12591897,"end":12597637,"text":"그래서 이번에 헬로 뒤쪽에 다시 한번 슬래시 붙이고","speaker":""},{"start":12597637,"end":12600777,"text":"문자열 넘겨주면 돼요라고 했죠.","speaker":""},{"start":12600777,"end":12604297,"text":"그래서 지금처럼 한울","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554794698,"relativeStart":12604298,"segments":[{"start":12604298,"end":12607698,"text":"이라고 그냥 저는 제 이름을 한번 넘겨보도록 할게요.","speaker":""},{"start":12607698,"end":12614578,"text":"자, 그랬더니 어? Hello, 한울? 이라고 나오네요.","speaker":""},{"start":12614578,"end":12619977,"text":"자, 그러니 넘겨준 값을 가져다가 사용하고 있다.","speaker":""},{"start":12619977,"end":12626618,"text":"그래서 여러분들이 지금처럼 경로상으로 특정 값을 넘겨주고 사용을 하고자 할 때는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554815937,"relativeStart":12626623,"segments":[{"start":12626623,"end":12630623,"text":"이런 식으로 path variable이라는 annotation을 사용해주면","speaker":""},{"start":12630623,"end":12638143,"text":"특정 값을 지정해서 해당 메서드의 매개변수로 사용하는 게 가능하다라고 볼 수 있다는 거죠.","speaker":""},{"start":12638143,"end":12644303,"text":"그래서 제가 여기다가 뭐 한울이 아니라 abler라고 작성을 해줘도","speaker":""},{"start":12644303,"end":12647743,"text":"우리는 hello abler.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554841282,"relativeStart":12647751,"segments":[{"start":12647751,"end":12652751,"text":"넘겨준 값으로 진행되는 걸 볼 수가 있겠죠.","speaker":""},{"start":12652751,"end":12655551,"text":"그래서 일단 여기까지.","speaker":""},{"start":12655551,"end":12658451,"text":"pass variable 사용하는 거.","speaker":""},{"start":12658451,"end":12662191,"text":"잘 진행되고 잘 이해 되셨을까요?","speaker":""},{"start":12662191,"end":12666251,"text":"계신 분들은 엄지 한 번씩 눌러주세요.","speaker":""},{"start":12666251,"end":12669611,"text":"여기 진행한 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554869192,"relativeStart":12669621,"segments":[{"start":12669621,"end":12674861,"text":"일단 여기까지는 잘 진행되는 것 같죠","speaker":""},{"start":12674861,"end":12679201,"text":"패스가 변수로 입력되는 식인가요?","speaker":""},{"start":12679201,"end":12680121,"text":"맞아요","speaker":""},{"start":12680121,"end":12683241,"text":"우리가 경로에 작성해준 이 값이","speaker":""},{"start":12683241,"end":12685901,"text":"여기 지정해준 name 있죠","speaker":""},{"start":12685901,"end":12688301,"text":"그래서 여기 매칭을 시켜줘요","speaker":""},{"start":12688301,"end":12690661,"text":"그래서 매칭시켜준 name에다가","speaker":""},{"start":12690661,"end":12694621,"text":"경로에 있는 이 값을 읽어와 저장해주세요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554889668,"relativeStart":12694613,"segments":[{"start":12694613,"end":12696613,"text":"라는 방식이요.","speaker":""},{"start":12696613,"end":12699712,"text":"여기 입력한 값이","speaker":""},{"start":12699712,"end":12702712,"text":"요청으로 들어왔으니","speaker":""},{"start":12702712,"end":12704192,"text":"이 경로에 있는 걸","speaker":""},{"start":12704192,"end":12705792,"text":"매주에 전달해주세요.","speaker":""},{"start":12705792,"end":12709292,"text":"이해되셨을까요?","speaker":""},{"start":12709292,"end":12710533,"text":"이렇게 되신 것 같아요.","speaker":""},{"start":12710533,"end":12712533,"text":"그래서 우리","speaker":""},{"start":12712533,"end":12715133,"text":"캐스페리어블을 같이 한번 사용을 해봤고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554921926,"relativeStart":12715133,"segments":[{"start":12715133,"end":12722372,"text":"그럼 다음에는 또 다른 리퀘스트 파람 일환이고요.","speaker":""},{"start":12722372,"end":12732073,"text":"그래서 이번에는 우리가 추가적인 메소드를 설명해보도록 할게요.","speaker":""},{"start":12732073,"end":12734692,"text":"바로 한번 보도록 할게요.","speaker":""},{"start":12734692,"end":12740832,"text":"아래쪽에다가 핸드폰을 바꿀 건 아니기 때문에","speaker":""},{"start":12740832,"end":12742473,"text":"저희는 다시 허블링.","speaker":""},{"start":12744352,"end":12746352,"text":"스튜링, 긋!","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554931146,"relativeStart":12746621,"segments":[{"start":12746621,"end":12751161,"text":"라는 메서드를 새롭게 정의해보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554961601,"relativeStart":12751162,"segments":[{"start":12751162,"end":12756842,"text":"그리고 이 메소드에다가는 어떤 걸 붙여주도록 할 거냐면","speaker":""},{"start":12756842,"end":12760402,"text":"다시 한번 string 랭이라고 해서","speaker":""},{"start":12760402,"end":12765702,"text":"우리는 추가적인 매개변수란을 작성을 할 거예요.","speaker":""},{"start":12765702,"end":12770362,"text":"그리고 이번엔 이 앞에다가","speaker":""},{"start":12770362,"end":12772522,"text":"test variable이 아니라","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780554983625,"relativeStart":12772524,"segments":[{"start":12772524,"end":12781524,"text":"자,'Request' 그리고'param'이라는'Request parameter' 줄여서'Request parameter'이요.","speaker":""},{"start":12781524,"end":12785524,"text":"'Request parameter'라는'annotation'을 한번 붙여줄 거고,","speaker":""},{"start":12785524,"end":12793644,"text":"이'annotation' 또한 사용해주려면 다시 Alt+Enter 눌러서 import 한 번 해주면 되겠죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555013319,"relativeStart":12793635,"segments":[{"start":12793635,"end":12796015,"text":"여기 임포트 됐어요.","speaker":""},{"start":12796015,"end":12803035,"text":"그래서 이런 식으로 한번 내용 작성해 줄 거고","speaker":""},{"start":12803035,"end":12809275,"text":"이번에는 우리가 여기다가 특정 코드를 조금 작성을 해 볼 거예요.","speaker":""},{"start":12809275,"end":12812235,"text":"if 작성을 해 줄 거예요.","speaker":""},{"start":12812235,"end":12817095,"text":"그래서 간단하게 뭔가 검증할 수 있는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555035339,"relativeStart":12817091,"segments":[{"start":12817091,"end":12819871,"text":"조건문을 하나 작성을 해줄 거고","speaker":""},{"start":12819871,"end":12822371,"text":"저는 이 조건문이","speaker":""},{"start":12822371,"end":12825271,"text":"지금 넘겨받은 랭 있죠.","speaker":""},{"start":12825271,"end":12829551,"text":"랭이라는 문자열을 비교하도록 할 건데","speaker":""},{"start":12829551,"end":12831931,"text":"우리 문자열 비교할 때는","speaker":""},{"start":12831931,"end":12835731,"text":"그냥 비교연산 사용하면 안 돼요 라고 했었죠.","speaker":""},{"start":12835731,"end":12838931,"text":"이거 어떤 거 사용해야 된다고 했었죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555057093,"relativeStart":12838928,"segments":[{"start":12838928,"end":12841667,"text":"문자를 비교할 때?","speaker":""},{"start":12841667,"end":12844368,"text":"아 그쵸?","speaker":""},{"start":12844368,"end":12847808,"text":"여러분 이렇게 바로바로 답변이 올 때","speaker":""},{"start":12847808,"end":12849368,"text":"저는 제일 기분이 좋은 것 같아요.","speaker":""},{"start":12849368,"end":12851768,"text":"잘 기억하고 계신 것 같아서","speaker":""},{"start":12851768,"end":12855688,"text":"그쵸? 우리 equals라는 걸 사용해야 돼요 라고 했었죠.","speaker":""},{"start":12855688,"end":12859828,"text":"그래서 저는 equals를 작성을 해줄 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555084743,"relativeStart":12859819,"segments":[{"start":12859819,"end":12866699,"text":"이때 비교하고자 하는 문제열은 만약에 랭이라는 변수의 값이","speaker":""},{"start":12866699,"end":12873359,"text":"우리 코리안을 줄여서 코 라고 넘겨온다면 이라고 한번 작성을 해볼게요.","speaker":""},{"start":12873359,"end":12877779,"text":"자 그러면 결국 앞에 있는 이 조건문은","speaker":""},{"start":12877779,"end":12882679,"text":"지금 넘겨받은 랭의 변수의 값이 코라는 문자열을 가지고 있다면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555109062,"relativeStart":12882668,"segments":[{"start":12882668,"end":12886408,"text":"안에 있는 코드를 실행해주세요. 라는 의미가 되겠죠.","speaker":""},{"start":12886408,"end":12892628,"text":"그리고 저는 여기 안쪽에다가","speaker":""},{"start":12892628,"end":12896708,"text":"리턴을 통해서 우리 안녕하세요라는","speaker":""},{"start":12896708,"end":12900868,"text":"문자열을 반환할 수 있게 작성을 해볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555130313,"relativeStart":12902058,"segments":[{"start":12902058,"end":12907538,"text":"그래서 call하는 문자를 가지고 있을 땐 안녕하세요 라고 반환을 해줄 거고","speaker":""},{"start":12907538,"end":12913058,"text":"우리가 다음으로 만약에 지금의 조건이 아닌 경우","speaker":""},{"start":12913058,"end":12915918,"text":"지금의 조건이 실행되지 않는다면","speaker":""},{"start":12915918,"end":12923358,"text":"이때는 return hello 라고 문자를 가져다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555143113,"relativeStart":12923353,"segments":[{"start":12923353,"end":12928733,"text":"영어로 반환할 수 있게 작성해보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555172288,"relativeStart":12929931,"segments":[{"start":12929931,"end":12939071,"text":"자 그러면 우리 이 조건문은 다시 한번 얘기하면 간단하게 넘겨받은 매개변수의 문자를 비교해서 코인 경우에는 안녕하세요.","speaker":""},{"start":12939071,"end":12943711,"text":"코가 아닌 경우에는 hello를 반환할 수 있게끔 만들어주는 거예요.","speaker":""},{"start":12943711,"end":12950851,"text":"자 그리고 저는 다시 한번 get 요청과 맵핑을 시키기 위해서 get mapping.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555199945,"relativeStart":12950843,"segments":[{"start":12950843,"end":12953183,"text":"작성을 해주도록 할 거예요.","speaker":""},{"start":12953183,"end":12956883,"text":"그래서 어노테이션까지도 하나 추가로 붙여줄게요.","speaker":""},{"start":12956883,"end":12963223,"text":"그리고 괄호 안쪽에는 우리가 지금 greet라는 이름을 가지고 있는 거죠.","speaker":""},{"start":12963223,"end":12970502,"text":"그렇기 때문에 저는 여기에 경로도 똑같이 greet라고 한번 작성해 줄게요.","speaker":""},{"start":12970502,"end":12973743,"text":"이렇게 작성해 주시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555236554,"relativeStart":12973742,"segments":[{"start":12973742,"end":12984182,"text":"그러면 우리 다시 한번 이 맵핑된 메소드를 실행시킬 수 있게끔 브라우저를 통해서 접근해보면 되겠죠?","speaker":""},{"start":12984182,"end":12990542,"text":"그래서 저는 다시 한번 위에 서비스 종료했다가 실행시키도록 할게요","speaker":""},{"start":12990542,"end":12993602,"text":"종료 한번 시켜주고","speaker":""},{"start":12993602,"end":12997602,"text":"종료됐으니 다시 한번 실행","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555250111,"relativeStart":12997586,"segments":[{"start":12997586,"end":13001826,"text":"자, 스타트 잘 됐죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555273160,"relativeStart":13001819,"segments":[{"start":13001819,"end":13013859,"text":"자 그럼 여기까지 다 됐겠죠? 여기까지는 다 되셨을 테니까 우리 다시 한번 브라우저 가서 다시 한번 갈게요.","speaker":""},{"start":13013859,"end":13019399,"text":"자 이번에는 우리 hello가 아니라 greet를 통해 접근을 할 거예요.","speaker":""},{"start":13019399,"end":13024139,"text":"자 그래서 저는 greet라고만 작성을 해볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555301589,"relativeStart":13024131,"segments":[{"start":13024131,"end":13028131,"text":"그래서 해당 도메인으로 접근하니까","speaker":""},{"start":13028131,"end":13030971,"text":"어? 아 잠시만요","speaker":""},{"start":13030971,"end":13034691,"text":"뭐가 잘 안되죠?","speaker":""},{"start":13034691,"end":13039091,"text":"뭐가 문제인지 잠깐만 찾아볼게요","speaker":""},{"start":13039091,"end":13041971,"text":"옵션 한 번만 남겨볼게요","speaker":""},{"start":13041971,"end":13044291,"text":"음!","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555324365,"relativeStart":13044414,"segments":[{"start":13044414,"end":13048194,"text":"자 이때는 일단은 잘 동작이 되는데","speaker":""},{"start":13048194,"end":13053294,"text":"자 일단은 여러분들 우리 이 결과 먼저 볼게요","speaker":""},{"start":13053294,"end":13059514,"text":"자 그래서 지금처럼 이번에는 도메인에 물음표를 붙여서 넘기는 거예요","speaker":""},{"start":13059514,"end":13066274,"text":"자 물음표를 붙여서 랭의 값을 코리안이라고 작성을 해보는 거죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555347176,"relativeStart":13066268,"segments":[{"start":13066268,"end":13071268,"text":"그래서 기존과는 조금 다르게 넘어가죠","speaker":""},{"start":13071268,"end":13078328,"text":"그래서 물음표 뒤에 랭의 값을 for라고 지정해주세요라고 하면","speaker":""},{"start":13078328,"end":13087628,"text":"이때는 request param이라는 해당 어노테이션을 통해 랭의 값을 넘겨받는 게 가능하다는 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555368911,"relativeStart":13087631,"segments":[{"start":13087631,"end":13093171,"text":"그리고 코라는 값을 넘겨줬으니까 우리는 어?","speaker":""},{"start":13093171,"end":13100131,"text":"코문자에 맞네? 그러니 안녕하세요 라고 출력이 될 수 있다는 거죠","speaker":""},{"start":13100131,"end":13109851,"text":"자 그리고 이번에는 제가 그러면 코말고 English라는 의미로 ENG를 넘겨보도록 할게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555397069,"relativeStart":13109839,"segments":[{"start":13109839,"end":13113659,"text":"그리고 나서 실행을 한번 해보면","speaker":""},{"start":13113659,"end":13116799,"text":"이때는 앞에","speaker":""},{"start":13116799,"end":13119859,"text":"랭의 값이 English가 되겠죠.","speaker":""},{"start":13119859,"end":13122879,"text":"그러니 여기 가서","speaker":""},{"start":13122879,"end":13126319,"text":"다시 한번 랭의 값을 English로","speaker":""},{"start":13126319,"end":13128639,"text":"이렇게 넘겨봤고","speaker":""},{"start":13128639,"end":13130679,"text":"그리고 나서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555419098,"relativeStart":13130679,"segments":[{"start":13130679,"end":13131679,"text":"비교하니까","speaker":""},{"start":13131679,"end":13133259,"text":"어? 코가 아니네요.","speaker":""},{"start":13133259,"end":13136459,"text":"그러니 안에 코드는 실행되지 않고","speaker":""},{"start":13136459,"end":13137879,"text":"밖으로 나가서","speaker":""},{"start":13137879,"end":13140359,"text":"리턴의 코드가 실행이 되는 걸","speaker":""},{"start":13140359,"end":13142039,"text":"볼 수 있다는 거죠.","speaker":""},{"start":13142039,"end":13144999,"text":"그래서 저는","speaker":""},{"start":13144999,"end":13146679,"text":"앞과 같이 한번","speaker":""},{"start":13146679,"end":13149679,"text":"내용을 작성을 시켜줄 수가 있는 거고","speaker":""},{"start":13149679,"end":13150219,"text":"그리고","speaker":""},{"start":13150219,"end":13151339,"text":"어? 여기서","speaker":""},{"start":13151339,"end":13151619,"text":"어?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555439327,"relativeStart":13151621,"segments":[{"start":13151621,"end":13158201,"text":"아까 제가 아무것도 넘기지 않았더니","speaker":""},{"start":13158201,"end":13159421,"text":"그때는","speaker":""},{"start":13159421,"end":13162621,"text":"결과가 나오지 않았죠.","speaker":""},{"start":13162621,"end":13166901,"text":"그래서 지금과 같이 나오는 그 이유는","speaker":""},{"start":13166901,"end":13169941,"text":"우리가 requestparam이라고 작성을 해주는","speaker":""},{"start":13169941,"end":13171641,"text":"이 아노테이션의 경우는","speaker":""},{"start":13171641,"end":13172901,"text":"지금과 같이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555462356,"relativeStart":13172901,"segments":[{"start":13172901,"end":13178441,"text":"맵핑시켜주는 도메인 자체에는 따로 명시를 해주지는 않았죠.","speaker":""},{"start":13178441,"end":13183661,"text":"하지만 추가적으로 값을 넘겨줘야 하기 때문이에요.","speaker":""},{"start":13183661,"end":13192281,"text":"그래서 지금처럼 도메인상으로 패스 베리어블과 차이점이 있다면","speaker":""},{"start":13192281,"end":13195721,"text":"도메인상으로 지정을 따로 해주지는 않지만","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555489493,"relativeStart":13195716,"segments":[{"start":13195716,"end":13199456,"text":"지금과 같이 추가로 넘겨줘야지","speaker":""},{"start":13199456,"end":13203156,"text":"값을 받아서 사용하는 게 가능하다","speaker":""},{"start":13203156,"end":13205696,"text":"라고 보시면 돼요","speaker":""},{"start":13205696,"end":13211156,"text":"원하던 결과를 얻으려면 오버로드를 작성하면 될까요?","speaker":""},{"start":13211156,"end":13211936,"text":"라고 해주셨어요","speaker":""},{"start":13211936,"end":13215256,"text":"만약에 아무것도 넘기지 않았을 때를 얘기하는 걸까요?","speaker":""},{"start":13215256,"end":13218996,"text":"아무것도 넘기지 않았을 때","speaker":""},{"start":13218996,"end":13220876,"text":"헬로가 나오는 결과를 얘기하는 걸까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555511764,"relativeStart":13220876,"segments":[{"start":13220876,"end":13225876,"text":"그쵸? 자, 그때는 우리가 어떻게 해주면 되냐면","speaker":""},{"start":13225876,"end":13232636,"text":"자, 여기다가 사실 이것까지는 설명하지 않으려고 하기는 했어요.","speaker":""},{"start":13232636,"end":13234136,"text":"왜냐면 조금 복잡할 수 있어서.","speaker":""},{"start":13234136,"end":13236876,"text":"그래서 이때는 어떻게 해주시면 되냐면","speaker":""},{"start":13236876,"end":13242996,"text":"우리 여기, 뒤에 여기 작성된 annotation의 뒤쪽에다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555536082,"relativeStart":13242999,"segments":[{"start":13242999,"end":13245399,"text":"괄호를 작성을 해줘요","speaker":""},{"start":13245399,"end":13249999,"text":"그리고 기본값을 지정해준다고 보시면 돼요","speaker":""},{"start":13249999,"end":13255199,"text":"그래서 제가 default value라고 해주는 거죠","speaker":""},{"start":13255199,"end":13257859,"text":"말 그대로 기본값이죠","speaker":""},{"start":13257859,"end":13258699,"text":"default value","speaker":""},{"start":13258699,"end":13265059,"text":"그리고 얘의 값을 English로 지정해주세요","speaker":""},{"start":13265059,"end":13266619,"text":"제가 그냥 en이라고 할게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555562205,"relativeStart":13266624,"segments":[{"start":13266624,"end":13276624,"text":"그래서 English로 지정해주세요 라고 명시를 해주는 거죠.","speaker":""},{"start":13276624,"end":13283624,"text":"자 그러면 이때는 어? request_param 예를 통해 값을 넘겨봐야 할 건데","speaker":""},{"start":13283624,"end":13287624,"text":"만약 우리가 명시해준","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555584211,"relativeStart":13287617,"segments":[{"start":13287617,"end":13290617,"text":"여기에 명시해준 값이 없다면","speaker":""},{"start":13290617,"end":13293317,"text":"그때는 기본으로 지정된","speaker":""},{"start":13293317,"end":13295257,"text":"이 n이라는 값을 갖고","speaker":""},{"start":13295257,"end":13296217,"text":"사용해줘","speaker":""},{"start":13296217,"end":13297817,"text":"라는 의미가 돼요.","speaker":""},{"start":13297817,"end":13300317,"text":"그렇기 때문에","speaker":""},{"start":13300317,"end":13302117,"text":"제가 이거를 다시 한 번","speaker":""},{"start":13302117,"end":13305517,"text":"종료시키고 실행을 해볼게요.","speaker":""},{"start":13305517,"end":13308197,"text":"자, 그리고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555607251,"relativeStart":13308188,"segments":[{"start":13308188,"end":13315188,"text":"다시 들어가서 여기다가 분명 아무 값도 넘겨주지 않았어요.","speaker":""},{"start":13315188,"end":13325188,"text":"그랬더니 헬로가 나오네요. 아까와는 다르게. 왜냐? 지정해준 기본값 EN이 있기 때문에.","speaker":""},{"start":13325188,"end":13331128,"text":"그러면 넘겨주지는 않았지만 랭의 값은 기본적으로 EN, English를 갖고 있으므로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555630037,"relativeStart":13331121,"segments":[{"start":13331121,"end":13335921,"text":"조건이 거짓이니 리턴으로 내려가 hello를 출력해주세요.","speaker":""},{"start":13335921,"end":13337281,"text":"라는 의미가 되고","speaker":""},{"start":13337281,"end":13345201,"text":"다시 한번 물음표를 통해서 파라미터 값, 랭의 값을","speaker":""},{"start":13345201,"end":13347901,"text":"호로 지정해주세요.","speaker":""},{"start":13347901,"end":13350901,"text":"라고 작성을 해주게 되면","speaker":""},{"start":13350901,"end":13354261,"text":"이때는 기본값을 무시하고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555652551,"relativeStart":13354256,"segments":[{"start":13354256,"end":13356256,"text":"넘겨준 값을 갖게 되니","speaker":""},{"start":13356256,"end":13359256,"text":"어 잠시만요.","speaker":""},{"start":13359256,"end":13362256,"text":"랭 코","speaker":""},{"start":13362256,"end":13364256,"text":"또 뭐가 빠지지? 아 아니야","speaker":""},{"start":13364256,"end":13367256,"text":"여러분 죄송해요. 큰 땀피 작성하는 거 아니죠?","speaker":""},{"start":13367256,"end":13369256,"text":"큰 땀피 작성하는 거 아니죠?","speaker":""},{"start":13369256,"end":13371256,"text":"자 랭 코 라고 해주면","speaker":""},{"start":13371256,"end":13375256,"text":"이때는 안녕하세요가 나오는 걸 확인할 수 있다는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555679435,"relativeStart":13375249,"segments":[{"start":13375249,"end":13379349,"text":"자꾸 하나씩 뭐가 들어가는데","speaker":""},{"start":13379349,"end":13381649,"text":"그래서 이때는","speaker":""},{"start":13381649,"end":13383809,"text":"우리 기본값이 무시되고","speaker":""},{"start":13383809,"end":13386689,"text":"넘겨준 값을 사용하게 된다","speaker":""},{"start":13386689,"end":13388189,"text":"라고 보시면 돼요","speaker":""},{"start":13388189,"end":13390189,"text":"이 차이, default value","speaker":""},{"start":13390189,"end":13392809,"text":"어떤 이미지 이해하실 수 있겠죠?","speaker":""},{"start":13392809,"end":13397629,"text":"이해 되시면 다시 한번 엄지 눌러주세요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555700439,"relativeStart":13397625,"segments":[{"start":13397625,"end":13402005,"text":"네, 그러면 여기까지는 다들 잘 이해가 되신 것 같아요.","speaker":""},{"start":13402005,"end":13409665,"text":"그래서 마지막으로 우리 패스 베리어블, 리퀴스 파랑 이 둘의 차이점 다시 한번 짚어보면","speaker":""},{"start":13409665,"end":13414905,"text":"패스 베리어블은 도메인 상으로 따로 명시가 되어 있어요.","speaker":""},{"start":13414905,"end":13419465,"text":"그렇기 때문에 얘는 반드시 꼭 값을 넘겨줘야","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555721688,"relativeStart":13419461,"segments":[{"start":13419461,"end":13427261,"text":"그리고 request param의 경우는 맵핑 시키는 도메인 자체는 따로 명시하지 않아요.","speaker":""},{"start":13427261,"end":13431461,"text":"그렇기 때문에 슬래시가 아닌 이 물음표를 통해서","speaker":""},{"start":13431461,"end":13435361,"text":"파라미터 값을 지정을 해줘야 된다는 거죠.","speaker":""},{"start":13435361,"end":13440401,"text":"그리고 이때 만약 파라미터의 기본값을 사용하고 싶다면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555743437,"relativeStart":13440403,"segments":[{"start":13440403,"end":13448103,"text":"default value라는 추가적인 옵션을 가져다가 사용해주면 된다라고 보시면 될 거예요.","speaker":""},{"start":13448103,"end":13452963,"text":"그러면 여기까지 내용을 진행을 해서","speaker":""},{"start":13452963,"end":13459483,"text":"우리는 도메인상으로 추가적인 값들을 넘겨받을 수 있는 두 가지 방법을 알아볼 수 있는데","speaker":""},{"start":13459483,"end":13462083,"text":"이 두 개 여러분들 이해하실 수 있겠죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555770852,"relativeStart":13462256,"segments":[{"start":13462256,"end":13469076,"text":"일단은 여기까지는 다들 이해하실 수 있을 거고","speaker":""},{"start":13469076,"end":13475956,"text":"그러면 이제 우리는 또 다른 현재 컨트롤을 조금은 본격적으로 한번 작성을 해보도록 할 건데","speaker":""},{"start":13475956,"end":13479316,"text":"역시나 쉬는 시간 한번 가졌다가 진행해야 되겠죠?","speaker":""},{"start":13479316,"end":13485976,"text":"그래서 지금 50분 향해서 가고 있으니까 우리 16시까지 10분 쉬었다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780555781081,"relativeStart":13485966,"segments":[{"start":13485966,"end":13488266,"text":"10분 쉬었다가 진행해보도록 할게요.","speaker":""},{"start":13488266,"end":13489926,"text":"10분 쉬었다 진행할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556431084,"relativeStart":13491260,"segments":[{"start":13491260,"end":13496160,"text":"자 그러면 이제 또 시간 됐으니까 우리가 이어서 내용 진행해보도록 할게요.","speaker":""},{"start":13496160,"end":13504200,"text":"자 그래서 여기까지 내용을 작성을 해주면 일단은 우리 기본적인 패스 바리어블과 리퀘스트 파랑","speaker":""},{"start":13504200,"end":13508340,"text":"이렇게 두 개의 언어테이션을 사용해볼 수 있을 거요 라고 얘기했었고","speaker":""},{"start":13508340,"end":13511940,"text":"이 둘의 차이점까지도 같이 한번 얘기를 했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556452065,"relativeStart":13511936,"segments":[{"start":13511936,"end":13519736,"text":"그래서 여기까지는 일단 우리가 그냥 간단하게 테스트하기 위한 하나의 HelloController를 만든 것 뿐이에요.","speaker":""},{"start":13519736,"end":13528376,"text":"근데 이제는 우리가 본격적으로 북에 대한 내용을 다룰 수 있는 컨트롤러를 조금 작성해보도록 할게요.","speaker":""},{"start":13528376,"end":13533156,"text":"그래서 우리는 먼저 어떤 걸 작성을 해줄 필요가 있냐면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556474088,"relativeStart":13533148,"segments":[{"start":13533148,"end":13537948,"text":"우리가 현재 책에 대한 내용을 다루고","speaker":""},{"start":13537948,"end":13542408,"text":"그리고 이 책에 대한 각 데이터 공간을 만들고","speaker":""},{"start":13542408,"end":13545828,"text":"얘를 DB에다가 저장을 시켜줘야 돼요.","speaker":""},{"start":13545828,"end":13552468,"text":"그러면 이때 DB에 저장할 때 사용할 객체들이 필요하다고 할 수 있어요.","speaker":""},{"start":13552468,"end":13555308,"text":"그래서 우리는 이 객체를","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556497124,"relativeStart":13555305,"segments":[{"start":13555305,"end":13557365,"text":"entity라고 불러요.","speaker":""},{"start":13557365,"end":13559645,"text":"라고 앞에서 아주 간단하게","speaker":""},{"start":13559645,"end":13561505,"text":"한번 설명을 하고 넘어왔었어요.","speaker":""},{"start":13561505,"end":13563925,"text":"그래서 다시 말해","speaker":""},{"start":13563925,"end":13565425,"text":"여러분들이 각각의","speaker":""},{"start":13565425,"end":13567725,"text":"DB에 데이터들을 저장하기 위해서는","speaker":""},{"start":13567725,"end":13570465,"text":"이러한 데이터를 나타내줄 수 있는","speaker":""},{"start":13570465,"end":13572065,"text":"클래스가 하나가","speaker":""},{"start":13572065,"end":13573265,"text":"필요해요. 라는 거죠.","speaker":""},{"start":13573265,"end":13575785,"text":"그리고 우리가","speaker":""},{"start":13575785,"end":13577765,"text":"지금 만드는 북서비스에서는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556518112,"relativeStart":13577766,"segments":[{"start":13577766,"end":13581126,"text":"데이터베이스에 책에 대한 정보들이","speaker":""},{"start":13581126,"end":13584406,"text":"하나하나씩 차곡차곡 쌓인다고 볼 수가 있겠죠.","speaker":""},{"start":13584406,"end":13590146,"text":"그렇기 때문에 책을 나타내주는 클래스가 하나 존재하면 돼요.","speaker":""},{"start":13590146,"end":13597026,"text":"그래서 우리는 책을 나타내주는 클래스부터 먼저 한번 정의를 해보도록 할게요.","speaker":""},{"start":13597026,"end":13599146,"text":"그래서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556538091,"relativeStart":13599146,"segments":[{"start":13599146,"end":13602386,"text":"저희가 나타내는 클래스는 어디다가 정의를 할 거냐면","speaker":""},{"start":13602386,"end":13610646,"text":"우리가 컨트롤러의 경우는 컨트롤러 라는 별도의 패키지를 따로 만들어서 관리를 해주고 있었죠.","speaker":""},{"start":13610646,"end":13619506,"text":"그리고 마찬가지로 우리가 사용하고자 하는 클래스, 엔티티들 또한 지금처럼","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556560102,"relativeStart":13619514,"segments":[{"start":13619514,"end":13629654,"text":"도메인이라는 별도의 패키지를 만들고 관리 및 저장을 해주시면 돼요.","speaker":""},{"start":13629654,"end":13634654,"text":"이제 너무 빨리 넘어갔는데, 다시 여기 이렇게 가시면 돼요.","speaker":""},{"start":13634654,"end":13641294,"text":"com.able.book앱에서 new에서 패키지로 들어가시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556588784,"relativeStart":13641300,"segments":[{"start":13641300,"end":13648300,"text":"그래서 패키지 새로 만들 때 이름은 제가 도메인으로 할 거라고 했죠.","speaker":""},{"start":13648300,"end":13655300,"text":"이런 식으로 기존에 있는 내용 뒤쪽에다가 도메인 붙여주시면 돼요.","speaker":""},{"start":13655300,"end":13661660,"text":"그리고 패키지 만들으셨으면 이제 해당 패키지에다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556620782,"relativeStart":13661668,"segments":[{"start":13661668,"end":13664428,"text":"클래스 파일 하나 만들어주도록 할게요.","speaker":""},{"start":13664428,"end":13670648,"text":"도메인, new, java class 들어가 주시면 되겠죠.","speaker":""},{"start":13670648,"end":13678048,"text":"그리고 이때 이름은 우리 아까 책에 대한 내용을 다룰 거라 했으니까","speaker":""},{"start":13678048,"end":13681268,"text":"북이란 이름으로 만들어주도록 할 거예요.","speaker":""},{"start":13681268,"end":13684988,"text":"그래서 일단 여기까지.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556648415,"relativeStart":13685243,"segments":[{"start":13685243,"end":13686783,"text":"내용 진행해 주시면 돼요.","speaker":""},{"start":13686783,"end":13693903,"text":"자, 그리고 나서 저는 이제 각각의 필드들을 하나씩 작성을 해보도록 할 거예요.","speaker":""},{"start":13693903,"end":13698103,"text":"그래서 일단 첫 번째 필드는 어떤 걸 작성을 할 거냐면","speaker":""},{"start":13698103,"end":13704823,"text":"우리 각각의 책이 있으면 그 책들을 구분을 시켜줄 수 있는 값이 하나가 필요할 거예요.","speaker":""},{"start":13704823,"end":13709623,"text":"그래서 우리는 이 값을 id라고 지정을 해 줄 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556666342,"relativeStart":13709627,"segments":[{"start":13709627,"end":13715207,"text":"그래서 저는 private 그리고 long 타입을 사용할 거예요.","speaker":""},{"start":13715207,"end":13722347,"text":"long 타입 사용한 id라는 변수를 필드를 하나로 만들어줄게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556692460,"relativeStart":13722349,"segments":[{"start":13722349,"end":13731849,"text":"자, 그러면 여기에'어? 강사님 왜 int가 아니라 long 타입을 사용을 하나요?' 라고 궁금하신 분들이 있을 수도 있어요.","speaker":""},{"start":13731849,"end":13738589,"text":"근데 그 이유는 우리가 실제로 데이터베이스에는 엄청나게 많은 양의 데이터들이 들어갈 거예요.","speaker":""},{"start":13738589,"end":13747609,"text":"그렇기 때문에 일반적으로는 int가 아니라 더 크지만 훨씬 더 많은 거의 초과할 수 없는 양을 나타내 주는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556717288,"relativeStart":13747613,"segments":[{"start":13747613,"end":13751373,"text":"long 타입을 사용하게 된다 라고 보시면 돼요","speaker":""},{"start":13751373,"end":13757852,"text":"그래서 int를 사용하면 실제로 범위 자체가 -21억에서","speaker":""},{"start":13757852,"end":13764453,"text":"+21억까지 되다 보니까 이 범위를 넘어서는 경우들이 종종 발생해요","speaker":""},{"start":13764453,"end":13769973,"text":"그러면 문제가 발생하니까 아예 넘칠 수 없게끔","speaker":""},{"start":13769973,"end":13772653,"text":"long 타입을 사용한다고 생각해 주시면 돼요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556739566,"relativeStart":13772655,"segments":[{"start":13772655,"end":13779115,"text":"그래서 각각의 책에 대한 내용, 정보를 구분해 줄 수 있는 아이디를 하나 선을 해주고","speaker":""},{"start":13779115,"end":13784915,"text":"다음으로는 private 그리고 string title이라고 해서","speaker":""},{"start":13784915,"end":13789035,"text":"책 제목을 저장해 줄 수 있는 필드까지도 만들어 보도록 할게요","speaker":""},{"start":13789035,"end":13793035,"text":"그리고 또 다음으로는 private","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556752607,"relativeStart":13793040,"segments":[{"start":13793040,"end":13798640,"text":"스트링, 이번에는 우리 당연히 작가까지도 작성해주면 되겠죠?","speaker":""},{"start":13798640,"end":13799480,"text":"아쏘!","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556777966,"relativeStart":13800765,"segments":[{"start":13800765,"end":13805565,"text":"그래서 일단은 세 개의 필드까지만 작성을 해보도록 할 거고","speaker":""},{"start":13805565,"end":13810945,"text":"그럼 우리는 앞에 있는 이 필드에 초기값을 지정해주기 위해서는","speaker":""},{"start":13810945,"end":13813285,"text":"어떤 것까지 정의해주면 되죠?","speaker":""},{"start":13813285,"end":13819325,"text":"클래스에서 필드를 초기화해주기 위해서","speaker":""},{"start":13819325,"end":13821885,"text":"그치죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556797938,"relativeStart":13821998,"segments":[{"start":13821998,"end":13828678,"text":"그렇죠. 우리 느낌표까지 붙여서 말씀해주고 있어요. 생성자 정의해주면 되겠죠.","speaker":""},{"start":13828678,"end":13836178,"text":"그래서 여기 아래쪽에다가 우리는 퍼블릭 그리고 클래스와 동일한 이름이며","speaker":""},{"start":13836178,"end":13842058,"text":"별도의 반환형은 존재하지 않는 북이라는 이름의 생성자라는 정의를 해줄 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556818935,"relativeStart":13842062,"segments":[{"start":13842062,"end":13849362,"text":"여기서는 초기화하고자 하는 각 필드들의 값 넘겨받으면 되겠죠?","speaker":""},{"start":13849362,"end":13858602,"text":"그래서 매개변수에 long id, string title, string author","speaker":""},{"start":13858602,"end":13863082,"text":"라고 해서 3개의 매개변수까지도 작성을 해줄 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556854261,"relativeStart":13863088,"segments":[{"start":13863088,"end":13868268,"text":"그러면 매개변수 작성됐으니 이제 생성자 내부에서는","speaker":""},{"start":13868268,"end":13874948,"text":"우리 넘겨 받은 매개변수들 값 가져다가 필드에다가 초기화해주면 되죠","speaker":""},{"start":13874948,"end":13883968,"text":"그리고 본인의 필드 접근할 때는 this.id 그리고 this.title","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556878577,"relativeStart":13883963,"segments":[{"start":13883963,"end":13886643,"text":"distort other","speaker":""},{"start":13886643,"end":13890083,"text":"이렇게 작성해주면 되겠죠?","speaker":""},{"start":13890083,"end":13893123,"text":"그래서 이런 식으로","speaker":""},{"start":13893123,"end":13895683,"text":"넘겨받은 매개변수와","speaker":""},{"start":13895683,"end":13897903,"text":"본인의 필드를 구분하기 위해","speaker":""},{"start":13897903,"end":13899703,"text":"다시 한번 this 키워드를","speaker":""},{"start":13899703,"end":13900823,"text":"사용을 해주는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556906737,"relativeStart":13902093,"segments":[{"start":13902093,"end":13907553,"text":"이렇게 하면 우리 생성자 모두 다 정의됐다고 볼 수 있겠죠.","speaker":""},{"start":13907553,"end":13915193,"text":"그리고 우리 추가적으로 또 있어야 될 메소드 어떤 거 있는지 파악할 수 있을까요?","speaker":""},{"start":13915193,"end":13918553,"text":"있어야 되는데 아직 정의하지 않은 거.","speaker":""},{"start":13918553,"end":13920033,"text":"어떤 게 있을까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556932075,"relativeStart":13921245,"segments":[{"start":13921245,"end":13923205,"text":"우리 또 뭐가 빠졌죠?","speaker":""},{"start":13923205,"end":13925545,"text":"그쵸.","speaker":""},{"start":13925545,"end":13927205,"text":"Setter, Getter","speaker":""},{"start":13927205,"end":13930185,"text":"왜냐하면 우리 지금 앞에 있는","speaker":""},{"start":13930185,"end":13931365,"text":"각각의 필드들은","speaker":""},{"start":13931365,"end":13933245,"text":"ID, Title, Asom 모두 다","speaker":""},{"start":13933245,"end":13934245,"text":"Private 속성이죠.","speaker":""},{"start":13934245,"end":13936105,"text":"그리고 앞서 얘기할 때도","speaker":""},{"start":13936105,"end":13939045,"text":"실제로는 Private 필드로 많이 사용을 해요","speaker":""},{"start":13939045,"end":13939905,"text":"라고 얘기를 썼어요.","speaker":""},{"start":13939905,"end":13942705,"text":"그래서 Private 필드의 경우는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556953334,"relativeStart":13942704,"segments":[{"start":13942704,"end":13947384,"text":"외부 다른 클래스에서는 접근할 수가 없기 때문에","speaker":""},{"start":13947384,"end":13952484,"text":"우리는 접근해서 값을 설정하거나 가져다가 쓸 수 있는","speaker":""},{"start":13952484,"end":13956044,"text":"setter와 getter가 있어야 되요 라고 얘기를 했었어요.","speaker":""},{"start":13956044,"end":13963604,"text":"그래서 저는 각각의 필드들에 대한 setter와 getter를 하나씩 만들어 보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556972304,"relativeStart":13963613,"segments":[{"start":13963613,"end":13971792,"text":"그래서 먼저 여기는 public void set id라고 해서","speaker":""},{"start":13971792,"end":13975613,"text":"이렇게 세터 하나를 만들어 보도록 할 거예요.","speaker":""},{"start":13975613,"end":13977792,"text":"아이디에 대한","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780556997361,"relativeStart":13977789,"segments":[{"start":13977789,"end":13983249,"text":"자 그러면 이후에 세터는 long id 하나 넘겨받으면 되겠네요.","speaker":""},{"start":13983249,"end":13992529,"text":"그리고 this.id에다가 id 넘겨받은 값 그대로 설정해주세요 라고 하면 되겠죠.","speaker":""},{"start":13992529,"end":13998209,"text":"자 그리고 이어서 title과 asok까지도 한번 작성해볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557018875,"relativeStart":13998206,"segments":[{"start":13998206,"end":14001546,"text":"public void set title","speaker":""},{"start":14001546,"end":14007206,"text":"그리고 얘는 스트링 형식의 title 넘겨봤고","speaker":""},{"start":14007206,"end":14013866,"text":"this title에다가 title값 그대로 저장해줘요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557044216,"relativeStart":14013870,"segments":[{"start":14013870,"end":14021530,"text":"그리고 또 public void set asr 작성해주고","speaker":""},{"start":14021530,"end":14024770,"text":"이번에도 문자열 넘겨받으면 되겠죠?","speaker":""},{"start":14024770,"end":14033930,"text":"그리고 this asr에다가 넘겨받아 나서 그대로 저장을 시켜줘요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557055222,"relativeStart":14033934,"segments":[{"start":14033934,"end":14038374,"text":"그래서 우리 3개의 세터 정의한 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557084400,"relativeStart":14038366,"segments":[{"start":14038366,"end":14043866,"text":"자, 그러면 여기까지 내용 작성됐으니까 이제 get-up까지로 정의해볼게요.","speaker":""},{"start":14043866,"end":14050366,"text":"그래서 public, 그리고 먼저 id는 long 타입을 갖고 있죠.","speaker":""},{"start":14050366,"end":14055366,"text":"그래서 long get id.","speaker":""},{"start":14055366,"end":14060286,"text":"그리고 얘는 id 값을 return 해주세요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557093366,"relativeStart":14060289,"segments":[{"start":14060289,"end":14062469,"text":"라고 하면 되겠죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557122559,"relativeStart":14063694,"segments":[{"start":14063694,"end":14070494,"text":"그리고 나머지도 작성해볼게요. public_string get title","speaker":""},{"start":14070494,"end":14076494,"text":"그리고 이번에는 title의 값을 return 해주세요 라고 작성","speaker":""},{"start":14076494,"end":14082694,"text":"그리고 한 번 더 public_string get aso","speaker":""},{"start":14082694,"end":14087314,"text":"이번엔 aso의 값을 return 해주세요 라고 하면 되겠죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557149167,"relativeStart":14087323,"segments":[{"start":14087323,"end":14089683,"text":"이렇게","speaker":""},{"start":14089683,"end":14095643,"text":"자 그래서 우리는 이 아래에 총 6개의 메소드를 작성을 한 거예요","speaker":""},{"start":14095643,"end":14098023,"text":"set 3개, get 3개","speaker":""},{"start":14098023,"end":14103823,"text":"그래서 여기까지 작성할 수 있는 시간 잠깐 드리도록 할게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557187830,"relativeStart":14103822,"segments":[{"start":14103822,"end":14111602,"text":"자, 다 작성되신 분들은 우리 엄지 이모지 한 번, 그리고 아직 작성하고 계신 분들은 슬픔이 이모지 한 번씩만 눌러주세요.","speaker":""},{"start":14111602,"end":14116662,"text":"아직은 슬픔이가 조금은 있는 것 같아요.","speaker":""},{"start":14116662,"end":14121322,"text":"제가 시간 조금만 더, 한 20초 정도만 더 드릴게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557225470,"relativeStart":14122510,"segments":[{"start":14122510,"end":14128150,"text":"그러면 일단 여기까지는 다들 진행이 되셨을 거라고 생각하고","speaker":""},{"start":14128150,"end":14130590,"text":"이제 이어서 한번 해보도록 할게요.","speaker":""},{"start":14130590,"end":14137090,"text":"그러면 앞과 같이 북이라는 하나의 클래스를 정의를 한 거예요.","speaker":""},{"start":14137090,"end":14142170,"text":"그리고 이 과정은 제가 얘기했던 것처럼 그냥 자바 기반이죠.","speaker":""},{"start":14142170,"end":14146190,"text":"우리 스프링이라고는 하지만 지금 자바와 다를 게 하나도 없어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557247471,"relativeStart":14146200,"segments":[{"start":14146200,"end":14151160,"text":"클래스 정의하고 필드 정의하고 여기에 추가적인 생성자 정의하고","speaker":""},{"start":14151160,"end":14154280,"text":"세터 게터 정의 이거 끝이죠","speaker":""},{"start":14154280,"end":14156780,"text":"여기까지 진행하면 돼요","speaker":""},{"start":14156780,"end":14162960,"text":"그러면 이제 앞에 작성된 이 클래스는 우리가 만들고자 하는","speaker":""},{"start":14162960,"end":14167700,"text":"DB에 하나의 테이블로 들어가게 된다는 거죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557271535,"relativeStart":14167699,"segments":[{"start":14167699,"end":14173299,"text":"그래서 여기는 book이라는 테이블로 들어가게 되고","speaker":""},{"start":14173299,"end":14180139,"text":"여기에는 id값 그리고 여기에는 title값","speaker":""},{"start":14180139,"end":14187859,"text":"그리고 여기에는 aso의 값을 갖고 있게 될 수 있다는 거예요","speaker":""},{"start":14187859,"end":14190019,"text":"그리고 데이터가 들어올 때마다 하나씩","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557293562,"relativeStart":14190008,"segments":[{"start":14190008,"end":14193888,"text":"차곡차곡 이렇게 쌓일 수 있다는 거죠.","speaker":""},{"start":14193888,"end":14202587,"text":"자, 그러면 일단 기본적인 데이터를 저장할 수 있는 테이블, 클래스를 하나를 만들었고","speaker":""},{"start":14202587,"end":14206107,"text":"우린 이 클래스를 엔티티라고 불러요라고 얘기했어요.","speaker":""},{"start":14206107,"end":14208627,"text":"앞으로도 계속 엔티티라는 단어가 나올 거예요.","speaker":""},{"start":14208627,"end":14212408,"text":"자, 그래서 이런 클래스를 가져다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557314547,"relativeStart":14212401,"segments":[{"start":14212401,"end":14217201,"text":"우리는 제어해줄 수 있는 컨트롤러 하나 만들어주면 되겠죠.","speaker":""},{"start":14217201,"end":14221101,"text":"그래서 앞에 있던 HelloController는","speaker":""},{"start":14221101,"end":14224301,"text":"제가 그냥 간단한 테스트용 컨트롤러예요 라고 했었어요.","speaker":""},{"start":14224301,"end":14229801,"text":"그래서 저는 여기 컨트롤러 패키지 안으로 가서","speaker":""},{"start":14229801,"end":14232621,"text":"새로운 컨트롤러를 만들 수 있게끔","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557336059,"relativeStart":14232617,"segments":[{"start":14232617,"end":14235877,"text":"클래스 파일 하나 만들어 보도록 할게요.","speaker":""},{"start":14235877,"end":14240117,"text":"그래서 자바 클래스 한번 들어가 주시면 돼요.","speaker":""},{"start":14240117,"end":14247117,"text":"그리고 이때의 이름은 우리 책에 대한 내용을 다룰 거죠.","speaker":""},{"start":14247117,"end":14252917,"text":"그러니 북 컨트롤러 이렇게 한번 작성을 해 줄게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557364219,"relativeStart":14252918,"segments":[{"start":14252918,"end":14257598,"text":"그러면 저도 한번 만들어주고","speaker":""},{"start":14257598,"end":14260718,"text":"여기까지 내용이 됐으니","speaker":""},{"start":14260718,"end":14265938,"text":"우리는 부 컨트롤러 내부 코드를 하나씩 작성해보도록 할게요","speaker":""},{"start":14265938,"end":14272138,"text":"그러면 가장 먼저 해당 클래스에다가 붙여줘야 될 어노테이션","speaker":""},{"start":14272138,"end":14272958,"text":"어떤거죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557388544,"relativeStart":14272965,"segments":[{"start":14272965,"end":14276125,"text":"여러분들 이제부터는","speaker":""},{"start":14276125,"end":14278125,"text":"아노테이션 잘 기억해 주셔야 돼요","speaker":""},{"start":14278125,"end":14282225,"text":"북 컨트롤러 클래스에다가 붙여줘야 될","speaker":""},{"start":14282225,"end":14282925,"text":"아노테이션","speaker":""},{"start":14282925,"end":14287405,"text":"그쵸?","speaker":""},{"start":14287405,"end":14289245,"text":"아주 잘 기억하고 계세요","speaker":""},{"start":14289245,"end":14291125,"text":"우리 위쪽에다가","speaker":""},{"start":14291125,"end":14293425,"text":"add, left, 컨트롤러","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557411837,"relativeStart":14293417,"segments":[{"start":14293417,"end":14295417,"text":"작성해주면 되겠죠?","speaker":""},{"start":14295417,"end":14298417,"text":"자, 그리고","speaker":""},{"start":14298417,"end":14302417,"text":"여기 항상 작성할 때마다 자동 완성되는 거 볼 수 있는데","speaker":""},{"start":14302417,"end":14305417,"text":"여러분들 자동 완성해서 엔터 눌러주면","speaker":""},{"start":14305417,"end":14308417,"text":"이렇게 엔터 눌러주면","speaker":""},{"start":14308417,"end":14311417,"text":"Annotation input까지도 바로바로 되기는 해요.","speaker":""},{"start":14311417,"end":14314857,"text":"저 같은 경우는 이제 Alt+Enter를 따로 보여드리려고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557432330,"relativeStart":14314849,"segments":[{"start":14314849,"end":14318189,"text":"매번 자동완성 끄고 Alt+Enter를 누르긴 했는데","speaker":""},{"start":14318189,"end":14320189,"text":"바로 누르셔도 상관은 없어요.","speaker":""},{"start":14320189,"end":14324489,"text":"그래서 Annotation을 붙여줌으로써","speaker":""},{"start":14324489,"end":14328389,"text":"현재 클래스는 컨트롤러의 역할을 해주는 클래스예요.","speaker":""},{"start":14328389,"end":14330289,"text":"라는 걸 Spring한테 알려주고","speaker":""},{"start":14330289,"end":14335029,"text":"이후 저는 실행시키고자 하는 메서드를 작성을 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557447155,"relativeStart":14335031,"segments":[{"start":14335031,"end":14343231,"text":"그래서 public, boil, get book이라고 작성할 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557469180,"relativeStart":14344367,"segments":[{"start":14344367,"end":14349427,"text":"자 그러면 앞에 있는 이 메소드는 이름에서 알 수 있다시피","speaker":""},{"start":14349427,"end":14354627,"text":"책 한 권을 가지고 오는 거구나 라고 생각해 볼 수가 있겠죠","speaker":""},{"start":14354627,"end":14359167,"text":"그래서 말 그대로 get book 책 한 권을 가지고 오는 역할을 할 거고","speaker":""},{"start":14359167,"end":14363747,"text":"자 이때 기능은 어떻게 작성을 해볼 거냐면","speaker":""},{"start":14363747,"end":14365727,"text":"저는 new book","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557492726,"relativeStart":14365727,"segments":[{"start":14365727,"end":14366727,"text":"이라고 해볼게요.","speaker":""},{"start":14366727,"end":14372507,"text":"그러면 앞에 코드는 우리 뉴라는 키워드","speaker":""},{"start":14372507,"end":14376467,"text":"이거 객체 하나 만들 때 사용하는 거라고 얘기를 했었죠?","speaker":""},{"start":14376467,"end":14381847,"text":"그래서 지금은 임시로 아직은 따로 만들어진 데이터들이 없으니까","speaker":""},{"start":14381847,"end":14386627,"text":"이 북이라는 객체의 공간을 하나 만들어 보도록 할 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557515778,"relativeStart":14386618,"segments":[{"start":14386618,"end":14391618,"text":"실제 실무에서 이렇게 되지는 않는데 그냥 간단히 확인용으로 다루는 거예요","speaker":""},{"start":14391618,"end":14398918,"text":"그래서 new book 작성해주고 우리는 이때 괄호 안쪽에다가","speaker":""},{"start":14398918,"end":14403918,"text":"각각의 필요한 값들, 생성자에게 넘겨주고자 하는 값들을 작성을 해주면 되죠","speaker":""},{"start":14403918,"end":14410498,"text":"그리고 첫 번째로는 우리 id 값을 넘겨줘야 됐었어요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557537784,"relativeStart":14410496,"segments":[{"start":14410496,"end":14417296,"text":"자 근데 id 값 넘길 때 id는 long 타입을 가지고 있었죠?","speaker":""},{"start":14417296,"end":14421556,"text":"근데 그냥 숫자 1이라고만 작성을 하면","speaker":""},{"start":14421556,"end":14425636,"text":"이거는 기본형인 int 타입을 사용을 해버리게 돼요","speaker":""},{"start":14425636,"end":14431856,"text":"그래서 뒤쪽에다가 1, l 대문자 l을 작성을 해줘야","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557558777,"relativeStart":14431860,"segments":[{"start":14431860,"end":14439360,"text":"얘는 정수 1을 사용하는데 롱타입을 사용하라는 거구나 라는 의미가 될 수가 있어요.","speaker":""},{"start":14439360,"end":14443780,"text":"그래서 여러분 이거 1리터가 아니라 1을 사용할 때","speaker":""},{"start":14443780,"end":14448240,"text":"얘를 롱타입으로 사용할 거예요 라는 의미가 돼요.","speaker":""},{"start":14448240,"end":14452900,"text":"그래서 타입 맞춰주게끔 대문자 L 작성해주시고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557580802,"relativeStart":14452903,"segments":[{"start":14452903,"end":14459143,"text":"그 뒤쪽에는 우리가 타이틀을 하나를 넘겨줄 필요가 있었어요.","speaker":""},{"start":14459143,"end":14463563,"text":"책 제목. 그래서 저는 여기다가 문자열로","speaker":""},{"start":14463563,"end":14470043,"text":"'Spring Boot 입문'이라는 제목의 책을 하나를 만들어 주도록 할 거예요.","speaker":""},{"start":14470043,"end":14474803,"text":"자꾸 여기 뭐 임포트 뜨는데 이거 잠시","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557601556,"relativeStart":14474807,"segments":[{"start":14474807,"end":14479447,"text":"여러분 무시하시면 돼요.","speaker":""},{"start":14479447,"end":14484827,"text":"자 그리고 그 뒤에 우리는 작가를 쓸 건데 저는 작가 이름 제 이름으로","speaker":""},{"start":14484827,"end":14485827,"text":"작성해볼게요.","speaker":""},{"start":14485827,"end":14490367,"text":"임한울이라고.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557623041,"relativeStart":14490375,"segments":[{"start":14490375,"end":14494855,"text":"그러면 결국 북이라는 객체를 하나 만드는 과정은 진행할 수 있기는 해요.","speaker":""},{"start":14494855,"end":14501115,"text":"그런데 제가 아까 얘기했던 이 에러, 계속해서 뜨는 걸 볼 수 있죠.","speaker":""},{"start":14501115,"end":14504835,"text":"그래서 이 에러가 왜 뜨는 거냐면","speaker":""},{"start":14504835,"end":14511355,"text":"현재 북 컨트롤러는 여기 컨트롤러라는 패키지 안에 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557646325,"relativeStart":14511358,"segments":[{"start":14511358,"end":14515498,"text":"근데 이 북 컨트롤러 입장에서 본다면","speaker":""},{"start":14515498,"end":14527398,"text":"얘는 그 위에 밖에 있는 도메인이라는 패키지 안에 있는 북이라는 이 클래스의 존재를 알 수가 있을까요 없을까요?","speaker":""},{"start":14527398,"end":14532178,"text":"컨트롤러라는 패키지 안에 있는 북 컨트롤러는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557671935,"relativeStart":14532182,"segments":[{"start":14532182,"end":14540182,"text":"그 밖에 도메인 패키지에 있는 북이라는 클래스의 존재를 알 수가 있을까요? 없을까요?","speaker":""},{"start":14540182,"end":14545182,"text":"그렇죠. 아마도 알 수가 없을 거예요.","speaker":""},{"start":14545182,"end":14550182,"text":"만약 같은 경로에 있거나 같은 패키지 경로에 있거나","speaker":""},{"start":14550182,"end":14554722,"text":"얘가 아예 그냥 최상위 경로에 있었다면 이해할 수도 있었겠죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557693683,"relativeStart":14554727,"segments":[{"start":14554727,"end":14563127,"text":"근데 지금처럼 패키지가 따로 분리가 되어 있는 경우에는 존재 자체를 알 수가 없어요.","speaker":""},{"start":14563127,"end":14571567,"text":"그렇기 때문에 우리는 다시 한번 import를 통해서 얘의 존재를 가지고 올 필요가 있다는 거죠.","speaker":""},{"start":14571567,"end":14577007,"text":"그래서 지금과 같이 계속해서 빨간색 에러가 발생이 됐었던 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557714947,"relativeStart":14577154,"segments":[{"start":14577154,"end":14581794,"text":"그래서 가지고 올 때는 어떻게 해주면 되냐면","speaker":""},{"start":14581794,"end":14587154,"text":"여기 위쪽에다가 import를 작성을 해요","speaker":""},{"start":14587154,"end":14589194,"text":"가지고 올 거니까","speaker":""},{"start":14589194,"end":14593574,"text":"그리고 이 북에 경로 있죠","speaker":""},{"start":14593574,"end":14596914,"text":"경로를 그냥 그대로 작성해 주시면 돼요","speaker":""},{"start":14596914,"end":14597614,"text":"여기다가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557738753,"relativeStart":14597623,"segments":[{"start":14597623,"end":14608503,"text":"com, abel이었죠? 그리고 book, app, dot, 그 다음 도메인 패키지죠?","speaker":""},{"start":14608503,"end":14616403,"text":"도메인, dot, book이라고 작성을 해주시면 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557762828,"relativeStart":14616399,"segments":[{"start":14616399,"end":14625819,"text":"그래서 이런 식으로 임포트를 해주면 이제는 해당 경로에 있는 부기란은 이 클래스 파일을 인지하고","speaker":""},{"start":14625819,"end":14636619,"text":"얘는 어떤 클래스구나. 그제서야 아이디, 타이틀, 아서 이렇게 세 개를 생성자에 넘겨주네.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557783818,"relativeStart":14636621,"segments":[{"start":14636621,"end":14639121,"text":"라고 인식하는 걸 볼 수가 있겠죠.","speaker":""},{"start":14639121,"end":14645881,"text":"그래서 여러분들 다른 패키지에 있는 것을 사용하실 때는 반드시 import를 진행해주셔야 된다.","speaker":""},{"start":14645881,"end":14648661,"text":"라는 것도 확인해주셔야 돼요.","speaker":""},{"start":14648661,"end":14657861,"text":"근데 또\"어? 강사님! 저는 잘 모르겠어요!\" 하시는 분들은 빨간색 밑줄에 Alt+Enter 누르면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557804547,"relativeStart":14657867,"segments":[{"start":14657867,"end":14659227,"text":"이런 식으로 나오죠","speaker":""},{"start":14659227,"end":14660927,"text":"그러면 얘는","speaker":""},{"start":14660927,"end":14662307,"text":"여기","speaker":""},{"start":14662307,"end":14665087,"text":"해당 경로에 있는 얘를 의미하는 건가요?","speaker":""},{"start":14665087,"end":14667247,"text":"라고 알려줘요","speaker":""},{"start":14667247,"end":14668367,"text":"여기서 또 엔터 누르면","speaker":""},{"start":14668367,"end":14671927,"text":"임포트 자동으로 해주기도 해요","speaker":""},{"start":14671927,"end":14674607,"text":"근데 일단 지금은 처음이니까","speaker":""},{"start":14674607,"end":14676507,"text":"아 이게 필요하다라는 걸","speaker":""},{"start":14676507,"end":14677587,"text":"알려드리기 위해서","speaker":""},{"start":14677587,"end":14679247,"text":"같이 작성을 한 거예요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557824520,"relativeStart":14679248,"segments":[{"start":14679248,"end":14684248,"text":"여기까지 이해하실 수 있을 거예요","speaker":""},{"start":14684248,"end":14689827,"text":"자 그러면 앞과 같이 내용을 작성을 했으니","speaker":""},{"start":14689827,"end":14694788,"text":"우리는 지금 만든 객체를 리턴으로 반환해 주도록 할게요","speaker":""},{"start":14694788,"end":14699147,"text":"그래서 객체 공간을 하나를 만들어서 반환해 주세요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557854466,"relativeStart":14699379,"segments":[{"start":14699379,"end":14701379,"text":"라는 의미가 돼요.","speaker":""},{"start":14701379,"end":14711379,"text":"자 그리고 나서 이후 이제 우리 반환형은 반환 값이 하나가 생겼으니까 void으로 작성해두면 안 되죠.","speaker":""},{"start":14711379,"end":14715379,"text":"우리 void 대신에 반환형 어떤 거 작성해줘야 되죠?","speaker":""},{"start":14715379,"end":14720179,"text":"void 말고 그쵸?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557878274,"relativeStart":14720186,"segments":[{"start":14720186,"end":14721926,"text":"북이라고 할 수 있겠죠","speaker":""},{"start":14721926,"end":14724586,"text":"지금 반환하고자 하는","speaker":""},{"start":14724586,"end":14726566,"text":"이 객체 타입이 북이죠","speaker":""},{"start":14726566,"end":14728546,"text":"그렇기 때문에","speaker":""},{"start":14728546,"end":14730586,"text":"우린 여기다가 북이라고","speaker":""},{"start":14730586,"end":14731586,"text":"해주면","speaker":""},{"start":14731586,"end":14733486,"text":"자 이렇게 짜잔","speaker":""},{"start":14733486,"end":14736106,"text":"get 북이라는 메서드가 하나가","speaker":""},{"start":14736106,"end":14738086,"text":"정의될 수 있어요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557901573,"relativeStart":14738080,"segments":[{"start":14738080,"end":14741120,"text":"여러분들 왜 슬픔이가 올라올까요?","speaker":""},{"start":14741120,"end":14745940,"text":"아 여기가 왜 북인지 이해가 잘 안되는 걸까요?","speaker":""},{"start":14745940,"end":14749220,"text":"이거는 우리","speaker":""},{"start":14749220,"end":14750360,"text":"자 잠깐만","speaker":""},{"start":14750360,"end":14751080,"text":"죄송할게요","speaker":""},{"start":14751080,"end":14752660,"text":"우리 반환형","speaker":""},{"start":14752660,"end":14755960,"text":"자 반환형 이거","speaker":""},{"start":14755960,"end":14758460,"text":"우리 반환형은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557924367,"relativeStart":14758459,"segments":[{"start":14758459,"end":14761859,"text":"반환 값의 자료형이었죠.","speaker":""},{"start":14761859,"end":14765399,"text":"이거 줄여서 반환형이었어요.","speaker":""},{"start":14765399,"end":14768059,"text":"그러면 지금 리턴하는 건","speaker":""},{"start":14768059,"end":14775759,"text":"북이라는 클래스의 공간을 하나 할당받아서 반환해주세요 라고 얘기했었고","speaker":""},{"start":14775759,"end":14780899,"text":"우리 클래스는 그냥 하나의 타입일 뿐이에요 라고 했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557946119,"relativeStart":14780903,"segments":[{"start":14780903,"end":14784403,"text":"여러 개를 묶어둔 하나의 타입이었어요","speaker":""},{"start":14784403,"end":14790283,"text":"그렇기 때문에 반환해주는 이 공간의 타입이 북 클래스구나","speaker":""},{"start":14790283,"end":14796223,"text":"그러니 얘가 반환값의 자료형이므로","speaker":""},{"start":14796223,"end":14799343,"text":"복이 되는 거죠","speaker":""},{"start":14799343,"end":14801663,"text":"이렇게","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557967365,"relativeStart":14801659,"segments":[{"start":14801659,"end":14804419,"text":"이제 이해됐을까요?","speaker":""},{"start":14804419,"end":14808899,"text":"이해가 된 것 같아요. 엄지로 바뀌었어요.","speaker":""},{"start":14808899,"end":14813839,"text":"그래서 지금처럼 다시 한번","speaker":""},{"start":14813839,"end":14815979,"text":"GetBook 완성을 시켰고","speaker":""},{"start":14815979,"end":14818099,"text":"그럼 역시나 우리 이거","speaker":""},{"start":14818099,"end":14821279,"text":"실제 브라우저, 클라이언트가 요청을 하면","speaker":""},{"start":14821279,"end":14823299,"text":"해당 메서드를 실행할 수 있게끔","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780557991430,"relativeStart":14823293,"segments":[{"start":14823293,"end":14825133,"text":"맵핑 한번 시켜줘야 되는데","speaker":""},{"start":14825133,"end":14828152,"text":"이때 사용하는 어노테이션 어떤 거였죠?","speaker":""},{"start":14828152,"end":14832393,"text":"여러분들 잘 기억하는지 계속 확인 질문을 하는 거예요.","speaker":""},{"start":14832393,"end":14837652,"text":"조금 귀찮더라도 여러분들 답변해 주셔야 돼요.","speaker":""},{"start":14837652,"end":14841633,"text":"그쵸?","speaker":""},{"start":14841633,"end":14845873,"text":"잘 기억하고 올라오는 것 같죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558012412,"relativeStart":14845871,"segments":[{"start":14845871,"end":14848491,"text":"채팅 계속 올라오죠","speaker":""},{"start":14848491,"end":14849791,"text":"자 여기서는 우리","speaker":""},{"start":14849791,"end":14851471,"text":"일단은 get 요청","speaker":""},{"start":14851471,"end":14853371,"text":"이름 자체가 get였죠","speaker":""},{"start":14853371,"end":14856291,"text":"그러니 get이라는 메서드에다가","speaker":""},{"start":14856291,"end":14857771,"text":"맵핑 시켜줄거에요","speaker":""},{"start":14857771,"end":14859851,"text":"라고 get 맵핑 작성하고","speaker":""},{"start":14859851,"end":14861651,"text":"역시나","speaker":""},{"start":14861651,"end":14863191,"text":"어노테이션 사용하는 거니까","speaker":""},{"start":14863191,"end":14865351,"text":"alt, ent 눌러서","speaker":""},{"start":14865351,"end":14866631,"text":"이렇게 추가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558036226,"relativeStart":14866628,"segments":[{"start":14866628,"end":14870628,"text":"import 해주면 돼요.","speaker":""},{"start":14870628,"end":14873128,"text":"자 그리고 이번에는","speaker":""},{"start":14873128,"end":14876428,"text":"괄호 안에다가 우리 책을 다루는 거니까","speaker":""},{"start":14876428,"end":14881428,"text":"책들이라는 의미로 books라고 해주면 되겠죠?","speaker":""},{"start":14881428,"end":14886168,"text":"우리가 앞서 rest api","speaker":""},{"start":14886168,"end":14888067,"text":"이거 이름 지정해줄 때","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558059013,"relativeStart":14888076,"segments":[{"start":14888076,"end":14893516,"text":"우리가 동사보다는 명사를 사용해주세요.","speaker":""},{"start":14893516,"end":14900116,"text":"그리고 추가로 단수가 아니라 복수 형식으로 작성해주세요라고 얘기했었죠.","speaker":""},{"start":14900116,"end":14907196,"text":"그래서 북이 아닌 북들, 책들이라는 의미로 북스라고 작성해주는 거죠.","speaker":""},{"start":14907196,"end":14910036,"text":"그리고 책들은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558082585,"relativeStart":14910030,"segments":[{"start":14910030,"end":14912030,"text":"추가로 여기다가","speaker":""},{"start":14912030,"end":14914110,"text":"슬래시 1을","speaker":""},{"start":14914110,"end":14915130,"text":"작성을 해보도록 할게요.","speaker":""},{"start":14915130,"end":14917850,"text":"그럼 이거는","speaker":""},{"start":14917850,"end":14919630,"text":"슬래시 뒤에 1 있으니까","speaker":""},{"start":14919630,"end":14922450,"text":"첫 번째 아이디의 책을","speaker":""},{"start":14922450,"end":14923830,"text":"가져와주세요","speaker":""},{"start":14923830,"end":14925910,"text":"라는 의미로 볼 수도 있을 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558104346,"relativeStart":14927104,"segments":[{"start":14927104,"end":14935144,"text":"자 그러면 여기까지 get mapping 다 진행되신 분들은 다시 한번 서비스 껐다가 켜보도록 할게요.","speaker":""},{"start":14935144,"end":14937564,"text":"종료했다가 실행시킬 거예요.","speaker":""},{"start":14937564,"end":14944364,"text":"그래서 위쪽에 stop 눌러주시고 종료되면 다시 한번 run.","speaker":""},{"start":14944364,"end":14947544,"text":"자 그리고 쭉.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558130699,"relativeStart":14947543,"segments":[{"start":14947543,"end":14955143,"text":"잘 실행되는 것 같아요. 한 10초 정도 기다렸다가 브라우저를 통해 같이 한번 볼게요.","speaker":""},{"start":14955143,"end":14962783,"text":"자 10초 된 것 같죠? 그러면 브라우저 가서","speaker":""},{"start":14962783,"end":14969623,"text":"이번에는 여기 경로 도메위 다 지우고 저는 북스","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558155795,"relativeStart":14969616,"segments":[{"start":14969616,"end":14972856,"text":"그리고 1을 이렇게 넘겨주도록 할게요.","speaker":""},{"start":14972856,"end":14981416,"text":"localhost 8080 slash books slash 1 이렇게 넘겨주면","speaker":""},{"start":14981416,"end":14987616,"text":"우리는 맵핑되어 있는 getBook이라는 메소드가 실행이 될 거고","speaker":""},{"start":14987616,"end":14992616,"text":"이 내부에서는 북이라는 클래스만큼의 공간 하나 할당을 받으며","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558175750,"relativeStart":14992616,"segments":[{"start":14992616,"end":14999296,"text":"1L, long type의 1, spring boot 입문, 2만원이라는 각 데이터를 가진","speaker":""},{"start":14999296,"end":15003036,"text":"공간을 하나 할당받아서 리턴을 해주게 될 거예요.","speaker":""},{"start":15003036,"end":15009376,"text":"그러면 이 리턴되는 건 우리 다시 클라이언트가 넘겨받게 될 거예요.","speaker":""},{"start":15009376,"end":15013216,"text":"그래서 결국은 이런 식으로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558203907,"relativeStart":15013204,"segments":[{"start":15013204,"end":15024184,"text":"어? 아이디의 값은 1, 타이틀은 스프링붓 입문, 그리고 아사는 임하누리에요 라고 나오는 걸 볼 수 있겠죠.","speaker":""},{"start":15024184,"end":15026964,"text":"어? 에러 뜨나요?","speaker":""},{"start":15026964,"end":15032004,"text":"자, 슬픔이이신 분들 다 에러 뜨는 걸까요?","speaker":""},{"start":15032004,"end":15035004,"text":"아니면 이해가 안 돼서?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558229519,"relativeStart":15035006,"segments":[{"start":15035006,"end":15039106,"text":"에러 뜨시는 분들도 있으면 채팅 통해서 한번 말씀해주세요","speaker":""},{"start":15039106,"end":15045306,"text":"일단은 에러가 뜨시면","speaker":""},{"start":15045306,"end":15048366,"text":"여기 앞에 작성된 이 코드 있죠","speaker":""},{"start":15048366,"end":15052726,"text":"북 컨트롤러랑 그리고 북 이 두 개를 가져다가","speaker":""},{"start":15052726,"end":15056166,"text":"일대일 문의를 빠르게 남겨주시는 게 해그럴 수 있을 것 같아요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558250005,"relativeStart":15056168,"segments":[{"start":15056168,"end":15064508,"text":"왜냐하면 이 코드상의 문제는 아마 지금 화면이 공유가 안 되는 이상 제가 빠르게 잡아드리기가 조금은 힘들 것 같아서 그래요.","speaker":""},{"start":15064508,"end":15070468,"text":"그래서 여기 접근했을 때 어떤 에러가 뜨는지 같이 포함해서 한번 남겨주시면 좋을 것 같아요.","speaker":""},{"start":15070468,"end":15075067,"text":"자 그래서 일단은 여기까지 작성을 해주면","speaker":""},{"start":15075067,"end":15076348,"text":"어 우리","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558272013,"relativeStart":15076569,"segments":[{"start":15076569,"end":15086569,"text":"도메인의 요청에 맞춰서 해당 메서드 들어와 컨트롤러가 내부 코드를 실행을 하고 공간 만들어서 반환해줘요.","speaker":""},{"start":15086569,"end":15089569,"text":"라고 볼 수가 있는 거예요.","speaker":""},{"start":15089569,"end":15097569,"text":"여기까지 작성을 해주면 우리는 북 컨트롤러를 일단은 작성을 해볼 수 있는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558294285,"relativeStart":15097562,"segments":[{"start":15097562,"end":15099902,"text":"여기까지 내용 이해되셨을까요?","speaker":""},{"start":15099902,"end":15104282,"text":"우리 이해되신 분들 다시 한번 엄지","speaker":""},{"start":15104282,"end":15106622,"text":"이해 안 되신 분들은 슬픔이","speaker":""},{"start":15106622,"end":15109422,"text":"아 그쵸","speaker":""},{"start":15109422,"end":15111622,"text":"잘 되신 것 같죠?","speaker":""},{"start":15111622,"end":15114222,"text":"실제로 우리 사용해보니까","speaker":""},{"start":15114222,"end":15115782,"text":"그렇게 어렵지는 않죠","speaker":""},{"start":15115782,"end":15118002,"text":"물론 완성은 아니기는 하지만","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558316299,"relativeStart":15117998,"segments":[{"start":15117998,"end":15121498,"text":"그렇게 어렵지는 않을 거예요.","speaker":""},{"start":15121498,"end":15123838,"text":"자, 그러면 여기까지가","speaker":""},{"start":15123838,"end":15127697,"text":"우리는 지금 앞에 작성된 이 과정 있죠.","speaker":""},{"start":15127697,"end":15129998,"text":"임시북, 클레인 클래스","speaker":""},{"start":15129998,"end":15133598,"text":"얘를 지금 우리가 같이 한번 진행을 한 거예요.","speaker":""},{"start":15133598,"end":15135998,"text":"여기 코드, 다 똑같죠?","speaker":""},{"start":15135998,"end":15139117,"text":"그래서 여기까지 한번 내용을 진행을 해본 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558338303,"relativeStart":15139108,"segments":[{"start":15139108,"end":15145108,"text":"실제로 이렇게 작성을 해주면 우리는 북이라는 클래스만 하나 작성을 해주면","speaker":""},{"start":15145108,"end":15152108,"text":"이때는 가지고 있는 클래스를 JSON 형식으로 자동 변환해줘요.","speaker":""},{"start":15152108,"end":15161108,"text":"실제 우리 여기 화면에 뜬 거 보면, 브라조에 뜬 거 보면 이거는 JSON 형식이에요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558359571,"relativeStart":15161113,"segments":[{"start":15161113,"end":15163113,"text":"조금 확대를 해드릴게요.","speaker":""},{"start":15163113,"end":15165113,"text":"JSON 형식이에요.","speaker":""},{"start":15165113,"end":15167113,"text":"이렇게 중괄호 있고","speaker":""},{"start":15167113,"end":15169113,"text":"아래쪽에","speaker":""},{"start":15169113,"end":15171113,"text":"ID값, 키값","speaker":""},{"start":15171113,"end":15173113,"text":"그리고 밸류값","speaker":""},{"start":15173113,"end":15175113,"text":"그리고 또 아래쪽에","speaker":""},{"start":15175113,"end":15177113,"text":"타이틀 키값","speaker":""},{"start":15177113,"end":15179113,"text":"그리고 스프링 부트 입문","speaker":""},{"start":15179113,"end":15181713,"text":"그리고 또 아래쪽에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558381076,"relativeStart":15181718,"segments":[{"start":15181718,"end":15188098,"text":"우리 키값 어서 뒤쪽에 임하늘 이렇게 영어로 그냥 쓸게요.","speaker":""},{"start":15188098,"end":15193538,"text":"이런 식으로. 이렇게 제이슨 형식으로 된 거예요.","speaker":""},{"start":15193538,"end":15195038,"text":"얘가 한 줄로 나와 있을 뿐이지.","speaker":""},{"start":15195038,"end":15199678,"text":"그래서 이런 변환해주는 과정을 우리는 한 적이 없죠.","speaker":""},{"start":15199678,"end":15202617,"text":"아무것도 한 게 없어요. 그냥 클래스만 만든 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558402069,"relativeStart":15202626,"segments":[{"start":15202626,"end":15210806,"text":"그래서 작성해줬던 이 코드를 알아서 json 형식으로 변환을 해주는데","speaker":""},{"start":15210806,"end":15216546,"text":"이때 변환해주는 라이브러리가 json이라는 라이브러리예요","speaker":""},{"start":15216546,"end":15224566,"text":"그리고 얘를 통해 변환되긴 하지만 우리는 그 과정을 알 필요가 없다는 거죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558422030,"relativeStart":15224563,"segments":[{"start":15224563,"end":15225963,"text":"왜냐?","speaker":""},{"start":15225963,"end":15228823,"text":"스프링부트가 자동으로","speaker":""},{"start":15228823,"end":15229583,"text":"해주니까","speaker":""},{"start":15229583,"end":15232203,"text":"그래서 제가 얘기한 게","speaker":""},{"start":15232203,"end":15234623,"text":"아주 편해요 라고 얘기한 게 그 이유예요","speaker":""},{"start":15234623,"end":15236663,"text":"우리는 만들어두고서는","speaker":""},{"start":15236663,"end":15238663,"text":"그냥 얘를 가져다 쓰기만 하면","speaker":""},{"start":15238663,"end":15240663,"text":"변하는 스프링부트가 알아서","speaker":""},{"start":15240663,"end":15241863,"text":"다 해주는 거예요","speaker":""},{"start":15241863,"end":15244583,"text":"만약 여러분들이 기존에 스프링부트","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558444052,"relativeStart":15244577,"segments":[{"start":15244577,"end":15246017,"text":"Spring을 사용하는 과정이었다면","speaker":""},{"start":15246017,"end":15247517,"text":"혹은 Spring이 없었을 때라면","speaker":""},{"start":15247517,"end":15249577,"text":"직접 변환해주는 코드를","speaker":""},{"start":15249577,"end":15252057,"text":"하나씩 다 작성을 해야 될 수 없겠죠.","speaker":""},{"start":15252057,"end":15255717,"text":"그러면 엄청나게 복잡했을 거예요.","speaker":""},{"start":15255717,"end":15258197,"text":"그래서 지금처럼","speaker":""},{"start":15258197,"end":15259717,"text":"잭슨은","speaker":""},{"start":15259717,"end":15262117,"text":"필드 이름을 그대로 가져가서","speaker":""},{"start":15262117,"end":15263677,"text":"제이슨의 키로 변환해줘요.","speaker":""},{"start":15263677,"end":15265757,"text":"우리가 작성했었던","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558465039,"relativeStart":15265755,"segments":[{"start":15265755,"end":15270495,"text":"id, title, author 모두 다 북클래스의 필드였죠?","speaker":""},{"start":15270495,"end":15275555,"text":"그래서 그 필드 이름이 그대로 json의 키로 변환이 된 거고","speaker":""},{"start":15275555,"end":15278995,"text":"별도 설정 따로 해준 거 없죠?","speaker":""},{"start":15278995,"end":15281995,"text":"알아서 스프링프트가 다 해준 거예요.","speaker":""},{"start":15281995,"end":15287335,"text":"근데 우리는 getter는 정의가 되어 있어야 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558486803,"relativeStart":15287338,"segments":[{"start":15287338,"end":15292338,"text":"왜냐? getter를 통해서 필드에 접근을 하기 때문에","speaker":""},{"start":15292338,"end":15297338,"text":"그래서 만약에 여러분들이 getter를 따로 작성하지 않는다면","speaker":""},{"start":15297338,"end":15301338,"text":"그때는 이런 결과가 나오지 않을 거예요","speaker":""},{"start":15301338,"end":15306338,"text":"이거는 실제로 제가 빠르게 한 번만 보여드리도록 할게요","speaker":""},{"start":15306338,"end":15309318,"text":"여기, 북 다시 한 번 가서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558510348,"relativeStart":15309309,"segments":[{"start":15309309,"end":15311909,"text":"아까 만들어놨었던 이 getter들 있죠.","speaker":""},{"start":15311909,"end":15315369,"text":"제가 이 getter만 빠르게 한번 주석 처리해보고","speaker":""},{"start":15315369,"end":15317929,"text":"다시 한번 실행해볼게요.","speaker":""},{"start":15317929,"end":15321289,"text":"그래서 실행해보고","speaker":""},{"start":15321289,"end":15324469,"text":"잠시만요.","speaker":""},{"start":15324469,"end":15327009,"text":"눈 가르고 하나 더 이렇게","speaker":""},{"start":15327009,"end":15331349,"text":"그럼 일단 실행은 잘 됐죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558531345,"relativeStart":15331348,"segments":[{"start":15331348,"end":15334568,"text":"다만 getter가 모두 다 주석 처리된 거예요","speaker":""},{"start":15334568,"end":15341368,"text":"그리고 웹브라우저 가서 똑같이 도메인에 접근을 해보면","speaker":""},{"start":15341368,"end":15345288,"text":"결과가 아무것도 안 나오죠","speaker":""},{"start":15345288,"end":15351608,"text":"왜냐? 값을 반환해주는 getter가 없기 때문에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558554390,"relativeStart":15351750,"segments":[{"start":15351750,"end":15355750,"text":"그래서 우리는 이걸 보고 이해할 수 있는 게","speaker":""},{"start":15355750,"end":15361250,"text":"지금의 Jackson이라는 라이브러리는 진짜 getter가 있어야 되는 거구나","speaker":""},{"start":15361250,"end":15366250,"text":"getter를 통해 필드갓을 가져와 JSON 형식으로 만들어주는 거구나","speaker":""},{"start":15366250,"end":15369450,"text":"라는 것도 추가로 이해해 보실 수 있을 거예요","speaker":""},{"start":15369450,"end":15374610,"text":"그래서 여기까지 일단 내용을 진행을 해주면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558578189,"relativeStart":15374616,"segments":[{"start":15374616,"end":15379056,"text":"첫 번째 컨트롤러가 어떤 식으로 구현되는지는 이해하실 수 있어요.","speaker":""},{"start":15379056,"end":15382316,"text":"물론 얘기했다시피 이게 끝은 아니에요.","speaker":""},{"start":15382316,"end":15387736,"text":"계속 계속 만들어 나갈 건데 여기까지의 단계만 이해해 주시면 된다는 거죠.","speaker":""},{"start":15387736,"end":15394456,"text":"그래서 지금과 같이 잭슨이라는 우리 눈에 보이지 않는 내용에 대해서도 한번 짚어봤고","speaker":""},{"start":15394456,"end":15398936,"text":"그러면 지금의 챕터에서 챕터 3에서 진행한 내용을","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558600223,"relativeStart":15398933,"segments":[{"start":15398933,"end":15400313,"text":"간단하게 정리해보면","speaker":""},{"start":15400313,"end":15402633,"text":"우리는 챕터 3에서","speaker":""},{"start":15402633,"end":15404613,"text":"첫 REST API를","speaker":""},{"start":15404613,"end":15406753,"text":"제작을 한 거죠. 컨트롤러","speaker":""},{"start":15406753,"end":15409193,"text":"그래서 해당 내용을","speaker":""},{"start":15409193,"end":15410073,"text":"제작하기 위해","speaker":""},{"start":15410073,"end":15413653,"text":"MVC 패턴 그리고 REST 개념","speaker":""},{"start":15413653,"end":15415613,"text":"얘네가 어떤 개념이에요?","speaker":""},{"start":15415613,"end":15417633,"text":"모델, 뷰, 컨트롤러로","speaker":""},{"start":15417633,"end":15419433,"text":"나뉘고 각각의","speaker":""},{"start":15419433,"end":15421333,"text":"디스페처 서블렛이라는 내용이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558622734,"relativeStart":15421326,"segments":[{"start":15421326,"end":15424526,"text":"필요한 역할들을 찾아서 호출해","speaker":""},{"start":15424526,"end":15428666,"text":"클라이언트가 보낸 요청에 대한 응답을 해주는 거예요","speaker":""},{"start":15428666,"end":15430026,"text":"라고 얘기했고","speaker":""},{"start":15430026,"end":15432826,"text":"추가로 레이어드 아키텍처","speaker":""},{"start":15432826,"end":15437326,"text":"우리가 실제로 서비스를 구현할 때","speaker":""},{"start":15437326,"end":15443406,"text":"그때 계층은 컨트롤러 그리고 서비스","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558646297,"relativeStart":15443398,"segments":[{"start":15443398,"end":15451398,"text":"그리고 repository 이 순서로 진행될 거에요 라고 계층도 알아봤었고","speaker":""},{"start":15451398,"end":15458398,"text":"그리고 실제 소통하기 위해 사용하는 rest http 메소딩","speaker":""},{"start":15458398,"end":15462398,"text":"그리고 그에 따른 상태 코드들도 같이 한번 알아본 거죠.","speaker":""},{"start":15462398,"end":15465918,"text":"그래서 여기는 이론적인 부분들을 조금 알아봤고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558668304,"relativeStart":15465926,"segments":[{"start":15465926,"end":15472286,"text":"이후 우리는 그 내용들을 가져다가 첫 컨트롤러까지도 작성했고","speaker":""},{"start":15472286,"end":15476406,"text":"이때 컨트롤러에서 사용하는 각 어노테이션","speaker":""},{"start":15476406,"end":15482406,"text":"lastController, getMapping, passVarible, requestParam","speaker":""},{"start":15482406,"end":15487626,"text":"4개, 각 상황에 맞게 사용, 그리고 임시북","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558688282,"relativeStart":15487628,"segments":[{"start":15487628,"end":15489288,"text":"플레인 클래스.","speaker":""},{"start":15489288,"end":15494487,"text":"실제로 두 개, 책에 대한 내용을 다룰 수 있는 클래스 하나 정의하고","speaker":""},{"start":15494487,"end":15500027,"text":"그리고 실제로 리턴했을 때 어떤 식으로 변환되는지까지도","speaker":""},{"start":15500027,"end":15505987,"text":"추가로 getter를 통해 값을 가져온다는 내용까지도 확인할 수 있는 거예요.","speaker":""},{"start":15505987,"end":15508308,"text":"자, 그러면 여기까지 챕터3 내용.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558716695,"relativeStart":15508299,"segments":[{"start":15508299,"end":15510699,"text":"전체적으로 다 이해하실 수 있을까요?","speaker":""},{"start":15510699,"end":15515439,"text":"엄지 뭐지 한 번씩만 눌러주시면 될 것 같아요.","speaker":""},{"start":15515439,"end":15516879,"text":"이해가 잘 되신 분들은","speaker":""},{"start":15516879,"end":15524759,"text":"일단 여기까지는 이해하실 수 있을 거예요.","speaker":""},{"start":15524759,"end":15528459,"text":"물론 여러분들 여기 왼쪽에 있는 것보다","speaker":""},{"start":15528459,"end":15530979,"text":"오른쪽에 있는 걸 이해하는 게 조금 더 중요해요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558737435,"relativeStart":15530979,"segments":[{"start":15530979,"end":15537579,"text":"왜냐하면 컨트롤러 작성할 때도 사실 왼쪽에서 다뤘었던 이론들을 다 가져다게 쓰진 않았었죠.","speaker":""},{"start":15537579,"end":15542219,"text":"그렇기 때문에 대략적으로만 파악해주시면 된다라는 거예요.","speaker":""},{"start":15542219,"end":15551999,"text":"자, 그러면 일단 여기까지 해주면 우리는 첫 번째 챕터는, 아, 첫 번째가 아니죠. 세 번째 챕터는 마무리가 될 수 있을 거고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558758676,"relativeStart":15552006,"segments":[{"start":15552006,"end":15561426,"text":"이제는 네 번째 챕터에 들어가서 앞에 있는 JPA와 엔티티 베핑이라는 개념까지도 한번 알아보도록 할게요.","speaker":""},{"start":15561426,"end":15572706,"text":"그래서 JPA는 앞서 얘기했던 것처럼 데이터베이스에 더 쉽게 접근할 수 있는 방법이라고 얘기했었죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558781479,"relativeStart":15572711,"segments":[{"start":15572711,"end":15575871,"text":"그래서 이 내용을 한번 같이 알아보도록 할게요.","speaker":""},{"start":15575871,"end":15579531,"text":"그래서 첫 번째 유닛부터 바로 한번 들어가 보면","speaker":""},{"start":15579531,"end":15586191,"text":"일단은 우리 데이터베이스와 소통하기 위한 게 JPA예요 라고 얘기했으니까","speaker":""},{"start":15586191,"end":15591011,"text":"데이터베이스가 어떤 건지를 먼저 간단하게 짚고 넘어가도록 할게요.","speaker":""},{"start":15591011,"end":15595631,"text":"물론 다들 알고 있기는 하겠지만 간단하게 짚고 넘어가면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558802718,"relativeStart":15595628,"segments":[{"start":15595628,"end":15603128,"text":"데이터베이스란 데이터를 영구적으로 저장하고 관리하는 시스템이라고 할 수 있어요.","speaker":""},{"start":15603128,"end":15607968,"text":"그래서 이런 식으로 우리는 시스템 하나를 구축을 해두고","speaker":""},{"start":15607968,"end":15611027,"text":"안에다가 데이터를 차곡차곡차곡 저장하고","speaker":""},{"start":15611027,"end":15615107,"text":"필요할 때 꺼내서 쓸 수 있게 만들어주는 시스템이라는 거죠.","speaker":""},{"start":15615107,"end":15616928,"text":"그리고 데이터베이스란","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558822677,"relativeStart":15616924,"segments":[{"start":15616924,"end":15623364,"text":"얘는 서버 애플리케이션과는 별도로 운영이 되죠.","speaker":""},{"start":15623364,"end":15626804,"text":"그래서 데이터를 영구 저장할 수 있어요.","speaker":""},{"start":15626804,"end":15631664,"text":"다시 말해 애플리케이션이 종료되어도 보존이 된다는 거죠.","speaker":""},{"start":15631664,"end":15637384,"text":"그리고 각각의 데이터들은 우리가 사용하기 쉽게끔","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558844698,"relativeStart":15637393,"segments":[{"start":15637393,"end":15640493,"text":"부조화된 저장을 나타내주게 돼요.","speaker":""},{"start":15640493,"end":15647133,"text":"그래서 이러한 표 형식을 우리는 테이블이라고 얘기해줄 수 있어요.","speaker":""},{"start":15647133,"end":15650133,"text":"이렇게 표 형식으로 나와 있는 걸","speaker":""},{"start":15650133,"end":15654753,"text":"그래서 이러한 각각의 테이블들을 나타내줄 수 있으며","speaker":""},{"start":15654753,"end":15659293,"text":"이 테이블에서는 우리 행여를 나타내줄 수 있는데","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558867479,"relativeStart":15659297,"segments":[{"start":15659297,"end":15663677,"text":"기본적으로 행은 가로를 의미하는 거예요.","speaker":""},{"start":15663677,"end":15667677,"text":"다들 알고 있겠죠? 배열도 알고 있으니까.","speaker":""},{"start":15667677,"end":15670437,"text":"그래서 행은 가로를 나타내주는 거고","speaker":""},{"start":15670437,"end":15676677,"text":"행의 경우는 각각의 데이터를 의미한다고 보시면 돼요.","speaker":""},{"start":15676677,"end":15682077,"text":"첫 번째 책에 대한 내용, 두 번째 책에 대한 내용, 세 번째 책에 대한 내용","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558888475,"relativeStart":15682078,"segments":[{"start":15682078,"end":15686818,"text":"그리고 열의 경우는 세로를 의미하는 거죠.","speaker":""},{"start":15686818,"end":15691818,"text":"그래서 이 세로는 우리가 속성이라고 얘기할 수 있기는 한데","speaker":""},{"start":15691818,"end":15696418,"text":"이러한 열의 값들을 우리는 column이라고 불러줄 수 있어요.","speaker":""},{"start":15696418,"end":15703278,"text":"그래서 기본적으로는 이러한 세로 값들 속성들을 하나의 column이다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558909474,"relativeStart":15703290,"segments":[{"start":15703290,"end":15711750,"text":"라고 얘기할 수 있으며 조금 더 나아가서 얘기하면 우리가 만들었었던 클래스, 부클래스 있죠?","speaker":""},{"start":15711750,"end":15720290,"text":"이 부클래스 안에 있는 아이디, 파이틀, 그리고 아스라는 이런 필드들 있죠?","speaker":""},{"start":15720290,"end":15724050,"text":"이 필드들이 이 컬럼이 된다.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558933031,"relativeStart":15724046,"segments":[{"start":15724046,"end":15725206,"text":"라고 보시면 돼요.","speaker":""},{"start":15725206,"end":15731086,"text":"그래서 이 컬럼으로 자동으로 만들어주는 것까지도","speaker":""},{"start":15731086,"end":15732866,"text":"나중에 확인해보도록 할 거예요.","speaker":""},{"start":15732866,"end":15737826,"text":"그래서 기본적으로는 테이블 형식, 행열 형태로 구성이 되어 있다.","speaker":""},{"start":15737826,"end":15742046,"text":"그리고 이러한 데이터베이스에 접근을 하고","speaker":""},{"start":15742046,"end":15747386,"text":"데이터베이스에 테이블을 만들거나 컬럼을 만들거나 데이터를 추가할 때는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558958624,"relativeStart":15747384,"segments":[{"start":15747384,"end":15752524,"text":"SQL이라는 언어로 접근을 해줘야 돼요.","speaker":""},{"start":15752524,"end":15754524,"text":"라고 볼 수 있어요.","speaker":""},{"start":15754524,"end":15760784,"text":"그래서 이거는 간단하게 데이터베이스와 소통하기 위한 언어예요.","speaker":""},{"start":15760784,"end":15763024,"text":"그래서 표준 지리언어.","speaker":""},{"start":15763024,"end":15766784,"text":"질문하고 그에 대한 답을 얻을 수 있는 언어가 되는데","speaker":""},{"start":15766784,"end":15772624,"text":"이러한 SQL은 여러분들이 그 문법을 따로 공부를 하실 수 있기는 해요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780558980389,"relativeStart":15772629,"segments":[{"start":15772629,"end":15780229,"text":"근데 우리가 지금 서버를 다루는 입장에서 SQL까지 공부하고 다루면 좋기는 할 거예요.","speaker":""},{"start":15780229,"end":15788709,"text":"근데 여러분들이 SQL 전문가가 될 건 아니기 때문에 그 과정은 따로 배우지 않고 생략하는 거고","speaker":""},{"start":15788709,"end":15795129,"text":"대신 이 SQL을 우리가 만드는 게 아닌 대신 만들어줄 수 있게 해주는 게","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559001625,"relativeStart":15795124,"segments":[{"start":15795124,"end":15797124,"text":"JPA가 될 거예요.","speaker":""},{"start":15797124,"end":15800124,"text":"그래서 여러분들은 지금 단계에서는","speaker":""},{"start":15800124,"end":15802124,"text":"SQL까지는 알 필요는 없고","speaker":""},{"start":15802124,"end":15806124,"text":"SQL이 그냥 데이터베이스와 소통하기 위한","speaker":""},{"start":15806124,"end":15810124,"text":"하나의 언어구나 라는 것만 생각해 주시면 돼요.","speaker":""},{"start":15810124,"end":15816364,"text":"자, 그래서 우리는 데이터베이스에 대한 내용들을 하나씩 알아볼고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559023650,"relativeStart":15816369,"segments":[{"start":15816369,"end":15825969,"text":"추가로 우리 이런 데이터베이스, 대표적으로 많이 사용하는 데이터베이스가 어떤 건지, 어떤 게 있는지를 알아볼 수 있는데","speaker":""},{"start":15825969,"end":15837809,"text":"대표적 데이터베이스는 MySQL, 그리고 PostgreSQL, 그리고 Oracle, 또 우리가 사용할 H2도 있어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559044642,"relativeStart":15837818,"segments":[{"start":15837818,"end":15845878,"text":"그래서 이러한 데이터베이스들을 우리는 RDBMS라고 얘기하는데","speaker":""},{"start":15845878,"end":15851798,"text":"이때의 R은 우리 앞에서 한번 얘기했었던 Relationship이라고 보시면 돼요","speaker":""},{"start":15851798,"end":15859338,"text":"관계 그리고 D는 데이터 B는 베이스 매니지먼트 시스템","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559065637,"relativeStart":15859333,"segments":[{"start":15859333,"end":15866333,"text":"그래서 관계형 데이터베이스 관리 시스템이라고 얘기해 줄 수 있어요.","speaker":""},{"start":15866333,"end":15869333,"text":"그래서 우리는 대표적으로 이런 내용들이 있는데","speaker":""},{"start":15869333,"end":15874333,"text":"그중에 가볍게 사용할 수 있는 H2, InMemoryDB를 사용할 거예요.","speaker":""},{"start":15874333,"end":15876333,"text":"라고 보시면 되겠죠.","speaker":""},{"start":15876333,"end":15880333,"text":"그리고 SQL, 이 내용에 대한 예시는","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559086620,"relativeStart":15880326,"segments":[{"start":15880326,"end":15881946,"text":"앞에 나와 있기는 해요.","speaker":""},{"start":15881946,"end":15884406,"text":"셀렉트, 전체 조회,","speaker":""},{"start":15884406,"end":15887666,"text":"인설튜은 추가, 데이터 추가하는 용도고","speaker":""},{"start":15887666,"end":15890246,"text":"딱 봐도 많이 생소하죠.","speaker":""},{"start":15890246,"end":15894066,"text":"이것까지는 전부 다 알 필요는 없다는 거예요.","speaker":""},{"start":15894066,"end":15896526,"text":"자, 그럼 일단은 여기까지","speaker":""},{"start":15896526,"end":15897906,"text":"해당 슬라이드 통해서","speaker":""},{"start":15897906,"end":15901386,"text":"정말 간단하게 데이터베이스가 어떤 건지","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559101747,"relativeStart":15901386,"segments":[{"start":15901386,"end":15905986,"text":"우리가 어떤 형식으로 데이터들을 구조화할 수 있는지 알아볼 수 있는데","speaker":""},{"start":15905986,"end":15908146,"text":"여기까지 내용은 다들 이해하실 수 있겠죠?","speaker":""},{"start":15908146,"end":15909366,"text":"데이터베이스","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559125038,"relativeStart":15910626,"segments":[{"start":15910626,"end":15917346,"text":"그러면 일단은 앞에 내용까지는 잘 이해하실 수 있을 거고","speaker":""},{"start":15917346,"end":15922006,"text":"그럼 이제 우리가 사용할 거라고 했었던 H2 데이터베이스","speaker":""},{"start":15922006,"end":15925686,"text":"이 친구에 대해서도 같이 한번 알아보도록 할게요","speaker":""},{"start":15925686,"end":15929866,"text":"그래서 얘는 제가 앞에서 한번 설명을 한 것처럼","speaker":""},{"start":15929866,"end":15933686,"text":"H2DB는 자바 기반의 오픈소스","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559149356,"relativeStart":15933684,"segments":[{"start":15933684,"end":15939924,"text":"그리고 관계형 데이터베이스 관리 시스템 RDBMS라고 얘기했죠.","speaker":""},{"start":15939924,"end":15942924,"text":"그래서 이 친구를 사용을 했고","speaker":""},{"start":15942924,"end":15948024,"text":"얘는 서버 모드와 인베디드 모드 그리고 인메모리 DB 기능을 지원해요.","speaker":""},{"start":15948024,"end":15949224,"text":"라고 할 수 있는데","speaker":""},{"start":15949224,"end":15951144,"text":"이거는 제가 얘기한 것처럼","speaker":""},{"start":15951144,"end":15958164,"text":"우리가 가지고 있는 현재의 데스크탑 혹은 노트북의 메모리를 데이터베이스처럼 사용하는 기능이에요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559176232,"relativeStart":15958170,"segments":[{"start":15958170,"end":15960170,"text":"라고 얘기를 했어요.","speaker":""},{"start":15960170,"end":15966170,"text":"그리고 얘는 정말 좋은 게 브라우저 기반의 콘솔 모드를 이용할 수 있어요.","speaker":""},{"start":15966170,"end":15970170,"text":"그래서 여러분들 원래 데이터베이스를 사용을 하려면","speaker":""},{"start":15970170,"end":15977170,"text":"일반적으로는 우리가 전에 확인했었던 이러한 cmd 커반드 창 혹은 터미널 창 있죠.","speaker":""},{"start":15977170,"end":15984610,"text":"이런 커반드나 터미널 창을 통해서 데이터베이스에 접근하고 조회하고 커리몬을 날리는 과정을 해야 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559196203,"relativeStart":15984613,"segments":[{"start":15984613,"end":15990453,"text":"근데 여러분들 커뮤니티창 접해봐서 알겠지만 그렇게 편리하지는 않죠.","speaker":""},{"start":15990453,"end":15996313,"text":"그래서 지금 일반적인 데이터베이스는 사용하기가 조금은 번거로운데","speaker":""},{"start":15996313,"end":16004793,"text":"H2DB는 브라우저 기반의 콘솔 모드를 제공해줘서 엄청 편하게 사용하는 게 가능하다는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559217189,"relativeStart":16004796,"segments":[{"start":16004796,"end":16014256,"text":"그리고 별도의 설치 과정도 없고 용량도 2MB 이하로 엄청 저용량 엄청 가볍다는 거예요","speaker":""},{"start":16014256,"end":16018296,"text":"그러니까 그냥 쓱 갖다가 쓰는 게 가능해요","speaker":""},{"start":16018296,"end":16026036,"text":"그래서 DWE 자체가 매우 가볍고 빠르기 때문에 API 또한 빠르고 API 또한 지원한다","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559238177,"relativeStart":16026041,"segments":[{"start":16026041,"end":16034041,"text":"우리가 지금 사용하는 서버에서 요청을 받기 위한 API 또한 지원한다는 거예요.","speaker":""},{"start":16034041,"end":16040041,"text":"그리고 SQL 문법도 다른 DBMS들과 마찬가지로","speaker":""},{"start":16040041,"end":16043041,"text":"표준 SQL의 대부분이 지원된다는데","speaker":""},{"start":16043041,"end":16047041,"text":"이거는 왜 대부분인가요? 라고 할 수 있겠는데요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559259176,"relativeStart":16047034,"segments":[{"start":16047034,"end":16051734,"text":"근데 이거는 왜 대부분이냐면 앞에서 설명하지는 않긴 했지만","speaker":""},{"start":16051734,"end":16059194,"text":"SQL이라는 게 사용하는 데이터베이스 관리 시스템에 따라서","speaker":""},{"start":16059194,"end":16062414,"text":"SQL 문법이 조금 조금씩 달라져요.","speaker":""},{"start":16062414,"end":16067794,"text":"다시 말해 우리가 사용하는 MySQL이나 Oracle이나","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559281180,"relativeStart":16067790,"segments":[{"start":16067790,"end":16074110,"text":"각각의 문법들이 똑같은 SQL인데 문법들이 조금씩 조금씩 다르다는 거죠","speaker":""},{"start":16074110,"end":16080130,"text":"그래서 지금의 H2도 문법이 조금 다르기는 하나","speaker":""},{"start":16080130,"end":16084710,"text":"기본적인 표준 문법들은 전부 다 지원해준다는 거예요","speaker":""},{"start":16084710,"end":16089810,"text":"간단하게 데이터 조회하거나 생성하거나 추가하거나 이런 것들","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559302182,"relativeStart":16089812,"segments":[{"start":16089812,"end":16103452,"text":"이런 것들은 전부 다 지원된다 라고 보시면 되고 그래서 위에서 얘기한 이런 장점들 때문에 애플리케이션 개발 단계의 테스트 데이터베이스로 정말 많이 사용을 하게 될 거예요.","speaker":""},{"start":16103452,"end":16110632,"text":"오픈소스 무료에다가 별도의 기능들도 대부분 다 지원을 해주고 심지어 가볍기까지 하대요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559324192,"relativeStart":16110619,"segments":[{"start":16110619,"end":16114619,"text":"우리 안 쓸 이유가 없겠죠?","speaker":""},{"start":16114619,"end":16117619,"text":"그래서 사용한다고 보시면 돼요.","speaker":""},{"start":16117619,"end":16123619,"text":"자, 그래서 일단은 여기까지 H2DB가 어떤 건지 간단히 설명드렸고","speaker":""},{"start":16123619,"end":16129619,"text":"그 장점들을 한번 설명드렸는데 여기까지는 뭐 이해해볼 수 있겠죠?","speaker":""},{"start":16129619,"end":16131639,"text":"어? 이 내용 어려웠을까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559350823,"relativeStart":16131628,"segments":[{"start":16131628,"end":16134928,"text":"이해하실 수 있겠죠?","speaker":""},{"start":16134928,"end":16140628,"text":"근데 여러분들 사실 몰라도 돼요","speaker":""},{"start":16140628,"end":16143128,"text":"그냥 우리 써보면서 익히면 되긴 해요","speaker":""},{"start":16143128,"end":16146028,"text":"일단은 여기까지 내용 다뤘고","speaker":""},{"start":16146028,"end":16149728,"text":"이후에는 본격적으로 h2db의 콘솔 화면 등을","speaker":""},{"start":16149728,"end":16152828,"text":"제가 간단하게 보여드리면서 다뤄보도록 할 건데","speaker":""},{"start":16152828,"end":16157848,"text":"일단 지금 시간이 쉬는 시간을 한번 가졌다가 진행을 할 필요가 있겠죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780559371554,"relativeStart":16157852,"segments":[{"start":16157852,"end":16168792,"text":"그래서 지금 49분이니까 또 59분까지는 또 애매하니 우리 17시까지 쉬었다가 진행을 해보도록 할게요.","speaker":""},{"start":16168792,"end":16172092,"text":"자 그럼 17시까지 쉬었다가 진행해볼게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560774569,"relativeStart":16173504,"segments":[{"start":16173504,"end":16179504,"text":"이렇게 통해서 하이버네이트를 통해서 JDBC 통해서 DB가 소통하는 거구나.","speaker":""},{"start":16179504,"end":16182504,"text":"이렇게까지 아실 필요는 없어요.","speaker":""},{"start":16182504,"end":16185504,"text":"그럼에도 불구하고 이 구조를 설명하는 건","speaker":""},{"start":16185504,"end":16189504,"text":"여러분들이 Spring Boot, Spring Data JPA를 사용하다 보면","speaker":""},{"start":16189504,"end":16193744,"text":"하이버네이트라는 이름을 생각보다 많이 접하게 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560797095,"relativeStart":16193754,"segments":[{"start":16193754,"end":16204354,"text":"그래서 단지 하이버네이트는 JPA를 구현해주는 구현체구나 라는 것만 기억하고 계시면","speaker":""},{"start":16204354,"end":16211454,"text":"나중에 하이버네이트라는 내용이 나왔을 때 얘는 구현체야 라고 연결을 시켜줄 수 있기 때문이에요.","speaker":""},{"start":16211454,"end":16216674,"text":"그래서 전체적인 여기 이렇게 이렇게 이렇게","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560818341,"relativeStart":16216670,"segments":[{"start":16216670,"end":16226450,"text":"이렇게 다 이해하실 필요 없이 하이버네이트가 JPA의 인터페이스를 구현해주는 구현체예요.","speaker":""},{"start":16226450,"end":16229070,"text":"라는 것만 이해해주시면 돼요.","speaker":""},{"start":16229070,"end":16238050,"text":"이 내용, 여기까지 JPA의 특징, 2. 그리고 하이버네이트 구현해준다는 거.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560830877,"relativeStart":16238051,"segments":[{"start":16238051,"end":16239211,"text":"이해하실 수 있을까요?","speaker":""},{"start":16239211,"end":16241331,"text":"이해되시는 분들은","speaker":""},{"start":16241331,"end":16241811,"text":"엄지","speaker":""},{"start":16241811,"end":16243571,"text":"한 번씩 눌러주세요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560856481,"relativeStart":16244872,"segments":[{"start":16244872,"end":16251872,"text":"엄지가 생각보다 적은 것 같은데. 이 내용이 조금 어려웠을까요?","speaker":""},{"start":16251872,"end":16260872,"text":"그쵸? 잠시 여러분들이 누르는 걸 잊은 거겠죠?","speaker":""},{"start":16260872,"end":16265872,"text":"일단은 JPE가 하나의 인터페이스 규격.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560878501,"relativeStart":16265878,"segments":[{"start":16265878,"end":16269898,"text":"하이버네트가 부현체라는 것만 파악해 주시면 돼요.","speaker":""},{"start":16269898,"end":16275678,"text":"자, 그러면 일단 기본적인 JPA까지는 이해하실 수 있으니까","speaker":""},{"start":16275678,"end":16281038,"text":"우리는 앞서 얘기했었던 H2DB에 접근할 수 있게","speaker":""},{"start":16281038,"end":16285638,"text":"간단하게 설정 파일에 코드를 조금만 작성을 해보도록 할 거예요.","speaker":""},{"start":16285638,"end":16288378,"text":"자, 그래서 여기","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560904373,"relativeStart":16288372,"segments":[{"start":16288372,"end":16294212,"text":"앞에 인텔리지에로 돌아가서 진행을 하도록 할 건데","speaker":""},{"start":16294212,"end":16300092,"text":"여러분들 혹시 제가 아까 전에 스프링부트의 프로젝트에","speaker":""},{"start":16300092,"end":16305552,"text":"설정을 담당해주는 설정 파일이 어떤 거요? 라고 얘기했었는지","speaker":""},{"start":16305552,"end":16308492,"text":"혹시 기억하실까요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560926375,"relativeStart":16308488,"segments":[{"start":16308488,"end":16312888,"text":"그쵸? 우리'야물 파일'이라고 얘기했었어요.","speaker":""},{"start":16312888,"end":16317488,"text":"이거 사실 기억 안 낼 수 있을 것 같아서 일부러 한번 질문했었던 거예요.","speaker":""},{"start":16317488,"end":16329188,"text":"그래서 우리 여기 보면은, 디렉터리 경로 보면, 소스 하위에 이 안에 메인 하위 들어가고,","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560951455,"relativeStart":16329193,"segments":[{"start":16329193,"end":16331553,"text":"메인에서 자바가 아니라","speaker":""},{"start":16331553,"end":16334793,"text":"여기 리소스로 들어가셔야 돼요.","speaker":""},{"start":16334793,"end":16340893,"text":"리소스에서 어플리케이션 야물이라는 파일이 있었죠.","speaker":""},{"start":16340893,"end":16343953,"text":"이 파일에 한번 들어가 보도록 할 거예요.","speaker":""},{"start":16343953,"end":16348493,"text":"그래서 어플리케이션 야물에 한번 들어가 보면","speaker":""},{"start":16348493,"end":16350713,"text":"우리가 이런 식으로","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560972199,"relativeStart":16350708,"segments":[{"start":16350708,"end":16355948,"text":"현재의 서버, Tomcat 서버에 포트 지정해줬었고","speaker":""},{"start":16355948,"end":16361508,"text":"우리가 사용하는 Spring 어플리케이션의 이름까지도 지정되어 있는 거 확인했었죠.","speaker":""},{"start":16361508,"end":16366868,"text":"그래서 yaml 파일을 통해서 설정할 거예요 라고 얘기했었어요.","speaker":""},{"start":16366868,"end":16372468,"text":"그래서 여기다가 내용을 조금 추가로 작성을 해보도록 할 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780560995511,"relativeStart":16372477,"segments":[{"start":16372477,"end":16376937,"text":"그래서 어떤 내용을 작성을 해볼 거냐면","speaker":""},{"start":16376937,"end":16382337,"text":"일단은 우리 슬라이드에도 이렇게 있기는 해요","speaker":""},{"start":16382337,"end":16387117,"text":"근데 일단 이거 따로 띄우지 않고 제가 한번 작성을 해보도록 할 건데","speaker":""},{"start":16387117,"end":16391837,"text":"우리 앞서 야물 파일 작성할 때 제가 주의점 하나 얘기했었죠","speaker":""},{"start":16391837,"end":16394757,"text":"들여쓰기가 의미가 있기 때문에","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561020840,"relativeStart":16394752,"segments":[{"start":16394752,"end":16403752,"text":"들여쓰기 반드시 맞춰서 진행해 주셔야 돼요. 라고 얘기했었어요. 그래서 저는 여기","speaker":""},{"start":16403752,"end":16416852,"text":"자, Spring이라는 해당 계층 하위에다가 작성을 할 거예요. 여기다가 데이터 소스, 그리고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561043116,"relativeStart":16416842,"segments":[{"start":16416842,"end":16424282,"text":"그리고 그 하위에다가 driver class name","speaker":""},{"start":16424282,"end":16431961,"text":"그리고 여기에는 org.h2.driver","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561065898,"relativeStart":16431952,"segments":[{"start":16431952,"end":16436412,"text":"그리고 데이터 소스의 하위 계층이에요.","speaker":""},{"start":16436412,"end":16438652,"text":"URL","speaker":""},{"start":16438652,"end":16441212,"text":"얘는","speaker":""},{"start":16441212,"end":16448152,"text":"jdbch2:mem:bookdb","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561093816,"relativeStart":16448137,"segments":[{"start":16448137,"end":16461857,"text":"자 그리고 다음은 유저 네임. 얘는 sa라고 할게요. 자 그리고 패스워드. 얘는 1234라고 작성해 줄 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561123763,"relativeStart":16465913,"segments":[{"start":16465913,"end":16468913,"text":"그리고 이어서 아래쪽에","speaker":""},{"start":16468913,"end":16473913,"text":"이번엔 데이터 소스와 같은 계층이에요.","speaker":""},{"start":16473913,"end":16480913,"text":"그리고 여기다가 H2 그리고 콘솔","speaker":""},{"start":16480913,"end":16487913,"text":"그리고 하위에다가는 Enabled 그리고 True","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561141992,"relativeStart":16487919,"segments":[{"start":16487919,"end":16498499,"text":"그리고 같은 계층에다가 pass 뒤에는 /h2-console","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561164967,"relativeStart":16498489,"segments":[{"start":16498489,"end":16502489,"text":"그리고 또 하위에다가 우리는 JPA.","speaker":""},{"start":16502489,"end":16507489,"text":"이거 데이터 소스와 H2와 같은 계층이에요.","speaker":""},{"start":16507489,"end":16510489,"text":"JPA.","speaker":""},{"start":16510489,"end":16515509,"text":"그리고 조금 익숙한 이름, 하이버네이트.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561191607,"relativeStart":16515513,"segments":[{"start":16515513,"end":16524273,"text":"그리고 그 하위 계층에 ddl-auto, 그리고 얘는 create라고 해줄게요.","speaker":""},{"start":16524273,"end":16535793,"text":"그리고 hibernate와 같은 계층에 show sql true라고 작성해줄 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561224106,"relativeStart":16535996,"segments":[{"start":16535996,"end":16539936,"text":"자 그러면 여러분들 이 계층 있죠?","speaker":""},{"start":16539936,"end":16543456,"text":"이거 계층 잘 보시고 입력해 주시면 돼요","speaker":""},{"start":16543456,"end":16545736,"text":"지금 여기 이 계층들","speaker":""},{"start":16545736,"end":16551496,"text":"어느 시점의 계층인지 제가 빨간 선 작성해 드리도록 할 테니까","speaker":""},{"start":16551496,"end":16554756,"text":"이 선 보고서 작성해 보시면 돼요","speaker":""},{"start":16554756,"end":16560336,"text":"일단은 작성하는데 막 들여쓰기 이런 것도 확인을 해 줘야 되니까","speaker":""},{"start":16560336,"end":16561476,"text":"제가 한 1분?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561233590,"relativeStart":16561477,"segments":[{"start":16561477,"end":16565197,"text":"조금 넉넉 잡아서 1분 정도 시간 드리도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561297339,"relativeStart":16565193,"segments":[{"start":16565193,"end":16569313,"text":"여러분들 다시 얘기하지만 들여쓰기 잘 확인해 주셔야 돼요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561309105,"relativeStart":16570586,"segments":[{"start":16570586,"end":16574446,"text":"네 잠시만요 질문이 하나가 있죠?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561329337,"relativeStart":16574442,"segments":[{"start":16574442,"end":16583842,"text":"해당 질문은 제가 조금 있다가 일단 앞에 내용 어느 정도 다들 작성해 주시면 설명 드리도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561354679,"relativeStart":16583834,"segments":[{"start":16583834,"end":16588514,"text":"자 그러면 일단 앞의 내용 다 작성되신 분들은 우리 엄지 한 번씩","speaker":""},{"start":16588514,"end":16593354,"text":"그리고 아직 작성이 안 된 것 같아요 라고 하시는 분들은 우리 슬픔의 한 번씩만 눌러주세요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561403064,"relativeStart":16597242,"segments":[{"start":16597242,"end":16607842,"text":"자 그러면 일단은 그래도 시간 제가 원래는 1분 드린다고 했었는데 조금 더 드렸죠. 한 2분 조금 넘게 드린 것 같아요.","speaker":""},{"start":16607842,"end":16610302,"text":"일단은 다들 작성해 주신 것 같죠?","speaker":""},{"start":16610302,"end":16618702,"text":"자 그러면 일단 여기까지는 다들 작성해 주신 것 같으니까.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561428410,"relativeStart":16618700,"segments":[{"start":16618700,"end":16625100,"text":"이제 우리가 같이 한번 각 속성에 대한 내용들 간략간략하게 설명을 드리도록 할게요.","speaker":""},{"start":16625100,"end":16632080,"text":"그리고 해당 질문은 어차피 여기 Enabled 이거 제가 조금 이따가 설명을 드릴 거니까","speaker":""},{"start":16632080,"end":16635100,"text":"그때 한번 설명을 드려도 괜찮을 것 같아요.","speaker":""},{"start":16635100,"end":16637940,"text":"설명했다가 위로 올라가는 것보다는","speaker":""},{"start":16637940,"end":16643620,"text":"그래서 우리가 위쪽에서부터 내용을 하나씩","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561457067,"relativeStart":16643625,"segments":[{"start":16643625,"end":16646445,"text":"간단 간단하게 보도록 하면","speaker":""},{"start":16646445,"end":16651485,"text":"일단 이 앞에 데이터 소스부터 보면 되겠죠?","speaker":""},{"start":16651485,"end":16654885,"text":"그래서 드라이버 클래스 네임","speaker":""},{"start":16654885,"end":16658465,"text":"이거는 지금 우리가 사용하고자 하는","speaker":""},{"start":16658465,"end":16662845,"text":"H2 드라이버의 이름을 나타내준다고 보시면 돼요.","speaker":""},{"start":16662845,"end":16668225,"text":"그래서 간단하게 지금 우리가 사용하는 이름이","speaker":""},{"start":16668225,"end":16670645,"text":"데이터베이스는 H2 드라이버","speaker":""},{"start":16670645,"end":16672685,"text":"이 친구를 사용할 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561477052,"relativeStart":16672683,"segments":[{"start":16672683,"end":16674923,"text":"라고 지정해주는 거예요.","speaker":""},{"start":16674923,"end":16676923,"text":"데이터베이스의 드라이버.","speaker":""},{"start":16676923,"end":16679183,"text":"그리고 URL.","speaker":""},{"start":16679183,"end":16681923,"text":"이거는 우리가 조금 있다가","speaker":""},{"start":16681923,"end":16684683,"text":"사이트에 직접 콘솔에 들어가보면","speaker":""},{"start":16684683,"end":16688523,"text":"그때 접근하고자 하는 URL을 따로 작성해주는 칸이 있어요.","speaker":""},{"start":16688523,"end":16691383,"text":"여기 보면 제가 그냥 한번 띄워드릴게요.","speaker":""},{"start":16691383,"end":16692863,"text":"여기 보면은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561502379,"relativeStart":16692866,"segments":[{"start":16692866,"end":16695666,"text":"JDBC URL이라고 나와 있죠.","speaker":""},{"start":16695666,"end":16702746,"text":"그래서 여기 URL, 사용하고자 하는 URL을 미리 명시를 해 두는 거예요.","speaker":""},{"start":16702746,"end":16708646,"text":"그래서 우리는 앞에 있는 URL 값 나중에 바꿔주도록 할 거예요.","speaker":""},{"start":16708646,"end":16711246,"text":"그래서 미리 한번 정의를 해 둔 거고","speaker":""},{"start":16711246,"end":16717586,"text":"이후 유저 네임은 우리가 로그인할 때 사용할 유저의 네임을 지정해 주는 거예요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561523904,"relativeStart":16717588,"segments":[{"start":16717588,"end":16730028,"text":"그래서 제가 SA라고 작성을 해두면 우리는 실제 H2DB 콘솔에 접근할 때 SA라는 사용자 이름을 작성해서 접근을 한다는 거죠.","speaker":""},{"start":16730028,"end":16739508,"text":"그래서 SA는 사실 기본 관리자 이름이겠는데요. 기본 H2 데이터베이스에 그래서 관리적으로 SA를 쓰고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561547196,"relativeStart":16739508,"segments":[{"start":16739508,"end":16746508,"text":"아래에 있는 패스워드는 말 그대로 해당 계정에 접근하기 위해서 사용하는 패스워드.","speaker":""},{"start":16746508,"end":16753908,"text":"우리는 조금 있다가 1, 2, 3, 4를 작성해서 로그인할 수 있어요.","speaker":""},{"start":16753908,"end":16758868,"text":"그래서 기본적인 데이터 소스들은 이렇게 보시면 되고","speaker":""},{"start":16758868,"end":16762508,"text":"그 아래쪽에 H2A","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561569221,"relativeStart":16762509,"segments":[{"start":16762509,"end":16765449,"text":"콘솔 하위에 각각의 값들이 있죠.","speaker":""},{"start":16765449,"end":16767309,"text":"그래서 여기 있는","speaker":""},{"start":16767309,"end":16773349,"text":"Enabled는 현재 콘솔을 사용할 건지 지정해주는 거예요.","speaker":""},{"start":16773349,"end":16776249,"text":"그래서 현재 True라고 되어 있으니까","speaker":""},{"start":16776249,"end":16779749,"text":"이러한 콘솔을 따로 사용할 거예요.","speaker":""},{"start":16779749,"end":16782069,"text":"라고 명시를 해주는 거죠.","speaker":""},{"start":16782069,"end":16785169,"text":"근데 얘가 만약에 false면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561590975,"relativeStart":16785172,"segments":[{"start":16785172,"end":16790832,"text":"그때는 h2 콘솔을 사용하지 않을 거예요. 라는 의미가 돼요.","speaker":""},{"start":16790832,"end":16794212,"text":"그런데 방금 질문이 들어오기를","speaker":""},{"start":16794212,"end":16801692,"text":"이 enabled라는 해당 속성의 값은 기본값이 false인 걸로 알고 있는데","speaker":""},{"start":16801692,"end":16806552,"text":"우리 이거 설정하기 전에 왜 콘솔에 들어가졌나요?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561615034,"relativeStart":16806553,"segments":[{"start":16806553,"end":16808213,"text":"라고 질문을 해주셨어요.","speaker":""},{"start":16808213,"end":16812953,"text":"근데 그 이유는 그냥 h2db만 설치를 하면","speaker":""},{"start":16812953,"end":16815873,"text":"false를 갖고 있는 게 맞아요.","speaker":""},{"start":16815873,"end":16819193,"text":"근데 우리가 하나 더 설치를 해줬었어요.","speaker":""},{"start":16819193,"end":16820213,"text":"어떤 거냐면","speaker":""},{"start":16820213,"end":16826273,"text":"springboot devtools라는 걸 설치를 해줬었죠.","speaker":""},{"start":16826273,"end":16830993,"text":"그런데 이 devtools가 해주는 역할 중에 또 하나가","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561637042,"relativeStart":16830988,"segments":[{"start":16830988,"end":16838408,"text":"H2 콘솔을 사용할 때 콘솔의 기본값, inable의 기본값을 true로 바꿔줘요.","speaker":""},{"start":16838408,"end":16843608,"text":"어차피 개발할 때는 H2DB를 대부분 사용을 하니까","speaker":""},{"start":16843608,"end":16848488,"text":"그래서 따로 설정하지 않더라도 이런 설정값을 작성하지 않더라도","speaker":""},{"start":16848488,"end":16852728,"text":"접근해서 사용할 수 있게끔 이 모듈이","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561656772,"relativeStart":16852723,"segments":[{"start":16852723,"end":16854163,"text":"바꿔주기 때문에","speaker":""},{"start":16854163,"end":16856243,"text":"접근이 가능했었던 거예요.","speaker":""},{"start":16856243,"end":16858263,"text":"그래서","speaker":""},{"start":16858263,"end":16860363,"text":"지금의 기본값은 false지만","speaker":""},{"start":16860363,"end":16862643,"text":"true로 바꿔줘야 접근이 가능하고","speaker":""},{"start":16862643,"end":16864283,"text":"devtools를","speaker":""},{"start":16864283,"end":16865663,"text":"따로 설치한 경우에는","speaker":""},{"start":16865663,"end":16868443,"text":"그때는 기본값이","speaker":""},{"start":16868443,"end":16871083,"text":"true가 된다라고 생각해주시면 돼요.","speaker":""},{"start":16871083,"end":16873463,"text":"그리고","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561679038,"relativeStart":16873462,"segments":[{"start":16873462,"end":16877082,"text":"다음, pass는 경로가 될 거예요.","speaker":""},{"start":16877082,"end":16879982,"text":"그러니 우리가 접근하고자 하는 도메인 경로.","speaker":""},{"start":16879982,"end":16886502,"text":"아까 여기 위쪽에다가 h2console이라고 작성해서 접근을 했었죠.","speaker":""},{"start":16886502,"end":16889022,"text":"그래서 이 경로를 지정해주는 건데","speaker":""},{"start":16889022,"end":16893902,"text":"이것도 기본값을 그냥 그대로 가져다가 명시해준 거예요.","speaker":""},{"start":16893902,"end":16895022,"text":"다시 말해 지워도","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561700796,"relativeStart":16895012,"segments":[{"start":16895012,"end":16897372,"text":"똑같이 접근이 가능하다는 거겠죠.","speaker":""},{"start":16897372,"end":16901372,"text":"그리고 아래쪽에 JPA","speaker":""},{"start":16901372,"end":16906552,"text":"계층에 하이버네이트 하위에 있는 DDL auto","speaker":""},{"start":16906552,"end":16909652,"text":"이 친구는 create라고 되어 있죠.","speaker":""},{"start":16909652,"end":16914872,"text":"근데 이거는 우리가 지금 따로 설명을 하지는 않고","speaker":""},{"start":16914872,"end":16916692,"text":"나중에 설명을 드리도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561722050,"relativeStart":16916696,"segments":[{"start":16916696,"end":16920536,"text":"어차피 제가 나중에 슬라이드에 따로 정리해둔 내용이 있어서","speaker":""},{"start":16920536,"end":16923496,"text":"그때 다시 한번 설명을 드리도록 할 거고","speaker":""},{"start":16923496,"end":16926096,"text":"그냥 간단하게 크리에이트는","speaker":""},{"start":16926096,"end":16931356,"text":"서버를 시작할 때마다 테이블을 새롭게 만들어 주세요","speaker":""},{"start":16931356,"end":16933936,"text":"라는 의미로만 생각해 주시면 돼요","speaker":""},{"start":16933936,"end":16938236,"text":"그리고 그 아래, show SQL은","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561744063,"relativeStart":16938228,"segments":[{"start":16938228,"end":16947748,"text":"말 그대로 SQL, 우리가 지금 진행하는 동작에 대한 SQL을 보여주세요 라는 의미로 보시면 돼요.","speaker":""},{"start":16947748,"end":16953508,"text":"예를 들어 제가 DB에다가 데이터 저장해주세요 라는 코드를 작성을 하면","speaker":""},{"start":16953508,"end":16959868,"text":"그 코드에 대한 SQL을 로그상으로 보여주세요 라는 의미가 된다는 거죠.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561766085,"relativeStart":16959862,"segments":[{"start":16959862,"end":16965662,"text":"그래서 우리는 이런 식으로 설정값들을 작성을 해주면","speaker":""},{"start":16965662,"end":16968762,"text":"야물 파일에다가 설정값들을 작성을 해주면","speaker":""},{"start":16968762,"end":16976962,"text":"우리가 사용할 h2db에 설정을 해주는 게 가능하다라고 볼 수 있어요","speaker":""},{"start":16976962,"end":16981622,"text":"그러면 일단은 여기까지의 설정값들","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561788869,"relativeStart":16981614,"segments":[{"start":16981614,"end":16985514,"text":"대략적인 역할들, 그리고 아까 추가로 들어왔었던 질문.","speaker":""},{"start":16985514,"end":16990834,"text":"Enabled의 기본값이 false임에도 불구하고 접근이 됐었던 이유.","speaker":""},{"start":16990834,"end":16994314,"text":"설명드렸는데 여기까지 내용 이해하실 수 있을까요?","speaker":""},{"start":16994314,"end":16998314,"text":"이해되시는 분들은 엄지 한 번씩 눌러주세요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561812417,"relativeStart":16999642,"segments":[{"start":16999642,"end":17006982,"text":"슬프미들이 끊이지 않고 올라오고 있어요","speaker":""},{"start":17006982,"end":17013702,"text":"그러면 일단은 여기까지 진행을 해주면","speaker":""},{"start":17013702,"end":17017142,"text":"우리는 콘솔을 사용할 수 있는 준비는 할 수 있어요","speaker":""},{"start":17017142,"end":17020882,"text":"설마 시간 때문에?","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561833414,"relativeStart":17020882,"segments":[{"start":17020882,"end":17023882,"text":"근데 여러분들 우리 이거 하나만 더 볼게요 하나만","speaker":""},{"start":17023882,"end":17028022,"text":"아 근데 오늘 여러분들 시간 많이 들인 것 같은데?","speaker":""},{"start":17028022,"end":17030022,"text":"이상하다","speaker":""},{"start":17030022,"end":17033522,"text":"어 저만 그렇게 느끼는 걸까요?","speaker":""},{"start":17033522,"end":17036522,"text":"흠","speaker":""},{"start":17036522,"end":17041802,"text":"자 일단은 우리가 조금만 더 볼게요 조금만","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561855163,"relativeStart":17041807,"segments":[{"start":17041807,"end":17049447,"text":"일단 여기까지 진행하면 H2DB를 사용할 준비 설정까지는 다 진행을 한 거고","speaker":""},{"start":17049447,"end":17051967,"text":"이후에 딱 하나만 더 볼 거예요","speaker":""},{"start":17051967,"end":17063867,"text":"어떤 거냐면 우리가 지금의 모듈을 사용하기 위해서는 별도의 의존성을 확인할 거라고 했었죠","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561876413,"relativeStart":17063863,"segments":[{"start":17063863,"end":17069803,"text":"그래서 이 의존성은 우리 어디서 확인할 수 있어요? 라고 했었나요?","speaker":""},{"start":17069803,"end":17078963,"text":"우리가 사용할 모듈들, DevTools, 그리고 Lombop, 그리고 H2DB,","speaker":""},{"start":17078963,"end":17080543,"text":"어, 그렇죠. 벌써 나왔죠?","speaker":""},{"start":17080543,"end":17084823,"text":"Build, Gradle, Gradle에서 확인 가능해요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561900485,"relativeStart":17084822,"segments":[{"start":17084822,"end":17086482,"text":"라고 했었죠.","speaker":""},{"start":17086482,"end":17088982,"text":"그래서 여러분들 여기 빌드 그레이드","speaker":""},{"start":17088982,"end":17090762,"text":"다시 한번 들어가서","speaker":""},{"start":17090762,"end":17092982,"text":"우리 의존성이 잘 추가되어 있는지만","speaker":""},{"start":17092982,"end":17095982,"text":"확인을 해볼게요.","speaker":""},{"start":17095982,"end":17097482,"text":"그래서 우리 여기","speaker":""},{"start":17097482,"end":17099482,"text":"H2 콘솔","speaker":""},{"start":17099482,"end":17101162,"text":"잘 있어요.","speaker":""},{"start":17101162,"end":17103322,"text":"그리고 당연히 JPA 사용할 거니까","speaker":""},{"start":17103322,"end":17105582,"text":"JPA도 잘 있고","speaker":""},{"start":17105582,"end":17108562,"text":"그리고 H2 데이터베이스에 대한 내용도","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561920700,"relativeStart":17108565,"segments":[{"start":17108565,"end":17110065,"text":"잘 있죠?","speaker":""},{"start":17110065,"end":17112805,"text":"그래서 여기까지 확인하면 돼요.","speaker":""},{"start":17112805,"end":17114065,"text":"아, 그냥 잘 있구나.","speaker":""},{"start":17114065,"end":17116065,"text":"그래서 우리는 사용할 준비가 됐구나.","speaker":""},{"start":17116065,"end":17118565,"text":"라는 것만 이해해 주시면 돼요.","speaker":""},{"start":17118565,"end":17121065,"text":"여기까지 진짜 1분도 안 걸렸죠?","speaker":""},{"start":17121065,"end":17124065,"text":"자, 그래서 여기까지 진행을 해주면","speaker":""},{"start":17124065,"end":17128945,"text":"우리가 이 슬라이드에 있는 내용들을 진행을 해서","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561942480,"relativeStart":17128950,"segments":[{"start":17128950,"end":17132250,"text":"데이터베이스와 JPA에 대한 내용 이해를 했고","speaker":""},{"start":17132250,"end":17136090,"text":"그 이후에는 엔티티 맵핑을 진행을 할 거예요.","speaker":""},{"start":17136090,"end":17139930,"text":"그래서 우리가 첫 엔티티 만들었으니까","speaker":""},{"start":17139930,"end":17144630,"text":"북 클래스 작성, 이거 바꿔나가는 과정 진행해보도록 할게요.","speaker":""},{"start":17144630,"end":17150890,"text":"여기, 다음 유닛, 두 번째 유닛 진행할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561965757,"relativeStart":17150887,"segments":[{"start":17150887,"end":17155887,"text":"두 번째 유닛?","speaker":""},{"start":17155887,"end":17162887,"text":"우리 엄지와 슬픔이가 싸우고 있어요","speaker":""},{"start":17162887,"end":17172967,"text":"근데 일단은 사실 여러분들 우리 두 번째 유닛을 진행을 하려면","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780561985998,"relativeStart":17172960,"segments":[{"start":17172960,"end":17182720,"text":"또 내용들이 여러 개가 있어서 사실 지금 남은 시간 안에 다 확인할 수는 없기는 해요.","speaker":""},{"start":17182720,"end":17188900,"text":"그래서 33분이라서 한 7분 정도가 남았는데 7분 만에 내용을 확인할 수는 없기는 해요.","speaker":""},{"start":17188900,"end":17193320,"text":"그래도 우리 여기까지 진행을 하면 그래도 꽤 많이 진행을 했어요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780562009027,"relativeStart":17193311,"segments":[{"start":17193311,"end":17197051,"text":"원래는 챕터3까지 진행하는 걸 생각하긴 했는데","speaker":""},{"start":17197051,"end":17201311,"text":"지금 벌써 챕터4 내용 들어와서 쭉 진행하고 있죠.","speaker":""},{"start":17201311,"end":17204751,"text":"일단은 우리 프론트엔드나 자바와는 다르게","speaker":""},{"start":17204751,"end":17207251,"text":"시간이 그렇게 부족하지는 않을 것 같으니까","speaker":""},{"start":17207251,"end":17210971,"text":"우리가 오늘은 쉬는 시간도 좀 많이 들인 것 같은데","speaker":""},{"start":17210971,"end":17215931,"text":"여기까지 한번 진행을 해보도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780562034119,"relativeStart":17215923,"segments":[{"start":17215923,"end":17223723,"text":"그래서 일단은 여러분들 제가 7분 일찍 끝내드린 만큼 7분만큼 더 복습해주셔야 돼요","speaker":""},{"start":17223723,"end":17231463,"text":"제가 이제 프론트엔드나 자바 때 시간이 부족해서 일찍 끝내드리지 못한 게 너무 마음에 걸려서 조금씩 시간 드리는 거예요","speaker":""},{"start":17231463,"end":17240643,"text":"그래서 우리가 오늘은 여기까지 딱 유닛 1까지만 진행하고 유닛 2부터는 다음 시간부터 하나씩 내용을 알아보도록 할게요","speaker":""}],"hasSpeakerLabels":false,"speaker":""},{"createdAt":1780562050502,"relativeStart":17240645,"segments":[{"start":17240645,"end":17244405,"text":"자, 그러면 우리 오늘은 여기까지 진행하도록 하고","speaker":""},{"start":17244405,"end":17246325,"text":"내일 이어서 뵙도록 하겠습니다.","speaker":""},{"start":17246325,"end":17248865,"text":"자, 그럼 여러분들 다들 고생하셨습니다.","speaker":""},{"start":17248865,"end":17250885,"text":"내일 뵙도록 할게요.","speaker":""}],"hasSpeakerLabels":false,"speaker":""}]
Spring Framework 입문과 백엔드 개발 | Alt