묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결따라하며 배우는 TDD 개발 [2023.11 업데이트]
강의 완료 다하고 선생님강의들으며 만들었던 유투브클론강의에 적용시킬려구합니다
៖여기서 tdd 적용시킬려면 controller 폴더를 만들어서 api하나당 exports 할수있게 만드는 방법 뿐인가요? 그리고 new Comment() 해서 만든 저 데이터쿼리문은 tdd할땐 create로 바꿔줘야하나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
정적 팩토리 메서드 작성
@Entity @DiscriminatorValue("B") @Getter @Setter public class Book extends Item { private String author; private String isbn; public static Book createBook(String name, int price, int stockQuantity, String author, String isbn) { Book book = new Book(); book.setName(name); book.setPrice(price); book.setStockQuantity(stockQuantity); book.setAuthor(author); book.setIsbn(isbn); return book; } } setter들을 최대한 줄이고자 위와 같이 정적 팩토리 메서드를 작성했습니다. 그런데 결국 Book 객체를 만들기 위해선 createBook안에 setter가 필요하게 되더라구요 그래서 setter을 닫으면서 정적 팩토리 메서드를 작성하기 위한 두가지 방법이 생각났는데요 첫 번째는 생성자를 protected으로 만들어놓고 정적 팩토리 메서드에서 setter가 아닌 생성자로 객체를 생성하는 방법이고 두 번째로 setter의 접근 권한을 private으로 설정하여 정적 팩토리 메서드 안에서만 setter을 사용하도록 허가하는 방법입니다. 두 방법 중에 무엇이 더 사용하기 적합한지, 아니면 그 외에 다른 방법엔 어떤 것이 있는지 궁금합니다. /// 추가 강의를 진행하다보니 두 방법 모두 setter의 부재로 변경 감지 방법을 사용하지 못한다는 문제점이 있는 것 같습니다.. 변경 감지 강의에서의 영한님 말씀처럼 setter 대신에 비즈니스 메서드를 만들어서 변경 감지 등의 로직에서 사용하고, 정적 팩토리 메서드에서는 첫 번째 방법처럼 생성자로 객체를 생성하는 방법을 사용하려고 하는데 옳은 방법일까요?
-
미해결배틀로얄 게임을 만들어보며 배우는 언리얼 게임 개발
업데이트가 되어서 컬러램프가 어플라이 컬러램프에 적용되지 않습니다
연결이 되지가 않는데 뭐로 연결을 해야하나요?
-
미해결IT 회사에서 비개발자가 살아남기 위한 모든 개발 지식 A to Z
URL 구조 관련 궁금한 게 있습니다
안녕하세요 "(추가) URL 구조" 부분 강의를 듣다가 확인하고 싶은 게 있었습니다! 예를 들면, https://cloud.google.com/speech-to-text?hl=ko 여기서 https는 프로토콜, cloud.google.com은 호스트(:포트 생략), speech-to-text는 (해당 서버의) 경로, hl=ko는 쿼리라는 것을 알게 되었습니다. 그럼 여기서 request의 headers와 body에 해당하는 부분은 알 수 없는걸까요? 기획하던 중에 외부 API 데이터(JSON형식)를 확인해야 하는데 정보를 어떻게 요청하고 받는 것인지 잘 몰라서, URL인지 URI인지 알아야 할 것 같아서 그랩님 강의를 다시 복습하고 있었는데 여전히 헷갈립니다 ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
DI 의존주입 개념
안녕하세요 강의 너무 잘 듣고 있습니다 너무 훌륭한 강의라 저도 모르게 김영한 님의 모든 강의를 구매해 버렸네요... 감사합니다 회원서비스 테스트 강의의 마지막 부분에서 아래 첨부한 코드와 같이 테스트 전에 매번 memberRepository를 새로 생성하여 MemberService 에 주입하여 주는걸로 코드를 수정한 후 의존주입 개념이라고 설명 해주셨는데요 수정한 코드의 항상 동일한 memberRepository를 사용하도록 하기 위함이라 하였는데 @BeforeEach에서 각 테스트 메소드를 실행하기전에 새로운 memberRepository를 생성하여 넣어주는 것이 아닌가요??? 그러면 결국 매 테스트마다 새로운 memberRepositoy를 사용하는게 되어 기존 코드와 똑같은데 제가 어디서 잘 못 이해하였는지 헷갈립니다!
-
미해결쉽게 시작하는 쿠버네티스(v1.35)
Super putty로 가상머신 접근시 자동으로 패스워드 입력이 안되는경우(자답)
super putty에서 가상머신을 더블클릭으로 접속시 자동으로 로그인 되지 않으며, 패스워드를 입력해야하는 경우.아래처럼 super putty에서 Tools -> Options -> Gui 패널에서 아래 Security 옵션을 활성화 하면 됩니다.
-
해결됨홍정모의 따라하며 배우는 C++
다중포인터의 메모리
코드2 배열의 주소를 찍어봤을 때 4씩 늘어나는 것을 볼 수 있었습니다. 코드3 이중포인터를 사용한 배열의 주소를 찍어봤을 때 8이 늘어나는 것을 볼 수 있었습니다. 코드 4 행렬의 주소를 찍어봤을 때 열은 4씩 늘어나고 행은 20이 늘어난 것을 볼 수 있었습니다. 주소를 저장하는 공간은 정해져있는 것으로 알고 있는데 첫번째 코드의 경우 8이고, 두번째 코드의 경우 4이고 3번째 경우에는 8이며 네번째 코드의 경우는 다음 행과의 차이가 20인가요 잘못 비교를 하고 잇는 것같은데 뭐가 문제일까요 이중포인터 배열을 만들고 배열을 만들때의 메모리가 어떻게 할당이 되는지 궁금합니다. 그림을 그려서 이해해보려하는데 잘 안됩니다. 2차원 배열이라서 메모리 주소로 이해를 하면 안될 것 같은데 어떻게 생각하면 될까요? cout << sizeof(int *) << endl; //8 -------------------------------------1 int *matrix = new int[3]; cout << matrix << endl; //0x...20 cout << &matrix[0] << endl; //0x...20 cout << &matrix[1] << endl; //0x...24 -------------------------------------2 int **matrix = new int *[3]; cout << matrix << endl; //0x...20 cout << &matrix[0] << endl; //0x...20 cout << &matrix[1] << endl; //0x...28 -------------------------------------3 int **matrix = new int*[3]; for(int r=0; r<3; r++) matrix[r] = new int[3]; cout << &matrix[0][0] << endl; //0x..40 cout << &matrix[0][1] << endl; //0x..44 cout << &matrix[1][0] << endl; //0x..60 --------------------------------------4
-
미해결Do it! 자바 프로그래밍 입문 with 은종쌤
선생님 질문있어요 !!! ^^
hashSet에서 삭제할 때 iterator를 얻어 온다음 해당 객체를 찾고 삭제하는데 향상된 for를 사용하면 안되나요? iterator는 쓰레드 상황에서만 고려해야 하는 아이인가요? 선생님 좋은강의 책 감사합니다.^^ public boolean removeMember( int memberId) { for( Member member : hashset) { int tempId =member.getMemberId(); if( memberId == tempId) { hashset.remove(member); return true; } } return false; }
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이런 방식의 코드도 괜찮나요?
``` n, k = map(int, input().split())res = list()cnt = 0for i in range(1, n+1): if n % i == 0: cnt+=1 res.append(i)else: if cnt < k: print(-1) else: print(res[k-1]) ```
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
.sub-menu와 .sub-menu a css 속성 작성 중 로유
.sub-menu a{ background-color:#fff; border:1px solid #000; } .sub-menu a{ display:block; padding:5px; } .sub-menu의 배경색을 흰색으로 지정하면 서브메뉴 목록 전체가 흰색으로 채워져야 하는데 첨부한 이미지처럼 표시됩니다. padding 값을 3px로 변경하면 얼추 맞는데....menu li를 float 한 것과 연관이 있는 건가요? 선생님과 동일하게 작서했는게 결과가 다릅니다.ㅜㅜ
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
튜플
튜플은 설정 후 수정이 불가능하다고 들었습니다. 1번에서는 좌변이 기존에 튜플이 설정이 안되었기 때문에 우변을 통해서 튜플이 설정되었다고 이해했습니다. 그렇다면 3번에서는 튜플이 이미 설정이 되었기 때문에 수정이 안되야지 정상이 아닌가요? x=1 y=2 1번. (x,y) = (y,x) 2번. print(x,y) 3번. (x,y) = (y,x) 4번. print(x,y) 수업 잘 듣고 있습니다.감사합니다. 그리고 이번 강의와 연관이 없는 내용이긴 하지만 저는 파이썬에서 크롤링한 자료를 엑셀에서 제 입맛대로 바꾸어 활용하고자 합니다. 이 전체강의를 통해 원하는 바를 이룰 수 있을거 같은데 이 강의말고도 추천해 주실만한 강의가 있는지 궁금합니다.
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
네비게이션 sub-menu와 sub-menu a 에서 css 속성 지정시 오류
.sub-menu{ background-color:#fff; border:1px solid #000; } .sub- menu a{ display:block; padding:5px; } 지정시 서브메뉴 4번째 목록까지 흰 배경이 채워지지 않습니다.서브메뉴 a의 패딩 때문인 것 같은데 선생님 강의 내용대로 입력했는데 결과는 왜 다를까요?
-
해결됨몇 줄로 끝내는 인터랙티브 웹 개발 노하우 [초급편]
전역변수
안녕하세요! 강의듣다가 궁금한 점이 생겨서 질문드립니다! let i = 0 을 전역변수로 놓았을 때는 콘솔창에 1,2,3,4로 숫자가 계속 증가되서 나오는데 지역변수로 loop()함수 안에 두었을 땐 콘솔창에 1만 계속 찍히더라고요! 너무 기초적인 질문 같은데.. 왜 이렇게 되는건지 궁금해서 질문 남겨요 ㅠㅠ! let i = 0 function loop() { console.log(i += 1); window.requestAnimationFrame(loop); }
-
해결됨따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
toString()대신 toHexString() 을 사용한 이유가 궁금합니다~!!
안녕하세요 강의 잘보고 있습니다! 강의를 보다가 궁금한점이 생겨서요! toString()대신 toHexString() 을 사용한 이유가 궁금합니다~!!
-
미해결실전! Querydsl
QueryDSL 계층형 쿼리
안녕하세요JPA와 QueryDSL을 공부하다가 궁금한 점이 생겨서 질문 드립니다.상품의 카테고리 테이블이 있고 해당 카테고리는 자기자신을 참조하는 형태로 계층 구조를 가지고 있다고 하면 API 응답 구성은 { "category_seq":"1", "parent_id":null, "name":"root", "children":[ { "category_seq":"2", "parent_id":"1", "name":"child_1", "children":[ { "category_seq":"4", "parent_id":"2", "name":"child_1_1", "children":[ ] } ] }, { "category_seq":"3", "parent_id":"1", "name":"child_1", "children":[ ] } ] } 아래와 같은 형태로 구성하고 싶습니다. 그렇게 되면 아래와 같은 entity 가 나오고 public class Category { @Id @GeneratedValue(generator = "uuid2") @Column(columnDefinition = "varchar(36)") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String categorySeq; @Column private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_seq") private Category parent; @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST,fetch = FetchType.LAZY) private List<Category> children = new ArrayList<Category>(); } QueryDSL에서는 from(qCategory).join(qCategory.children).fetchJoin() 으로 조회를 할텐데 API의 응답 구성으로 계층화 시키려고 하면 child를 접근하는 부분에서 N+1 문제가 발생합니다. 혹시 이 부분에 대한 해결 방법이 있을까요? 아래는 SQL 문 입니다. select category0_.category_seq as category1_0_0_, children1_.category_seq as category1_0_1_, category0_.name as name5_0_0_, category0_.parent_seq as parent_s6_0_0_, children1_.name as name5_0_1_, children1_.parent_seq as parent_s6_0_1_, children1_.parent_seq as parent_s6_0_0__, children1_.category_seq as category1_0_0__ from t_category category0_ inner join t_category children1_ on category0_.category_seq = children1_.parent_seq ; --------------------- child 부분 ----------------------- select children0_.parent_seq as parent_s6_0_1_, children0_.category_seq as category1_0_1_, children0_.category_seq as category1_0_0_, children0_.name as name5_0_0_, children0_.parent_seq as parent_s6_0_0_ from t_category children0_ where children0_.parent_seq in ('540a0597-1273-4925-84da-e0a0f86f234a', 'kf0a0597-1273-4925-84da-e0a0f86f234a'); ....... 생략 --------------------- child 부분 -----------------------
-
미해결Kevin의 알기 쉬운 RxJava 1부
딜레이 예제 2에서 flatMap과의 차이는 무엇인가요?
delay함수 내에 sleep을 넣지 않으면 구동하는 내용 자체는 flatMap과 같은데 혹시 그 둘의 차이점에 대해 알 수 있을까요? 실제로 예제에서도 flatMap으로 수정해봐도 동일하게 구동하는것을 알 수 있었습니다.
-
미해결대세는 쿠버네티스 (초급~중급편)
버추얼 박스 환경 에서 ssh 접근 문의
강사님의 설치 흐름대로 진행해서 pc 내부에서 MobaXterm 통해 ssh 접근은 가능하나 외부 망에서 접근이 필요해서 구글링해본 결과 버추얼 박스 포트 포워딩을 통해 진행하는 것 까진 확인했으나 동일하게 진행해도 외부 망에서는 접근이 안되네요. https://shutcoding.tistory.com/9 참고한 사이트입니다. 넷 환경을 NAT 로 진행하여 포트포워딩으로 내부 망에서 까진 접근이 되었으나 외부망에서는 unreachable 이 뜨네요. 내피씨 cmd-> 버추얼 가상머신 까진 접근이 됩니다. 혹시 다른 방법이 있을까요? 아니면 브릿지 네트워크에서도 방법이 있을까요
-
미해결반응형 웹사이트 포트폴리오(Architecture Agency)
모바일 트리거 버튼이 안나와요
<!DOCTYPE html> <html lang="UTF-8"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>DesignWorks Architecture Agency</title> <script src="js/jquery-2.1.4.js"></script> <!-- Page Scroll Effects JS & CSS --> <script src="js/velocity/modernizr.js"></script> <script src="js/velocity/velocity.min.js"></script> <script src="js/velocity/velocity.ui.min.js"></script> <script src="js/velocity/main.js"></script> <link rel="stylesheet" href="js/velocity/velocity.css" /> <!-- Custom JS & CSS --> <script src="js/custom.js"></script> <link rel="stylesheet" href="css/style.css" /> <link rel="stylesheet" href="css/responsive.css" /> </head> <!-- hijacking: on/off - animation: none/scaleDown/rotate/gallery/catch/opacity/fixed/parallax --> <body data-hijacking="on" data-animation="scaleDown"> <div class="container"> <section class="cd-section visible"> <div> <div class="content"> <h2>Section 1</h2> </div> </div> </section> <section class="cd-section"> <div> <div class="content"> <h2>Section 2</h2> </div> </div> </section> <section class="cd-section"> <div> <div class="content"> <h2>Section 3</h2> </div> </div> </section> <section class="cd-section"> <div> <div class="content"> <h2>Section 4</h2> </div> </div> </section> <section class="cd-section"> <div> <div class="content"> <h2>Section 5</h2> </div> </div> </section> <section class="cd-section"> <div> <div class="content"> <h2>Section 6</h2> </div> </div> </section> <section class="cd-section"> <div> <div class="content"> <h2>Section 7</h2> </div> </div> </section> <header> <div class="gnb-inner"> <div class="logo"> <a href="#none"><img src="images/logo.png" alt="logo" /></a> </div> <div class="gnb"> <div class="menu"> <a href="#none">Home</a> <a href="#none">About</a> <a href="#none">Project</a> <a href="#none">Plan & History</a> <a href="#none">Awards</a> <a href="#none">Location</a> <a href="#none">Contact</a> </div> <div class="slogan">Publisher. Lim Hyun Mook</div> </div> <div class="trigger"> <span></span> <span></span> <span></span> </div> </div> </header> </div> <nav> <ul class="cd-vertical-nav"> <li><a href="#0" class="cd-prev inactive">Next</a></li> <li><a href="#0" class="cd-next">Prev</a></li> </ul> </nav> </body> </html> @media (max-width: 768px) { /* Layout */ .cd-section { height: auto; } .cd-section > div { height: auto; } .content { position: static; width: 100%; height: 100%; } /* Header */ .menu { display: block; } .slogan { display: none; } .gnb { background-color: #fff; position: fixed; top: 0; right: -270px; width: 250px; height: 100vh; box-shadow: -5px 0 10px rgb(0, 0, 0, 0.1); transition: 0.4s; } .gnb.active { right: 0; } .menu { line-height: 40px; margin-top: 60px; } .menu a { text-align: right; display: block; padding-right: 20px; color: #000; font-size: 20px; } /* Trigger */ .trigger { display: block; width: 24px; height: 14px; position: absolute; right: 20px; top: 20px; } .trigger span { position: absolute; height: 1px; width: 100%; background-color: #000; transition: 0.4s; } .trigger span:nth-child(1) { top: 0; } .trigger span:nth-child(2) { top: 50%; width: 80%; } .trigger span:nth-child(3) { top: 100%; } .trigger.active span:nth-child(1) { top: 50%; transform: rotate(45deg); } .trigger.active span:nth-child(2) { top: 50%; width: 80%; opacity: 0; } .trigger.active span:nth-child(3) { top: 50%; transform: rotate(-45deg); } } /* Google Web Font : Montserrat */ @import url("https://fonts.googleapis.com/css?family=Montserrat:200,300,400,500&display=swap"); @import url("https://fonts.googleapis.com/css?family=Manrope:300,400,500,600&display=swap"); @import url("https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@200;300;400;600;700;900&display=swap"); @import url("https://fonts.googleapis.com/css2?family=Overpass&display=swap"); /* FontAwesome CDN 4.7 */ @import url("https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"); /* reset */ * { box-sizing: border-box; } ul { list-style: none; } a { text-decoration: none; } /* Default Css */ body { font-family: "Montserrat", sans-serif; color: #222; font-size: 15px; margin: 0; height: 100vh; background-color: #fff; } /* Layout */ .cd-section { height: 100vh; } .cd-section > div { height: 100%; position: relative; } .content { position: absolute; width: calc(100% - 40px); height: calc(100% - 80px); left: 20px; bottom: 20px; overflow: hidden; } /* header */ header { position: fixed; width: 100%; } .gnb-inner { width: calc(100% - 40px); margin: auto; height: 60px; line-height: 60px; } .logo { float: left; } .gnb { float: right; } .menu { display: none; } .slogan { font-size: 18px; font-style: italic; } .trigger { display: none; } /* Trigger */ $(function(){ $('.trigger').click(function(){ $(this).toggleClass('active') $('.gnb').toggleClass('active') }) $('section').click(function(){ $('.gnb').removeClass('active') $('.trigger').removeClass('active') }) }) 선생님과 똑같이 했다고 생각하는데 여러번 봐도 문제점을 못 찾겠습니다..
-
미해결하루만에 만드는 깃허브 블로그
사이드바
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요. • 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 강의 감사하고 잘들 었습니다. 그런데 블로그 사이드바를 강사님께서는 펼치고 접고 하고 또 폰트나 글자 크기도 다른데 어떻게 하면 되는 건가요??
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
탐색 & 시뮬레이션 카테고리의 스도쿠문제에서 질문있습니다
코드에 관해서가 아니라 어떤식으로 구현해야될까에 대해서 궁금한게 있습니다. 스도쿠 문제는 1~9까지 모든 수가 중복되지 않게 존재한가에 대한 구현이 중점인데 저는 그걸 set을 이용해서 풀었습니다 임의의 set에다가 행과 열을 넣고 미리 지정해둔 1~9가 들어있는 set집합과 비교하는건데요. 막상 이렇게 짜고 보니까 이렇게 풀어도 되나? 그런 느낌을 받았습니다. 왜냐하면 set에 중복을 제거하는 기능이 자동으로 들어가 있어서 입니다. 뭔가 파이썬기능을 이용해 꼼수를 쓴거같은 느낌을 받았습니다. 이런식으로 짜도 괜찮은걸까요? 실력 상승측면 혹은 실제 코딩테스트에서 점수를 낮게준다던지 하는 그런점이 있을까요?