묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
객체를 리턴해도
삭제된 글입니다
-
미해결웹 게임을 만들며 배우는 자바스크립트
리팩토링에 관한 질문입니다.
안녕하세요 제로초님 지뢰찾기가 어려워서 쭉 복습중인데, 드디어 조금 갈피가 잡혀서 기쁩니다. 좋은 강의 감사합니다! 수업시간에 따라한 코드리팩토링을 시도해보았어요. 그런데 이벤트단위로 쪼개서 리팩토링을 하는 게 좋을지, 아니면 세세하게 쪼개서 함수로 만들지 고민이 되어요. 질문 어떤 식이 다시 봤을 때 이해하기 쉬울까요? 시도한 리팩토링은 괜찮나요? var tbody = document.querySelector('#table tbody'); var dataset = []; var 중단플래그 = false; var 열은칸 = 0; var 코드표 = { 연칸: -1, 물음표: -2, 깃발: -3, 깃발지뢰: -4, 물음표지뢰: -5, 지뢰: 1, 보통칸: 0 }; var 줄; var 칸; var 주변; function 지뢰위치() { var 칸채우기 = Array(hor * ver).fill().map(function (인덱스) { //가로 * 세로 return 인덱스; }); //자바스크립트는 0부터 센다 var 지뢰만들기 = []; while (칸채우기.length > hor * ver - mine) { var 지뢰배치표 = 칸채우기.splice(Math.floor(Math.random() * 칸채우기.length), 1)[0]; 지뢰만들기.push(지뢰배치표); } }; function 깃발법칙() { if (e.currentTarget.textContent === '' || e.currentTarget.textContent === 'X') { //빈칸이거나 X일 때 e.currentTarget.textContent = '!'; //깃발과 물음표는 데이터일 필요가 없다. 화면에 표시하는 용도니까 e.currentTarget.classList.add('flag'); if (dataset[줄][칸] = 코드표.지뢰) { dataset[줄][칸] = 코드표.깃발지뢰; } else { dataset[줄][칸] = 코드표.깃발; } } else if (e.currentTarget.textContent === '!') { //느낌표라면 e.currentTarget.textContent = '?'; //우클릭 한 번은 느낌표, 두 번은 물음표 e.currentTarget.classList.remove('flag'); e.currentTarget.classList.add('question'); if (dataset[줄][칸] = 코드표.깃발지뢰) { dataset[줄][칸] = 코드표.물음표지뢰; } else { dataset[줄][칸] = 코드표.물음표; } } else if (e.currentTarget.textContent === '?') { //물음표라면 e.currentTarget.classList.remove('question'); if (dataset[줄][칸] === 코드표.물음표지뢰) { e.currentTarget.textContent = 'X'; dataset[줄][칸] = 코드표.지뢰; } else { e.currentTarget.textContent = ''; dataset[줄][칸] = 코드표.보통칸; } } }; function 오픈법칙() { dataset[줄][칸] = 1; //배열 안에 숫자를 넣자(기본설정 = 0) var 주변 = [dataset[줄][칸-1], dataset[줄][칸+1]]; //왼쪽, 오른쪽 확인 if (dataset[줄-1]) { //윗줄 검사 주변 = 주변.concat([dataset[줄-1][칸-1], dataset[줄-1][칸], dataset[줄-1][칸+1]]); } else if (dataset[줄+1]) { //아랫줄 검사 주변 = 주변.concat([dataset[줄+1][칸-1], dataset[줄+1][칸], dataset[줄+1][칸+1]]); } var 주변확인 = 주변.filter(function(v) { return [코드표.지뢰, 코드표.깃발지뢰, 코드표.물음표지뢰].includes(v); //모든 지뢰를 세자 } }; function 주변법칙() { if (주변확인 === 0) { console.log('주변을 엽니다'); var 주변칸 = []; if (tbody.childre[줄-1]) { 주변칸 = 주변칸.concat([ tbdoy.children[줄-1].children[칸-1], tbdoy.children[줄-1].children[칸], tbdoy.children[줄-1].children[칸+1] ]); if (tbody.childre[줄-1]) { 주변칸 = 주변칸.concat([ tbdoy.children[줄].children[칸-1], tbdoy.children[줄].children[칸+1] ]); if (tbody.childre[줄-1]) { 주변칸 = 주변칸.concat([ tbdoy.children[줄+1].children[칸-1], tbdoy.children[줄+1].children[칸], tbdoy.children[줄+1].children[칸+1] ]); } //열려있는 칸을 또 열릴 필요없게 수습하자 dataset[줄][칸] = 1; //배열 안에 숫자를 넣자(기본설정 = 0) 주변칸.filter(function(v) {return !!v}).forEach(function(옆칸) { //칸 위치 파악 var 부모tbody = e.currentTarget.parentNode.parentNode; var 부모tr = e.currentTarget.parentNode; //몇 줄? var 옆칸줄 = Array.prototype.indexOf.call(부모tbody.children, 부모tr); var 옆칸칸 = Array.prototype.indexOf.call(부모tr.children, e.currentTarget); //e.currentTarget = td if (dataset[옆칸줄][옆칸칸] !== 코드표.연칸) { 옆칸.click(); } }); } } //지뢰를 제외한 모든 칸이 열리면 승리함 if (열은칸 === hor * ver - mine) { document.querySelector('#result').textContent = '승리하셨습니다~!'; } } }; function 지뢰만드는규칙() { for (var k = 0; k < 지뢰만들기.length; k++) { //배열은 0부터 시작하기에 -1이 나와선 안 된다 var 세로 = Math.floor(지뢰만들기[k] / ver); var 가로 = 지뢰만들기[k] % ver; tbody.children[세로].children[가로].textContent = 'X'; //지뢰를 심는다, 화면 dataset[세로][가로] = 코드표.지뢰; //데이터, 화면과 데이터는 일치해야 됨! } }; //지뢰찾기 실행 document.querySelector('#exec').addEventListener('click', function() { //이전 게임 초기화 tbody.innerHTML = ''; document.querySelector('#result').textContent = ''; dataset = []; 열은칸 = 0; 중단플래그 = false; //input의 아이디들 var hor = parseInt(document.querySelector('#hor').value); var ver = parseInt(document.querySelector('#ver').value); var mine = parseInt(document.querySelector('#mine').value); //지뢰위치 지뢰위치(); //지뢰테이블 for (var i = 0; i < ver; i += 1) { //2차원 배열, 세로 만들기 var arr = []; //지뢰표에 배열을 깔자 var tr = document.createElement('tr'); dataset.push(arr); for (var j = 0; j < hor; j += 1) { //가로 만들기 arr.push(코드표.보통칸); var td = document.createElement('td'); //오른쪽 클릭방지 td.addEventListener('contextmenu', function(e) { e.preventDefault(); if (중단플래그) { return; } //칸 위치 파악 var 부모tbody = e.currentTarget.parentNode.parentNode; var 부모tr = e.currentTarget.parentNode; //몇 줄? 줄 = Array.prototype.indexOf.call(부모tbody.children, 부모tr); //배열이 아니여도 indexOf()를 쓸 수 있다 칸 = Array.prototype.indexOf.call(부모tr.children, e.currentTarget); //e.currentTarget = td //깃발법칙 깃발법칙(); ); //클릭 시, 주변 지뢰 파악 td.addEventListener('click', function(e) { if (중단플래그) { return; } //칸 위치 파악 var 부모tbody = e.currentTarget.parentNode.parentNode; var 부모tr = e.currentTarget.parentNode; //몇 줄? 줄 = Array.prototype.indexOf.call(부모tbody.children, 부모tr); //배열이 아니여도 indexOf()를 쓸 수 있다 칸 = Array.prototype.indexOf.call(부모tr.children, e.currentTarget); //e.currentTarget = td if ([코드표.연칸, 코드표.깃발, 코드표.깃발지뢰, 코드표.물음표지뢰, 코드표.물음표].includes(dataset[줄][칸])) { return; } //지뢰의 유무확인 e.currentTarget.classList.add('opend'); 열은칸 += 1; if (dataset[줄][칸] === 코드표.지뢰) { e.currentTarget.textContent = '펑'; document.querySelector('#result').textContent = '다시 도전하세요!'; 중단플래그 = true; } else { //지뢰가 없다면 dataset[줄][칸] = 1; //배열 안에 숫자를 넣자(기본설정 = 0) 주변 = [dataset[줄][칸-1], dataset[줄][칸+1]]; //왼쪽, 오른쪽 확인 오픈법칙().length; e.currentTarget.textContent = 주변확인 || ''; //숫자 0은 표시가 되지 않도록! dataset[줄][칸] = 코드표.연칸; //지뢰없는 부분을 한꺼번에 열리도록 만들자 주변법칙(); ); tr.appendChild(td); //td는 tr에 속하고 } tbody.appendChild(tr); //tr은 tbody에 속한다 } //지뢰 심기: 규칙을 찾아서 랜덤숫자의 위치에 지뢰를 배치시키자 지뢰만드는규칙(); });
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요 시퀀스관련 문의드립니다.
안녕하세요 언제나 강의 잘 듣고 있습니다. 오라클을 사용하고 서버가 여러대인 상황에서 시퀀스 사용에 대해 질문이 있어서요 시퀀스가 유니크한것을 보장하기도 하지만 디비에 인서트되는 순서 보장을 하기 위해서 사용하기도 하는데 allocationsize를 사용하게 될 경우 서버간 할당받는 시퀀스 영역대가 달라 순서보장이 안될것 같아서요, 혹시 이런 경우는 어떻게 처리할까요? 그리고 오라클 디비를 사용하는데 Identity 전략을 사용하면 어떤일이 발생하나요?
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
Persistent Connection 질문입니다.
안녕하세요 김영한님. Persistent Connection 질문입니다. 제가 간단한 웹 프로젝트를 운영하고 있는데, 자동으로 Persistent Connection가 적용된 것처럼 보입니다. 원래 따로 설정을 해주어야 적용이 되는 건지, g유니콘이나 그런 앱에서 알아서 처리를 해주는 건지, HTTP 자체적으로 기본설정이 되어 있는 건지, 궁금합니다!
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
.jsx로 저장해도 되나요?
안녕하세요, 선생님 youtube에서 기본강의 보고 찾아온 학생입니다. 코드를 보면 jsx문법을 사용하고 있는 것 같은데 .js를 .jsx로 저장해도 문제가 없을까요? 어느 날부터 .js 파일을 저장하면 사진처럼 < 다음에 자동 줄 바꿈이 되어버리는 오류가 있어서요. prettier 확장 파일도 지워보고 재설치 후 세팅도 바꾸면서 이유를 찾아보려고 했는데 원인을 모르겠네요.. .js가 아닌 .jsx로 저장하면 자동으로 정렬되는 현상이 없는데 왜 그럴까요?
-
미해결스프링 핵심 원리 - 기본편
@autowired 가 이해가 잘 안가는데요
질문내용들을 읽어보니 저랑 비슷하게 질문한글들을 몇개 봤는데 이해가 아직 앋가서요 ㅠㅠ testBean 클래스는 지난강의에 알려주셨던 임의의 클래스를 스프링이 생성해서 스프링빈에 등록된다는건 이해했습니다 !! 근데 @bean 어노테이션이 없는데 autowired 만으로도 bean 객체가 생성되는건가요..? ======================================================================================================================================= 잠깐 일중에 생각을 좀 해봤는데요 !! TestBean 클래스 자체가 빈객체라고 보면 MemberSerivceImpl 클래스 에서 필요한 MemberRepository를 autowired로 스프링이 자동 주입해주듯이 TestBean 클래스에서 autowired 어노테이션이 붙은 애들도 자동주입해주는거라 보면 될거같은데 맞게 이해한건가요..?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
인피니트 스크롤링 반복
강좌 내용대로 적용했는데, 스크롤을 하단으로 내리면, 총 게시물 숫자가 50이 될때까지 request, success가 5번 반복됩니다. 그리고 게시물이 추가될 때마다 스크롤이 젤 하단에 머물어 추가된 게시글 젤 하단에 스클롤이 멈춰 있습니다. 이유가 뭘까요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
nest js 입문 관련 질문입니다.
로초쌤 덕분에 자신감이 생기고 있습니다. 감사의 말씀을 항상 드립니다. 다름이 아니라 포폴용으로는 블로그 추천하시기도 해서 Nest/Next 조합으로 블로그를 만들려고 하는데, 내친 김에 Typescript도 같이 배우려고 합니다. ORM을 기존엔 sequelize를 썼는데, 이번엔 typeorm이나 prisma 둘 중 하나를 시도하려고 하는데 블로그용으로 어떤거를 더 추천하는지 여쭤보겠습니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
알수 없는 오류...
안녕하세요~ John Ahn 강사님강사님의 강좌를 보고 학습중인 학생입니다.다름이 아니라 잘되다가 문제가 생겼습니다..처음엔 //eslint-disable-next-line 을 사용한 후 잘 되는듯 하더니.. 마지막강의를 테스트 하는도중 위의 사진과 같은 에러가 떴는데 왜 그런지 알고 싶습니다..(오류메세지대로 확인해봐도 노드모듈이 왜...크리에이트프록시미들웨어가 왜 함수가 아닌지....도통 감을 못잡겠습니다. 뭘 잘못건드린건지.. 오타가있는건지...)긍정적인 검토 부탁드리며, 답글 기다리겠습니다.github 주소 : https://github.com/kebin0613/Node-Study.git
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프라이머리키가 안떠요 ..
강사님처럼 pk값과 같이 가져오는게 안되네요 .. 왜그런걸까요?? 프라이머리키도 같이 있는게 떠야하는데,... 안뜨구... 저는 심지어 주황색으로 어노테이트 북마크도 되지 않습니다.. 어노테이트 클릭도 못하게 되어있어요 검은색 드라큘라 바탕은 강사님 수업을 캡쳐한것이고 흰색바탕은 제가 실행한걸 캡쳐한거에요!
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
셀단위 이동이 아닐때의 구현 질문
안녕하세요! 강의를 보던 중 궁금한 점이 생겨 글을 남기게 되었습니다. 이번 강의에서 만드신 게임의 동작방식을 보면 플레이어가 셀단위로 이동을 하는걸 알 수 있는데요. 이렇게 셀단위로 이동할 경우 서버에서의 충돌체크나 AI의 길찾기를 모두 셀단위를 기준으로 하게 되어 간편하게 할 수 있는것 같습니다! 그런데 이런 방식이 아니라 Part#4에서 만드셨던것처럼 자유롭게 케릭터가 이동 가능한 경우, 서버에서의 충돌처리나 이동가능 체크, 길찾기는 어떤방식으로 하게 되나요? 가장 단순하게 생각하면 셀을 아주 미세하게 쪼개서 대량으로 만들고 케릭터의 크기만 키우는 방법이 있을것 같은데요. (셀 간의 간격이 좁으므로 셀단위 이동이라는 느낌이 안들게 되겠죠) 이렇게 할 경우 너무 많은 셀을 만들게 되어 메모리는 그렇다 쳐도 AI의 길찾기 속도 저하등 퍼포먼스 문제가 발생하여 일반적으로는 사용되지 않을것 같습니다. 그렇다면 Part#4와 같은 게임에서는 어떤 방식을 사용하여 처리하는 지가 궁금합니다. (충돌처리 방법, 서버 맵데이터를 뽑는 방법 등등..) 내용이 광범위 하다면 검색 키워드나 관련 정보의 URL이라도 부탁드리겠습니다. 감사합니다!
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
'tooltip' 오류
m = folium.Map(location=[lat, long], zoom_start=12) folium.Marker([37.5545, 126.867], tooltip="해법수학").add_to(m) m 위와 같은 코드 작성시에, TypeError: __init__() got an unexpected keyword argument 'tooltip' 이와 같은 오류가 생깁니다. conda install -c conda-forge folium 이대로 설치도 했고, 혹시나 업데이트가 안되어 있나해서 업데이트도 했는데 동일 오류가 발생합니다. 어떻게 해야 해결할 수 있을까요? 답변 미리 감사드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
H2서버 초기화 문제
강사님 H2 DB가 쿼리를 INSERT할때마다 초기화가 되네요 !혹시 H2에 설정을 해야하는 부분이 있을까요? 원래대로라면 ID 1,2 이렇게 차례대로 들어가야 하는데 INSERT할때마다 초기화가 됩니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
67번 출력 설명이 잘못되어 있습니다.
최소 비용 대신 총 가지수를 출력하라고 되어 있습니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
채점할때 마지막 케이스에서 자꾸 4가 출력이 되어서 오답처리가 됩니다
확인해보니 31번째 인덱스일때 카운트가 하나 올라가는데 어떤 부분에서 잘못된건지 파악을 잘 못하겠습니다ㅠㅠㅠ // 19. 분노 유발자 #include <iostream> using namespace std; int main() { int n, arr[100] = { 0, }, cnt = 0, flag; cin >> n; for (int i = 0; i < n; i++) cin >> arr[i]; for (int i = 0; i < n - 1; i++) { flag = 0; for (int j = i + 1; j < n; j++) { if (arr[i] < arr[j]) { flag = 1; break; } } if (!flag)cnt++; } cout << cnt; }
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
인스턴스를 사용하지 않을 때는 중지시켜놓아야 크레딧이 안깎기나요?
안녕하세요? 평소에 인스턴스를 사용하고 나서 다음 사용하기 전까지는 중지시켜야하나요? 아니면 그냥 계쏙 켜놓으면 되나요? 감사합나다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
postman에서 보낼 때 오류가 발생했습니다....
제가 쓴 형식에 오류는 없었던 것 같은데 왜 이런 오류가 뜰까요..? 현재 학습 중인 github주소까지 포함해서 보냅니다! https://github.com/CJavaPython/inflearn_react_ex_1
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
런 실행 에러 ㅠㅠ
삭제된 글입니다
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
idle에서의 오류 문의드려요!
jupyter 노트북으로 입력했을때는 오류가 없는데 파이썬 idle(python 3.7.0 shell)에 이들을 입력하니 다음과 같은 오류가 납니다. 이는 신경 안써도 될까요??
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
F1 스코어 질문이요!
F1 스코어는 정밀도와 재현율이 어느 한쪽으로 치우치지 않을때 좋은 값을 가진다고 설명해주셨는데 예제의 결과 값을 보면은 0.42랑 0.45를 비교해보면은 0.45 가될때 정밀도로 더 치우치게 되더라구요.. F1값이 왜 더 커지게 되는건가요 ? 0.45랑 0.48을 비교하더라도 정밀도와 재현율이 정밀도로 더 크게 치우치게 되는데 F1값이 더크게 되는데 의문이 생겨 질문 드립니다. ! 치우친다는 말의 의미가 궁금합니다.. F1이라는것을 식으로 계산해보면은 증가한다는것을 이해했습니다. 하지만 치우친다는것은 두 값의 차이가 날때를 치우친다고 저는 이해를 하고 예제 데이터를 보았는데 값이 차이가 커졌지만 F1이 증가하는 현상을 볼수 있었습니다. 치우친다는것이 정확하게 어떤 의미인지 알고싶습니다 ! 읽어주셔서 감사합니다.