묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@ManyToOne 에서 join fetch해준 쿼리가 있으면 Batch SIze 영향 안 받나요?
ToOne관계만 우선 모두 페치 조인으로 최적화,컬렉션 관계는 배치사이즈로 최적화 하는 부분입니다.@ManyToOne 에서컬렉션이 아닌 부분들은join fetch해서 필요한 파트 땡겨온다고 배웠습니다.그런 후 ,한편컬렉션인 부분은 default batch size로 전체필드에적용해서인쿼리로 가져온다고 들었습니다.예를들어 Order 클래스에 컬렉션List<OrderItem> orderItems이 있으면 Orderitems 의 프라이머리 키 만큼인쿼리를 날리는 쿼리 ,그리고OrderItems안에 들어있는 Item의 프라이머리 키 만큼인쿼리를 날리는 쿼리 ============================강의에서 날린 쿼리 기록을 보면selectorder0_.order_id as order_id1_6_0_,member1_.member_id as member_i1_4_1_,delivery2_.delivery_id as delivery1_2_2_,order0_.delivery_id as delivery4_6_0_,order0_.member_id as member_i5_6_0_,order0_.order_date as order_da2_6_0_,order0_.status as status3_6_0_,member1_.city as city2_4_1_,member1_.street as street3_4_1_,member1_.zipcode as zipcode4_4_1_,member1_.name as name5_4_1_,delivery2_.city as city2_2_2_,delivery2_.street as street3_2_2_,delivery2_.zipcode as zipcode4_2_2_,delivery2_.status as status5_2_2_fromorders order0_inner joinmember member1_on order0_.member_id=member1_.member_idinner joindelivery delivery2_on order0_.delivery_id=delivery2_.delivery_id limit ?2023-01-30 17:24:30.973 DEBUG 11572 --- [nio-8080-exec-5] org.hibernate.SQL :selectorderitems0_.order_id as order_id5_5_1_,orderitems0_.order_item_id as order_it1_5_1_,orderitems0_.order_item_id as order_it1_5_0_,orderitems0_.count as count2_5_0_,orderitems0_.item_id as item_id4_5_0_,orderitems0_.order_id as order_id5_5_0_,orderitems0_.order_price as order_pr3_5_0_fromorder_item orderitems0_whereorderitems0_.order_id in (?, ?)2023-01-30 17:24:30.980 DEBUG 11572 --- [nio-8080-exec-5] org.hibernate.SQL :selectitem0_.item_id as item_id2_3_0_,item0_.name as name3_3_0_,item0_.price as price4_3_0_,item0_.stock_quantity as stock_qu5_3_0_,item0_.artist as artist6_3_0_,item0_.etc as etc7_3_0_,item0_.author as author8_3_0_,item0_.isbn as isbn9_3_0_,item0_.actor as actor10_3_0_,item0_.director as directo11_3_0_,item0_.dtype as dtype1_3_0_fromitem item0_whereitem0_.item_id in (?, ?, ?, ?)========================총 3개입니다.컬렉션이 아닌 부분들에도 Batch Size 영향이 미쳤을텐데..컬렉션이 아닌 부분들에 배치사이즈 영향이 안미친 이유가 join fetch로 이미 영속성에 존재해서 그런건가요?Member, Delivery도Batch Size 영향을 받았으니여기도 인쿼리 날려줘야 되지 않나 생각이 들었어요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입( ) 테스트케이스 질문입니다
강의 보면서 똑같이 작성하는 중에 회원가입( ) 케이스에서 java.lang.IllegalStateException: Failed to load ApplicationContext 에러가 발생했습니다.제가 진행하는 환경이 Junit5이라서 이것저것 찾아본 결과 @RunWith(SpringRunner.class)을 이미 스프링부트에서 지원하고있다고 하여 지우고 public도 지워봤지만 적절한 해결방법이 아닌것같아 코드 원복하고 질문 드립니다. 어떤부분을 수정해야할까요..? 에러구문입니다java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:221) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [jpabook.jpashop.JpashopApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.domain.MemberRepository] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:188) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:136) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90) ... 25 moreCaused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.domain.MemberRepository] at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:349) at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:287) at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:128) at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:295) at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:249) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:206) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:174) ... 37 more H2콘솔도 위의 경로에 따라 동작중이고 application.yml파일 화면도 첨부합니다. 각종 시도를 하였지만 테스트에러를 해결할 수 없어서 코드는 일단 강의내용과 동일하게 작성해 두었습니다. Junit5에서는 위의 문제를 어떻게 해결해야 하나요??
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
library-app-complete 코드 실행방법
library-app-complete 파일을 실행해보고 싶은데요 LibraryAppApplication.kt 에 intelliJ IDEA 로 들어가면 원래 초록색 세모버튼 재생하는게 잇어야되잖아요 ? 그게 없는데 어떻게 하면 실행해볼 수 있을까요..?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java file outside of source root 오류 때문에 main 클래스 실행이 안 됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.위와 같이 모두 세팅을 진행했는데, Java file outside of source root라는 문구가 뜨면서 main 클래스를 실행할 수 없는 상황입니다.어떻게 해결해야 할까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
-arlth 가 뭔가요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용] h2 db 설치 연결 확인 후,home 에 test.mv.db 파일을 확인해야 된다면서llll -arlth 이렇게 들어가시는데 이게 뭔가요?여기서 막혀서 답답하네요.맥 써본 적도 없고 실무도 윈도우로 하는데 어지럽네요.ll 이 dir 이라는건 아는데 -arlth 는 처음 봐요.home이 어딜 말하는건지 모르겠어요.
-
미해결스프링 시큐리티 OAuth2
선행학습 질문
안녕하세요 강의 듣기 초반인데 상세한 설명이 너무 좋은것 같습니다~! 나중엔 다 수강을 할 예정이지만 OAuth2를 먼저 사용하게 될 예정이라 1편 실전프로젝트 전 단계인 스피링시큐리티 기본API 및 Filter 이해 , 주요 아키텍처 이해 정도만 선행으로 듣고 OAuth2를 들어도 될까요? 아님 실전프로젝트도 다 듣고 OAuth2를 듣는게 좋을까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
감사합니다!!!
시간 가는 줄 모르게 마지막 수업까지 마쳤습니다. 열띤 강의로 수고 많으셨습니다. 감사합니다!!!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
스프링3.0에서 querydsl 설정시 나는 빌드 에러 문의드려요!
implementation "com.querydsl:querydsl-jpa:5.0.0" implementation "com.querydsl:querydsl-apt:5.0.0"//querydsl 추가 //def querydslDir = 'src/main/generated' def querydslDir = "$buildDir/generated/querydsl" querydsl { library = "com.querydsl:querydsl-apt" jpa = true querydslSourcesDir = querydslDir } sourceSets { main { java { srcDirs = ['src/main/java', querydslDir] } } } compileQuerydsl{ options.annotationProcessorPath = configurations.querydsl } configurations { querydsl.extendsFrom compileClasspath } 스프링 3.0.2에서 위와 같이 설정후 빌드하였고 아래와 같은 에러가 발생하였습니다.Build file '/Users/erp/build.gradle' line: 53 (line 53은 def querydslDir = "$buildDir/generated/querydsl" 바로 아래 라인 입니다.)A problem occurred evaluating root project 'erp'.> Could not find method querydsl() for arguments [build_5ohy7uzmfkm7dcwikqo1apfbo$_run_closure5@4ab35249] on root project 'erp' of type org.gradle.api.Project. 이 문제가 계속해서 해결되지 않아... 도움요청 드립니다 ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
이것도 @ModelAttribute 가 생략된 코드인가요?
제가 만들어본 프로젝트인데sendForm 메서드에 들어간 (OrderForm form)이것도 @ModelAttribute 가 생략된 코드라고 볼 수 있나요?
-
미해결스프링 핵심 원리 - 기본편
memberRepository가 다른 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]memberRepository가 다르게 나와서 다른 분들의 질문 답변을 보고 해결했습니다.Appconfig의 memberRepository가 static으로 선언되어 있기 때문이더라구요. 그래서 궁금한점이, 왜 static으로 선언되면 singleton이 되지 않나요?항상 친절한 답변 감사드립니다^^!ㅎㅎ
-
미해결스프링 핵심 원리 - 기본편
순수한 자바 테스트 코드
필드 주입을 사용하면 생기는 문제점에 관한 내용을 보다가 궁금한 것이 생겨서 질문드립니다.스프링의 @Autowired 가 동작하지 않는 순수한 자바 테스트 코드에서, @Autowired가 붙은 필드, setter함수, 생성자는 @Autowired가 없는 순수 자바 코드로 동작한다고 생각하면 되나요? 예를 들어,OrderServiceImpl 클래스에는 필드 or setter 함수 or 생성자에 @Autowired 가 붙어있는데,OrderServiceTest 클래스에서는 순수한 자바 코드만으로 테스트를 수행하려고 할 때, OrderServiceImpl 클래스의 필드 or setter or 생성자를 @Autowired가 없다고 생각하고 갖고와서 쓸 수 있는지 궁금합니다. 또, 이 상황에서 테스트코드에서 따로 @Autowired에 의해서 발생하는 오류는 없는지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
현업에서 데이터베이스 스키마 자동 생성 기능을 운영 장비에서 사용하지 않는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]데이터베이스 스키마 자동 생성 부분 강의 관련해서 궁금한 점이 생겨 질문 드립니다.강의에서 생성된 DDL은 개발 장비에서만 사용해야 하며, 운영 장비에서는 사용하면 안 된다. 라고 말씀해주셨습니다. 그리고, 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬 은 후 사용 이라고 강의 자료에 나와 있는데요.그렇다면, 실제 현업에서는 운영 서버에 새로운 테이블을 create 하거나, 기존 테이블을 update(칼럼 추가 혹은 변경 등...) 하는 경우에 어떻게 하는지 궁금합니다. 강의 내용 + 서칭에 따르면, 로컬에서 DB 스키마 자동 생성 -> 검증 및 정제 -> 최종 스키마를 DB 툴을 이용해서 추출 -> 최종 스키마인 "create table ~~"을 테스트 DB에 적용(이 때, JPA 를 통해서가 아닌, 스키마 자체를 적용해야 함) -> QA 진행 , 검증 및 정제 -> 최종 스키마를 DB 툴을 이용해서 추출 -> 최종 스키마인 "create table ~~"을 테스트 DB에 적용(이 때, JPA 를 통해서가 아닌, 스키마 자체를 적용해야 함)을 운영 장비에 적용 하는 방식으로 진행하는 걸까요? (물론, 여건에 따라, 테스트 서버도 JPA DB 스키마 자동 생성 기능으로 처리할 수도 있을 듯 합니다.)create 뿐만 아니라, update 또한 운영서버에 적용하면 안되며, update 또한 테스트서버에 적용하는 것은 지양한다고 하셨습니다. 운영 서버의 소스코드가 (JPA DB 자동 스키마 생성기능을 통해) 테스트 서버, 운영 서버의 DB create, update 권한을 가진다는 것 자체에 대해 우려하시는 건가요? 아니면, DB 관련하여 컨트롤하는 기능 중, JPA 에서 설정하지 못하는 것이 있어서 그런건가요? 말씀해주신 결과적인 사건들을 통해 위험하다 는 것은 알겠는데, 그 구체적인 이유를 설명하라고 한다면, 아직 정확하게 말 할 수 없을 듯 하여, 질문 남깁니다.긴 글 읽어주셔서 감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 cmd창에서 gradlew build 오류
안녕하세요 현재 윈도우 쓰고있는 학생입니다. 빌드하고 실행하기 단계에서 cmd창을 열어서 gradlew.bat과 강의상에 나와있는 clean build 을 입력해도 사진첨부해드린거와 같이 계속 오류가 나는데 무엇이 문제일까요 ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberServiceIntegrationTest 오류 질문드립니다.
antlr.NoViableAltException: unexpected token:generatedAlias0org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: generatedAlias0 near line 1, column 8 [select generatedAlias0 from...] 이 부분에서 계속 에러가 뜨는데 이유를 모르겠어서 질문드려요!참고로 이와 비슷한 문의 글도 인프런과 stackoverflow에서 봤지만, 마땅한 오타가 없어서 여기에 글 올립니다! // MemberServiceIntegrationTest import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Commit; import org.springframework.transaction.annotation.Transactional; import with.younghan.kim.domain.Member; import with.younghan.kim.repository.MemberRepository; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test void 회원가입() { //given Member member = new Member(); member.setName("spring100"); //when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() { //given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } } // MemberService import org.springframework.transaction.annotation.Transactional; import with.younghan.kim.domain.Member; import with.younghan.kim.repository.MemberRepository; import java.util.List; import java.util.Optional; @Transactional public class MemberService { private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } /** * 회원 가입 */ public Long join(Member member) { validateDuplicateMember(member); //중복 회원 검증 memberRepository.save(member); return member.getId(); } private void validateDuplicateMember(Member member) { memberRepository.findByName(member.getName()) .ifPresent(m -> { throw new IllegalStateException("이미 존재하는 회원입니다."); }); } /** * 전체 회원 조회 */ public List<Member> findMembers() { return memberRepository.findAll(); } public Optional<Member> findOne(Long memberId) { return memberRepository.findById(memberId); } } // JpaMemberRepository import with.younghan.kim.domain.Member; import javax.persistence.EntityManager; import java.util.List; import java.util.Optional; public class JpaMemberRepository implements MemberRepository { private final EntityManager em; public JpaMemberRepository(EntityManager em) { this.em = em; } @Override public Member save(Member member) { em.persist(member); return member; } @Override public Optional<Member> findById(Long id) { Member member = em.find(Member.class, id); return Optional.ofNullable(member); } @Override public Optional<Member> findByName(String name) { List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); return result.stream().findAny(); } @Override public List<Member> findAll() { return em.createQuery("select m from Member m", Member.class) .getResultList(); } } // Member import javax.persistence.*; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
-
해결됨토비의 스프링 부트 - 이해와 원리
`@ConditionalOnClass` 관련 문의
안녕하세요! 강의에서 한가지 궁금한 점이 있어서 질문드립니다!@ConditionalOnClass 어노테이션에서 XmlMapper.class 는 빨간 줄로 나와서 찾아보니import com.fasterxml.jackson.dataformat.xml.XmlMapper;가 resolve 되지 못하는 것으로 추측되었습니다. 이런 경우는 빌드가 되지 않아야 하는 것이 아닌가 싶어서 제가 무엇을 놓치고 있는 것인지 알고 싶어 문의드립니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
로그인 및 권한관리 관련한 부분을 다루신 강의가 있나요??
기능들 구현하는 부분을 따라해보면서 공부하고 있는 시작 단계입니다. 로그인과 권한관리를 다루고 구현하는 기능들의 중요성과 필요성을 느꼈는데 해당 강의에서는 위의 기능은 배제한다고 하셔서 해당부분에 대해 강사님께서 다루신 관련 강의가 있나요??
-
해결됨스프링 핵심 원리 - 기본편
static SingletonService getInstance() 질문입니다.
다른 사람분 질문 답변중에public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. private static final SingletonService instance = new SingletonService(); //2. public으로 열어서 객체 인스터스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용한다. public static SingletonService getInstance() { return instance; } //3. 생성자를 private으로 선언해서 외부에서 new 키워드를 사용한 객체 생성을 못하게 막는다. private SingletonService() { } public void logic() { System.out.println("싱글톤 객체 로직 호출"); } }이 코드의 static SingletonService getInstance()에 대한 글을 읽고 궁금한점이 생겨 질문드립니다.안녕하세요, lsj59285 님! 공식 서포터즈 codesweaver 입니다. 우선 멤버변수 instance 가 private 접근 제어자 이기에 외부에서 이 멤버변수에 직접 접근할 수 없습니다. 게다가 생성자도 private 이기에 객체를 생성하여 사용할 수도 없지요. instance에 접근할 수 있는 방법이 필요한데 그게 getInstance() 메서드 입니다. 인스턴스를 생성하지 않고 접근해야 하니 static 이어야 하고요. 그리고 getInstance() 에서 멤버변수 instance 에 접근하는데요 이 때, static 영역에서 instance (힙 영역)을 참조할 수 없습니다. static 은 프로그램에서 유일한 영역이고, 인스턴스는 N개로 늘어날 수 있습니다. 즉 1:N 관계를 갖습니다. 그래서 인스턴스가 static 영역을 참조할 순 있으나, static이 인스턴스를 참조할 순 없습니다. (어떤 인스턴스를 지칭하는지 알 수 없기 때문에) 그래서 instance 도 static 영역에 두어 getInstance() 메서드가 접근할 수 있도록 한 것입니다. 감사합니다. getInstance()가 static 메서드라서 instance 도 static 영역에 두었다고 하셨는데 instance는 공유할 수 있도록 static 영역으로 먼저 보냈 게 아닌가요??...getInstance()를 static영역으로 보낸건 생성자가 private니까 객체생성이 안되서 인스턴스 메서드를 사용을 못하니까 그런거 아닌가요??...답변주시면 정말 감사하겠습니다.
-
해결됨스프링 핵심 원리 - 기본편
OrderService와 MemberService는 왜 서로 다른MemoryMemberRepository를 사용하는 건지 궁금합니다!
AppConfig에서 다음과 같이 각각 MemberService와 OrderService를 생성자에서 각각 따로MemoryMemberRepository를 새로 생성하는데 이렇게 하면 클라이언트는 같은 리포지토리를 공유를 안하지 않나요?? 서로다른 서비스가 같은 리포지토리를 공유하여 사용하는게 아니고 각각의 리포지토리를 사용한다고 생각하니 의문이 들어서 질문드립니다!!아니면 우선 DIP를 지키기 위한 코드를 보여주려고 이렇게 짜신건 지 궁금합니다!
-
미해결스프링 핵심 원리 - 기본편
스프링부트 빈 이름 조회
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링부트에선 강의에서처럼 ac를 통한 조회를 못하는데 빈 이름을 어떻게 조회할 수 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew 이후 실행안됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.인텔리제이 와 Git Bash 연동을 하고 Alt + F12 눌러서 터미널 실행했습니다../gradlew build 와 cd build/libs 까지 성공했는데java -jar hello-spring-0.0.1-SNAPSHOT.jar 는 엔터를 눌러도 아무일도 일어나지 않네요파일의 권한이 rw 밖에 없어서 그런거 같아서 chmod 777 hello-spring-0.0.1=SNAPSHOT.jar로 실행 권한을 부여하려고 했는데도 실행 권한이 바뀌지가 않네요....어떻게 해야 해당 자바 파일 실행할 수 있을까요