묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
IoC, DI, 그리고 컨테이너 => 이 강의를 듣고 궁금한 점이 생겼습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요, 영한님 스프링 강의를 재밌게 듣고 있는 수강생입니다 :) 다름이 아니라 IoC에 관련된 강의를 듣고 궁금한 점이 생겨 질문글을 남기게 되었습니다. 질문은 총 2가지 입니다. 1. 강의에서 AppConfig가 제어 흐름에 대한 권한을 가지고 있다고 이야기 하셨는데 이 부분이 잘 와닿지 않습니다. ▲ [그림1] AppConfig 소스코드 제가 생각할 때 AppConfig가 제어 흐름에 대한 권한을 가지고 있는 이유는 AppConfig에서 구현 객체, 그리고 의존관계를 어떻게 설정하느냐에 따라 프로그램 내에서 실행되는 로직이 달라지기 때문에 제어 흐름에 대한 권한을 가지고 있다고 이해했는데 이게 맞는건가요? 다른 이유가 있다면 어떤 것이 있을까요?? 2. AppConfig가 실제로 생성되고 사용되는 부분은 MemberApp(또는 OrderApp) 내에 있는 main 메소드 입니다. 그렇다면, AppConfig에도 IoC가 적용되어 결국 main 메소드가 최종적인 제어 흐름에 대한 권한을 가지고 있다고 이해해도 될까요? ▲ [그림2] MemberApp 내의 main 메소드
-
미해결코딩으로 학습하는 GoF의 디자인 패턴
Concrete 빌더에 관한 질문
안녕하세요 강의 잘 듣고 있습니다. 다름이 아니라, 본 강의에선 DefaultTourBuilder 구현체로 빌더 패턴 사용 예시를 보여주셨습니다. 1. 첫 번째 질문으로, 칸쿤 여행의 경우 TourPlan의 모든 멤버 변수에 어떤 값을 할당해야 한다고 가정했을 때, 강의에선 getPlan에서 모든 변수가 제대로 초기화됐는지 체크하는 과정이 생략된 것 같은데 맞을까요? 2. DefaultTourBuilder가 칸쿤 여행과 같이 모든 멤버 변수를 초기화했을 때만 인스턴스를 만들 수 있도록 getPlan에 제약을 걸어놨다면, 본 강의에서 예시로 들었던 당일치기 롱비치 여행은 DefaultTourBuilder로 만들 수 없다고 생각합니다. 여러 방법이 존재하겠지만 강의에서 말씀하신 내용을 되짚어보면 당일치기 여행 인스턴스를 제공하는 ShortTourBuilder를 만드는 게 합리적이란 생각이 듭니다. 강사님의 의견은 어떠신가요? 감사합니다.
-
미해결프로그래밍 시작하기 : 웹 입문 (Inflearn Original)
removeEventListener
이 강의에서 addEventListener 를 통해 만든 클릭함수를 없애고 싶을땐 removeEventListener를 어떻게 사용해야 할까요? logo.addEventListener('click',function(){ alert('안녕하세요! 구글입니다.'); }); 이걸 지우고 싶습니다..
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
react-redux 버전 관련 질문입니다.
리덕스로 로그인을 구현한 후 로그인 되지않는 문제가 생겼었습니다. dispatch 함수가 실행되지만 rootReducer에서 LOG_IN 부분이 실행이 안됐습니다(console.log로 확인) 그래서 useDispatch를 불러온 부분이 문제라고 생각해, react-redux버전을 강의에 맞게 7로 바꾸니 문제가 해결됐습니다. 왜 이런 문제가 발생한건가요..? 추가로 이 강의를 다 들은 후, react-redux를 8버전으로 올리고 싶으면 어디서 변경내역을 확인해야 하나요..?
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
docker-compose-dev.yml 은 어떻게 실행하나요?
배포해주신 교안 대로 docker-compose.yml 과 docker-compose-dev.yml 으로 분리해서 작업했습니다. 그러면 docker-compose -up 을 하면 어떻게 docker-compose-dev.yml 을 가르키게 되는 걸까요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
Last-Modifed 값은 서버에서 어떻게 갱신이 될 수 있나요?
안녕하세요! 좋은 강의 감사합니다. 캐시부분을 쭉 듣다 막연한 궁금증이 생겨 질문드립니다. Last-Modifed은 따로 개발자가 구현하는게 아니면 서버에서 자동으로 설정해준다는데.. 리소스가 마지막으로 수정된 시간을 서버는 어떻게 알 수 있는건지 궁금합니다.. 보통 데이터베이스에 데이터를 저장할때 거의 항상 update_dttm 같은 컬럼을 만들어두고 넣던데 이런 컬럼값을 자동으로 체크하는걸까요??;; 좀 쌩뚱맞은 질문같단 느낌이 드는데 구글링해도 잘 안나와서요.. 너무 궁금해서 여쭤봅니다. 읽어주셔서 감사합니다!!
-
미해결스프링 핵심 원리 - 기본편
싱글톤 스코프, 프로토타입 스코프 비교 및 의문점 있습니다.
안녕하세요. 강의 잘 듣고 있습니다. 이와 같은 코드가 강의중에 등장합니다. 앞전에는 싱글톤도 동일한 패턴으로 코드를 작성했습니다. 코드에 보면 첫 줄에서 스프링 컨테이너가 매개변수로 받은 클래스를 스프링 빈으로 등록하게 됩니다. 여기에서 의문이 생깁니다. 싱글톤의 경우 첫줄, 스프링 컨테이너가 매개변수로 넘어온 클래스를 스프링 빈으로 등록할 때, 빈을 생성하고 의존관계 주입까지 마칩니다. 그 증거로 PostConstruct 어노테이션이 붙은 init 메서드가 실행되죠. 반면 프로토타입의 경우 첫 줄에 스프링 컨테이너가 매개변수로 넘어온 클래스를 스프링 빈으로 등록하는 코드가 분명 존재함에도 불구하고, 실질적으로는 스프링 빈 등록, 의존관계 주입 둘 다 되지 않은 것으로 추정됩니다. 그 증거는 @PostConstructor 어노테이션이 붙은 init 메서드가 첫 줄의 동작이 끝나고 실행되는 것이 아닌, 스프링 컨테이너에서 프로토타입 클래스의 빈을 조회할 때 실행 됩니다. 즉, 강의에서 말씀하신 것과 같이 프로토타입 스코프의 경우 빈 조회가 발생했을 때, 프로토타입 빈이 생성되고 그에 관련된 의존관계가 주입된다는 점을 확인했습니다. 그렇다면 첫 줄에 스프링 컨테이너가 프로토타입 클래스를 빈으로 등록하는 명령어는 다른 동작을 하고 있다는 것인데, 실제로 어떤 동작이 이루어지는지 궁금합니다. 이에 대한 제 짧은 소견으로는 뒤에서 배우는 provider, proxy 등과 유사한 동작을 하는 빈이 등록되고, 스프링 컨테이너에서 프로토타입 빈을 조회할 때, 실제 빈 생성 및 의존관계 주입이 이루어지는 것인가 싶습니다. 감사합니다.
-
미해결
아나콘다 실행이 안 돼요
대체 뭐가 문제일까요?
-
미해결코로나맵 개발자와 함께하는 지도서비스 만들기 1
(index):121 Uncaught ReferenceError: kakao is not defined at (index):121:10
목적지를 입력하세요 부분에 경희대학교를 포함한 어떤것을 입력해도 zoom이 되기는 커녕 마커도 뜨지 않습니다. f12를 눌러 콘솔에 들어가보면 제목과 같은 오류가 뜨고 (index):121 을 눌러보면 let ps = new kakao.maps.Services.Places(); 에서 new kakao.maps.Services.Places(); 부분에 빨간줄이 그어 있는것을 확인할 수 있습니다. 몇번을 확인해도 코드에서 문제점을 찾지 못했습니다. 어떤 부분에 문제가 있는지 알려주시면 감사하겠습니다!! 혹시 카카오 api 키 발급 및 적용에서 잘못이 있을까여? REST Api를 사용했고 플랫폼에서 Web에 https://localhost:3000도 등록했습니다. 다음은 index.ejs 코드입니다 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"> <title>myfirstmap</title> <link rel="stylesheet" href="/stylesheets/style.css"/> <script type="text/javascript" src="https://openapi.map.naver.com/openapi/v3/maps.js?ncpClientId=a6xx165w2v"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <script type="text/javascript" src="//dapi.kakao.com"/v2/maps/sdk.js?appkey=6ae93f30966074b8be538be3257f65ac&libraries=services"></script> </head> <body> <div id="navbar">myfirstmap</div> <div id="infoBox"> <div id="infoTitle">현재날짜</div> <div id="infoContent">2022.05.03</div> </div> <div id="search"> <input id="search_input" placeholder="목적지를 입력해 주세요" /> <button id="search_button">검색</button> </div> <div id="current">현재 위치</div> <div id="map" style="width:100%;height:100vh;"></div> <script type="text/javascript" src="/data/data.js"></script> <script> var mapOptions = { center: new naver.maps.LatLng(37.3595704, 127.105399), zoom: 10 }; var map = new naver.maps.Map('map', mapOptions); var markerList =[]; var infowindowList =[]; for (var i in data){ var target = data[i]; var latlng = new naver.maps.LatLng(target.lat, target.lng); marker = new naver.maps.Marker({ map : map, position : latlng, icon : { content : "<div class='marker'></div>", anchor: new naver.maps.Point(12, 12) }, }); var content = `<div class='infowindow_wrap'> <div class='infowindow_title'>${target.title}</div> <div class='infowindow_content'>${target.content}</div> <div class='infowindow_date'>${target.date}</div> </div>` var infowindow = new naver.maps.InfoWindow({ content : content, backgroundColor : "#00ff0000", borderColor : "#00ff0000", anchorSize : new naver.maps.Size(0, 0) }) markerList.push(marker); infowindowList.push(infowindow); } for (var i = 0, ii = markerList.length; i < ii; i++){ naver.maps.Event.addListener(map, "click", ClickMap(i)); naver.maps.Event.addListener(markerList[i], "click", getClickHandler(i)); } function ClickMap(i){ return function(){ var infowindow = infowindowList[i]; infowindow.close() } } function getClickHandler(i){ return function(){ var marker = markerList[i]; var infowindow = infowindowList[i]; if(infowindow.getMap()){ infowindow.close(); } else{ infowindow.open(map, marker) } } } let currentUse = true; $('#current').click(() => { if('geolocation' in navigator){ navigator.geolocation.getCurrentPosition(function(position){ const lat = position.coords.latitude; const lng = position.coords.longitude; const latlng = new naver.maps.LatLng(lat, lng); if (currentUse){ marker = new naver.maps.Marker({ map : map, position : latlng, icon : { content : '<img class="pulse" draggable="false" unselectable="on" src="http://myfirstmap.s3.ap-northeast-2.amazonaws.com/circle.png">', anchor: new naver.maps.Point(11, 11), } }); currentUse = false; } map.setZoom(14, false); map.panTo(latlng); }); }else { alert("위치정보 사용 불가능"); } }); let ps = new kakao.maps.services.Places(); let search_arr = [] $("#search_input").on("keydown" ,function(e){ if (e.keyCode === 13) { let content = $(this).val(); ps.keywordSearch(content, placeSearchCB); } }) $("#search_button").on("click", function (e){ let content = $("#search_input").val(); ps.keywordSearch(content, placeSearchCB); }) function placeSearchCB(data, status, pagination) { if (status === kakao.maps.services.Status.OK){ let target = data[0]; const lat = target.y; const lng = target.x; const latlng = new naver.maps.LatLng(lat, lng); marker = new naver.maps.Marker({ position: latlng, map: map }) if (search_arr.length == 0){ search_arr.push(marker) }else{ search_arr.push(marker) let pre_marker = search_arr.splice(0,1); pre_marker[0].setMap(null); } map.setZoom(14, false); map.panTo(latlng); }else{ alert("검색결과가 없습니다.") } } </script> </body> </html>
-
미해결팀 개발을 위한 Git, GitHub 입문
Git 강의 너무 잘 듣고 있습니다~
실무 하면서 기본적인 내용 외에는 익히기 어려웠는데, 너무 잘 듣고 있습니다. 혹시 강의자료 PPT 공유해 주실수 있을지 문의드립니다. 이메일 : itboxer91@gmail.com
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요.
안녕하세요! 강의를 듣다가 아무리 자료를 찾아봐도 어려운부분이 있어 질문을 드립니다. 16을 구하기 위해 첫줄의 숫자가 각각 [1,3,3,1]번씩 곱해진다는것은 이해가 되었는데 1 3 3 1을 바로 조합 3C0, 3C1, 3C2, 3C3 으로 연결시키는 부분이 이해가 잘 안됩니다ㅠㅠ.. 3C0, 3C1, 3C2, 3C3 이 계산하면 각각 1,3,3,1이 된다는것은 알겠지만 단순히 계산값이 아니라 어떠한 공식이 있는건가요?
-
미해결스프링 핵심 원리 - 고급편
실무에서 몇 개 정도의 어떤 어즈바이저를 적용해서 사용중인가요?
영한님, 안녕하세요. DB접근기술 강의를 듣고나니, 스프링 핵심원리 강의들이 다시 떠올라서 핵심원리 복습을 하고 있습니다. 스프링 AOP 에서 여러 어드바이저를 적용해도 프록시는 하나만 생성되어 사용된다 라고 콕 찝어서 설명을 해주셨는데요. 혹시 소속되어 계신 배민이나 그 전에 경험하신 시스템에서 주로 몇 개 정도의 어드바이저를 적용했고, 대략 어떤 부가기능들이 적용되어 있었는지 알 수 있으면 좋겠습니다. (참고용으로요) 로강을 위해 데이터베이스에 정보를 기록하는 부가기능들도 본 적이 있는데, 이런 부가기능들이 모이면 시스템 성능에 영향을 줄 수 있을텐데요. 보통 성능에 문제가 생길까봐 AOP 등록을 해도 될 지 고민되는 경우가 많은데 이를 어떻게 판단할 수 있을까요? 너무 애매한 질문을 드린 건 아닌가 모르겠네요. 작은 도움될만한 정도라도 답변을 주시면 감사하겠습니다.
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
안녕하세요 aws를 대신해서 사용하는데
이전 강의에서 docker 9000번 포트만 남기고 설치를 했었을 떄 아이피:90000 실행이 안되서 aws에서 인바운드 규칙에 9000번 포트를 넣으니 실행이 되더라고요. 이번 강의 7:30초부터 보면 80이 기본값이기 떄문에 ip만 넣어도 된다고 하는데 이역시 실행이 안되서 인바운드에 추가했는데 aws만 이렇게 매번 넣어야 하는건가요?
-
미해결더 개발자, 인터뷰 가이드
솔루션 오류
booleans 배열로 값이 존재 유무만 true / false 로 나타내는 경우 중복 값에 대해서는 처리가 불가 합니다. 예를들어 문제에 50개의 랜덤한 숫자가 나온다고 하였으니 [2,2,2,2,...2] 와 같이 모든 숫자가 2로 나오는 경우 현재 솔루션의 결과는 [2,0,0,0,0....,0]이 나와 잘못된 답이 나옵니다. boolean 배열보다 int 배열로 중복값이 몇개 나왔는지 표기한 다면 올바른 답이 나올것 같습니다.
-
해결됨사물인터넷 통신은 내 손에 (Arduino, MQTT, Nodejs, MongoDB, Android,VS Code)
$.ajax{} 구문 안에 url을 입력했는데 접속이 안되면 어떻게 해결해야되나요?
루프백 주소가 아닌 모스퀴토 서버 ip:3000/MQTT.html 페이지는 열립니다. 밑에 restfull service 에 LED_ON 버튼을 누르면 오류가 떠서 인터넷으로 상세하게 오류 출력했는데 이렇게 뜹니다. html 파일 $.ajax 괄호안에 url을 입력했는데 이렇게 뜹니다. url이 작동 안하면 어떻게 해결해야 될까요? 위의 소켓 방식은 잘 작동했습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
[섹션4-뒤집은 소수]에서 변수 질문 있습니다
안녕하세요 강의 잘 듣고 있습니다 섹션4에 2. 뒤집은 소수에서 질문이 있습니다 아래 a번과 같이 변수 res를 사용하면 결과값이 잘 나오는데요 b번과 같이 변수없이 그냥 x의 결과를 출력하면 숫자로 나오고 적용이 하나도 안되네요 여기서 꼭 변수를 사용해야 하는 이유가 궁금합니다 제가 이 문제를 혼자 풀면 변수를 생성하지 않을 것 같아서요 a번 for(let x of arr){ let res = x.toString().split('').reverse().join(''); console.log(res); } b번 for(let x of arr){ x.toString().split('').reverse().join(''); console.log(x); }
-
미해결도커 쓸 땐 필수! 도커 컴포즈
depends_on 설정
restart 옵션말고, yaml파일에 depends_on 옵션을 주는 건 대안이 안되나요??
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
compose-up mysql 관련 에러 뜨시는 분들
아래가 마주한 에러 및 경고 상황이며, 제가 해결한 방법 공유하는 내용입니다. 1. –initialize specified but the data directory has files in it. Aborting.2. Can't change permissions of the file 'ca-key.pem' 제 개발 운영체제는 다음과 같았습니다. - OS : Windows 10- IDE : VSC- Docker : V 20.10.14- Docker Desktop : 4.7.1 (77678)- Github Reopsitory : https://github.com/unchaptered/22-05-docker-react-proxy 1번 문제 원인 (추정) 1. Docker + MySQL 설정2. Windows 10 / Home 환경일 것3. 어떤 문제로 1번 이상 mysql_data 을 지웠을 경우4. 모든 캐시를 지우고 docker-compose 를 재시작 한 경우 2번 문제 원인 (추정) 1. MySQL v5.7 으로 명시한 분들 1번 Initial 문제 해결방법 / 우려 / 원인 / 참조글 이 포함되어있습니다. [해결방법]docker-compose.yml 파일에서 volume 항목 주석 처리 할 것 [우려]실제로 백앤드 개발환경에서 작업을 하는 경우에는 코드 수정 등으로 테스트를 다시 해야 되는 경우가 있습니다. 또한 개발 기간이 1주만 넘어가도 정크 데이터가 많이 쌓입니다. 이러한 경우 저는 데이터를 지우는 과정을 따로 하는데요.결국 개발 환경에서 Volume 이 주는 사이드 이펙트의 일부가 DB 를 지우는 것이고 크게 문제되지는 않을 것이라고 생각합니다. 실제 저희가 배포하게 될 버저넹서는 RDS 를 사용할 것이기 때문입니다. [원인]MySQL 초기화 과정부터 살펴보면,일반적으로 *.exe 파일로 설치하게 되면 이 부분이 명시적으로 드러나지만, 커맨드 쉘 혹은 컨테이너 등을 거치게 되면 이 부분을 최초에 바로 넣어주고 실행하게 되는 것 같습니다. 그러면 설치 과정에서 환경변수 파일들이 생성되고 사용가능한 상태에 도달하는 것 같습니다. 그 결과로 한번 docker-compose up 을 하고나면 ~/mysql/ 안에 새로운 폴더가 생기는 것을 체크하실 수 있습니다.다만 이 친구의 생성은 volume 옵션과 무관하게 생기는데(옵션을 지워도 생김) 왜 로컬 환경에 파일이 생성되는 지는 알 수 없습니다. 그러한 초기화 환경 에서 강의에서는 volume 옵션을 사용하여 변화가 되는 부분만 실행되게 만들어주신 것 같습니다. 결과적으로 DROP DATABASE IF EXISTS 구문은 수정하지 않을 시에, 실행 되지 않게 되어서 운영환경에서 데이터가 보존되는 것입니다. 문제가 되는 지점은 여기인데요.VOLUME 에 지정된 파일은 docker 가 관리하는 컨테이너 파일이 아니라, 파일 시스템상 디랙토리 로 취급됩니다. 자 그러면 이 부분이 왜 문제가 되었는가 추측을 해보면,특정한 이슈가 있으셔서 컨테이너를 지우고 다시 만든 경우 가 있다고 한다면 아래 세 가지 코드로 깔끔하게 지울 수 있습니다. 1. docker-compose down --volumes2. docker system prune --volumes3. docker rmi $(docker images -q) 이렇게 되면, 이미지/컨테이너/볼륨 이 전부 제거가 되는데요. 이렇게 한 번 제거를 하고 나서 docker-compose up 을 시키고 나면 그떄부터 -initial ~~~ 에러가 지긋지긋하게 저를 따라다닙다. 관련된 내용이 Stackoverflow 에 나와있었으나,솔직히 도커, 리눅스 등에 대한 이해도도 떨어져서 솔루션을 찾을 수 없었습니다. 그러나 강사님께서 제공해주신 교안 파일 및 github repo 를 보면 mysql 은 RDS 를 사용하기 때문에 이러한 문제를 외면해도 되는 것일까 라는 방법을 생각했습니다. 결과적으로 compose-docker.yml 에서 mysql: volume: 항목을 전부 주석 처리해주시면 이 문제가 발생하지 않습니다. [참조글] Stackoverflow - docker-compose volume 에러 (아마도 같은 수강생 분이 남긴 질무닝 아닐까 싶네요 하하)programmerah - Linux error -initialization 에러 2번 문제 [해결방법]mysql: 5.7 을 mysql:5.7.16 으로 명시 [원인]mysql: 5.7 이라고 적게되면,그 뒤에 상세 버전을 가장 최신 으로 설치하게 되는데 그 버전에서 경고 문구가 뜬다는 내용이 있습니다. 혹시 경고 문구가 찜찜하시다면 아래 참조 포스트 혹은 구글링 해보시는 것을 추천드립니다. [참고글]Github Issue - Can't change permissions of the file 'ca-key.pem'
-
미해결도커 쓸 땐 필수! 도커 컴포즈
docker run명령어는 언제 사용하나요?
docker run 명령어를 사용해 여러개의 컨테이너를 띄운다 한들 하나의 port로 맵핑해야되서 사용하지 못하는데, 언제 사용하는지 궁금합니다. 앞단에 로드밸런서 같은? 게 있는 경우에 주로 사용하나요?
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
webapp에서 member와 classes 말인데요
안녕하세요 수업하실때 경비실 직원에게 홍길동이 몇동 몇호냐고 물어보면 경비실 직원에 member라는 장부를 뒤져서 알려준다고 하셨는데, 그래서 member 폴더의 용도는 저런거구나 하고 이해를 하고 넘어갔는데요 근데 그 뒤에서 classes를 설명하실때 classes에서도 경비실 직원이 장부를 뒤져서 홍길동이 어딨는지를 알려준다는 식으로 말하셔서 둘의 차이가 잘 와닿지가 않네요.. 정확히 어떤 차이인지 더 자세히 알려주실수 있을까요?