1) arr = list(map(int, input().split())) 2) arr = map(int, input().split())) 안녕하세요 저는 구현하기전에 문제를 읽고 코드설계를 먼저 하는방식으로 공부를 하고 있습니다. 대표값문제를 접하면서 궁금한점이 입력을 받을때 1)과같이 list를 써야하는지 아니면 2)처럼 안써도 되는지 어떻게 판단할 수 있을까요? 1)과 2) 둘 다 띄어쓰기로 구분하는 숫자열을 받는것은 동일하니 list를 써야하는지 안써도 되는지 판단 기준을 못잡겠습니다. 또 현재 대표값문제에서는 2)과 같이 썼을때 어떤 점때문에 의도치않은 결과가 나오는지 궁금합니다. 질문을 정리하자면 1) 여러 값을 입력받을때 list 사용의 판단 기준 2) 대표값문제에서 2)과같이 썼을때 정답이 안나오는 이유
안녕하세요! 장고 학습 관련하여 몇 가지 여쭤볼라고 합니다. 현재 장고를 개념부터 강의를 따라서 학습하고 있습니다. 뭔가 아직 막막하고 진도가 빠르게 진행되지 않아 마음이 성급한 마음이 있습니다. 그래서 불안감이 생겨서 그런지 부트캠프를 알아보았는데, https://learningspoons.com/course/detail/django-backend/ python django aws 기술 셋을 사용하는 부트캠프입니다. 들어가서 상단으로 올리면 커리큘럼을 볼 수 있습니다. 부트캠프로 들은 후, 나중에 이진석님 강의를 듣는 게 나은지 아니면 그냥 묵묵히 계속 강의를 듣는 게 나을지 고민이 됩니다. 만약 이진석님이 보실 때 커리큘럼이 만드신 강의가 더 낫다면 묵묵히 강의를 들으면서 학습해볼려고 합니다. 제 수준이 낮아서 뭐가 좋은지 잘 몰라서 여쭤봅니다.
공공데이터와 Folium(Python Library)으로 만드는 제주 오름 지도 안내 서비스
제주 오름 강의를 모두 수강한 뒤 다른 공공API를 이용해서 응용 연습을 해보고 있습니다. 체크박스로 원하는 주소 마커만 보는 기능을 사용했고 마커에 커스텀 아이콘을 사용했습니다.(아이콘 2가지 사용) 이제 부트스트랩에 적용해보려하는데 iconUrl길이가 너무 길어서 코드가 복잡해보입니다. iconUrl을 다른 코드로 대체해서 아이콘이 보이도록 할 수 있을 까요?
복학 전에 개인 작업으로 FPS게임서버를 만들고 있습니다. 구현된 것들: - 신규 유저 접속 시 기존 유저 데이터 전송, 기존 유저에게 신규 유저 스폰 전송 - 키보드 입력(Vertical, Horizontal)을 하나의 Vector3에 저장하여 이전 값과 다를 경우 패킷을 전송 ( 데드레커닝이 맞는진 모르겠음) - 카메라 회전 값을 각 클라이언트에서 0.25초 단위로 동기화 패킷 전송 ( 회전값은 서버에서 검증이 필요없을 거라 생각해서 검증 없이 Echo ) 위에 적은 대로 위의 기능은 문제없이 잘 작동하지만 이동 동기화에 대해서 문제가 심각합니다.... 데드레커닝처럼 이전값과 다를 때만 패킷을 보내는데, 상대 클라이언트는 회전값 동기화가 0.25 + (내RTT/2 + 상대RTT/2)이상이라 이동패킷이 더 빠르게 가버리면 위치값에 대한 데이터 일관성이 깨집니다. 그래서 추가로 1초 단위로 현재 위치를 서버에 전송합니다. 서버는 새로운 위치값을 받고 자신이 갖고 있던 해당 플레이어의 위치값 ( 서버 내에서도 이동방향, 회전값, RTT/2, 오차범위를 기준으로 위치값을 0.25초 단위로 업데이트함) 과 비교하여 이 값이 정상적인 데이터인지 검증합니다. 만약 결과가 정상적이라면 Broadcast, 비정상적이라면 Leave로 구현했습니다. 그런데 문제는 서버에서 검증하는 시간 + 내 RTT / 2 + 상대 RTT / 2 차이 때문에 데드레커닝으로 예측하더라도 계속 이전 위치로 돌아가는 현상이 발생했습니다. 데드레커닝을 포기하자니 너무 느린 반응때문에 FPS에 적합하지 않은 것 같고, 서버 검증을 포기하자니 에디터에 Inspector에서 위치 이동만 해도 핵처럼 보였습니다. FPS에서는 검증을 어떻게 하는게 맞을까요?
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
안녕하세요 이동패킷 동기화 관련해서 여쭤볼려고 합니다. 다른 사람들 질문에 답하신것 처럼 이동패킷은 보통 1초에 4번 보낸다 라고 되어 있더라구요. 여기서 4번 보낸다 라는 뜻은 4강 서버 강의 후반에서 배운것처럼 Server에서 JobTimer에 pendingList에 250ms 만큼 모아놓고 그리고 보낸다라는 뜻인가요?? 즉 Client에서는 키 입력을 받게 되면 실시간으로 Server에 보내지만 반면에 Server쪽에서는 같은 방 안에 있는 다른 플레이어한테 BroadCast를 실시간으로 해주는게 아닌 0.250초 만큼 쌓아 놓은 패킷을 모아서 보낸다는 뜻인가요?? 또는 클라이언트에서 아예 0.250초마다 보낸다는 뜻인지 잘 모르겠어요...
안녕하세요~! 본 강의에서는 사용되지 않았지만 다중공선성 제거를 위해 VIF 10 이상인 피쳐들은 drop하는 게 성능에 더 좋다고 하여 해당 방법을 적용하였는데 오히려 RMSE값이 0.3~0.5 정도 커지는 결과가 나타났습니다.(선형회귀, 릿지, 라쏘) VIF 제거 외에는 강의해주신 내용도 거의 유사한 방식으로 전처리 적용하였습니다. 1. VIF 10 이상인 피쳐들을 제거하는 게 예측률 향상에 무조건 좋은 것은 아닌건가요? 2. 만약 그렇다면 다중공선성 제거를 위한 추가적인 기법이 있을 것 같은데, 대표적으로 활용되는 방법이 어떤게 있을까요? 3. 마지막으로, VIF 10 이상인 피쳐들은 제거하여 성능이 향상되는 데이터셋의 대표적인 예와, 적용이 잘 안되는 예가 있을까요? 이번에도 애매한 질문을 드리는 점 죄송합니다. 아시는 수준에서 답변 주시면 정말 감사하겠습니다^^
온라인 게임을 하다보면 pc의 성능이 안좋거나 인터넷 환경이 불안정한 경우 렉이 걸려 해당 유저의 캐릭터가 멈추는 경우를 봤습니다. 이는 아마도 서버와 패킷을 전송하는 과정에서 pc성능의 문제로 패킷을 소화하지 못하거나 인터넷이 끊겨 패킷을 제때 전달받지 못해서 발생하는 문제라고 생각합니다. 그렇다면 반대의 경우 pc 성능이나 인터넷 환경이 타유저에 비해 압도적으로 뛰어난 경우는 타 유저에 비해 보다 많은 패킷을 주고 받을 수 있을 거라 생각합니다. 그럴 경우 타인보다 더 많은 이동, 공격을 하는 등 유저 간 벨런스에 문제가 생길 것 같고 그를 방지하기 위해 패킷 전송에 있어 일종의 상한선을 걸어야 하지 않을까 라는 생각을 합니다. 마치 프레임 제한을 거는 것처럼요. 이게 맞다면 제 개인적인 판단으로는 그러한 한 번에 전송할 수 있는 패킷의 양, 전송대기 시간 등을 클라이언트 쪽에서 제한하는 쪽으로 코드를 짜야하는 게 맞다고 생각이 드는데 이런 부분을 클라쪽에서 관리를 해야할까요? 아니면 서버 쪽에서 관리를 해줘야 할까요? -- 번외의 질문입니다. 롤의 경우 렉이 걸리는 유저는 혼자 렉이 걸리고 심할 경우 게임에서 나가지는 식인 반면에 닌텐도의 슈퍼마리오메이커2는 유저대전에서 한 명이 렉이 걸리면 전원이 렉이 걸리는 방식으로 알고 있습니다. 게임을 개발하는 개발자로서 마리오 방식보다는 롤의 방식이 유저에게 좀 더 긍정적인 평가를 받을 수 있을 거라 생각하는데 게임사 측에서 마리오 방식을 택하는 이유가 있을까요? 늘 좋은 강의 감사합니다.^^
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
며칠째 여러방법으로 시도를 해보아도 안되는 부분이 많습니다..ㅠㅠㅠ 혼자 간단한 3D게임을 만들면서 공부중입니다. 접속하는 부분까지는 잘 됩니다. Protocol 에서는 Pox. Poy, Poz를 float로 변경한 후 조이스틱 입력을 받을 boolean을 추가해줬습니다. 이후 클라 프로젝트 쪽에서 UI_button이라는 스크립트 파일을 만들어서 UI_Base의 BindEvent를 통하여 조이스틱을 조작하여 조이스틱의 Vector2의 값을 MyPlayercontroller의 SetMyPlayerMoveDir이라는 프로퍼티로 set안에서 설정후 get부분에서는 Vector3의 값을 내벝어 주게 하였습니다. 그리고 나서 isInputJoyStick이 true일 경우 이렇게 State를 변경해 주었고 UpdateMoving일 경우에는 IsInputJoyStick이 false일 경우 State를 변경하도록 하였습니다. Move함수의 인자로는 아까 MyPlayerController의 프로퍼티인 SetMyPlayerMove을 받아서 transform.forward랑 포지션을 움지기게 한뒤, movePacket을 만들어서 PosInfo를 Send 해주는데 동기화가 안됩니다. 현재 서버의 로그를 보면 서버를 킨 후 클라에서 조이스틱을 클릭하고 이리저리 움직이면 최초의 드래그 한 값만이 이런식으로 계속 보내 지는거같습니다. 가령 같은 값으로 패킷을 보낸다고해도 다른클라에서는 제 플레이어를 봤을 때 뚝뚝 끊기는것 처럼 보여야 하는데 접속만 되고 동기화가 통 되질 않습니다..
Exception in thread django-main-thread: Traceback (most recent call last): File "C:\Users\lee\.conda\envs\askcompany\lib\threading.py", line 973, in _bootstrap_inner self.run() File "C:\Users\lee\.conda\envs\askcompany\lib\threading.py", line 910, in run self._target(*self._args, **self._kwargs) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\utils\autoreload.py", line 53, in wrapper fn(*args, **kwargs) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run self.check(display_num_errors=True) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\management\base.py", line 392, in check all_issues = self._run_checks( File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\management\base.py", line 382, in _run_checks return checks.run_checks(**kwargs) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\checks\registry.py", line 72, in run_checks new_errors = check(app_configs=app_configs) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\checks\urls.py", line 13, in check_url_config return check_resolver(resolver) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\checks\urls.py", line 23, in check_resolver return check_method() File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\urls\resolvers.py", line 407, in check for pattern in self.url_patterns: File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\utils\functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\urls\resolvers.py", line 588, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\utils\functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\urls\resolvers.py", line 581, in urlconf_module return import_module(self.urlconf_name) File "C:\Users\lee\.conda\envs\askcompany\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "C:\Dev\askcompany\askcompany\urls.py", line 41, in <module> path('__debug__/', include('debug_toolbar.urls')), File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\urls\conf.py", line 34, in include urlconf_module = import_module(urlconf_module) File "C:\Users\lee\.conda\envs\askcompany\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\urls.py", line 5, in <module> urlpatterns = DebugToolbar.get_urls() File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\toolbar.py", line 145, in get_urls for panel_class in cls.get_panel_classes(): File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\toolbar.py", line 126, in get_panel_classes panel_classes = [ File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\toolbar.py", line 127, in <listcomp> import_string(panel_path) for panel_path in dt_settings.get_panels() File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\utils\module_loading.py", line 17, in import_string module = import_module(module_path) File "C:\Users\lee\.conda\envs\askcompany\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\panels\settings.py", line 7, in <module> get_safe_settings = get_default_exception_reporter_filter().get_safe_settings AttributeError: 'SafeExceptionReporterFilter' object has no attribute 'get_safe_settings' 구글에 검색해봤는데 정확히 무슨 내용인지 모르겠네요...
안녕하세요, askcompany 프로젝트 폴더 설정하는 부분에서 몇가지 질문이 있습니다. 1. DEBUG 모드일때만 프로젝트 폴더의 urls.py에 media 관련 url을 추가해주는 이유가 있을까요? 해당 url은 어떤 역할을 하게 되는 것인가요? 2. 프로젝트 폴더의 urls.py에서 사용한 from django.conf import settings과 django github의 django.conf.global_settings.py의 차이가 궁금합니다. 3. 2번의 settings와 프로젝트 폴더에 자동으로 생성된 settings.py의 차이가 궁금합니다. 4. settings를 개발과 운영으로 나눴는데 그렇다면 settings/prod.py에 DEBUG=False와 같은 설정을 바꿔야 하는게 아닌지 궁금합니다. 감사합니다.
안녕하세요! ML공부하면서 강의 정말 많이 도움이 되고 있습니다^^ ㅇ skew를 사용한 왜곡도 제거부분에서(강의 8:00~10:00 부분) 1. skew 대신 standardscaler를 사용해 표준화 시키는 것은 단점이 있나요? (정규분포를 만들어주기 때문에 skew보다 더 정리를 잘해줄것 같은 생각이 듭니다.) 2. 또한 log를 씌워 정규분포와 비슷하게 만들어준다고 하셨는데, 이부분 또한 standardscaler를 적용하면 안되는 걸까요? ㅇ GrLivArea 이상치를 제거하는 부분에서(강의 14:00~18:00 부분) 1. 다른 이상치 제거방법(사분위수)을 써도 되는지? 2. 이상치 제거할 때 테스트 데이터에 이상치가 있는지 확인하고 제거하라고 하셨는데 학습검증단계에서 테스트 데이터를 참고해도 되는건가요? ㅇ 전처리 과정 순서를 기본전처리(null, 범주형 변환 등) → standardscaler → 이상치제거(IQR 등) → minmaxscaler 이렇게 기본틀로 잡고 머신러닝을 진행하고 있었는데 돌리는 모델이나 데이터별로 달라져야할까요? ㅇ 마지막으로, house price 타켓 컬럼을 log변환해서 학습을 진행을 하셨는데, 타겟값만 log를 씌워주고 다른 값들은 log를 안씌운 상태에서 학습을 하게되면 오류(수치상의 차이 기반)가 발생할 가능성은 없을까요? 질문이 난잡하긴 한데 간략하게나만 답변 주시면 감사하겠습니다! 감사합니다.
UI 자동화 #1 강의를 보다 Bind() 함수가 이해가 잘 안되어서 질문드립니다. enum ‘Buttons’는 Button을 컴포넌트로 가진 GameObject들의 목록이다. Bind()는 이 Buttons의 Type를 넘겨받아서 Dictionary ‘_objects’에 Key: 해당 컴포넌트 종류 Value: 해당 컴포넌트를 가진 GameObject들의 배열 형태로 맵핑해준다. Bind()는 나의 자식들 중, 해당 컴포넌트를 가진 GameObject들을 찾아주는 역할을 한다. 라고 이해하면 되는 걸까요?
파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ---------- ---------- # 감사의 인사 안녕하세요! 먼저 좋은 강의 만들어주셔서 감사합니다. 파이썬 문법을 기본적인 것을 떼고 프레임워크와 함께 무언가 만들어볼라고 하던 찰나 FastAPI와 함께 크롤링까지 학습할 수 있어서 좋은 강의인 것 같습니다 : ) 스크랩핑의 경우, json.load 관련하여 학습하다보니 serialize 개념에서 시작하여 json.dump와 json.loads 등등 과 parser 개념에 대해 학습할 수 있어서 너무 좋았습니다. 이것저것 학습하다보니 하루가 쑤욱 갔네요... ---------- ---------- # 질문 1 먼저 구글링을 하고 나서 질문드립니다. 1) 아래 코드에서 response 앞에 await이 올 수 있는 이유 async def fetch(session, url): print(f"{os.getpid()} | {threading.get_ident()} thread | url: {url}") async with session.get(url) as response: return await response.text 공식 문서에 따르면 await 뒤에는 코루틴, 태스크 또는 퓨처가 와야한다고 하는데, 위 코드에서 await이 올 수 있던 것은 여기서 response가 async with session.get(url)의 alias 여서 가능한건가요??? 만약 그렇다면 with문은 context manager인 걸로 알고 있습니다. 자원을 할당해주고 다 사용하면 반환하는 역할인 것으로요. 그러면 이 with문이 어째서 코루틴에 속하는지 잘 모르겠습니다. ------- # 질문 2 2) html.parser 이 질문은 제가 이해한 게 맞는 건지 여쭤보는 질문입니다. beautifulsoup(html, "html.parser") code 부분에서 html을 구문분석할 parser를 "html.parser"로 정한다는 의미인가요? 그리고, HTML parser란 HTML 코드를 읽고 취해서 DOM tree 구조를 생성하는 프로그램이라 이해하면 되나요?? 이 부분은 구글링하여 학습했으나, 강사님의 내포하는 지식과 일치하는지 확인받을려는 질문입니다. ------- # 질문 3 3) await을 넣는 위치 코루틴이란 진입점과 탈출점이 여러 개인 routine인 것으로 이해했고, 그 포인트들이 await과 return으로 만들어진다고 강의를 통해 이해했습니다. 그런데, 왜 이 위치에 await을 썼는가? 라는 의문에는 쉽게 답이 나오지 않는 것 같습니다. from bs4 import BeautifulSoup import asyncio import aiohttp async def fetch(session, url): async with session.get(url) as response: html = await response.text soup = BeautifulSoup(html, 'html.parser') cont_thumb = soup.find("div", "cont_thumb") for cont in cont_thumb: print(cont.find("p", "text_thumb")) 위 코드에서 await은 response.text 앞에 있는데요. await의 위치는 작성자가 임의로 위치할 수 있는 건인지, 아니면 별도로 제가 모르는 내용이 있는 건지 알고 싶습니다. ------- #질문 4 4) config.py의 get_secret() 질문 get_secret function 매개변수 3개를 key, default_value, json_path 를 입력하셨습니다. json_path의 경우, BASE_DIR를 전역변수로 입력하셨기 때문에 함수 인자로 입력하지 않아도 인식된다고 이해하면 될까요? 또한, EnvironmenError의 내용을 보면 이 Error 설명을 보면 Base class for I/O related Errors 나와있는데, 왜 I/O 관련 에러인지 모르겠습니다. 이 Error는 key에 대한 대체값인 default_value가 없는 경우 발생되는 걸로 이해했습니다. CPU가 이 값을 읽는건데 I/O 인가요? 그리고, get_secret() 같은 함수를 작성하실 때 어떠한 흐름으로 작성하시는지 궁금합니다. 작성을 하면서 수정하시는 건지, 아니면 처음부터 이 function은 이 역할을 하고, 이 역할을 위해서 별도의 function을 만들고 라는 방식으로 하시는 건지 입문자로서 궁금합니다. ------- # 질문 5 5) 마지막 질문입니다. 이건 학습 관련 질문입니다. 이번 강의를 마치고, 운영체제와 네트워크 공부를 다시 복습하고, 자료구조와 알고리즘 공부를 할려고 하는데, 프레임워크에 대해서 학습하고 싶습니다. FastAPI를 깊이 공부할지, 아니면 Django를 학습할지 고민입니다. 인프런의 Django 강의를 결제하여 듣고 있으나, 너무 꼼꼼하셔서 그런지 강의가 heavy하네요..ㅠㅠ 어떻게 학습하시는 걸 추천하시나요??? ------- ------- ------- ------- 질문 읽어주셔서 감사합니다.
안녕하세요 강사님? 정말 오랜만에 질문 드립니다 ㅎㅎ 0. 우선 하나 여쭙고 싶은 게, 혹시 멘토링을 진행하시나요? -괜찮으시다면 강의외적으로 몇가지 질문을 드리고 싶어서, 혹시 인프런에서 진행되는 멘토링 처럼, 따로 어디선가 멘토링을 진행하고 계시다면 신청하고 싶어서 여쭤봅니다 ㅎㅎ 1. 혹시 후속강의가 있을까요? 해당 강의에서의 DRF의 기능들은 대체로 기본적인 몇가지 기능들에 대해서 소개해주시는 느낌이 강해서, 백엔드/DRF쪽으로 심화된 강의를 준비하시는 게 있을지 궁금합니다. 2. DRF나 장고관련해서, 강의에는 나오지 않았지만 현업에서 필요한 몇가지 학습 키워드나 책을 추천해주실 수 있으실까요? 마지막으로 감사합니다~ 선생님 강의 덕분에 부트캠프기간이나 끝나고 나서도 장고라는 프레임워크에는 늘 자신이 있더라구요. 감사인사를 꼭한번 드리고 싶었습니다! 감사합니다~