묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결1시간만에 끝내는 virtual thread in spring boot
Performance 테스트에서 CPU 작업도 Virtual이 빠른것 같습니다
2000바퀴 돌릴때Platform은 279000ms가 나오는데Virtual은 97480ms가 나오네요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
View 환경설정에서 addAttribute에서 에러가 발생합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]사정상 무료로 사용가능한 sts4 툴을 사용해서 따라하는중인데, 03. View환경설정을 따라하는 도중에 model.addAttribute(attributeName: "data", attributeValue:"hello");에서 해당 에러가 발생합니다! 어떻게 하면 좋을까요?
-
미해결스프링 배치
예제 프로젝트 소스를 받고 싶습니다!!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 실제로 현업에서 제가 배치를 처음부터 만질 기회가 생겨서 선생님의 프로젝트를 받아서 그걸 참고하면서 만들고 싶습니다.예제 프로젝트의 완성본 깃허브 링크를 받을 수 있을까요?
-
해결됨스프링 부트 - 핵심 원리와 활용
StockConfig
[질문 내용]StockConfig 안에있는 함수가 외부에서 매트릭을 확인할 때 마다 호출된다고 하셨는데 프로메테우스에서 일정한 단위로 getStock()함수를 호출해주기때문에 로그가 찍히는 것이 맞나요?그럼 객체가 호출 될때 초기화 해주는 PostConstruct애노테이션이 저기서 무슨기능을 해주는 것인지 궁금합니다.그리고 StockConfigV1의 PostConstruct애노테이션의 동작을 StockCOnfigV2의 MeterBinder가 해주는 것 인가요?
-
미해결스프링 시큐리티 OAuth2
token repository 커스텀 관련 질문 드립니다~
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.혹시 accesstoken, refreshtoken을 직접 만든 Db에 저장을 하고 관리하고 싶은데 이렇게 사용을 하는 방법이 있을까요?oauth2Login() 사용로그인시 직접 만든 Db에서 accesstoken 가져와 처리만약 만료된다면 위 Db에 저장되어 있는 refresh토큰을 이용
-
해결됨코드로 배우는 React with 스프링부트 API서버
JWT 페이로드 안에 데이터는 어느 것이 포함되어야 하는지 질문드립니다
JWT 페이로드 안에 비밀번호가 저장되어 있는데, 주로 JWT 를 사용한다고 가정하면 어느 데이터를 페이로드 안에 넣어야 하고, 넣지 말아야 할 데이터는 어떤 것들인지 알 수 있을까요?!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
이전에 만든 기능을 현재 쓰고 있는 건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이게 다 Member에서 돌아가는 건가요? 그러면 HelloController 같은 실습 때 만든 파일들은 안쓰는 건가요? 아니면 거기서 만든 기능을 현재에도 쓰는 건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
과제 답안
두번째 과제 풀고 있는데 답이 혹시 어디 있을까요?
-
미해결실전! 스프링 부트와 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 를 큰따옴표로 묶은 오타였습니다.