묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost:8080/hello일때 Whitelabel Error Page가 뜹니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] localhost:8080/hello를 가면 이렇게 뜹니다ㅜㅜ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
컨트롤러에 @PostMapping 없어도 되나요?
createMemberForm.html내의<form action="/members/new" method="post">를 보면 post메소드로 호출하고 있는데,MemberController.java에는@GetMapping("/members/new")만 있네요.@PostMapping("/members/new")이 맞지 않나요?회원가입 클릭하니 주소표시줄에 http://localhost:8080/members/new라고는 뜨는데, 500에러가 납니다
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
printf
18:26java 출력함수로 System.out.printf 는print 와 동일하다고 보면 되나요?System.out.print 와 System.out.printf 의 차이가 있어요?
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
객체와 클래스
제가 객체지향 처음배울때 이해하기 쉬웠던 비유를 적어놓을게요 클래스는 설계도와 같습니다 안에 어떤 데이터와 기능이 들어갈지 정의만 합니다 건축에서 건축 설계도와 같습니다 어떤 자재와 공간이 있을지 정의만 합니다 ( 설계도를 그려놨다 해서 실제 건축물도 생기는건 아닙니다 )객체는 건축물과 같습니다 설계도를 바탕으로 실제로 구현된 대상입니다.(네, 객체는 클래스를 기반으로 만듭니다)즉, 객체는 클래스를 기반으로 구현된 구체화된 실체입니다. 그래서 클래스 정의 -> 객체 생성 이 절차를 따릅니다. 한 설계도를 기반으로 여러 건축물을 만들수 있듯이 클래스 하나를 설계하면 여러 객체를 만들수 있습니다 클래스 = 설계도객체 = 구체화된 실체 감사합니다.
-
미해결클린 코더스: 실전 객체 지향 프로그래밍과 TDD 마스터 클래스
13강, 책임을 나누는 기준
3분 43초경, 책임을 나누는 부류에서"누가 해당 메서드의 변경을 유발하는 사용자인가"가 기준이 된다고 하셨는데,메서드의 변경을 유발한다는 게해당 메서드를 누가 호출하느냐? 어떤 사용자가 이 메서드를 사용하냐? 이렇게 이해하면 되나요?메서의 변경을 유발한다는 의미가 해당 메서드를 이용한다는 의미인지? 정확히 메서드의 변경을 유발한다는 점이 무슨말인지 모르겠습니다.
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
이론 궁금한 것이 있습니다.
이론 용어는 pdf에 대부분 한글로 적혀있는데영어 스펠링으로 외우지 않아도 괜찮을까요?한글로도 된다면 pdf에 있는 용어 발음 그대로 외우면 될까요?
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
테스트 준비 과정에서 서비스 메서드 호출
@Test void find() { Member member = memberRegister.register(MemberFixture.createMemberRegisterRequest()); entityManager.flush(); entityManager.clear(); Member found = memberFinder.find(member.getId()); assertThat(member.getId()).isEqualTo(found.getId()); }현재 코드에서 위와 같이 테스트에서 회원 저장을 위해 memberRegister.register를 호출하고 있습니다.그런데 memberRegister.register에는 단순히 회원을 저장하는 것 외에도 이메일 전송 같은 부가적인 로직이 포함되어 있습니다. 이러한 부가적인 로직때문에 테스트 속도가 느려진다던가, 테스트가 실패하는 원인이 될 수 있다고 생각이 들었습니다.이처럼 테스트 준비에 필요하지 않은 부가 로직까지 수행되는 상황에서, memberRegister.register를 테스트 준비 용도로 사용하는 것이 적절한지 토비님의 생각이 궁금합니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
도메인 모델에서의 검증과 애플리케이션 레벨 검증의 경계
도메인 모델에서의 검증과 애플리케이션 레벨 검증의 경계에 대해 질문드립니다.현재 도메인 모델에서는 이메일 형식이 올바른지, 닉네임이나 비밀번호가 null이 아닌지 같은 최소한의 조건만 검증하고 있습니다. 반면, 비밀번호가 8자 이상인지, 닉네임이 5자 이상인지 같은 검증은 애플리케이션 레이어에서 처리하고 있습니다. 그런데 닉네임이 5자 이상이어야 한다 같은 규칙도 도메인 규칙으로 볼 수 있지 않을까 라고 생각이 들어 해당 검증 역시 도메인 모델에서 처리하는게 맞지 않나 라는 생각이 드는데,도메인 모델에서의 검증과 애플리케이션 레벨 검증의 경계는 어디까지 두는 게 좋은지 토비님 의견이 궁금합니다.말씀하신것을 토대로 예측해 봤을때 형식이나 정책적 요구사항(변경 가능성이 있는 규칙)은 애플리케이션 레이어에서, 도메인의 본질적 불변 조건은 도메인에서 검증하는 걸까요?
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
23년 2회 3회 JAVA 문제 18분26초
compute(num-1) + compute(num-3)여기서 출력값이7-1=C(6) // 7-3=C(4)6-1=C(5) // 4-1=C(3) 여기까진 알겠는데풀이과정에 C(5) C(3) C(3) C(1)이 파랑색 숫자는 어떻게 계산돼서 나온거죠?
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
23년 2회 C언어 킬러문제 33분47초 질문
is what MAX_SIZE가 10인데 idx 0~7까지 적은 이유가 무엇인가요? 0~9까지 적어야 하는 거 아닌가요?
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
23년 2회 C언어 연산자 18분30초 질문
switch 문인데for문 안에 초기식 조건식 증감식이 있는데for (int i = 0 ~~) {sum + =n[i]; <-----요기를 건너띄고 바로 switch 로 가서 계산하는이유가 무엇인지 궁금합니다.
-
미해결실전! Querydsl
querydsl 설정 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. autoplugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } 교안에 나온 대로 설정해 준 상태인데 현재 q타입 클래스는 생성 되었지만 intellij가 이를 정상적인 클래스로 인식하지 못해서 QHello를 import하지 못하고 있는 상황입니다
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
동적쿼리를 이용한 List로 가져올 때의 캐쉬??
제가 강의에서 이해한 바로는 example/1 과 같은 단일 리턴값에는 캐쉬를 적용해서 db의 부하를 줄일 수 있다고 생각했습니다.하지만, search?title=딩코&tag=백엔드…” 와 같은 복합 검색 조건을 기반으로, 백만 건 이상의 데이터 중에서 동적 쿼리를 사용해 10개씩 페이지네이션하여 가져오고 있습니다. 이 경우에는 쿼리마다 값이 달라지니 미리 레디스에 값을 반영할 수도 없는 상황입니다. 그리고 DB에서는 10개의 값을 리턴시키는데, 이런 상황에서는 캐시를 사용할 수 없는 건가요? 반드시 인덱스를 통해서만 성능을 확보해야 하나요?
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
07:21-정적변수, 정적메서드(static): 설명이 조금 이상합니다
아래 동일한 질문이 있어서 봤는데 그냥 암기하라고 하셔서 다시 질문드려봅니다. 일단 설명이 틀린 것 같은데 자세하게 다시한번 봐주세요.(7:12)(설명중)먼저 정적메서드에서 인스턴스변수를 접근하려고 한다 -> ??? 정적메서드에서 인스턴스메서드를 접근중인거 같은데요?설명이 명확하지 않는 부분이 있어서 질문 드려봅니다
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Member#register() 메서드명이 모호하게 느껴집니다.
Member#create() 메서드를 register로 공통언어를 바꾸셨는데, 뜻이 모호해진 것 같아서 질문드립니다! 제가 생각하기에 register(등록)이라는 단어는 생성과 영속화라는 두가지의 행위를 함축한 단어로 느껴집니다. 따라서 MemberService#register()는 너무 자연스럽습니다. 실제로 Member를 생성한 후에 MemberRepository를 통하여 영속화까지 하는 내용으로 구현되어있습니다.하지만 Member#register()는 이와 다르게 Java 객체를 생성하기만 하는 것이라, 메서드명과 실제 동작이 불일치한다고 느껴집니다. 하지만 또 동시에 도메인 모델을 글로 작성하는 과정에서 '멤버를 등록한다.' 라는 말을 쓰는 것은 자연스럽습니다. 그 구현이 코드적으로 Member에 있는 것만이 부자연스럽습니다.이런 경우에는 Member라는 객체만으로 도메인 모델을 온전히 표현해내기가 어려운 것일까요? 해당 모델을 표현하기 위해서는 MemberService 같은 코드가 꼭 필요한 걸까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
조회수 redis 장애시 fallback 관련해서 질문!
강사님 안녕하세요.조회수 데이터를 Mysql로 백업한 데이터는 redis 장애시를 대비한 걸로 이해했습니다.(장애시 일부 데이터는 유실되지만, 가용성은 챙김)그렇다면 조회수 조회시 ArticleViewService의 count메서드에서 try-catch로 묶어서 catch문에 mysql에서 조회수를 조회하는 코드를 추가하면 되는걸까요? 혹여나 강의 내용을 놓친거라면 죄송합니닷..!
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
9:02초 질문있습니다.
반대로 자식에게만 생성자가 있으면 오류인가요??질문은 동영상 강의에 들어가서 오른쪽에 커뮤니티 버튼을 통해 해주세요. 그래야어떤 강좌에서 질문하셨는지 알 수 있습니다.영상에서 몇 분 몇 초 대를 알려주셔야 제가 한 번에 질문 내용 확인이 가능합니다.이미 다른 누군가가 질문을 한 이력이 있을 수 있습니다. 질문 게시판을 한 번 확인 부탁드립니다.학교의 과제나 타 강사의 코드 등 외부 수업 자료에 대해서는 답변하지 않습니다.제가 다루는 커리큘럼 외의 이론이나, 너무 디테일한 컴퓨터 이론에 대해서는 답변 드리지 않습니다.시험에 안 나오는 경우가 많고, 나와 봤자 1문제 나오는데 외워야 할 부분이 많은 것 등 (예시: 서브넷 마스크 계산)질문을 올릴 때 이 글은 모두 지우고 내용을 입력해주세요.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
EntityManager#flush()를 검증하면 더 좋을 것 같습니다!
멤버를 저장하는 테스트에서 EntityManager#flush()를 호출해서 플러시되어 DB까지 쿼리문이 제대로 가는지 검증하시는 것을 보았습니다. (저는 플러시까지 테스트해볼 생각을 못했어서 아주 인상깊었습니다 ㅎㅎ) 하지만 해당 부분이 검증문 없이 홀로 호출되고 있습니다.좀더 의도를 드러내기 위해서는 assertThatCode(() -> em.flush()).doesNotThrowAnyException() 처럼 코드를 작성하는게 더 좋지 않을까 싶어서 질문드립니다!적용 예시@Test void 멤버를_저장한다() { var member = MemberFixture.createAny(); memberRepository.save(member); assertThat(member.id()).isNotNull(); assertThatCode(() -> em.flush()) .doesNotThrowAnyException(); }
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
테스트클래스명이 테스트 목적을 잘 나타내지 못하는 것 같습니다.
MemberRepositoryTest는 EntityManager 나 @DataJpaTest 등 Jpa와 깊게 관련되어있는 테스트로 이해됐습니다. EntityManager#flush() 가 잘 호출되는지 확인하는 부분도 그런 이유에서 이해됩니다.하지만 테스트명이 MemberRepositoryTest인 점에서 헷갈리는 부분이 발생합니다. MemberRepository 인터페이스의 메서드를 테스트하는 것이 목적이라면 좀 더 추상화된 테스트를 작성하는 것이 옳지 않았나? 라는 것이 주된 궁금증입니다. 물론 Spring Data JPA 특성상 런타임에 구현체가 만들어지기 때문에, 테스트 대상은 인터페이스를 사용해야 한다는 것은 이해합니다만, 최소한 클래스명은 좀 더 구체적으로 작성해주는 것이 의도에 부합하지 않나? 해서 질문드립니다! 어떻게 생각하시나요?
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
도메인 로직으로 분리해도 되나요?
해당 코드에서 자기 자신의 프로필 address와 비교하는 로직을 도메인에게 맡기는 건 어떨까요? 토비님! 이렇게 해도 되는건지 아니면 따로 빼신 이유가 있으신 지 궁금합니다. private void checkDuplicateProfile(Member member, String profileAddress) { if (profileAddress.isEmpty()) return; Profile currentProfile = member.getDetail().getProfile(); if (currentProfile != null && currentProfile.address().equals(profileAddress)) return; if (memberRepository.findByProfile(new Profile(profileAddress)).isPresent()) { throw new DuplicateProfileException("이미 존재하는 프로필 주소입니다: " + profileAddress); } }이런 식으로요!private void checkDuplicateProfile(Member member, String profileAddress) { if (profileAddress.isEmpty()) return; if (!member.isProfileNull() && member.isProfileEquals(profileAddress)) return; if (memberRepository.findByProfile(new Profile(profileAddress)).isPresent()) { throw new DuplicateProfileException("이미 존재하는 프로필 주소입니다: " + profileAddress); } }