묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
meberRepository 질문
위 MemberServiceTest 클래스에서 memberRepository참조변수를 beforeEach메서드에서 초기화한게 아니고 필드에서 memberRepository를 한 번 초기화 하였는데 왜 BeforeEach 실행시 이렇게 모두 다른 memberRepository 주소값이 출력되는 지 잘 모르겠습니다. 필드에서 한번만 초기화 하였고 memberRepository의 값의 변화도 없는데 모두 같은 주소값이 출력되야 하는 거 아닌가요?
-
미해결실전! 스프링 데이터 JPA
멤버, 팀 테스트 코드 NullPointerException 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]선생님과 소스는 조금씩 다르지만 문제는 없다고 보는데 도대체 왜 널포인터익셉션이 발생하는지 모르겠습니다... 테스트 코드 작성 시 teamA,teamB 저장 및 콘솔로 출력확인, db 저장도 확인[test.java]@SpringBootTest@Transactional@Rollback(false)public class MemberTest {@PersistenceContextEntityManager em;@Testpublic void testEntity(){Team teamA = Team.builder().name("teamA").build();Team teamB = Team.builder().name("teamB").build();em.persist(teamA);em.persist(teamB);System.out.println("teamA = " + teamA);System.out.println("teamB = " + teamB);Member member1 = new Member("member1", 10, teamA); // 여기서 에러 발생=========================teamA,B 객체 모두 정상 출력=>teamA = Team(id=1, name=teamA) =>teamB = Team(id=2, name=teamB)[team.java]@Entity@AllArgsConstructor@NoArgsConstructor(access = AccessLevel.PROTECTED)@Data@Builder@ToString(of = {"id", "name"})public class Team {@Id@GeneratedValue@Column(name = "team_id")private Long id;private String name;@OneToMany(mappedBy = "team")private List<Member> members = new ArrayList<>();}3.[Member.java]@Entity@Getter@AllArgsConstructor@NoArgsConstructor(access = AccessLevel.PROTECTED)@Builder@ToString(of = {"id", "username", "age"})public class Member {@Id@GeneratedValue@Column(name = "member_id")private Long id;private String username;private int age;@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "team_id")private Team team;public Member(String username, int age, Team team) {this.username = username;this.age = age;if (team != null) {changeTeam(team);}}// 멤버는 팀을 변경할 수 있음// 멤버에서 변경되면 팀에 있는 멤버리스트도 변경되어야 함public void changeTeam(Team team) {this.team = team;team.getMembers().add(this);}}생성자에서 team !=null 이 아닐 때 changeTeam(team)을 호출해야 하는데 에러 로그 상 changeTeam 메소드 호출 시 "team.getMembers().add(this);" 에서 널포인터가 발생합니다...확인 부탁드립니다![에러 메세지] java.lang.NullPointerExceptionat study.datajpa.entity.Member.changeTeam(Member.java:40)at study.datajpa.entity.Member.<init>(Member.java:32)at study.datajpa.entity.MemberTest.testEntity(MemberTest.java:38)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
fail() 에 빨간줄이 그어집니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]fail(); 여기서 오류가 나는데 이유를 모르겠어요 package hello.hellospring.service;import hello.hellospring.domain.Member;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import static org.assertj.core.api.Assertions.*;class MemberServiceTest {//테스트는 한글메서드로 바꿔도 좋다.MemberService service = new MemberService();@Testvoid 회원가입() {//givenMember member = new Member();member.setName("hello");//whenLong saveId = service.join(member);//thenMember findeMember = service.findOne(saveId).get();Assertions.assertThat(member.getName()).isEqualTo(findeMember.getName());}@Testvoid 중복회원예외() {//givenMember member1= new Member();member1.setName("spring");Member member2= new Member();member2.setName("spring");//whenservice.join(member1);try{service.join(member2); //validate에서 걸려서 예외가 터져야 한다. fail(); 여기가 오류가 나요 }catch (IllegalStateException e){//성공assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");}//then}@Testvoid 회원조회() {}}
-
미해결스프링 시큐리티 OAuth2
소셜로그인 정보가져오기
강사님 수업을 보면 정보를 다 가지고 오는 것을 볼 수 있는데 package com.example.oauth.config.OAuth2; import org.springframework.security.core.authority.SimpleGrantedAuthority; import java.util.List; import java.util.Map; public interface ProviderUser { String getId(); String getUserName(); String getPassword(); String getEmail(); String getProvider(); List<SimpleGrantedAuthority> getAuthorities(); Map<String, Object> getAttributes(); }package com.example.oauth.config.OAuth2; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.core.user.OAuth2User; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; // 여기는 공통적인 부분만 추상화해서 모아놓은 곳이다. // Google, Naver에서 다른 부분들은 따로 만들어줄 것이다. public abstract class OAuth2ProviderUser implements ProviderUser{ private Map<String, Object> attributes; private OAuth2User oAuth2User; private ClientRegistration clientRegistration; public OAuth2ProviderUser(Map<String, Object> attributes, OAuth2User oAuth2User, ClientRegistration clientRegistration) { this.attributes = attributes; this.oAuth2User = oAuth2User; this.clientRegistration = clientRegistration; } @Override public String getPassword() { return UUID.randomUUID().toString(); } @Override public String getEmail() { return (String) getAttributes().get("email"); } @Override public List<SimpleGrantedAuthority> getAuthorities() { return oAuth2User.getAuthorities().stream() .map(authority -> new SimpleGrantedAuthority(authority.getAuthority())) .collect(Collectors.toList()); } @Override public String getProvider() { return clientRegistration.getRegistrationId(); } @Override public Map<String, Object> getAttributes() { return attributes; } }package com.example.oauth.config.OAuth2; import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.core.user.OAuth2User; import java.util.Map; public class NaverUser extends OAuth2ProviderUser{ public NaverUser(OAuth2User oAuth2User, ClientRegistration clientRegistration) { super(( Map<String, Object>) oAuth2User.getAttributes().get("response"), oAuth2User, clientRegistration); } @Override public String getId() { return (String) getAttributes().get("id"); } @Override public String getUserName() { return (String) getAttributes().get("name"); } }package com.example.oauth.config.OAuth2; import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.core.user.OAuth2User; public class GoogleUser extends OAuth2ProviderUser{ public GoogleUser(OAuth2User oAuth2User, ClientRegistration clientRegistration) { // 사용자의 정보는 oAuth2User.getAttributes() 여기에 담겨져 있다. // 여기는 클레임 형식 즉, Map 형식으로 되어 있다. super(oAuth2User.getAttributes(), oAuth2User, clientRegistration); } @Override // 식별자의 역할 public String getId() { return (String) getAttributes().get("sub"); } @Override // 유저 id public String getUserName() { return (String) getAttributes().get("name"); } }package com.example.oauth.config.OAuth2; import com.example.oauth.repository.UserRepository; import com.example.oauth.service.UserService; import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Service; @Service // OAuth2UserService : Spring Security에서 OAuth 2.0을 사용하여 인증한 사용자 정보를 가져오기 위한 인터페이스입니다. // 이 인터페이스를 구현하여 사용자 정보를 가져오는 방법을 정의하고, // OAuth 2.0 프로바이더(예: Google, Facebook, GitHub 등)로부터 인증된 사용자 정보를 추출할 수 있습니다. // OAuth2UserRequest : 이 객체는 OAuth 2.0 클라이언트 정보, 권한 부여 코드, 액세스 토큰 등을 포함합니다. // 이 정보를 사용하여 사용자 정보를 요청하고 처리할 수 있습니다. // OAuth2User : OAuth 2.0 프로바이더(인증 제공자)로부터 가져온 인증된 사용자 정보를 나타냅니다. // 이 정보는 사용자의 프로필 데이터, 권한(스코프), 사용자 ID 등을 포함할 수 있습니다. public class CustomOAuth2UserService extends AbstractOAuth2UserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> { public CustomOAuth2UserService(UserRepository userRepository, UserService userService) { super(userRepository, userService); } @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { // ClientRegistration은 Spring Security에서 OAuth 2.0 또는 OpenID Connect (OIDC) 클라이언트 // 애플리케이션의 등록 정보를 나타내는 클래스입니다. 클라이언트 애플리케이션의 설정 및 속성을 포함합니다. // userRequest.getClientRegistration()은 인증 및 인가된 사용자 정보를 가져오는 // Spring Security에서 제공하는 메서드입니다. ClientRegistration clientRegistration = userRequest.getClientRegistration(); OAuth2UserService<OAuth2UserRequest, OAuth2User> oAuth2UserService = new DefaultOAuth2UserService(); OAuth2User oAuth2User = oAuth2UserService.loadUser(userRequest); // 여기에는 구글, 네이버 정보가 담겨져 있다. ProviderUser providerUser = super.providerUser(clientRegistration, oAuth2User); // 회원가입 super.register(providerUser, userRequest); return oAuth2User; } }package com.example.oauth.config.OAuth2; import com.example.oauth.entity.UserEntity; import com.example.oauth.repository.UserRepository; import com.example.oauth.service.UserService; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Service; @Service @Getter @RequiredArgsConstructor @Log4j2 // 사용자 등록과 어떤 사용자인지 알아볼 수 있는 곳 public abstract class AbstractOAuth2UserService { private final UserRepository userRepository; private final UserService userService; protected void register(ProviderUser providerUser, OAuth2UserRequest userRequest) { UserEntity findUser = userRepository.findByUserName(providerUser.getUserName()); if(findUser == null) { String registrationId = userRequest.getClientRegistration().getRegistrationId(); userService.register(registrationId, providerUser); } else { log.info("user : " + findUser); } } protected ProviderUser providerUser(ClientRegistration clientRegistration, OAuth2User oAuth2User) { String registrationId = clientRegistration.getRegistrationId(); if(registrationId.equals("google")) { return new GoogleUser(oAuth2User, clientRegistration); } else if(registrationId.equals("naver")) { return new NaverUser(oAuth2User, clientRegistration); } else { return null; } } }이거를 REST 방식으로 하려고 컨트롤러 // 소셜 로그인 @GetMapping("/api/v1/user/success") public ResponseEntity<?> socialLogin(Authentication authentication, @AuthenticationPrincipal OAuth2User oAuth2User) { OAuth2AuthenticationToken oAuth2AuthenticationToken = (OAuth2AuthenticationToken) authentication; if (oAuth2AuthenticationToken != null) { ResponseEntity<?> oAuth2Login = memberService.login(oAuth2AuthenticationToken, oAuth2User); return ResponseEntity.ok().body(oAuth2Login); } else { return ResponseEntity.badRequest().build(); } }서비스 // 소셜 로그인 public ResponseEntity<?> login(OAuth2AuthenticationToken oAuth2AuthenticationToken, OAuth2User oAuth2User) { Map<String, Object> attributes = oAuth2User.getAttributes(); log.info("attributes : " + attributes); String authorizedClientRegistrationId = oAuth2AuthenticationToken.getAuthorizedClientRegistrationId(); String email = null; TokenDTO jwt = null; if (authorizedClientRegistrationId.equals("google")) { email = (String) attributes.get("email"); log.info("email : " + email); jwt = createJWT(email); log.info("jwt : " + jwt); } else if (authorizedClientRegistrationId.equals("naver")) { Map<String, Object> response = (Map) attributes.get("response"); email = (String) response.get("email"); jwt = createJWT(email); log.info("jwt : " + jwt); } else { log.info("아무런 정보를 받지 못했습니다."); } return ResponseEntity.ok().body(jwt); } private TokenDTO createJWT(String email) { MemberEntity findUser = memberRepositroy.findByEmail(email); List<GrantedAuthority> authoritiesForUser = getAuthoritiesForUser(findUser); TokenDTO tokenForOAuth2 = jwtProvider.createTokenForOAuth2(email, authoritiesForUser); TokenEntity findToken = tokenRepository.findByMemberEmail(tokenForOAuth2.getMemberEmail()); if (findToken == null) { TokenEntity tokenEntity = TokenEntity.toTokenEntity(tokenForOAuth2); tokenRepository.save(tokenEntity); log.info("token : " + tokenForOAuth2); } else { tokenForOAuth2 = TokenDTO.builder() .id(findToken.getId()) .grantType(tokenForOAuth2.getGrantType()) .accessToken(tokenForOAuth2.getAccessToken()) .refreshToken(tokenForOAuth2.getRefreshToken()) .memberEmail(tokenForOAuth2.getMemberEmail()) .build(); TokenEntity tokenEntity = TokenEntity.toTokenEntity(tokenForOAuth2); tokenRepository.save(tokenEntity); } return tokenForOAuth2; }이렇게 구성을 했는데 JWT는 제외하고 public ResponseEntity<?> socialLogin(Authentication authentication,@AuthenticationPrincipal OAuth2User oAuth2User) { 이거로 정보를 가지고 오려고 했는데 정보를 안가지고 와지고 계속 JWT 검증 로직에 걸려서 잘못된 JWT라고 뜹니다 ㅠㅠ package com.example.study01.config.jwt; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Log4j2 @RequiredArgsConstructor public class JwtAuthenticationFilter extends OncePerRequestFilter { public static final String HEADER_AUTHORIZATION = "Authorization"; private final JwtProvider jwtProvider; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; // request header에서 JWT를 추출 // 요청 헤더에서 JWT 토큰을 추출하는 역할 String jwt = resovleToken(httpServletRequest); log.info("jwt in JwtAuthenticationFilter : " + jwt); // 어떤 경로로 요청을 했는지 보여줌 String requestURI = httpServletRequest.getRequestURI(); log.info("uri JwtAuthenticationFilter : " + requestURI); if(StringUtils.hasText(jwt) && jwtProvider.validateToken(jwt)) { // 토큰이 유효할 경우 토큰에서 Authentication 객체를 가지고 와서 SecurityContext에 저장 Authentication authentication = jwtProvider.getAuthentication(jwt); log.info("authentication in JwtAuthenticationFilter : " + authentication); // Spring Security의 SecurityContextHolder를 사용하여 현재 인증 정보를 설정합니다. // 이를 통해 현재 사용자가 인증된 상태로 처리됩니다. // 위에서 jwtProvider.getAuthentication(jwt)가 반환이 UsernamePasswordAuthenticationToken로 // SecurityContext에 저장이 되는데 SecurityContextHolder.getContext().setAuthentication(authentication); // 처리를 하는 이유는 다음과 같다. /* * 1. 인증 정보 검증: JWT 토큰이나 다른 인증 정보를 사용하여 사용자를 식별하고 * 권한을 확인하기 위해서는 토큰을 해독하여 사용자 정보와 권한 정보를 추출해야 합니다. * 이 역할은 jwtProvider.getAuthentication(jwt)에서 수행됩니다. * 이 메서드는 JWT 토큰을 분석하여 사용자 정보와 권한 정보를 추출하고, 해당 정보로 인증 객체를 생성합니다. * * 2. 인증 정보 저장: * 검증된 인증 객체를 SecurityContextHolder.getContext().setAuthentication(authentication);를 * 사용하여 SecurityContext에 저장하는 이유는, Spring Security에서 현재 사용자의 인증 정보를 * 전역적으로 사용할 수 있도록 하기 위함입니다. 이렇게 하면 다른 부분에서도 현재 사용자의 인증 정보를 사용할 수 있게 되며, * Spring Security가 제공하는 @AuthenticationPrincipal 어노테이션을 통해 현재 사용자 정보를 편리하게 가져올 수 있습니다. * */ SecurityContextHolder.getContext().setAuthentication(authentication); } else { log.error("유효한 JWT가 없습니다. : " + requestURI); } filterChain.doFilter(request, response); } // 토큰을 가져오기 위한 메소드 // Authorization로 정의된 헤더 이름을 사용하여 토큰을 찾고 // 토큰이 "Bearer "로 시작하거나 "Bearer "로 안온 것도 토큰 반환 private String resovleToken(HttpServletRequest httpServletRequest) { String token = httpServletRequest.getHeader(HEADER_AUTHORIZATION); // 토큰이 포함하거나 Bearer 로 시작하면 true if(StringUtils.hasText(token) && token.startsWith("Bearer ")) { return token.substring(7); } else if(StringUtils.hasText(token)) { return token; } else { return null; } } }이럴 경우는 어떻게 해야하나요... 컨트롤러에서 정보를 가지고 와서 그 정보로 JWT를 만들어 반환하려고 하는데 정보를 가지고 오는게 계속 실패를 해서...
-
미해결스프링 시큐리티 OAuth2
이제 spring boot 버전 3으로 가는데
spring boot 3 버전은spring security 디폴트가 6로 설정되어 있더라구요spring security 6 진행시에 Oauth2 강의 진행에 문제가 없을까요?? 여러가지로 바뀐게 많아서
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원목록 열람 실패 해결관련 문의사항
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 회원 목록 출력?시 에러 발생하여 출력 되지 않아 해결 해보았습니다. 해당 문제를 이렇게 해결 하는게 적절한 방법 인지 확인 부탁드립니다! 현상1. 회원 가입 진행 하지 않고 (데이터 없음), 회원 목록 접근시 정상 화면 송출2. 회원 가입 진행 후, 회원 목록 접근 시, 에러 발생 에러 내용생각한 원인 및 해결 방법Member 클래스 내, 접근 제한자가 Private로 설정된 id와 name 변수를 getId, getName이 아닌 방법으로 꺼내와서 문제 발생. getId, GetName매서드로 접근시 정상 동작 Member 클래스에서 Getter And Setter로 생성하지 않고 직접 타이핑 해서 발생.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
2강 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]java 11설치후 Springboot 2.7.16을 깔았는데 Run할수있는 표시도 안나오고자꾸 저렇게 오류가 뜹니다 뭐가 문제일까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
프로젝트 hello 실행했을때의 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]4:12:44 PM: 실행 중 ':classes'...> Task :compileJava FAILED1 actionable task: 1 executedFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':compileJava'.> invalid source release: 11* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 1s4:12:45 PM: 실행이 완료되었습니다 ':classes'.이런 오류와 함께 빌드가 실패합니다. 뭐가 문젠지 모르겠어요. 한번 빌드를 실행해서 됐었고, 코드를 실행하려고 하니까 빌드가 실패했다는 오류가 뜹니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 부트 버전 어느것을 선택해야하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 여기에서 버전을 어느것을 선택해야하나요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
서버에 연결이 너무 느려서 안되는데
시간이 초과되어서 안되는데 인바운드 규칙엔 8080, 22,등등 모두 추가해둔 상태입니다. 혹시보이는 사진이 문제일까 싶어서 첨부합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
build.gradle 호환 에러
start.spring.io 에서 generate 하고 빌드를 하는데 스프링부트 플러그인과 gradle 버전이 호환이 안된다고 에러가 뜨는데 그러면 버전을 낮춰서라도 실행이 되면 상관없나요? 버전을 낮추면 실행은 되는데 이후의 강의를 따라가는데 뭔가 문제가 생길까 싶어서 여쭤봅니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 빌드오류요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]할 수 있는 설정은 전부 jdk 17로 했구요, 컴파일 설정도 17로 해놓았습니다. 3짤에 project탭도 17로 설정되어있습니다. java version 도 보이시는대로 17인데..자꾸 이런 오류 메세지가 뜹니다. Incompatible because this component declares a component, compatible with Java 17 and the consumer needed a component, compatible with Java 11 라구요. 아 세번째 이미지에서 .gradle과 build 폴더는 원래대로 다시 exclude로 빨간색 되어있는 상태입니다.뭐가 문제인지 모르겠네요.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터베이스 방언 설정
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]자바 ORM 표준 JPA 프로그래밍에서는 maven으로 빌드 툴을 선택하였고 DB 방언을 dialect를 통해서 직접 설정(ex.h2.dialect)해주었는데 gradle로 할때는 따로 설정하는 부분이 영상에 안보이는데 gradle에서 JPA 방언 설정 과정에 대해서 궁금합니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
질문입니다!
@Size와 @Past의 어노테이션이 뜨질 않습니다.@Valid도 안뜹니다.
-
미해결실전! 스프링 데이터 JPA
스프링데이터 레포지토리 매개변수 질문
@Repository public interface LikeRepository extends JpaRepository<Like,Long> { Optional<Like> findByMemberAndCourse(Member member, Course course); Optional<Like> findByMemberIdAndCourseId(Long memberId, Long CourseId); } 스프링데이터 레포지토리에서 객체로 찾을때와 id로 찾을때가 있는것 같은데 어느상황엔 무얼써야하는지 혹은 어떤걸 추천하시는지 궁금합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
500 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]https://drive.google.com/file/d/1mu_pXERJk_lZC5yprE5sVQWm1RfNpIcp/view?usp=drive_link회원 목록이나 회원 등록 페이지를 들어가면 위와 같은 에러가 뜹니다. 이유를 못 찾겠어서 질문 글 남깁니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DB 컬럼 생성 조건이 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강사님. 엔티티 자바파일 생성 후 서버 구동시 DB에 해당 엔티티에 들어있는 필드들이 컬럼으로 생성이 되는것은 잘 알고 있습니다.그런데 컬럼으로 생성이 안되는 조건이 궁금합니다.왜 궁금하냐면, 예를들어 강이의 Order 엔티티에서 setMember, addOrderItem, getTotalPrice 등의 메서드들은 DB에 필드 생성이 되지 않아서 입니다.DB에 컬럼이 생성되는 조건/생성되지 않는 조건이 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
아무리해도 서버가 켜져있는데 접속이 안됩니다.
서버도 켜고 인바운드 규칙도 변경했는데 서버에선 22 이 르스닝으로 방화벽이 안뚫려서 접속이 안된거 같은데 어떻게 해결하나요ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
./gradlew clean build 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 저는 현재 springboot 2.7.16버전 사용 중입니다. 배포파일 만드는 과정에서 ./gradlew clean build를 했는데 에러가 발생합니다.해결 방법이 있을까요?ㅠ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
InternalService 빈 등록 질문
트랜잭션 AOP 주의 사항 - 프록시 내부 호출2강의 질문입니다. @TestConfiguration static class InternalCallV1TestConfig { @Bean CallService callService() { return new CallService(new InternalService()); } /*@Bean InternalService internalService() { return new InternalService(); }*/ }위 코드에서 보시는 것과 같이 InternalService를 직접 빈으로 등록해주지 않고 CallService생성자 안에서 InternalService를 주입시켜주면 트랜잭션이 적용되지 않던데, 꼭 InternalService를 빈으로 직접 등록해줘야 하나요??