inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

AOP @Component로 Bean 등록 처리할 경우에 관한 질문입니다.

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

https://www.inflearn.com/community/questions/48156/aop-timetraceaop-%EB%A5%BC-component-%EB%A1%9C-%EC%84%A0%EC%96%B8-vs-springconfig%EC%97%90-bean%EC%9C%BC%EB%A1%9C-%EB%93%B1%EB%A1%9D @Configuration 파일 내에서 @Bean 어노테이션을 사용하여 TimeTraceAop.java 파일을 빈으로 등록하는 경우, 참조 문제가 발생하는 부분에 대해 위 다른 분이 작성해주신 글을 통해 이해가 잘 갔는데요, 그럼 @Component 어노테이션을 활용하여 등록하는 경우에는 동일한 @Around 구문을 통해 명시된 @Around("execution(* hello.hellospring..*(..))")를 사용하는 경우 문제가 발생하지 않는 것인지 궁금합니다.

  • java
  • spring
  • mvc
  • spring-boot
김지우 댓글 1 좋아요 0 조회수 72

단축키 작동 안됨

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

단축키 설정을 했는데 tdd 도 안되고 sout 도 안되는 이유는 무엇일까요? 참고로 build.gradle 파일은 아래와 같습니다 plugins { id 'java' id 'org.springframework.boot' version '3.4.0' id 'io.spring.dependency-management' version '1.1.6' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testImplementation 'junit:junit:4.13.2' } tasks.withType(Test) { useJUnitPlatform() }

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
ㅇㄱㅇㄱ 댓글 1 좋아요 0 조회수 180

junit 안됨

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

https://drive.google.com/file/d/1M-NYH5etfTZPV5kMZzuiOWaBjA7bR3XR/view?usp=sharing 위는 제 프로젝트 파일입니다 강의 파일에 나와있는부분을 복붙해도 오류나고 testImplementation("junit:junit:4.13.2") 이렇게 해도 오류납니다. Assert 부터 안되는데 뭐가 잘못된걸까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
댓글 1 좋아요 0 조회수 589

SpringCloud Gateway 연동

미해결

Java 마이크로서비스(MSA) 프로젝트 실습

https://github.dev/ishrhrl39/3-3.Microservice 강의중 유레카 대쉬보드에는 아이템 서비스가 잘 표현되는데 왜 postman 요청은 404가 뜨는지 원인을 못찾겠네요..라우팅쪽 문제인것같은데..

  • java
  • spring
  • rest-api
  • spring-boot
  • msa
김효성 댓글 1 좋아요 0 조회수 160

컬렉션 조회 관련

해결됨

실전! 스프링 데이터 JPA

배운거를 적용하면서 쿼리 개선을 하고 있었는데, 혼자 해결해보려고 했으나 컬렉션 조회가 같이 섞이면서 이해가 잘 안 되는 것 같아 질문을 남기게 되었습니다. 게시글 목록을 불러올때 태그이름 리스트를 같이 필요하기 때문에 관련 memePostTags와 Tag까지 같이 조회를 해야하는 상황입니다. 테이블 관계가 MemePost 1 : N MemePostTag 1 : 1 Tag 이렇게 되어있을때 getMemePost5 메서드와 getMemePost6메서드 둘 중에 어느 것이 더 나은 방법인지, 아니면 더 나은 다른 방법이 있는지 궁금합니다. getMemePost5의 경우는 MemePostTagRepository에서 Tag까지 fetch join으로 불러오고, Map 객체에 postId를 key로 저장해서 태그 이름을 조회합니다. getMemePost6의 경우는 페이징으로 조회한 후 postIds를 in절로 postTag와 tag를 fetch join합니다. 컬렉션 조회의 경우 페이징을 안할 경우 fetch join으로, 페이징을 할 경우 batch size로 하라는 것까지는 이해가 되었는데, 이 경우에는 postTags를 batch size로 가져오고, 그에 다한 tag도 batchsize로 가져와 추가로 두번의 쿼리가 더 나가게 되어서 다른 방법을 고안해내다가 점점 미궁으로 빠지는 것 같아서 질문을 남기게 되었습니다 😂 public Slice<MemePostSummaryResponse> getMemePosts5(int page, int size, MemePostSort postSort, Long userId) { Pageable pageable = PageRequest.of(page, size, postSort.toSort()); Slice<MemePost> memePostSlice = memePostRepository.findSliceAll(pageable); List<Long> postIds = getPostIds(memePostSlice.getContent()); // MemePostTag와 Tag를 한번에 fetch join 하나의 쿼리로 하되, MemePostTagRepository에서 entitygraph를 통해 fetch join Map<Long, List<String>> postTagNames = memePostTagRepository.findTagsByMemePostIdIn(postIds) .stream() .collect(groupingBy(tag -> tag.getMemePost().getId(), mapping(tag -> tag.getTag().getName(), toList()))); //좋아요도 하나의 쿼리로 Set<Long> likedPostIds = new HashSet<>(memePostRepository.findLikedPostIds(postIds, user)); List<MemePostSummaryResponse> responses = memePostSlice.getContent().stream() .map(mp -> new MemePostSummaryResponse( mp, likedPostIds.contains(mp.getId()), postTagNames.getOrDefault(mp.getId(), Collections.emptyList()) )) .toList(); return new SliceImpl<>(responses, pageable, memePostSlice.hasNext()); } public Slice<MemePostSummaryResponse> getMemePosts6(int page, int size, MemePostSort postSort, Long userId) { Pageable pageable = PageRequest.of(page, size, postSort.toSort()); Slice<MemePost> memePostSlice = memePostRepository.findSliceAll(pageable); List<Long> postIds = getPostIds(memePostSlice.getContent()); // MemePostTag와 Tag를 한번에 fetch join memePostRepository.findAllWithTagsInPostIds(postIds); //좋아요도 하나의 쿼리로 Set<Long> likedPostIds = new HashSet<>(memePostRepository.findLikedPostIds(postIds, user)); List<MemePostSummaryResponse> responses = memePostSlice.getContent().stream() .map(mp -> new MemePostSummaryResponse( mp, likedPostIds.contains(mp.getId()), mp.getTagNames() )) .toList(); return new SliceImpl<>(responses, pageable, memePostSlice.hasNext()); } public interface MemePostRepository extends JpaRepository<MemePost, Long>, MemePostRepositoryCustom { @Query("SELECT mp FROM MemePost mp where mp.deletedAt IS NULL") Slice<MemePost> findSliceAll(Pageable pageable); @Query("SELECT mp.id FROM MemePost mp " + "JOIN MemePostLike mpl ON mpl.memePost = mp " + "WHERE mp.id IN :postIds AND mpl.user = :user") List<Long> findLikedPostIds(@Param("postIds") List<Long> postIds, @Param("user") User user); @Query("SELECT mp FROM MemePost mp " + "LEFT JOIN FETCH mp.memePostTags mpt " + "LEFT JOIN FETCH mpt.tag " + "WHERE mp.id In :postIds") List<MemePost> findAllWithTagsInPostIds(@Param("postIds") List<Long> postIds); } public interface MemePostTagRepository extends JpaRepository<MemePostTag, Long> { @EntityGraph(attributePaths = {"tag"}) List<MemePostTag> findAllByMemePostId(Long postId); @EntityGraph(attributePaths = {"tag"}) List<MemePostTag> findTagsByMemePostIdIn(List<Long> memePostIds); } public class MemePost { public List<String> getTagNames() { return memePostTags.stream() .map(mpt -> mpt.getTag().getName()) .toList(); } }

  • java
  • spring
  • spring-boot
  • jpa
pink102557 댓글 2 좋아요 0 조회수 90

Querydsl 취약점 관련 질문입니다.

미해결

실전! Querydsl

안녕하세요. 최근 querydsl 공부를 시작하려고 정보를 찾던 중 querydsl에 대한 SQL Injection 에 관한 내용을 보고 김영한님의 생각이 궁금합니다! 그리고 querydsl 지원중단 얘기를 보기도 해서 이런 취약점이 나올 때마다 빠른 대응이 되는지 역시 궁금합니다!! https://www.csirt.sk/querydsl-java-library-vulnerability-permits-sql-hql-injection.html

  • java
  • jpa
  • querydsl
yywj 댓글 2 좋아요 2 조회수 1359

조금 더 깊은 내용, 실무적인 내용, 미래의 계획에 대해서 궁금합니다

해결됨

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 영한님 강의 잘 듣고 있습니다!! 지금 강의도 정말정말 좋고 많은 것을 다루지만, 이런 것들을 다룰 예정은 없는지 여쭤보고 싶습니다! Lock next level(자바) ReadWriteLock, StampedLock, Mutex, Semaphore 비동기/멀티스레드 next level(feat. 스프링) CountDownLatch 사용법, Transaction 동시성 테스트, 멀티스레드를 활용한 성능/부하 테스트 방법 항상 잘 배우고 있습니다 감사합니다 ☺

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
보키 댓글 2 좋아요 0 조회수 326

MYSQL로 database 연결해도 되나요?

미해결

데이터 분석 SQL Fundamentals

안녕하세요! 기존에 SQL을사용했었어서, MYSQL이 설치되어있는 상태인데 MySQL을 기존 그대로 database로 설정해도 되나요?

  • sql
  • dbms/rdbms
joan321 댓글 2 좋아요 0 조회수 157

N:1 관계에서 delete 질문있습니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

@Entity @Builder @NoArgsConstructor @AllArgsConstructor @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column private String username; @ManyToOne @JoinColumn(name = "team_id") private Team team; } @Entity @Builder @NoArgsConstructor @AllArgsConstructor @Getter @Setter public class Team { @Id @GeneratedValue private Long id; private String name; } try { tx.begin(); Team team = new Team().builder() .name("teamA") .build(); em.persist(team); Member member = new Member().builder() .username("member1") .team(team) .build(); em.persist(member); em.flush(); em.clear(); Member findMember = em.find(Member.class, member.getId()); Team findTeam = findMember.getTeam(); em.remove(findTeam); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } findTeam을 remove하기 전에 findMember.setTeam(null) 이런 식으로 팀과의 연관 관계를 null로 만들고 삭제하지 않았는데 에러가 발생하지 않고, 데이터베이스에서 member 정보와 team 정보 모두 삭제됩니다. CASCADE 설정이 되어 있는 건 아닌데 왜 이렇게 동작하는 걸까요??

  • java
  • jpa
eoyeong 댓글 2 좋아요 0 조회수 167

자바 초보의 질문입니다

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

if문 관련 질문입니다. 조건에 따라 dollar <0 일 경우 "잘못된 코드입니다 dollar == 0 일 경우 "환전할 금액이 없습니다 dollar >0 일 경우 dollar = dollar*1300을 출력하고 싶습니다 그런데 위와 같이 코드를 작성하였을 때 dollar가 0 이하가 될 경우 if (dollar<0)문과 else문이 함께 실행됩니다. 왜 이러는 걸까요? 저는 if 문이 실행되면 else문은 실행이 되지 않는다고 이해했는데 혹시 다른 이유가 있는 걸까요? 답을 알고 계시는 분은 상세하게 설명 부탁드립니다ㅠㅠ

  • java
  • 객체지향
  • if문
dorothy246 댓글 1 좋아요 0 조회수 142

프로젝트 생성시 dependencies에 spring web starter 안뜸

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

dependencies에 spring web strater 검색해도 안뜨는데 어떡해야하나요??

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
ㅇㄱㅇㄱ 댓글 1 좋아요 0 조회수 335

숫자와 문자의 2진수 숫자가 동일할 경우 타입에 대한 메타정보는 어디에 있나요

미해결

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

Java는 해당 강의만 구매 해서 앞의 강의 내용에 있을지 모르겠습니다만 헷갈리는 부분이 있습니다. 숫자와 문자의 2진수 표현은 같고 데이터타입이 숫자 타입인지 문자 타입인지 나타내는 byte 도 있을 것 같은데 이걸 어떻게 구분하는지 구글링에서 검색할 수 있는 키워드나 답을 알려주실 수 있으실까요 숫자 65의 2진수 표현: 1000001 문자 'A'의 2진수 표현: 1000001 강의 내용에 java의 경우 1byte의 prefix를 통해 음수를 표현할 수 있다고 하셨는데 데이터 타입은 어디에서 관리되는지 궁금하네요. 저장되는 메모리 구역이 다른지..그렇다 해도 할당된 데이터 구조 내에 있어야 할 것 같은데 진짜 궁금하네요 클로드에선 아래와 같이 답을 줬는데요 각 데이터 타입은 1바이트부터 8바이트까지 고유한 메모리 할당 방식을 가지고 있어, 메모리 내 위치와 크기로 타입을 구분할 수 있습니다. 그럼 각 데이터에 대한 메모리 위치는 stack 에서 가지고 있지 않나 싶은데 stack 에서도 해당 데이터 타입이 byte 인지 아니면 텍스트인지 어떻게 알고 있는지 다시 궁금하네요. -ㅂ- stack을 공부하면 되겠네요... 문자인코딩 섹션이 단순한 내용 같아도 진짜 생각 많이 하게 되는 강의네요.

  • java
  • 네트워크
  • 객체지향
아무도_모를_아이디 댓글 2 좋아요 0 조회수 230

Tomcat

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 내용] 안녕하세요, 강의 중에 궁금한점이 있어 글 남깁니다. 스프링 부트 스타터에 톰캣이 인베디드 되어서 저절로 가져오기 때문에 서버에 따로 톰캣을 설치할 필요가 없다고 하셨는데, 그렇다면 각 프로젝트를 서버에 띄우게 되면 모두 톰캣이 멀티 인스턴스로 띄우고 각 프로젝트는 모두 다른 포트를 사용해야하는걸까요? 만약 그렇다면 각 프로젝트에 톰캣 포트 세팅을 따로 해주어야하는데 해당 부분은 서버에서 하는게 아닌 프로젝트를 배포할때 세팅 파일에 따라 세팅이 되는 걸까요?

  • java
  • spring
  • mvc
  • spring-boot
puchonko94 댓글 1 좋아요 0 조회수 133

오류?

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 8.3 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown 실행과 테이블 다 잘 만들어 지는데 이런 로그가 계속 뜹니다. 제 mysql 문제일까요? mac os 사용중이고 강의처럼 docker를 통해 띄우는게 아닌 홈브류로 mysql을 다운받아서 쓰고있었어서 그대로 쓰는중입니다

  • java
  • spring
  • 동시성
댓글 4 좋아요 0 조회수 1674

고급 3편 출시 예정일

해결됨

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

안녕하세요. 영한님의 자바 시리즈를 달리고 있는 수강생입니다. 혹시 고급 3편은 올해 12월 안에는 출시가 되는지 아니면 올해를 넘겨 2025년에 1-2월에 출시가 되는지 대략적인 시기가 궁금합니다.

  • java
  • 네트워크
  • 객체지향
형씌 댓글 2 좋아요 0 조회수 330

CASE문제풀이 질문

해결됨

[백문이불여일타] 데이터 분석을 위한 중급 SQL

해당 쿼리문이 왜 정답이 아닌지 궁금합니다!

  • sql
yeeun chae 댓글 1 좋아요 0 조회수 150

똑같이 코딩했는데 널익셉션이 떴는지 모르겠습니다

미해결

실전! 스프링 데이터 JPA

실전! 스프링데이터 jpa에서 8강을 듣고있는데 memberRepository 파일도 영상과 똑같이 코딩했는데 왜 안되는지 모르겠습니다

  • java
  • spring
  • spring-boot
  • jpa
김준수 댓글 1 좋아요 0 조회수 85

detach시 쿼리 삭제

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 엔티티를 준영속 상태로 만들면 1차 캐시에서 제거되고, 관련 SQL도 제거된다고 하셨는데 실제로 돌려보니까 insert 쿼리가 나가더라고요 실제 db에는 저장 되진 않았습니다. insert 쿼리가 나가는 이유가 무엇 때문일까요??

  • java
  • jpa
eoyeong 댓글 1 좋아요 0 조회수 117

문자열 리터럴과 문자열 객체 관련해서 질문이 있습니다.

해결됨

기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM

안녕하세요! 강의를 듣던 도중에 의아한 부분이 있습니다. 8분 43초 부터 들은 바에 의하면 문자열 리터럴 로 생성한 문자열은 (1) Runtime Constant Pool에 저장되고, (2) 사용되는 시점에 String Contant Pool 에 복사된다. new 키워드 로 생성한 문자열 객체는 String Constant Pool 에 저장된다. (이 내용은 10분 28초 ) 위 내용을 다음 사진처럼 표현해보았습니다. 여기서 한 가지 의아한 부분이 있는데요. 문자열 리터럴과 new 키워드 로 생성한 문자열 객체 둘 다 String Contstant Pool 에 저장된다면, 동일성 비교에서 true 가 반환되지 않을까요?? 그러나 실제로는 동일성 비교를 하면 false 를 반환하게 됩니다. 제가 이해했던 바로는 문자열 리터럴은 String Constant Pool에 저장 되고, new 키워드를 통한 문자열 객체는 Heap 영역 에 저장되기 때문에 동일성 비교에서 false를 반환한다 라고 생각했습니다. String s1 = "hello"; String s2 = "hello"; String s3 = new String("hello"); s1 == s2; // true s1 == s3; // false 결론적으로 제가 궁금한 부분은.. new 키워드 로 사용한 문자열 객체는 String Constant Pool이 아닌 단순히 JVM Heap 영역 에 저장되는 것이 맞지 않는지 궁금합니다! 좋은 강의 감사합니다!! (11분 08초에 natvie 오타가 있는 것 같습니다!)

  • java
  • 객체지향
  • jvm
  • data-structure
hope 댓글 3 좋아요 0 조회수 382

최대수입스케쥴(PriorityQueue) 질문입니다.

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래와 같이 코드를 작성하였을 때 예제에는 정상정답이 나오고, 저도 반례를 찾지 못하는데, 채점에서는 오답이라고 나옵니다. 어느부분이 오답인지, 그리고 반례가 뭐가 있을지 궁금합니다.ㅠㅠ import java.util.*; public class Main { public static class schedule implements Comparable<schedule>{ int pay = 0; int day = 0; schedule(int p,int d) { this.pay = p; this.day = d; } @Override public int compareTo(schedule o) { if(this.day == o.day) return o.pay - this.pay; else return o.day - this.day; } } public void solution(List<schedule> list) { Collections.sort(list); int answer = 0; int day = list.get(0).day; Queue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder()); for(schedule s : list) { if(day == s.day) { queue.offer(s.pay); } else { if(!queue.isEmpty()) { int p = queue.poll(); answer += p; } queue.offer(s.pay); day--; } } System.out.println(answer += queue.poll()); } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); List<schedule> list = new ArrayList<>(); for(int i=0; i<n; i++) { int pay = kb.nextInt(); int day = kb.nextInt(); list.add(new schedule(pay, day)); } T.solution(list); } }

  • java
  • 코딩-테스트
김동욱 댓글 1 좋아요 0 조회수 138

인기 태그

인프런 TOP Writers

주간 인기글