묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 부트 - 핵심 원리와 활용
게이지 관련 질문
[질문 내용]- 재고와 같은 것을 조회하기 위해서는 일반적으로 WAS 서버에 저장하기보다 DB에 저장을 하는것으로 아는데 그러면 게이지 측정할때마다 DB에 요청이 가게 되는건가요??? 실무에서는 어떻게 하는 지 궁금합니다 ! 매초마다 DB에 요청이 가게 되면 성능에도 문제가 갈수있을거같은데 redis와 같은 캐시를 사용하는건지... 어렵네요
-
해결됨실전! 스프링 데이터 JPA
findAll() 여러개 정의하기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]만약 어떤 경우엔 @EntityGraph를 쓰고 어떤 경우엔 안쓰고 싶어서 원본 findAll()를 그대로 두고 새로운 findAll()과 같은 동작을 하는 메소드를 정의한다고 하면 어떻게 만들수 있나요?
-
해결됨실전! 스프링 데이터 JPA
게시판에서 삭제된 댓글을 보여주기 위해 Spring Data JPA에서는 어떻게 접근해야 할까요?
상황 설명기본적인 게시판을 만들고 있어요.해당 게시판에는 게시물를 달 수 있고 해당 게시물에는 댓글을 달 수 있어요.댓글과 관련한 요구사항들은 다음과 같습니다.댓글 Create, Update, Delete각 게시물은 몇 개의 댓글이 달렸는지 확인이 가능하다.게시판에서는 전체 댓글이 몇 개가 달렸는지 확인이 가능하다.게시물에 달려 있는 모든 댓글들을 확인할 수 있다. 다만, 삭제된 댓글의 경우 "삭제된 댓글입니다" 라는 메세지로 보여준다. 내 접근 방법(Where 어노테이션을 사용)우선은 4번 조건 때문에, 그리고 실무에서 관리를 위해 데이터를 잘 삭제하지 않는다는 걸 근거로 Soft-Delete를 적용했습니다.그리고 Comment 엔티티를 아래와 같이 작성했습니다.@Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @SQLDelete(sql = "UPDATE Comment SET deleted = true where comment_id = ?") @Where(clause = "deleted = false") public class Comment extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "comment_id") private Long id; private boolean deleted; ... 생략 ... } Comment 엔티티를 조회하는 대부분의 요청(1개 제외)은 deleted 필드가 false인걸 찾아와야 합니다. 그래서 디폴트 속성으로 deleted=false를 적용하면 편하겠다고 생각하여 Where 어노테이션을 사용했는데요. 문제점이 방식의 문제는 4번 요구사항을 구현할 수 없다는 것입니다.Spring Data JPA의 기본 메서드는 물론이고, JPQL, QueryDsl 을 사용한 모든 Comment 조회 쿼리에도 "deleted=false" 속성이 기본으로 달라붙어 deleted가 true인 Comment를 가져올 수 없습니다.(확실하지는 않지만, Native Query를 사용하면 하이버네이트 구현체의 영향을 안받고 제가 원하는 기능을 구현할 수 있을 거 같습니다. 그런데 Native Query를 쓰는게 최선일까 자꾸 꺼려지더라구요.) 임시 방안저는 어쩔 수 없이 Where 어노테이션을 제거하고, Comment에 관련한 모든 조회 쿼리를 JPQL로 만들어줬습니다.하지만 고작 한 개의 메서드에서 삭제된 메서드를 보여주기 위해 전체 Comment 조회 메서드를 변경하는 게 마음에 들지 않습니다. 관리를 어렵게 만든다는 생각이 들어요.실제로 저는 "게시판에서는 전체 댓글이 몇 개가 달렸는지 확인이 가능하다." 요구사항을 구현할 때, where deleted=false 조건을 붙이는 걸 깜빡해서 삭제된 댓글들의 개수까지 전부 보여줬습니다. 이러한 상황에서는 코드를 어떻게 작성하는 게 좋을까 계속 고민을 하고 있는데요,,, 함께 고민해주실 수 있을까 하여 이렇게 질문을 남깁니다. 감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
컨트롤러에서 html 파일로 바로가기가 안됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.인텔리제이 Ultimate를 구매한 상태로 사용 중인데요. 영한님 강의 내에서는 (cmd + 클릭)으로 해당 html 파일로 바로가기가 되는데, 저는 안되네요. 구글링 해보아도 명확한 답을 얻지는 못해서 별도 설정 방법이 있는건지 여쭤봅니다!
-
해결됨스프링 부트 - 핵심 원리와 활용
현재 SpringBoot 3.2.1 부터 @ConfigurationProperties 를 사용한 설정값 바인딩에 이슈가 있는것 같습니다.
안녕하세요! 질문 내용은 제목과 같습니다. 스프링부트 3.2.1 부터 @ConfigurationProperties 가 동작하지 않는것 같습니다. 확실하지 않지만 스텍오버플로우에도 비슷한 이슈가 올라온 상태인것 같습니다. https://stackoverflow.com/questions/77703018/spring-boot-3-2-1-properties-binding 스프링부트 3.2.1 에서 저는 아래와 같은 익셉션이 발생합니다,plugins { id 'java' id 'org.springframework.boot' version '3.2.1' id 'io.spring.dependency-management' version '1.1.4' }token: expired: 20s secret-key: test-key@ToString @AllArgsConstructor @ConfigurationProperties(prefix = "token") public class TokenProperties { private Duration expired; private String secretKey; }@Slf4j @RequiredArgsConstructor @Component @EnableConfigurationProperties(TokenProperties.class) public class TokenConfiguration { private final TokenProperties tokenProperties; @PostConstruct void init() { log.info("tokenProperties = {}", tokenProperties); } }*************************** APPLICATION FAILED TO START *************************** Description: Failed to bind properties under 'token' to revi1337.configurationpropertiesdemo.property.TokenProperties: Reason: java.lang.IllegalStateException: Unable to create instance for revi1337.configurationpropertiesdemo.property.TokenProperties This may be due to missing parameter name information Action: Update your application's configuration이 상태에서 스프링 버전을 3.1.5 으로 다운그레이드하면 정상동작합니다.plugins { id 'java' id 'org.springframework.boot' version '3.1.5' id 'io.spring.dependency-management' version '1.1.4' } 현재 스프링 3.2.1 에서 뭐 바뀐게 있을까요? 제가 무언가를 잘못했을 확률이 대단히 높지만 제가 찾아볼때는 명확한 해결방법이 3.1.5 로 다운그레이드하는 방법밖에 나오지가 않네요.. 확인좀 부탁드리곘습니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
stockQuantity 와 author, isbn 값이 저장 되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 서브밋 할 시에 컨트롤러 디버깅을 해보면 item에 잘 담기고 있습니다. 하지만 레퍼지토리에서 em.persist를 할 때에 로그를 보면 값을 포함하지 stockquantity는 0이고 author, isbn은 null값으로 찍혀 저장 되는 상태입니다 ㅠㅠㅠ 어떤 설정을 빼먹은 것인지 감이 잡히지 않습니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메소드 작성 기준 질문이요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); }Order 클래스 내의 연관관계 편의 메소드 코드인데요영한님께서 연관관계 편의 메소드는 컨트롤 하는 쪽에서작성하는것이 좋다고 하셨는데 Order는 Member와 OrderItem을 mappedBy로 참조하고 DB에서 조회만 할수 있는데 Order 클래스 내에 작성하신 이유가 궁금해요컨트롤은 연관관계의 주인인 엔티티객체에서 하는것이 아닌가요?아니면 컨트롤이라고 말씀하신게 객체 관점에서 말씀하신건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
method patch 설정시 404에러
- id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/** - Method=PATCH filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?<segment>.*), /$\{segment} - AuthorizationHeaderFilter 이렇게 작성했는데요@postmapping("/user/test")@patchmapping("/user/test")포스트는 잘동작하는데 패치는 404가 납니다뭐가 문제일까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Assertions 사용 질문
package jpabook.jpashop; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; @RunWith(SpringRunner.class) @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("memberA"); //when Long savedId = memberRepository.save(member); //then Member findMember = memberRepository.find(savedId); Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember).isEqualTo(member); } }plugins { id 'java' id 'org.springframework.boot' version '3.2.1' id 'io.spring.dependency-management' version '1.1.4' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '21' } 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' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'junit:junit:4.13' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } } tasks.named('test') { useJUnitPlatform() } 이렇게 junit4 사용 하였는데 Assertions 이 구문만 쓰면 에러가 생기는데 왜 그런거죠?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의시 이론설명에 활용되는 자료가 어딨는지 모르겠어요.
안녕하세요!!현재 강의를 듣고 있는 수강생입니다!! 다름이 아니라 강의하시면서 이론에 대해 설명해주실 때, 쓰시는 자료들은 어디서 볼 수 있을까요?? 코드에 대해 공부하면서 이론적인 부분도 이해하고 넘어가면 이후의 수업에서 이해하고 직접 실행해볼 때, 더 좋을 것 같아서요!!
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬렉션 fetch join
안녕하세요 강사님프로젝트 중 궁금한 점이 있어 질문드립니다..!6개의 엔티티를 조인해야 하는 상황인데 현업에서도 이렇게 조인을 하기도 하나요? 물론 성능에 따라 다르겠지만 몇개 정도의 테이블을 조인하는 것이 적당할까요?컬렉션 패치 조인은 1개까지만 하라고 하셨는데 현재 상황은 3개나 컬렉션이 존재합니다. 이런경우는 어떤식으로 해결하는게 좋을까요?? 강사님께서는 어떤식으로 해결하시는지 궁금합니다 ㅎㅎ감사합니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원서비스와 회워리포지토리가 빈으로 등록이 되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@Service와 @Repository를 붙였음에도 불구하고 빈으로 등록되지 않습니다.그래서 회원 서비스를 테스트 할 때 @Autowired로 자동 주입을 받지 못하고 있습니다. 어디가 문제인지 봐주실 수 있나요? 아래는 프로젝트 전체 압축파일 링크입니다https://drive.google.com/file/d/15aBoeMbIf_z0BXL8zpERp_2J5upJGesC/view?usp=drive_link
-
해결됨실전! 스프링 데이터 JPA
mappedBy로 지정된 필드가 조회하는 시점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]mappedBy로 지정된 필드는 어느 시점에 변경되는지 궁금하여 질문드립니다.예를들어 Member 클래스에서 @ManyToOne private Team team;이렇게 Team 객체를 가지고 Team 클래스에서 @OneToMany(mappedBy="team")List<Member> members = new ArrayList<>(); 이렇게 members 리스트를 읽기전용으로 가진다고 할때 이 리스트가 바라보는 시점은 언제인가요?제생각엔1. 영속성 컨텍스트상에서 연관관계의 주인 객체가 변경됨db에 변경사항이 반영됨db에 변경사항이 커밋됨셋중 하나인거같은데 어떤것인가요?
-
미해결스프링 시큐리티
메소드 로직에 대해 질문드립니다.
SecurityResourceService클래스에서 getResourceList()에서 이렇게 수정 되어야 하지 않나요?? 왜냐하면 configAttributeList에 권한 정보를 다 넣고 나서 result변수에 키 값인 자원과 value인 configAttributeList가 들어가야 할 것 같아서요. 강의 대로라면 1가지 자원에 여러가지 권한이 들어갈 수 있지만, 강의에서 나오는 코드 대로라면 1가지 자원에 1가지 권한밖에 들어가지 않을 것 같아서 질문드려보았습니다.
-
미해결스프링 시큐리티
질문 2가지 드립니다.
첫번째 질문입니다.SecurityResourceService클래스에서 ResourcesRepository를 주입받기위한 방법은 3가지가 있는것으로 알고있습니다.첫째, 생성자 주입둘째, @Autowired주입셋째, setter주입여기서 왜 setter주입방식을 사용하였는지 궁금합니다. setter주입방식은 찾아보니 별로 안좋다는 말이 있어서 질문드려보았습니다.이 주입방식을 생성자 주입방식 혹은 @Autowired로 변경하여도 상관없는거죠?? 두번째 질문입니다.SecurityResourceService클래스에서 getResourceList()에서 이렇게 수정 되어야 하지 않나요?? 왜냐하면 configAttributeList에 권한 정보를 다 넣고 나서 result변수에 키 값인 자원과 value인 configAttributeList가 들어가야 할 것 같아서요. 강의 대로라면 1가지 자원에 여러가지 권한이 들어갈 수 있지만, 강의에서 나오는 코드 대로라면 1가지 자원에 1가지 권한밖에 들어가지 않을 것 같아서 질문드려보았습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
18분대에서의 테스트 실행 시 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]WARNING: A Java agent has been loaded dynamically (C:\Users\jkjin\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.14.10\90ed94ac044ea8953b224304c762316e91fd6b31\byte-buddy-agent-1.14.10.jar)WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warningWARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more informationWARNING: Dynamic loading of agents will be disallowed by default in a future releaseOpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 아래와 같이 오류가 발생합니다.테스트는 잘 실행되지만, 영상에서처럼 Hibernate: 쿼리문~ 이 부분이 보이지 않네요.. 설정이 다르다는것처럼 보이는데 뭐가 문제일까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
repository 관련 질문입니다.
[질문 내용]안녕하세요 김영한님 강의를 듣다 의문점이 생겨서 질문을 드립니다. 무료 강의 수강 후 해당 강의를 JPA 기본서와 함께 공부 중인 학생입니다. repository관련해서 어떤 방식이 맞는지 헷갈려서 질문드렸습니다. 무료 강의 기준에선 repositry안에 있는 interface를 상속받아서 엔티티이름Repository형식으로 구현하셨는데 해당 JPA활용1 강의에선 상속 없이 class파일로 만들어서 어떤 방식이 맞는지 모르겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
enum
짧은 지식이지만 db에서 enum을 사용을 줄이라고 알고 있는데 엔티티에서 enum타입으로 필드를 구성해도 크게 영향이 없나요?? 프로젝트 중인데 엔티티의 상태코드 타입을 String으로 할지 eunm으로 할지 고민입니다.엔티티에서 언제 enum타입을 사용할지 String타입을 사용할지 기준이 무엇인지 여쭤봅니다. 감사합니다 ㅠㅠ
-
해결됨실전! 스프링 데이터 JPA
글로벌 서비스의 경우 시간 데이터 저장 및 뷰 관련 질문
강의에서는 시간 데이터를 넣는 방법을 가르쳐주셨는데 글로벌 서비스에서는 시간 데이터를 어떻게 관리하는지 궁금합니다. 예를 들어, 블로그 플랫폼의 유저들이 미국과 한국에 위치할때, 같은 시간에 작성된 글이라도 위치에 따라 다른 시간 데이터를 표시하도록 해야할것 같습니다. 이때 게시글을 작성한 시간은 DB에서 UTC로 가지고 있는게 좋을까요? 만약 그렇다면 DB의 데이터를 로컬로 가져올때 실무에서는 백엔드에서 변환을 하는지 아니면 프론트까지 UTC를 가져와서 프론트에서 변환을 하는지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
내장 톰캣 관련 질문입니다
안녕하세요 강사님 강의 잘 보고 있습니다.내장 톰캣 관련하여 사소한 궁금증이 생겼는데 이리저리 찾아봐도 원하는 답을 얻지 못해 질문 남깁니다.스프링부트의 내장톰캣 기능을 사용하면 실행하는 컴퓨터의 메모리를 쓰는 것 인가요? 아니면 스프링부트에 뭔가가 있는지 궁금하여 질문 남깁니다.감사합니다.