묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 기본편
helloshop
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.com.helloshop이라 쓰면 그냥 패키지 하나로 뜨고 그 밑에 product를 만들어도 helloshop패키지 이름이 바뀝니다. 뭐가 문제일ㄲ?ㅏ요
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
Snowflake처럼 동적으로 생성되는 ID, Mock 테스트가 올바른 접근법일까요?
14:42 에서 Snowflake 알고리즘으로 articleId를 생성한 후 DB에 저장된 121530268440289280L값을 사용해서 테스트 코드를 작성하시는 것을 보고,실제로 Snowflake를 도입해서 Id를 생성하고 같은 방식으로 테스트 코드를 작성한다면 DB에 종속적이라서 반복적으로 테스트 코드를 실행할 때 테스트 코드의 유지보수에서 문제가 발생할 수 있을 거라는 생각이 들었습니다.이런 문제를 막기 위해서 테스트 시에는 Mock 객체를 사용해 미리 정해진 Snowflake가 고정 ID 값을 반환하도록 하는 방식으로 테스트 코드를 작성하는게 맞는건지 궁금해서 질문글을 남기게 되었습니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
@NaturalIdCache에 대한 보충 설명 및 사용법 공유
'25. 엔티티의 자연키 지정' 영상의 후반부에 적용한 @NaturalIdCache에 대해 추가로 학습한 내용이, 저처럼 해당 애노테이션을 처음 접한 분들에게 도움이 될 것 같아서 글을 작성합니다. 강의에서 오해가 있을 수 있는 부분, 그리고 자연키에 캐시를 적용하는 방법을 정리해 보았습니다. 강의 내용과 실제 동작의 차이점강의에서는 “같은 트랜잭션 안에서 같은 아이디 값을 가지고 여러 번 조회 시 Persistence Context 에 캐시된 값을 꺼내오는 것 처럼. @NaturalIdCache를 적용하면 이것도 영속 컨텍스트에 캐싱이 된다.”고 말씀하셨습니다. 해당 내용에 대한 이해를 돕기 위해 Hibernate의 두 가지 캐시에 대해 간단히 짚고 넘어가겠습니다.1차 캐시 (First-Level Cache): 세션(영속성 컨텍스트) 범위의 캐시입니다. 같은 트랜잭션 안에서만 유효하며, 트랜잭션이 끝나면 사라집니다. Spring Data JPA에서는 기본적으로 @Id 에 대한 조회를 1차 캐시합니다. 2차 캐시 (Second-Level Cache): 세션 팩토리 범위의 캐시로, 여러 세션에서 데이터를 공유할 수 있습니다. 적용하려면 별도의 의존성 추가 및 캐시 관련 설정(@Cache 등)이 필요합니다. 따라서, "같은 트랜잭션 안에서 캐시된 값을 꺼내온다."는 말은 세션 범위의 1차 캐시로 해석됩니다. 하지만 제가 직접 테스트해 본 결과, @NaturalIdCache는 1차 캐시가 아닌 2차 캐시와 관련이 있었으며, 1차 캐시를 적용하기 위해서는 다른 방법이 필요했습니다. 테스트를 통한 확인자연키에 대한 1차 캐시 동작을 확인하기 위해, 강의에서 적용한 Member 엔티티의 @NaturalIdCache 를 제거하고, 자연키(Email)에 @NaturalId만 적용한 상황에서 두 가지 방식으로 테스트를 진행했습니다. 테스트1: findByEmail 메서드를 사용한 조회Java@Test void NaturalIdFirstLevelCache() { Member member = Member.register(createMemberRegisterRequest(), createPasswordEncoder()); memberRepository.save(member); entityManager.flush(); entityManager.clear(); System.out.println("회원 저장 및 persistence context 초기화 완료"); // 같은 email(Natural ID)로 두 번 조회 Member findMember1 = memberRepository.findByEmail(member.getEmail()).get(); Member findMember2 = memberRepository.findByEmail(member.getEmail()).get(); assertThat(findMember1).isSameAs(findMember2); } Spring Data의 쿼리 메서드를 사용하여 이메일로 조회하는 findByEmail 메서드를 만들고, 한 트랜잭션에서 같은 회원을 두 번 조회했습니다. 자연키에 대한 1차 캐시가 동작한다면, SELECT 쿼리는 한 번만 실행되어야 합니다.결과는 SELECT 쿼리가 두 번 실행되었습니다. 즉, 자연키에 대한 1차 캐시가 동작하지 않았습니다. 테스트2: Hibernate의 자연키 관련 API를 사용한 조회@NaturalId를 다루는 글들을 찾아본 결과 Hibernate가 제공하는 자연키 관련 API가 있다는 것을 확인했고, 이를 적용하기 위해 커스텀 리포지토리를 구현했습니다.Java@Repository @RequiredArgsConstructor public class CustomizedMemberRepositoryImpl implements CustomizedMemberRepository { private final EntityManager entityManager; @Override public Optional<Member> findByNaturalId(Email naturalId) { return entityManager.unwrap(Session.class) .bySimpleNaturalId(Member.class) .loadOptional(naturalId); } } 그리고, 테스트 1과 같은 방식으로 테스트를 진행하였습니다. @Test void NaturalIdApi() { Member member = Member.register(createMemberRegisterRequest(), createPasswordEncoder()); memberRepository.save(member); entityManager.flush(); entityManager.clear(); System.out.println("회원 저장 및 persistence context 초기화 완료"); Member findMember1 = memberRepository.findByNaturalId(member.getEmail()).get(); Member findMember2 = memberRepository.findByNaturalId(member.getEmail()).get(); assertThat(findMember1).isSameAs(findMember2); }결과는 SELECT 쿼리가 한 번만 실행되었습니다. 이를 통해 자연키에 대한 1차 캐시는 @NaturalIdCache 애노테이션과 무관하게, 전용 API를 사용해야만 동작하는 것을 확인했습니다. @NaturalIdCache의 용도@NaturalIdCache Javadoc에는 다음과 같은 설명이 있습니다.Specifies that mappings from the natural id values of the annotated entity to the corresponding entity id values should be cached in the shared second-level cache.…중략This annotation is usually used in combination with Cache, since a round trip may only be avoided if the entity itself is also available in the cache.대략 “natural id와 상응하는 id에 대한 매핑을 2차 캐시에 저장하는 애노테이션이고, 엔티티가 캐시되어있어야 하기 때문에 일반적으로 Cache와 함께 사용된다.”라고 해석됩니다. 즉, 1차 캐시가 아닌 2차 캐시를 위한 애노테이션입니다. 정리2차 캐시 관련 설정 및 테스트를 마저 진행한 후 최종 정리한 내용은 다음과 같습니다. 자연키의 1차 캐시@NaturalIdCache 애노테이션과 관련 없습니다. 자연키에 @NaturalId만 붙이면 됩니다.반드시 Hibernate Session의 bySimpleNaturalId() 같은 전용 API를 사용해야 적용됩니다. 자연키의 2차 캐시@Cache와 @NaturalIdCache를 함께 사용해야 동작합니다.@Cache만 사용 시 @Id로 조회할 때만 2차 캐시가 동작합니다.@NaturalIdCache만 사용 시 자연키와 ID에 대한 매핑 정보는 캐시 히트되는 걸 확인했지만, ID와 엔티티에 대한 캐시가 없어서 캐시가 적용되지 않았습니다. @Cache와 @NaturalIdCache 모두 사용 시 ID를 통한 조회와 자연키를 통한 조회 모두 2차 캐시가 적용됩니다. 참고 자료Hibernate6.6 공식 문서NaturalCache javadocsbaeldung: Hibernate Natural IDs in Spring BootSpring Custom Repository 글의 오류나 부족한 내용을 알고 계신 분은 코멘트를 달아주시면 감사하겠습니다.
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
유형8번18분30초 질문있습니다
자식앞에 스태틱을 지웠을땐 오류가발생하는건 이해했는데 어느줄에서 발생하냐고물으면 어떻게답해야하나요?
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
14:21 업캐스팅문제 예시 5
이해를 못해서 질문하게되어 죄송합니다. 예시5번문제는 생성자 of A생성자BB1 은 알겠는데 그다음ACBD가 아니고 CD인 이유를 모르겠습니다
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
13:14 업캐스팅 문제예시4 질문입니다
정답이 Constructor of AACBD가 아닌가요? 어렵네요
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
4:07 업캐스팅 예제 해섷주신거봐도 잘 모르겠어서 질문합니다
다른 분이 질문해서 해설 올려주신거 봤는데도저는 아직 이해를 못했습니다.car.start()는void start-Tesia Model3시동걸기인데 car.stop()는 왜 Tesia Model3정지가 아니고 Tesia Model3정지 및 전원끄기인가요?용기내서 질문하는거니까 귀찮으셔도 해설 부탁드립니다
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
25분에 빈칸채우기 문제
I는 배열의 숫자들인거 알겠는데J는 무엇인가요?
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
연산자 우선순위
안녕하세요 연산자 우선순위 강의에서 9:00쯤에포인터(*) ++전위연산자 보다 우선순위가 높다고 하셨는데 같은 우선순위 아닌가요?
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
스트림 중복 에러 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 영한님 🙂스트림 중복 여부의 경우 왜 컴파일 에러가 아닌 런타임 에러로 자바가 만들어진 이유를 알 수 있을까요?챗지피티에 질문을 해봤는데 잘 이해가 되지 않아 질문드리는점 양해 부탁드립니다(_ _)감사합니다.
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
기본 생성자 호
10분40초 예제에서 super을 제거했을 시 자식 생성자의 ECar는 호출시에 기본 생성자가 호출 되지 않나요 ? 제가 강의를 들으며 이해하기론 출력값이Car() // 부모 기본 생성자ECar() // 자식 기본 생성자ECar(75) 라고 나와야 한다고 생각했는데 어떤 경우에서는 부모 기본 생성자만 호출되고 어떤 경우에서는 자식 기본 생성자까지 호출되는지 헷갈립니다. 예로7분에 나오는 예제는 호출시Car constructor(부모 기본 생성자)가 먼저 호출이 되고ElectricCar constructor(자식 기본 생성자)가 호출이 된 반면에 위의 예제에서는 왜 부모 기본 생성자만 호출되는 이유가 궁금합니다.
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
23년 2회 2:38 이해가 안가요
배열에 54321 입력하는 코드가 없는데 어떻게 54321이 들어 갔나요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
ArticleApiTest 에서 정적 내부 클래스를 사용하는 이유는?
ArticleCreateRequest, ArticleUpdateRequest은 ArticleApiTest 클래스 내부에 따로 만들어서 사용하고 있는데 이미 만들어진 클래스를 사용하지 않고 테스트 클래스 내부에서 작성해서 사용하는 이유가 뭔지 궁금합니다. 감사합니다.
-
미해결김영한의 실전 자바 - 중급 2편
퀴즈 오류 관련 문의
1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
ArticleApiTest 에서 로그를 System.out.println()으로 남기는 이유 문의
혹시 ArticleApiTest 에서는 System.out.println() 으로 로그를 남기는 이유가 있을까요? ArticleRepositoryTest에서는 log.info로 하셨는데요.
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
main.tf 파일에서 EIP 설정 로직 수정이 필요할거 같습니다.
2025년 7월 5일 기준으로 학습 레포에서 가져온 main.tf를 기반으로 apply 명령을 실행하면 아래와 같은 에러가 발생합니다. terraform apply ╷ │ Error: Unsupported argument │ │ on main.tf line 279, in resource "aws_eip" "app": │ 279: vpc = true │ │ An argument named "vpc" is not expected here. 에러 발생 이유는 aws_eip 리소스 블록에서 vpc = true 옵션을 더이상 지원하지 않기 때문에 발생한다고 합니다. 따라서 280라인에 vpc = true 를 제거하면 해결됩니다. https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-5-upgrade?utm_source=chatgpt.com#resourceaws_eip_association
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
재귀함수 53:24 문항 문의
마지막 main 블록 부분에서printf 값에서문자열\"%s\"의 길이는...이 부분에서 \ \을 어떻게 해석해야하나요? 출력값에서는 역슬래쉬가 출력되지 않는데 어떤의미인지 문의드립니다.
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
앱 개발 시 해킹 방지, 보안 체크리스트 및 주의사항 문의
안녕하세요, 프로그래밍 좀비님!팀으로 앱 개발을 하려고 합니다. 플러터로 iOS/안드로이드 앱을 개발하고, 제가 백엔드를 맡게 되었는데 백엔드는 Java, SpringBoot로 구축할 예정이에요.. 앱 해킹 등 보안에 대해 기획자분이 강조하셔서, 아래와 같이 보안 대책을 고민하고 있습니다.현재 적용 예정인 보안 대책• JWT 토큰을 이용한 인증/인가• HTTPS로 통신 암호화• JPA 사용(PreparedStatement 기반이라 SQL 인젝션 방어)• API Rate Limiting 도입 예정 질문 드리고 싶은 내용1. 위와 같이 보안 대책을 준비하면, 실제 서비스 운영 시 모바일 앱 백엔드에서 추가로 꼭 신경 써야 할 부분이 있을까요?2. 강사님께서 실제로 350개 이상의 앱을 개발/배포하시면서 겪으신 보안 관련 실무 경험이나, 꼭 강조하고 싶은 보안 포인트가 있다면 조언 부탁드립니다.3. 혹시 실무에서 자주 간과되지만, 반드시 챙겨야 하는 보안 체크리스트가 있다면 알려주시면 감사하겠습니다.실제 현업, 350개 배포 경험을 바탕으로, 실질적으로 도움이 될 만한 조언을 듣고 싶습니다.감사합니다!
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
20분경 자바 오류찾기문제 질문입니다
오류가 발생하는 이유는 이해를 하였는데 get()함수를 호출을 하지 않았는데.. 왜 저게 정답인지 모르겠습니다. 호출하지 않았어도 이미 저 존재 자체만으로 코드 실행시에 오류가 발생하는건가요?
-
해결됨(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
5:38 업캐스팅 관련
업캐스팅 형태에서. 부모에 있는것을 재정의 해야 오류가 발생하지 않는다고 하셨습니다. 그러면 업캐스팅이아닌 일반 상속에서는부모에게 없는 메서드를 자식에서 호출해도 되나요??