묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
준영속 상태 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]준영속 상태란 persist context 안에서 한번이라도 관리된 적이 있는 entity의 상태를 의미한다고 알고 있습니다.하지만 찾아본 바에 의하면 jpa가 '한번이라도 관리된 적이 있는지' 여부를 추적하는 메커니즘을 가지고 있는 것 같지는 않고, 단순히 식별자 여부로 판단하는 것 같은데그렇다면Member memberA = em.find(Member.class, 1L);Member memberB = new Member("B", memberA.getId());memberB도 준영속 상태라고 보는 것이 맞나요?memberB가 준영속 상태가 아니라면 사실상 준영속 상태를 만드는 방법은 detach()를 호출하는 방법밖에 없는 건가요?감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
(해결) 각 테스트가 상태를 공유하지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]"회원 리포지토리 테스트 케이스 작성" 강의에서 MemoryMemberRepositoryTest를 작성하시며 @AfterEach를 통해 각 테스트 케이스가 끝날 때 마다 repository 필드의 상태를 초기화해야 한다고 말씀하셨습니다.그런데 저는 별 다른 오류가 나타나진 않아서 다음과 같이 작성해봤습니다.@AfterEach void afterEach() { System.out.println(repository.hashCode()); }그랬더니 각 repository의 해쉬가 서로 다르더라구요. MemoryMemberRepository 구현 내부에서 상태를 출력하게 해보면, 매 테스트 케이스마다 새로운 상태가 되는 것으로 보입니다.제가 잘못 작성한 부분이 있는 걸까요? 아니면 스프링, 라이브러리 버전의 문제인가요? 전체 코드는 다음과 같습니다. 읽어주셔서 감사합니다.// MemoryMemberRepository.javapackage hello.hello_spring.repository; import hello.hello_spring.domain.Member; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; public final class MemoryMemberRepository implements MemberRepository { private final Map<Long, Member> store = new HashMap<>(); private long sequence = 0; @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 store.values() .stream() .toList(); } public void clearStore() { store.clear(); } }// MemoryMemberRepositoryTest.javapackage hello.hello_spring.repository; import hello.hello_spring.domain.Member; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @AfterEach void afterEach() { System.out.println(repository.hashCode()); } @Test void save() { var member = new Member(); member.setName("spring1"); repository.save(member); var result = repository.findById(member.getId()).get(); assertThat(member).isEqualTo(result); } @Test void findByName() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); var result = repository.findByName("spring1").get(); assertThat(result).isEqualTo(member1); } @Test void findAll() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); var result = repository.findAll(); assertThat(result).hasSize(2); } }
-
미해결스프링 시큐리티 OAuth2
spring security 6부터 Implicit 지원 안하네요
spring security 6부터 AuthorizationGrantType.IMPLICIT가 제거되어서 OAuth2AuthorizationRequestException이 발생합니다.spring security 6로 실습 따라가면서 학습하시는 분들은 참고하세요https://github.com/spring-projects/spring-security/issues/11506
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
환경변수 이후 build failed
환경변수 까진 다시 설정했습니다만.. build 안되네요
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
정신이 나갈것같아요
ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\JavaPlease set the JAVA_HOME variable in your environment to match thelocation of your Java installation.C:\study\hello-spring>환경변수에 java-home 추가해서 경로 다시쓰고 자바 23버전 설치하고 인텔리제이 자바23 통일하고 다해봤는데. 안되네요
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
[16강] 확장함수 관련 질문입니다!
안녕하세요 강사님 확장함수 관련하여 질문이 있습니다. 강의 중에 확장함수는 원본 클래스의 private, protected 멤버 접근이 안된다.라고 말씀해주신 부분이 있습니다. 제가 확장함수를 이해하기로는 특정 클래스에 내가 사용할 특정 로직을 심는 함수라고 이해를 했습니다. 이렇게 이해를 하고 나니어짜피 외부에서는 확장함수로 추가할 원본 클래스의 private 혹은 protected 멤버에 접근이 불가능할텐데,확장함수는 원본 클래스의 private, protected 멤버 접근이 안된다. 내용은 어디에 어떻게 적용이 되는 것인지 이해가 잘 가지 않습니다. 혹시 어떠한 경우에 적용이 되는 내용인지 조금 더 구체적인 예시를 들어주실 수 있으실까요 ?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
22강 다차원 배열과 문자열 배열 j=0으로 선언되는 사유
22강 다차원 배열과 문자열 배열 j=0으로 선언되는 사유가 궁금합니다. 04:38 에 for 문 2개인데 첫번째 for문 탈출 후에두번째 for 문에서 j=2 상태에서 위 for문으로 올라갈때 j가 다시 j=0으로 선언되는 사유가 궁금합니다.
-
미해결스프링 시큐리티
메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/user").hasRole("USER") .anyRequest().permitAll(); http.formLogin(); } }@RestController public class SecurityController { @GetMapping("/") public String index() { return "home"; } @GetMapping("/user") public String user() { return "user"; } }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
명령프롬프트 gradle builder 실행
경로 찾아서 gradle builder 하니 오류가 뜹니다.gradle clean builder 로 해도 오류가 뜨네요. 자바 경로를 찾을 수 없다고 뜨는 것 같은데...
-
미해결
spring-data-jpa 연습 중 순환참조 오류가 발생했습니다.
안녕하세요. 최근 spring-data-jpa 를 공부하다 이상한 순환 참조 오류를 발견했습니다.그런데 도통 납득이 되지 않아 여쭤보고자 질문 드립니다.spring-data-jpa 를 사용하기 전, 저는 주로 MyBatis 를 아래처럼 주로 사용했습니다.// 주로 mybatis interface 인 mapper 를 먼저 선언하고 @Mapper public interface MyBatisMapper {/* ... */} /* ------------ */ // DAO 객체에 주입해 사용하는 형태로 사용했습니다. @Repository public class MyBatisRepo { private final MyBatisMapper mapper; public MyBatisRepo(MyBatisMapper mapper) { this.mapper = mapper; } /* 생략 */ }그래서 JPA 에서도 이처럼 사용해 볼까 하는 마음에 연습하던 중, 순환참조 오류가 발생하였습니다. 아래는 spring-data-jpa 에서 오류가 발생한 코드입니다.TestEntity : 연습용 엔티티@Entity public class TestEntity { @Id private Long id; }DAO 인터페이스 : repository 규약public interface TestRepo { // 연습용이라 텅 비어있습니다. }JPA 인터페이스public interface JPATestRepo extends JpaRepository<TestEntity, Long> { // 연습용이라 텅 비어있습니다. }Repository 구현체@Repository public class JPATestRepoImpl implements TestRepo { private final JPATestRepo jpaRepo; public JPATestRepoImpl(JPATestRepo jpaRepo) { this.jpaRepo = jpaRepo; } // 연습용이라 이후 아무 내용도 없습니다. }실행시 발생하는 에러2024-10-19T19:46:00.760+09:00 WARN 66384 --- [testing] [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'JPATestRepoImpl' defined in file [/~~~/Desktop/Coding/testing/build/classes/java/main/core/testing/JPATestRepoImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'JPATestRepoImpl': Requested bean is currently in creation: Is there an unresolvable circular reference? 2024-10-19T19:46:00.761+09:00 INFO 66384 --- [testing] [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2024-10-19T19:46:00.762+09:00 INFO 66384 --- [testing] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2024-10-19T19:46:00.807+09:00 INFO 66384 --- [testing] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2024-10-19T19:46:00.811+09:00 INFO 66384 --- [testing] [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-10-19T19:46:00.825+09:00 ERROR 66384 --- [testing] [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: The dependencies of some of the beans in the application context form a cycle: ┌──->──┐ | JPATestRepoImpl defined in file [/~~~/Desktop/Coding/testing/build/classes/java/main/core/testing/JPATestRepoImpl.class] └──<-──┘ Action: Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. Process finished with exit code 1 콘솔 에러에 따르면 JPATestRepoImpl 가 자기 자신을 의존해 순환참조가 발생한다고 합니다.하지만 JPATestRepoImpl 는 (코드에서 볼 수 있듯이) JPATestRepo 를 주입받을 뿐, 자기자신을 의존하고 있지 않습니다. 게다가 더 혼란스러운 점은 만약 JPATestRepoImpl 의 이름을 다른 것으로 바꾸면 (예를 들어 TestRepoJPAImpl) 거짓말처럼 순환 참조 오류가 없어집니다. 제가 추측하기로는 스프링이나 JPA 가 bean 이름을 헷갈려 발생하는 오류 같은데, 이를 헷갈려 하는 이유를 도통 모르겠습니다.당연히 컴퓨터 재시작, 프로젝트 clean, rebuild, 프로젝트 재생성해 시도해봤지만 모두 같은 현상이 나타납니다. 도대체 어떤 이유 때문에 이런 현상이 일어나는 걸까요...?Github repo : https://github.com/jbw9964/testing
-
미해결스프링 시큐리티 OAuth2
인증을 세션이 아닌 jwt로 할 경우 질문입니다.
현재 oauth2Login api를 사용해서 사용자 로그인 인증에 성공하면 인증객체가 세션에 저장되고, 이후 인가서버에 code 요청시 OAuth2AuthorizationEndpointFilter 에서도 securityContext에 저장돼있는 인증객체로 인해 인증성공으로 판단후 code를 발급합니다. 근데 세션 기반이 아닌, jwt 토큰을 받아서 검증후 인증을 처리하는 로직이라면 jwt 토큰을 검증하는 필터인 resource Server api의 필터가 OAuth2AuthorizationEndpointFilter 보다 뒤에 있기 때문에 인증객체가 없어서 코드발급을 안해줄텐데 이럴땐 어떻게 해야하나요? jwt토큰을 검증하고 인증객체를 만드는 필터를 OAuth2AuthorizationEndpointFilter 앞에 만든다고 쳐도 그러면 resource Server api의 필터와 똑같이 동작하는 필터가 생기는건데 좋은 방법인것 같진 않습니다. 어떻게 해야 하나요?
-
미해결스프링 시큐리티 OAuth2
Resouce owner 인증 전 단계 질문입니다.
클라이언트가 인가서버에게 인가코드를 요청하기 전에 사용자인증을 받기 위해 사용자 id, 비밀번호를 입력하는 단계가 먼저 거치고, 인증이 되면 인가서버에게 /oauth2/authorize url로 response_type=code ~~ 이런식의 정보를 포함해서 요청하게 되는데 그러면 사용자가 인증받을때 입력한 사용자 id, 비밀번호를 통해 인증처리를 하는건 인가서버에서 하는게 아닌건가요? 인가서버에서 하는거라면 입력한 사용자 id, 비밀번호는 어떤 필터에서 처리하는건가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
스캐너 사용하는 문제풀이중 에러코드
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스캐너 사용한 여러 문제풀이시 전부 같은 에러코드로 컴파일이 되지 않는데요.강사님이 쓰신 코드와 완전히 같은데도 말이죠.어떻게 해결 하나요?
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
2018 연속된 자연수의 합 구하기 백준 사이트에서 메모리 초과 오류가 발생합니다.
이유가 뭘까요 ....?import java.util.Scanner;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int count = 1; int startIndex = 1; int endIndex = 1; int sum = 1; int n = sc.nextInt(); while(endIndex != n) { if(sum == n){ count++ ; endIndex++ ; sum = sum + endIndex; } else if(sum > n) { sum = sum - startIndex; startIndex++ ; } else { endIndex++ ; sum = sum + endIndex; } System.out.print(count); } }}
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
Java기출변형
29:30마지막 세줄 System.out.println(result(1);System.out.println(result(2);System.out.println(result(3);은 왜 출력안하나요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
3회 대비영상 2번째 동영상 질문있어요.
int arr[2] = {++a, b++} printf(a,b) printf(arr[0],arr[1]);배열안에는 왜 b++의 값이 6으로 출력되지 않는가요? 배열에서 후위 연산자가 적용이 안된다고 보면 되는것일까요? (설명하신대로 배열에 적용 후 +1이 되기때문에 미적용?) 왜 자식클래스의 sharedMethod 호출됨이 출력되지..? 오류가 나야하는게 아닌가..? 10분동안 봤는데 이제보니 소문자의 parent였네요.. 낚시 제대로 당했습니다..ㅠㅠ 2번은 해결완료..!
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
32:14 질문있습니다!
안녕하세요.혹시 답을SELECT * FROM 제품WHERE 단가 < (SELECT AVG(단가) FROM 제품);으로 해도 상관 없을까요? 질문은 동영상 강의에 들어가서 오른쪽에 커뮤니티 버튼을 통해 해주세요. 그래야어떤 강좌에서 질문하셨는지 알 수 있습니다.영상에서 몇 분 몇 초 대를 알려주셔야 제가 한 번에 질문 내용 확인이 가능합니다.이미 다른 누군가가 질문을 한 이력이 있을 수 있습니다. 질문 게시판을 한 번 확인 부탁드립니다.학교의 과제나 타 강사의 코드 등 외부 수업 자료에 대해서는 답변하지 않습니다.제가 다루는 커리큘럼 외의 이론이나, 너무 디테일한 컴퓨터 이론에 대해서는 답변 드리지 않습니다.시험에 안 나오는 경우가 많고, 나와 봤자 1문제 나오는데 외워야 할 부분이 많은 것 등 (예시: 서브넷 마스크 계산)질문을 올릴 때 이 글은 모두 지우고 내용을 입력해주세요.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
SQL 문제 답변 작성시 계행 준수해야할까요?
SQL 쿼리문 작성시 계행을 잘 지켜야하는지 궁금합니다
-
해결됨김영한의 실전 자바 - 기본편
this 사용에 관한 질문 드립니다.
[질문 내용]안녕하세요 항상 좋은 강의 감사드립니다.영한님께서는 this를 무조건 붙이는 방법론에 대해서 추천하시지 않는다고 하셨는데, 그럼 this의 사용을 피하기 위해 의도적으로 변수명을 다르게 지으시는지 여쭤보고 싶습니다. 코드는 깔끔해지겠지만 오히려 헷갈리는 상황이 발생할수도 있겠다는 생각이 들어 여쭤봅니다! 감사합니다!
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
업케스팅 질문입니다
20:57에서main함수 내에 parent.childMethod();를 넣는다면업케스팅된 상황에 자식에만 있는 것을 불러오는 것이라오류가 발생한다가 맞을까요??