묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강의자료 부탁드립니다
안녕하세요, 강의 자요 부탁드립니다.gkdpfk@gmail.com
-
해결됨[iOS] Swift Modern Collection View & MVVM 패턴 가이드
NSCollectionLayoutSize 질문
섹션1 - 3번 레이아웃 구현 시,createListCarouselSection() 메서드를 구현할 때, itemSize: NSCollectionLayoutSize 에 heightDimension 인자 세팅값으로 .fractionalHeight(1.0)으로 세팅하는데 1.0으로 하니까 아이템이 그냥 1개만 세팅되네요. (0.3)으로 세팅하니까 3줄로 나오는데, 혹시 제가 빼먹은 부분이 있을까요? 감사합니다.
-
해결됨
스프링 입문(view 환경설정) 에서 Thymeleaf 적용안됨
안녕하십니까 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 듣고 있는 수강생입니다. IntelliJ IDEA에서 Thymeleaf 문법이 정상적으로 적용되면 Thymeleaf 표현식은 주황색으로 강조 표시되는것으로 알고 있는데 이렇게 표시되는 이유가 뭔가요?? build.gradlecontroller
-
해결됨곰책으로 쉽게 배우는 최소한의 운영체제론
교착상태와 게임이 튕기는 현상
교착 혹은 wait가 걸리게 되면 os가 감시하여 강제종료 후 메모리를 회수하게 되는데 그 예로 들수있는것이 게임하던중 어떠한 이유로 튕겼을때 / 프로그램 응답대기가 맞을까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
5강 Montage_SetEndDelegate()함수 관련
FOnMontageEnded EndDelegate; EndDelegate.BindUObject(this, &AABCharacterBase::ComboActionEnd); AnimInstance->Montage_SetEndDelegate(EndDelegate, ComboActionMontage);Montage_SetEndDelegate 함수를 보면,AnimMontage클래스에서 AM이 종료되면 호출시키는 FOnMontageEnded타입의 델리게이트 변수를, 위 함수의 인자로 받는 델리게이트 변수와 치환해서(=) 실행되는 것으로 이해했습니다. 그렇다면 구현되어있는 델리게이트 변수에 ComboActionEnd함수를 바로 구독시키면 안되는건지 궁금해서 여쭤봅니다..
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
flutter secure storage에 대하여
혹시 이 패키지는 단순히 토큰이나 보안 관련된 부분을 저장하기 위해 만들어진 패키지인가요?이전에 hive와 sql보다는 사용법이 조금 단순한 것 같아서 이 패키지를 이용하면 복잡하지 않은 가벼운 데이터 정도는 쉽게 저장할 수 있을 것 같아서 여쭤봅니다..!
-
해결됨Practical Testing: 실용적인 테스트 가이드
MailService 구조에 대해 생각을 여쭙고 싶습니다.
안녕하세요 강사님, 먼저 좋은 강의와 강의가 나온지 일년이 가까지 되어가는데도 답변해주셔서 감사합니다. public boolean sendOrderStatisticsMail(LocalDate orderDate, String email) { // 찾아오기 //통계 합산하기. boolean result = mailService.sendMail(); return true; } public Boolean sendMail(String fromEmail, String toEmail, String subject, String content) { // mailSendClient는 메일을 전송하는 역할을 합니다. boolean result = mailSendClient.sendEmail(fromEmail,toEmail,subject,content); // 메일이 전송되었다면 메일 전송 내역을 저장합니다. - 기록용 엔티티 입니다. if (result) { mailSendHistoryRepository.save(..); return true; } return false; }이렇게 역할을 나누어 메일 전송을 메일 서비스에게 위임했습니다. 조회한다메일을 전송한다메일 히스토리에 저장한다.비즈니스 로직을 그대로 작성하다보면 아래와 같이 작성하게 되는 경우가 많습니다.public boolean sendOrderStatisticsMail(LocalDate orderDate, String email) { // 찾아오기 //통계 합산하기. // mailSendClient는 메일을 전송하는 역할을 합니다. boolean result = mailSendClient.sendEmail(fromEmail,toEmail,subject,content); // 메일이 전송되었다면 메일 전송 내역을 저장합니다. - 기록용 엔티티 입니다. if (result) { mailSendHistoryRepository.save(..); return true; } return false; }mailSendClient를 Subbing해서 테스트를 한다면위에 코드나 아래 코드나 테스트 방식은 동일하게 작성이 됩니다. 강사님께서 작성하는 방법은 메일 후처리를 해주는 클래스를 추가가 됩니다.테스트 코드를 작성하면 동일하게 동작하는데 클래스가 하나가 추가됩니다. 그럼에도 장점이 있기 때문에 사용한다고 생각되어지는데제가 생각한 후처리기 클래스의 장점은외부 네트워크를 직접 의존하지 않아도 된다.메일 전송과 히스토리 저장을 하나의 서비스로 사용할 수 있다. 그리고 이렇게 후처리기 클래스 적용하는 기준이 있으실까요?
-
해결됨[UI3 업데이트] 피그마 배리어블을 활용한 디자인 시스템 구축하기
체크/라디오박스 등 라벨이 2줄이상 적용될 때는 어떻게 해야하나요?
보통 체크박스와 라벨의 오토레이아웃을 Align Left로 설정하게 되는데,2줄 이상의 텍스트가 필요할때는 어떻게 제작하시나요?디자인시스템에 1줄일 경우, 2줄이상일 경우를 따로 등록하시는지,아니면 다른방법을 쓰시는지 궁금합니다.추가 질문)저는 간간히 2줄 이상일 경우에는 컴포넌트 전체의 오토레이아웃을 Align top left를 한다음,체크박스에 한번 더 오토레이아웃을 설정하고 위아래에 (텍스트 박스와의 시각보정을 고려한) 여백을 설정해서하나의 컴포넌트로 1줄(=1line,solo...),2줄이상(=2line,multi...)의 경우를 하나로 관리할 때도 있는데요.이 방식으로 개발자에게 전달을 해본적이 없어서, 전달과정에서 문제가 없는지도 궁금합니다!
-
미해결김영한의 실전 자바 - 기본편
ProductOrderMain3 문제 풀이 방법에 질문 있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]저는 enterProduct라는 메서드에서 객체를 생성하고 사용자의 입력까지 모두 받아 해당 객체를 return하도록 풀었습니다. 제가 풀은 방식처럼 메서드 안에서 입력까지 받는 방식이 지양해야 하는 방식인지 궁금합니다 package ref.ex; import java.util.Scanner; public class ProductOrderMain3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("입력할 주문의 개수를 입력하세요: "); int count = scanner.nextInt(); ProductOrder[] product = new ProductOrder[count]; for (int i = 0; i < product.length; i++) { product[i] = enterProduct(i); } printProduct(product); int totalPrice = calTotalPrice(product); System.out.println("총 결제 금액: " + totalPrice); } static ProductOrder enterProduct(int i) { Scanner scanner = new Scanner(System.in); ProductOrder productOrder = new ProductOrder(); System.out.println((i + 1) + "번째 주문 정보를 입력하세요."); System.out.print("상품명: "); productOrder.productName = scanner.nextLine(); System.out.print("가격: "); productOrder.price = scanner.nextInt(); System.out.print("수량: "); productOrder.quantity = scanner.nextInt(); return productOrder; } static void printProduct(ProductOrder[] product) { for (ProductOrder p : product) { System.out.println("상품명: " + p.productName + ", 가격: " + p.price + ", 수량: " + p.quantity); } } static int calTotalPrice(ProductOrder[] product) { int totalPrice = 0; for (ProductOrder p : product) { totalPrice += p.price * p.quantity; } return totalPrice; } }
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
폼에서 저장 페이지로 넘어갈 때의 POST에 대한 궁금증
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]HTTP GET 방식 기능 : 조회HTTP POST 방식 기능 : 처리 , 저장 , 등록 , ...와 같이 알고 있습니다. 즉 사진에서 노란색 밑줄 친 코드는 현재 폼에서 입력된 데이터를 /servlet/members/save 경로에서 "처리"할 것을 요구하는 코드로 이해했습니다./servlet/members/save 경로에 해당되는 MemberSaveServlet 클래스에선 폼에서 발생한 데이터를 "저장"시키는 역할을 하고요. 그런데 다음과 같이 실제 폼에서 username과 age를 입력한 후 submit을 누르면 다음과 같이 /servlet/members/save페이지가 "조회"되면서 데이터가 "저장"되는 두 가지 작업이 동시에 일어나는 것을 확인할 수 있었습니다. 저는 POST 방식은 데이터 "조회"가 아닌 데이터 "처리"로 알고 있어서 폼에서 데이터를 입력하면 페이지에는 아무런 변화가 없고 그냥 데이터가 "저장"만 되는 것으로 알고 있었습니다그래서 /servlet/members/save 페이지를 "조회"해서 데이터가 잘 "저장"됐는지 확인하려면 GET 을 통하여 해당 페이지로 넘어가게끔 추가로 로직을 구성해야되는 것으로 생각하였습니다.[핵심 질문]이에 따라 앞으로 POST 방식을 쓰는 경우 페이지가 "조회"되면서 데이터 "처리"가 동시에 순차적으로 일어난다고 봐도 될지 궁금합니다 !
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
새로고침해야만 등록한 글이 리스트에 뜹니다.
게시글 입력후 새로고침 해야만 새로 등록한 게시글이 리스트에 뜹니다. 제가 놓친 코드가 있을까요? 아니면 브라우저 문제일까요? (문제 상황 gif 이미지 첨부합니다) <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@page isELIgnored="false" %> <!DOCTYPE html> <html lang="en"> <head> <title>Spring MVC02</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script> <script type="text/javascript"> $(document).ready(function () { loadList(); }); function loadList() { //서버와 통신 : 게시판 리스트 가져오기 $.ajax({ url: "boardList.do", type: "get", dataType: "json", success: makeView, error: function () { alert("error"); } }); } function makeView(data) { //콜백 함수 : 서버에서 응답으로 받은 데이터를 처리하는 함수 var listHtml = "<table class='table table-bordered'>" listHtml += "<tr>"; listHtml += "<td>번호</td>"; listHtml += "<td>제목</td>"; listHtml += "<td>작성자</td>"; listHtml += "<td>작성일</td>"; listHtml += "<td>조회수</td>"; listHtml += "</tr>"; $.each(data, function (index, obj) { listHtml += "<tr>"; listHtml += "<td>" + obj.idx + "</td>"; listHtml += "<td>" + obj.title + "</td>"; listHtml += "<td>" + obj.writer + "</td>"; listHtml += "<td>" + obj.indate + "</td>"; listHtml += "<td>" + obj.count + "</td>"; listHtml += "</tr>"; }); listHtml += "<tr>"; listHtml += "<td colspan='5'>"; listHtml += "<button class='btn btn-primary btn-sm' onclick='goForm()'>글쓰기</button>"; listHtml += "</td>"; listHtml += "</tr>"; listHtml += "</table>"; $("#view").html(listHtml); //view라는 id를 가진 div에 listHTML을 출력 $("#view").css("display", "block"); $("#wform").css("display", "none"); } function goForm() { $("#view").css("display", "none"); //숨기기 $("#wform").css("display", "block"); //보이기 } function goList() { $("#view").css("display", "block"); $("#wform").css("display", "none"); } function goInsert() { // var title = $("#title").val(); // #title에서 사용자가 입력한 value를 가져옴 // var content = $("#content").val(); // var writer = $("#writer").val(); var fData = $("#frm").serialize(); //form에 입력된 모든 데이터를 가져옴 // alert(fData); $.ajax({ url: "boardInsert.do", type: "post", data: fData, success: loadList, error: function () {alert("error");} }); } </script> </head> <body> <div class="container"> <h2>Panel Heading</h2> <div class="panel panel-default"> <div class="panel-heading">Spring MVC 02</div> <div class="panel-body" id="view">Panel Content</div> <div class="panel-body" id="wform" style="display: none"> <form id="frm"> <table class="table"> <tr> <td>제목</td> <td><input type="text" id="window-title" name="title" class="form-control"></td> </tr> <tr> <td>내용</td> <td><textarea type="textarea" rows="7" id="content" name="content" class="form-control"></textarea></td> </tr> <tr> <td>작성자</td> <td><input type="text" id="writer" name="writer" class="form-control"></td> </tr> <tr> <td colspan="2" align="center"> <button type="submit" class="btn btn-success btn-sm" onclick="goInsert()">등록</button> <button type="reset" class="btn btn-warning btn-sm">취소</button> <button type="button" class="btn btn-info btn-sm" onclick="goList()">리스트</button> </td> </tr> </table> </form> </div> <div class="panel-footer">인프런_스프1탄_박매일</div> </div> </div> </body> </html> @RequestMapping("/boardInsert.do") public @ResponseBody void boardInsert(Board vo) { boardMapper.boardInsert(vo); }
-
해결됨개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제
Working set 기반 프레임 할당 방식에 대한 질문입니다.
안녕하세요 강사님유익한 강의 감사히 듣고 있습니다.이번에 가상 메모리의 프레임 할당 방식에 대한 강의를 듣던 도중 working set 기만 모델에 대해 질문이 생겼습니다.사실 동적 할당 방식에 대한 질문이라고 볼 수도 있을 것 같은데,working set의 경우, 일정 시간을 두고, 참조되는 페이지를 통해 working set을 구성하여 프로세스에 프레임을 할당한다고 하셨습니다.그렇다면, 해당 프로세스가 가장 처음 실행이 될 때는 해당 프로세스에 대한 프레임 할당이 어떤식으로 이루어 지는지 궁금합니다.정적 할당의 경우에는 실행하기 전, 프로세스의 크기를 통해 미리 결정하고 들어가지만, 동적 할당의 경우에는 해당 프로세스를 실행하여 사용되는 프레임의 수를 통해 프레임을 할당한다고 하셨습니다.그렇다면 가장 초기에는 어떤식으로 프레임이 할당이 되어 지는지 궁금합니다. 감사합니다.새해 복 많이 받으세요~
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Unable to locate persister
이런 에러가 발생하는데 어떻게 해결해야할지 구글에 검색해도 잘 나오지 않습니다.. 틀린지 맞는지 몇번 확인했는데 틀린건 없었던것 같습니다 그리고 어제까진 실행이 됐는데 Transactional어노테이션 주석처리 하고서 실행을 해보니 안되네요 혹여나 다시 원복해서 실행해도 안되고 틀린 코드가 없는거 같은데 다른게 뭔가 문제가 있는것 같습니다 도와주세요~
-
미해결WPF (C#, 자막제공)
PropertyChanged/RelayComman 관련
안녕하세요. 강사님PropertyChanged/RelayComman 에서1. INotifyPropertyChanged2. Raisepropertychanged3. Onpropertychanged1,2,3 차이가 무엇인가요?
-
미해결Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
테스트 코드 오류
안녕하세요 선생님, 좋은 강의 항상 감사하게 잘 듣고 있습니다. 제가 지금 카테고리를 테스트 하는 강의를 수강하고 있습니다. 그런데 아무리 테스트를 하여도 blog/test.py 83번째 줄에서 Nonetype 오류가 나옵니다. id를 제대로 html에 부여 하였고 대문자, 소문자, 특수기호를 모두 확인하였습니다. 그래서 제 지식으로는 오래 생각을 해 보아도 틀린 부분을 찾을 수 없어서 어느 부분이 틀린 부분인지 선생님께 여쭤보고자 연락을 드립니다. 아래 제 깃허브 url을 첨부하도록 하겠습니다. 감사합니다. https://github.com/rapgodd/django_2023.git
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Assertions 사용 질문
package jpabook.jpashop; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; @RunWith(SpringRunner.class) @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("memberA"); //when Long savedId = memberRepository.save(member); //then Member findMember = memberRepository.find(savedId); Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember).isEqualTo(member); } }plugins { id 'java' id 'org.springframework.boot' version '3.2.1' id 'io.spring.dependency-management' version '1.1.4' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '21' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'junit:junit:4.13' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } } tasks.named('test') { useJUnitPlatform() } 이렇게 junit4 사용 하였는데 Assertions 이 구문만 쓰면 에러가 생기는데 왜 그런거죠?
-
해결됨김영한의 실전 자바 - 기본편
static final 위치?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예제를 하면서 보던 도중 static final 위치를 바꾸면 어떻게 될까 해서... 쳐보니이렇게 둘다 되었습니다.혹시( static final)로 하는 이유가 있나요?저가 생각해본게 첫째 : 관례둘째 : 지정 범위? (연산자의 우선순위처럼 이런게 정해져 있는가 생각함.)라고 생각해보았는데 답변 부탁드립니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 재귀허용 WriteUnlock() 질문드립니다!
public void WriteUnlock(){int lockCount = --_writeCount;if (lockCount == 0)Interlocked.Exchange(ref _flag, EMPTY_FLAG);}위의 코드에서 lockCount 지역변수를 만들어주신 이유가 따로 있으신지 궁금합니다! writeCount는 어차피 WriteLock을 잡은 애만 쓰는 변수라고 이해했는데, 그러면 writeCount-=1; if(writeCount==0) 이렇게 써도 괜찮지 않을까라는 생각이 들었습니다!너무 사소한 질문인 것 같은데, 열심히 듣다가 궁금해져서 질문드립니다ㅠㅠ
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의시 이론설명에 활용되는 자료가 어딨는지 모르겠어요.
안녕하세요!!현재 강의를 듣고 있는 수강생입니다!! 다름이 아니라 강의하시면서 이론에 대해 설명해주실 때, 쓰시는 자료들은 어디서 볼 수 있을까요?? 코드에 대해 공부하면서 이론적인 부분도 이해하고 넘어가면 이후의 수업에서 이해하고 직접 실행해볼 때, 더 좋을 것 같아서요!!
-
미해결처음 만난 리액트(React)
chapter5 실습질문입니다.
이와같이 나오는데 어떤부분에서 잘못되었을까요? 두번세번봐도 어디가 잘못됬는지 모르겠네요 ㅠㅠ