묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
과제 답안
두번째 과제 풀고 있는데 답이 혹시 어디 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
application.yml 관련 문제
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래와 같이 yml 파일을 설정한다면 어떻게 조치해야하는지 궁금합니다.해당 boot 설치 버전은 gradle과 같습니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
포스트맨에서 회원 권한이 출력되지 않습니다.ㅠㅠ
강의 내용와 다르게 포스트맨 수행 결과 권한이 함께 출력되지 않고 있습니다. 어느 부분이 문제인가요 ..? 콘솔창에서는 정상적으로 모두 출력된 것을 확인했습니다 ㅠㅠ 그래서 더 모르겠습니다..
-
해결됨스프링 시큐리티 완전 정복 [6.x 개정판]
http 파일이 잘 안 먹힐 때
### 로그인 POST http://localhost:8080/login Content-Type: application/json { "username": "user", "password": "1111" } > {% client.global.set("JSESSIONID", response.headers.valueOf("Set-Cookie").split(";")[0].split("=")[1]) %} ### 루트 접속 GET http://localhost:8080/ Accept: application/json Cookie: JSESSIONID={{JSESSIONID}}강의에서 설명하신 대로 따라해봤는데 http 파일이 잘 작동하지 않는 문제가 있었습니다.이 부분이 잘 안 먹혀서 찾아봤는데 인프런 현재 CTO이신 '향로'님 블로그쪽에 이 내용이 정리가 되어 있는 것을 확인할 수 있었습니다.- https://jojoldu.tistory.com/366> {% %} 를 http 파일에 작성하고, 이 사이에서 응답이 온 데이터를 전역변수로 저장해둘 수 있습니다.이후 로그인할 때 Cookie: JSESSIONID={{JSESSIONID}} 와 같이 전역변수에서 꺼내서 사용하면 명시적으로 쿠키를 지정해서 전달할 수 있어서 작동이 잘 됩니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
fetch join 4개만 나오는건 알겠는데 json에서는 다른이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]join을 하면4개가 나오는데id가 같지만 orderItems는 서로 다르게 나옵니다. 근데 왜 json에서는 orderItems 중복되서 왜 똑같이 나오는건가요? 그리고 값이 왜 orderItems는 여러개씩 출력이 되는거죠? 사실상 sql시 하나씩 setter로 들어가서 출력되지않나요? 예) "orderItems": [ { "itemName": "JPA1 BOOK", "orderPrice": 10000, "count": 1 }, { "itemName": "JPA2 BOOK", "orderPrice": 20000, "count": 2 } ] 위와 같이 orderItems가 두개가 나옵니다.근데 sql은 하나씩 출력이 되는데 그러면 "orderItems": [ { "itemName": "JPA1 BOOK", "orderPrice": 10000, "count": 1 } ]위와 같이 하나만 출력이 되어야하는거 아닌가요?setter로 매핑 되면 그렇지않나요?
-
해결됨스프링 부트 - 핵심 원리와 활용
default 와 JDK 21
[질문 내용]김영한님의 코드를 받았을 때, Gradle JVM = azul-15 로 되어 있었는데, 제가 JDK 21 버전으로 바꾸었고, 추후에 "자식 컨테이너를 시작하는 중 오류 발생" 하는 문제가 생겼습니다.Run에서 JRE 를 default 에서 JDK21로 바꾸니 문제는 해결되었는데, 추후에 문제는 없을지 궁금하여 질문 남깁니다!!
-
해결됨스프링 부트 - 핵심 원리와 활용
config 우선순위
[질문 내용]@Import(MyDataSourceConfigV3.class) @SpringBootApplication(scanBasePackages = {"hello.datasource","hello.pay"})이렇게 두개의 config를 적용할때스프링 부트가 MyDataSourceConfig와 PayConfig를읽는 순서를 정확히 알고 싶습니다 !
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
405에러가 발생합니다. 이유를 잘 모르겠습니다.
1package com.attendance.scheduler.infra.config.security; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration @RequiredArgsConstructor @EnableWebSecurity public class SecurityConfig { public static final String[] ENDPOINTS_WHITELIST = { "/", "/submit", "/completion", "/class/**", "/board/**", "/join/**", "/cert/**", "/help/**", "/comment/**", "/css/**", "/js/**" }; private final CustomAuthenticationFailureHandler customAuthenticationFailureHandler; @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain adminFilterChain(HttpSecurity httpSecurity) throws Exception { httpSecurity .csrf(AbstractHttpConfigurer::disable) .securityMatcher("/admin/**","/manage/**") .authorizeHttpRequests(auth -> auth .requestMatchers("/admin/**") .hasAuthority("ADMIN") .requestMatchers("/manage/**") .hasAnyAuthority("ADMIN", "TEACHER") .anyRequest().authenticated()) .formLogin(httpSecurityFormLoginConfigurer -> httpSecurityFormLoginConfigurer .defaultSuccessUrl("/manage/class", true) .failureHandler(customAuthenticationFailureHandler) .loginPage("/login") .loginProcessingUrl("/login") ) .logout(httpSecurityFormLogoutConfigurer -> httpSecurityFormLogoutConfigurer .logoutUrl("/logout") .invalidateHttpSession(true) .deleteCookies("JSESSIONID") .logoutSuccessUrl("/")) .sessionManagement(sessionManagement -> sessionManagement .invalidSessionUrl("/login") .maximumSessions(1) .maxSessionsPreventsLogin(true) .expiredUrl("/login")); return httpSecurity.build(); } } 2package com.attendance.scheduler.infra.config.security; import com.attendance.scheduler.admin.domain.AdminEntity; import com.attendance.scheduler.admin.repository.AdminJpaRepository; import com.attendance.scheduler.infra.config.security.Admin.AdminDetails; import com.attendance.scheduler.infra.config.security.User.TeacherDetails; import com.attendance.scheduler.teacher.domain.TeacherEntity; import com.attendance.scheduler.teacher.repository.TeacherJpaRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; @Slf4j @Component @RequiredArgsConstructor public class AccountDetailService implements UserDetailsService { private final AdminJpaRepository adminJpaRepository; private final TeacherJpaRepository teacherJpaRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { log.info("teacherId = {}", username); final TeacherEntity teacherEntity = teacherJpaRepository .findByUsernameIs(username); if(teacherEntity != null){ return new TeacherDetails(teacherEntity); } else { final AdminEntity adminEntity = adminJpaRepository .findByUsernameIs(username); if (adminEntity != null) { log.info("adminId = {}", username); return new AdminDetails(adminEntity); } } throw new UsernameNotFoundException(username); } }3<form method='post' th:action="@{/login}" th:object="${login}"> 로그인을 진행하면 405에러가 계속 발생합니다. 이유를 찾고 있으나 아이디와 비밀번호를 입력해도 2번 코드의 로그에 남지 않습니다. 혹시 이유를 알려주실수 있을까요? 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findAll 테스트 전에는 오류 없었는데 findAll 테스트 했더니 findbyName에서 에러 났어요..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.전체 코드입니다.package com.example.hellospring.repository; import com.example.hellospring.domain.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import java.util.List; import java.util.Optional; class MemoryMemberRepositoryTest { MemberRepository repository = new MemoryMemberRepository(); @Test public void save(){ Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.getId()).get(); // Assertions.assertEquals(member, result); Assertions.assertThat(member).isEqualTo(result); } @Test public void findByName(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); Member result = repository.findByName("spring1").get(); Assertions.assertThat(result).isEqualTo(member1); } @Test public void findAll(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); List<Member> result = repository.findAll(); Assertions.assertThat(result.size()).isEqualTo(2); } } 참고로 save 테스트에서 에러가 발생해서 findById 를 String -> Long 으로 바꾼 상태입니다.package com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.List; import java.util.Optional; public interface MemberRepository { Member save(Member member); Optional<Member> findById(Long id); Optional<Member> findByName(String name); List<Member> findAll(); } package com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.*; public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } }
-
미해결견고한 결제 시스템 구축
혹시.. 실습 코드 제공 받을때 코틀린이 아닌 자바 언어 받을수 있을까요?...
사실 코틀린은 제가 한번도 사용해 본적도 없고 이번에 프로젝트 구성할때 자바로 만들 계획이라서요. 그렇다고 선생님 실습 코드를 전부 그래도 사용하는것은 아닌데요. 강의 보면서 자바로 구성된 코드를 보면서 공부하면 이해하는데 도움이 많이 될것 같아서요... 부탁드립니다!!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
assertThat import, RunWith annotation 관련 문의
=======================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]혹시 여기서 import 활성화를 위해서 어떤 조치를 취해야 하는지 궁금합니다. (setting 설정은 Gradle에서 실행하도록 설정해놨음)
-
미해결스프링 부트 - 핵심 원리와 활용
외부파일 질문
[질문 내용]application.properties가 윈도우환경에서는 무슨 파일로 저장해야하나요?텍스트 문서파일로 저장하고 그 안에 내용을 쓰니 빌드하면 이렇게 나옵니다2024-04-23T20:52:12.297+09:00 INFO 2056 --- [ main] hello.EnvironmentCheck : env url=null2024-04-23T20:52:12.299+09:00 INFO 2056 --- [ main] hello.EnvironmentCheck : env username=user2024-04-23T20:52:12.300+09:00 INFO 2056 --- [ main] hello.EnvironmentCheck : env password=null2024-04-23T20:52:12.436+09:00 INFO 2056 --- [ main] hello.ExternalApplication : Started ExternalApplication in 1.65 seconds (process running for 2.338)
-
해결됨코드로 배우는 React with 스프링부트 API서버
이동한 페이지 번호가 회색 색상으로 변하지 않습니다 ㅠ
데이터는 정상적으로 가져와지고 있습니다. 하지만 선택된 페이지 번호가 회색으로 변경이 안되고 있는데, 어느 부분이 문제인지 모르겠습니다...PageComponent.js 에서 선택된 페이지 번호에 회색을 부여하는 것으로 알고 있는데, 왜 안되는 걸까요..? 아래는 PageComponent.js 코드입니다. 강의 내용과 피피티와 코드가 동일합니다.import React from 'react'; function PageComponent({serverData, movePage}) { // serverData.prev, pageNumList, next return ( <div className="m-6 flex justify-center"> {serverData.prev ? <div className="m-2 p-2 w-16 text-center font-bold text-blue-400 " onClick={() => movePage({page: serverData.prevPage})}> Prev </div> : <></>} {serverData.pageNumList.map(pageNum => <div key={pageNum} className={`m-2 p-2 w-12 text-center rounded shadow-md text-white ${serverData.current === pageNum ? 'bg-gray-500' : 'bg-blue-400'}`} onClick={() => movePage({page: pageNum})}> {pageNum} </div> )} {serverData.next ? <div className="m-2 p-2 w-16 text-center font-bold text-blue-400" onClick={() => movePage({page: serverData.nextPage})}> Next </div> : <></>} </div> ); } export default PageComponent; 그리고 콘솔창에서 다음과 같은 경고창이 뜨는데 가장 좋은 해결 방법에 대해 알 수 있을까요?이 문제는 해결됐습니다! 제가 ListComponent.js 파일 안에서 div 태그 안의 key 속성에 todo.tno 를 큰따옴표로 묶은 오타였습니다.
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
15섹션 프로그래밍 방식의 인가 구현 – DB 연동 / 여러개의 권한매핑
섹션 15 (프로그래밍 방식의 인가 구현 – DB 연동) 강의에서 6:10 에 작성하신 코드위 코드에 대해서 질문 드립니다. 저는 PageDto라는 객체를 만들고해당 객체는 String url, Set<PageRole>으로 구성되어있고위와 같이 코드를 작성하였습니다.데이터를 Map에 넣고 콘솔창에 출력해보았을 때url값이 중복이라(맵의 key값) 마지막 권한만이 Map<String, String>객체에 들어가는데 하나의 url에 여러 개의 권한을 매핑 할 때 해당 구조로 작성 하는 것이 맞는지 질문 드립니다.만약에 Map<String, Set>구조이면 이후 커스텀 매니저에서 setMapping()의 로직이 달라지는지도 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
스프링 db연결 실패,,,ㅠ
도와주세요,,,
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
람다로 변할때 alt _+ enter 안됨,,
람다식으로 변할때 new RowMapper에서 알트 + 엔터 쳐도 아무것도 안나오는데 뭐가 설정이 잘못된건가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원예제 관리에서 home.html 파일이 안열리고 index.html 파일이 열려요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의를 따라하고 있는데 http://localhost:8080/를 치면 home.html 파일이 안열리고 index.html이 열립니다. 캐시를 삭제해보고 시크릿모드로 다시해봐도 index.html 파일이 열립니다! 해결 방법을 모르겠어요...구글 드라이브 파일입니다https://drive.google.com/file/d/18dkvdMVN4ivRebUFHNF3IXZRCPjDbS91/view?usp=drive_link
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
CreateMemberRequest를 static 클래스로 만든이유가 뭘가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]static말고 그 인스턴스 클래스로 만들면 안되는건가요?static용도는 main을 띄우기전에 먼저 static을 메모리에 올리는 용으로 알고있습니다.근데 일반 인스턴스 클래스를 파라미터로 받아서 사용 할 수는 없는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
cmd에서 ./gradlew 오류
빌드하고 실행하기 강의를 보고 있습니다. 윈도우 사용하고 있고, cmd에서 ./gradlew를 실행하니 이런 오류가 뜹니다.저는 자바 버전 22를 사용하고 있습니다.gradle JVM은 버전 22를 사용하고 있습니다.어떻게 해야 오류를 해결할수있을까요?
-
해결됨코드로 배우는 React with 스프링부트 API서버
PageResponseDTO 생성자의 매개변수 변수명에 관련된 질문
안녕하세요.현재 섹션 4 서비스계층 - 상품 목록 처리 강의 7분 44초 진행중 문제가 생겨 질문 드려요.제 코드에서는 totalCount 를 사용하지 못하는데, 선생님 강의에서는 totalCount 로 사용 하셨더라구요. 기존의 섹션2 - 페이지처리를 위한 DTO설계 14분 56초 부분에서는 매개변수 명을 total 로 작성 해주셨는데 매개변수 명을 totalCount 로 작성하면 해결 되는건가요??