묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨이거 하나로 종결-스프링 기반 풀스택 웹 개발 무료 강의
몇가지 질문드립니다.
안녕하세요 우선 좋은 강의 정말 감사합니다. 풀스텍 강의라서 더 좋은거 같은데, 메일로 알람을 받았는데 선생님 강의 25%할인은 언제까지인가요? 지금 유료 강의 25%해서 24000원대 할인 기간이 안나와 있어서 기간이 궁금합니다. 아직 들어보지 못해서 무료 강의 한번 들어보고 유료강의도 진행하고 싶어서요 그리고 프로그램은 이클립스만 사용하시는거 같은데, 저는 인텔리제이 사용중인데 프로그램이 달라서인텔리제이 사용자도 괜찮을까요?
-
미해결Spring AI 실전 가이드: RAG 챗봇 만들기
1
1
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Junit4 에러 (org.junit.Test;)
Junit4 org.junt.Test 어노테이션을 사용하면 작동하지 않는 것 같습니다. 아래는 에러입니다.No matching tests found in any candidate test task. Requested tests: Test pattern jpabook.jpashop.service.MemberServiceTest in task :test * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.11.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 493ms 5 actionable tasks: 1 executed, 4 up-to-date
-
미해결코틀린 문법부터 실무까지 (실전 자바->코틀린 변환)
@MockK에서 null을 할당하는 이유?
37강 5분 11초에서 "처음에는 null로 되어있지만 값을 한 번 세팅할 수 있게 해주고 싶다."라고 하셨는데처음부터 null을 할당하지 않으면 lateinit을 사용 안 할 수도 있는 거 아닌가요?테스트코드에 대한 이해가 하나도 없어서 고른 강의인지라 질문의 깊이가 너무 없지만 답변주시면 감사합니다!!
-
해결됨Spring WebFlux + LLM 실전 구현
다음 강의는 언제 나올까요?
안녕하세요강의 잘 듣고있습니다. 혹시 다음 강의 일정 계획이 나온게 있을까요 ?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
@SpringBootTest class MemberServiceTest { @Autoworied lateinit var memberService: MembersService @Test fun get() { memberService.get(1L) } }@Service class MemberService( private val txManager: PlatformTransactionManager, ) { @Transactional(readOnly = true) fun get(id: Long) { val tx = txManager.getTransaction(DefaultTransactionAttribute()) println("isCurrentTransactionReadOnly()=${TransactionSynchronizationManager.isCurrentTransactionReadOnly()}") println("isActualTransactionActive()=${TransactionSynchronizationManager.isActualTransactionActive()}") println("isNewTransaction()=${tx.isNewTransaction()}") // get } } 제가 기대한건isNewTransaction = true인데요 -> 가장 처음 호출된 @Transactional이 있는 service 메서드이기 때문에 그런데테스트 코드로 실행해도 그렇고, API로 get 메서드가 호출되도록 해봐도 그렇고모두 isNewTransaction = false 로 나옵니다. 내부 트랜잭션이 아니라 외부 트랜잭션이라고 생각했는데 왜 false일까요.... 09:54:40.059 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Creating new transaction with name [com.application.service.member.MemberService.get]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly 09:54:40.062 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Opened new EntityManager [SessionImpl(16208286<open>)] for JPA transaction 09:54:40.075 [Test worker] DEBUG o.h.e.t.i.TransactionImpl - On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false 09:54:40.075 [Test worker] DEBUG o.h.e.t.i.TransactionImpl - begin 09:54:40.081 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Exposing JPA transaction as JDBC [org.springframework.orm.jpa.member.HibernateJpaDialect$HibernateConnectionHandle@486e4af6] 09:54:40.083 [Test worker] TRACE o.s.t.i.TransactionInterceptor - Getting transaction for [com.application.service.member.MemberService.get] 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Found thread-bound EntityManager [SessionImpl(16208286<open>)] for JPA transaction 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Participating in existing transaction TransactionSynchronizationManager.isCurrentTransactionReadOnly()=true TransactionSynchronizationManager.isActualTransactionActive()=true outer.isNewTransaction()=falseCreating new transaction with name이 나오는데 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Participating in existing transaction 이 로그도 나옵니다,,
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
init(B Builder), configure(B builder) 에 대하여 질문 드립니다.
안녕하세요, 수업 내용을 보면 6:00 시간대의 수업자료를 보면 SecurityConfigurer에서 init(B Builder), configure(B builder)을 호출한다고 나와있습니다. 하지만, 실제 소스코드를 보면 아래와 같은데, 파라미터를 보면 Builder 타입이 아닌, 파라미터를 넘기지 않는 것을 확인할 수 있습니다.@Override protected final O doBuild() throws Exception { synchronized (this.configurers) { this.buildState = BuildState.INITIALIZING; beforeInit(); init(); this.buildState = BuildState.CONFIGURING; beforeConfigure(); configure(); this.buildState = BuildState.BUILDING; O result = performBuild(); this.buildState = BuildState.BUILT; return result; } }확인 부탁드려도 될까요?감사드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터베이스 테이블 생성 안됨
로그는 잘 나가는 것 같은데 데이터베이스를 확인해보면 테이블이랑 데이터가 안 들어가는 것 같습니다 ㅠ 그리고 ddl-auto 모드도 none 으로 바꿔봐도 계속 같은 로그가 나옵니다.(테이블 생성 및 drop) 로그 첨부할게요.> Task :compileJava UP-TO-DATE > Task :processResources UP-TO-DATE > Task :classes UP-TO-DATE > Task :compileTestJava UP-TO-DATE > Task :processTestResources UP-TO-DATE > Task :testClasses UP-TO-DATE 19:41:14.516 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [jpabook.jpashop.MemberRepositoryTest]: MemberRepositoryTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. 19:41:14.568 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration jpabook.jpashop.JpashopApplication for test class jpabook.jpashop.MemberRepositoryTest 19:41:14.668 [Test worker] INFO org.springframework.boot.devtools.restart.RestartApplicationListener -- Restart disabled due to context in which it is running . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.4.0) 2025-06-16T19:41:14.814+09:00 INFO 56122 --- [ Test worker] jpabook.jpashop.MemberRepositoryTest : Starting MemberRepositoryTest using Java 20.0.1 with PID 56122 (started by sungwoo in /Users/sungwoo/Documents/dev/study/online-lecture/inflearn/jpa/2.jpa-application) 2025-06-16T19:41:14.815+09:00 INFO 56122 --- [ Test worker] jpabook.jpashop.MemberRepositoryTest : No active profile set, falling back to 1 default profile: "default" 2025-06-16T19:41:15.139+09:00 INFO 56122 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2025-06-16T19:41:15.150+09:00 INFO 56122 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 6 ms. Found 0 JPA repository interfaces. 2025-06-16T19:41:15.337+09:00 INFO 56122 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2025-06-16T19:41:15.435+09:00 INFO 56122 --- [ Test worker] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:cb23765c-56b9-40bc-ba72-8f1435f049ba user=SA 2025-06-16T19:41:15.436+09:00 INFO 56122 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2025-06-16T19:41:15.470+09:00 INFO 56122 --- [ Test worker] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2025-06-16T19:41:15.500+09:00 INFO 56122 --- [ Test worker] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.2.Final 2025-06-16T19:41:15.517+09:00 INFO 56122 --- [ Test worker] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled 2025-06-16T19:41:15.661+09:00 INFO 56122 --- [ Test worker] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer 2025-06-16T19:41:15.706+09:00 INFO 56122 --- [ Test worker] org.hibernate.orm.connections.pooling : HHH10001005: Database info: Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 2.3.232 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown 2025-06-16T19:41:16.066+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : create global temporary table HTE_member(rn_ integer not null, id bigint, username varchar(255), primary key (rn_)) TRANSACTIONAL 2025-06-16T19:41:16.126+09:00 INFO 56122 --- [ Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2025-06-16T19:41:16.132+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : drop table if exists member cascade 2025-06-16T19:41:16.133+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : drop sequence if exists member_seq 2025-06-16T19:41:16.135+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : create sequence member_seq start with 1 increment by 50 2025-06-16T19:41:16.137+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : create table member (id bigint not null, username varchar(255), primary key (id)) 2025-06-16T19:41:16.140+09:00 INFO 56122 --- [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2025-06-16T19:41:16.239+09:00 WARN 56122 --- [ Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2025-06-16T19:41:16.368+09:00 WARN 56122 --- [ Test worker] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) 2025-06-16T19:41:16.431+09:00 INFO 56122 --- [ Test worker] jpabook.jpashop.MemberRepositoryTest : Started MemberRepositoryTest in 1.764 seconds (process running for 2.307) 2025-06-16T19:41:16.749+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : select next value for member_seq 2025-06-16T19:41:16.808+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : insert into member (username,id) values (?,?) Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 2025-06-16T19:41:16.819+09:00 INFO 56122 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2025-06-16T19:41:16.819+09:00 DEBUG 56122 --- [ionShutdownHook] org.hibernate.SQL : drop table if exists member cascade 2025-06-16T19:41:16.820+09:00 DEBUG 56122 --- [ionShutdownHook] org.hibernate.SQL : drop sequence if exists member_seq 2025-06-16T19:41:16.821+09:00 INFO 56122 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2025-06-16T19:41:16.822+09:00 INFO 56122 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. > Task :test [Incubating] Problems report is available at: file:///Users/sungwoo/Documents/dev/study/online-lecture/inflearn/jpa/2.jpa-application/build/reports/problems/problems-report.html Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.11.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD SUCCESSFUL in 3s 5 actionable tasks: 1 executed, 4 up-to-date 오후 7:41:16: Execution finished ':test --tests "jpabook.jpashop.MemberRepositoryTest"'.
-
미해결
개발 강의 추천 부탁드립니다.
[3줄 요약]비전공자로 10년 전 JSP, PHP 기반 개발 경험이 있으며, 현재는 헤드헌터로 활동 중입니다.React + Java(Spring) + MongoDB 기반으로 헤드헌터 업무에 활용할 수 있는 웹/모바일 플랫폼을 직접 개발하고자 합니다.기술 공백과 최신 스택(Git 등) 부족으로 학습 방향 및 인프런/부트캠프 강의 추천이 필요합니다. [본문]안녕하세요.현재 40세, 비전공자(경영학과)이며, 현재는 헤드헌터로 활동 중입니다.12년 전 독학과 오프라인 Java 강의(6개월) 수강 후 JSP 기반 웹 개발을 약 6개월,또한 웹호스팅 업체에서 리눅스/윈도우 서버 운영과 PHP 유지보수를 약 1년간 경험했습니다.퇴사 후 HTML5, CSS3, PHP, MySQL 기반으로 1인 창업 프로젝트(플랫폼)를 개발 경험도 있으나,프론트엔드 실무 한계로 인해 학원과 인강으로 보완했지만 실무 수준에 도달하기는 어려웠습니다.이후 창업을 접고 현재는 헤드헌터 일을 8년째 하고 있습니다. 최근 AI 도구(GPT, CURSOR 등)로 인해 1인 개발의 장벽이 많이 낮아졌다고 느꼈고,사이드프로젝트로 다시 한번 플랫폼을 만들어보자는 생각에 도전하고 있습니다. 우선 서버는 아마존이나 네이버 등 1년 동안 무료로 제공하는 클라우드를 생각하고 있습니다. [프로젝트 방향]목표: 헤드헌터 업무에 활용 가능한 게시판 중심의 웹 & 모바일 플랫폼프론트엔드: React백엔드: Java(Spring), 일부 Python (데이터 분석용)DB: MongoDB (NoSQL 기반)기능: 기능: 엑셀 데이터 업로드/필터링, 검색, 태그, 동료와 공유 및 협업플랫폼: PC 웹 + Android 우선 대응 [현재 느끼는 기술적 한계]10년 이상의 개발 공백 → 신규 기술 감각이 거의 없음Git, 협업 툴, 배포 등 실무적인 스택을 제대로 써본 적 없음과거 창업 경험 덕에 HTML/CSS/JS 기본 흐름은 이해주당 약 20시간 정도 학습 및 개발 시간 확보 가능 [현재 계획 중인 학습 우선순위]모든 강의를 다 듣기엔 시간 제약이 있으므로, 아래와 같은 것부터 선택적으로 수강하려고 합니다.React 중심 프론트엔드 학습 – 프로젝트 기반으로 실습 위주Spring 백엔드 학습 – REST API + MongoDB 연동 포함Git, 배포, 협업 도구 등 실무 환경 익히기Python 기초 + 데이터 분석 활용 (선택적)(Node.js나 웹 자동화는 현재는 후순위입니다) 시간상 모든 강의를 다 들을 수는 없어, 섹션별로 필요한 내용만 골라 수강할 수 있는 방식이 있는지 궁금합니다.또한 혼자서 진행하는 프로젝트이기에, 코드 리뷰나 피드백 커뮤니티가 병행되는 부트캠프가 있다면 병행하고 싶습니다.비슷한 경험을 하신 분이나, 인프런/코드잇 등에서 유익했던 강의나 커뮤니티가 있다면 조언 부탁드립니다 감사합니다. #사이드프로젝트 #React #JavaSpring #MongoDB #프론트엔드 #백엔드 #풀스택도전#개발공백극복 #IT학습로드맵 #인프런강의추천 #코드잇추천
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ModelAttribute와 model.addAttribute() 이름 차이.
강의 9분 20초 경부터 설명하는 pdf 내용모델에 데이터를 담을 때는 이름이 필요하다. 이름은 @ModelAttribute에 지정한 name(value) 속성을 사용한다. 만약 다음과 같이 @ModelAttribute의 이름을 다르게 지정하면 다른 이름으로 모델에 포함된다.@ModelAttribute("hello") Item item -> 이름을 'hello'로 지정model.addAttribute("hello", item); -> 모델에 'heelo' 이름으로 저장 이 설명에 대해서 궁금한 점이있는데요. 만약 다음과 같이 @ModelAttribute의 이름을 다르게 지정하면 다른 이름으로 모델에 포함된다. 이 부분이 이해가 잘 가지 않습니다. 위 두 코드 모두 모델의 키(이름?)이 결국 'hello'로 사용되고 뷰에서 또한 hello로 데이터를 꺼낼 수 있는 것 아닌가요? 그런데다음과 같이 @ModelAttribute 이름을 다르게 지정 이라는 부분 때문에 헷갈립니다.. 어느 부분이 다른건지 모르겠고 제가 어느 것을 놓치고 있는지 잘못이해하고있는지 잘모르겠습니다. 둘다 hello로 모델에 저장되는 것은 매한가지같은데 어느 부분이 차이점이라는 것인가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
updateMemberResponse 반환 값
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. @PutMapping("/api/v2/members/{id}") public updateMemberResponse updateMemberV2( @PathVariable("id") Long id, @RequestBody @Valid updateMemberRequest request) { memberService.update(id, request.getName(), request.getAddress()); // Member findMember = memberService.findOne(id); return new updateMemberResponse(id, request.getName(), request.getAddress()); }return에 requst의 값을 넣어서 반환 받는 건 안 좋은 방법일까요?findMember로 꺼내서 return 하면 request로 바로 하는 것 보다 어떤 이점이 있는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew 빌드 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.계속 "내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다." 라고 뜹니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
중복회원예외()에서 오류 발생
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]중복 회원 예외()에서 오류가 자꾸 발생합니다. @Test public void 중복_회원_예외() throws Exception { //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)); //Then assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appendedjava.lang.IllegalStateException: 이미 존재하는 회원입니다. at hello.hello_spring.service.MemberService.lambda$validateDuplicateMember$0(MemberService.java:39) at java.base/java.util.Optional.ifPresent(Optional.java:178) at hello.hello_spring.service.MemberService.validateDuplicateMember(MemberService.java:38) at hello.hello_spring.service.MemberService.join(MemberService.java:31) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728) at hello.hello_spring.service.MemberService$$SpringCGLIB$$0.join(<generated>) at hello.hello_spring.service.MemberServiceIntegrationTest.중복_회원_예외(MemberServiceIntegrationTest.java:45) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿 생성과 등록 차이
이번 강의에서 @ServletComponentScan 에 대한 설명을 들으면서 궁금한 점이 생겼는데요, 서블릿 생성과 등록 차이에 대한 질문좀 드리겠습니다.ServletApplication이 실행되고 @ServletComponentScan 이 붙어있으면 현재 내 패키지를 포함해서 하위 패키지를 뒤져서 서블릿을 모두 찾아 자동으로 서블릿을 등록해준다고 하셨습니다.아마 서블릿 컨테이너에 등록하는 것이겠지요? (틀렸다면 말씀해주세요)그런데 여기서 이 등록이라는 것이 서블릿 객체로 생성해서 등록하는 것인지 아니면 객체가 아닌 단순히 스프링 빈처럼 빈이름이라던가 해당 서블릿을 타입이라던가 그런것을 식별 정보만을 사용해서 등록한다는 것인지 궁금합니다. 왜 이 부분을 질문 드리냐면 이전 강의에서 서블릿 컨테이너의 역할중에 서블릿 객체를 생성하는 역할이 있다고 강의 하셨는데요. 서블릿이 자동 등록될 때 만약에 객체를 생성해서 객체가 등록된다면 @ServletComponentScan 은 단순히 스캔 및 서블릿으로 등록 판별만하고 서블릿 객체를 생성하는건 서블릿 컨테이너의 역할이 될 것 같은데 만약에 객체를 생성해서 등록하는게 아닌 스프링 빈처럼 @ServletComponentScan 이 이름, 타입같은 정보로만 등록하는 것이라면서블릿 컨테이너의 서블릿 객체 생성 역할은 언제 일어나고 언제 사용되는건지 잘 모르겠습니다.@WebServlet에서 알맞은 url 매핑 요청이 들어왔을 때 그제서야 서블릿 컨테이너에 있는 정보를 바탕으로 서블릿 객체를 생성하고 request와 response를 받는 식인가요? 결국 제가 궁금한건 @ServletComponentScan 에서 말하는 자동 등록이 스프링 컨테이너가 하는 객체 생성까지 포함인지, 아니면 별도의 정보로 등록하고 컨테이너가 하는 객체 생성도 별개의 것인지 궁금합니다. 감사합니다!
-
미해결Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
subscription signal 에 upstream 으로 이동하는 순서
안녕하세요, 좋은 강의 감사합니다.쉬운 예제코드와 그림설명 덕분에 Java 8 stream API, Spring Batch ItemStream 과 대조해가며 쑥쑥 이해하고 있습니다. ContextAPIExmaple02 에서 궁금한 점이 있습니다.contextWrite() 호출 순서에 의문이 생겨 순서를 변경해보니, 무조건 아래에서 위로 진행되는 걸로 확인되었습니다. 이 규칙이 적용되는 원리가 궁금합니다. 현재 추측하기로는 "subscription signal 에 따라 upstream 으로 이동하는 operator 들은 모두 아래에서 위 순서대로 이동(반전)된다." 인 것 같은데, 확신이 생기지 않습니다.참고 할 수 있는 자료나 내부 클래스가 있을까요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
RedisTemplate<String, String>
RedisTemplate<String, String> 빈으로 등록하지 않고 생성자 주입으로 사용하던데 빈으로 등록하지 않아도 스프링 내에서 자동으로 빈 등록해주나요?
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
404 톰캣오류
톰캣 404 오류떄매 미치겠습니다. 해당 부분대로 따라하고 서버 빌드해도 자꾸 안되네요. 티스토리 싹다 뒤져도 안고쳐져서 원인파악을 계속못하고있습니다.path경로 다 바꾸고 했는데도안되네요.ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러 매핑, 어댑터 제대로 이해했나요??
이전에 저희가 구현했을때는 Map에서 그냥 url일치하는 것을 가져오다보니 이해가 쉬웠는데 핸들러 매핑이라는 개념으로 바뀌다 보니 꽤나 헷갈리는 부분이 있어서 질문드립니다. 핸들러 매핑과 어댑터 제가 제대로 이해하고 있는게 맞는지 꼭 확인좀 해주시면 감사하겠습니다.추측이 좀 있습니다...먼저 컨트롤러를 찾기 전에 어떤 핸들러 매핑 사용해야하는지 찾고 그 다음 이 핸들러 매핑을 사용해서 알맞은 컨트롤러를 찾는게 맞는다.이번 강의에선 먼저 우선순위가 높은 RequestMappingHandlerMapping이 @RequestMapping이 있는지 확인한다. 없으므로 다음 우선순위로 넘어간다. BeanNameUrlHandlerMapping이 컨트롤러들을 확인해서 일치하는 스프링 빈 이름이 있는지 찾는다. 일치하는 스프링 빈이 있으므로 핸들러로 꺼낸다. 꺼낸 핸들러를 처리하기 위한 어댑터를 찾는다. 앞서 직접 구현한 V5에서 처럼 어댑터를 하나씩 꺼내어 adapter.supports()하여 알맞은 어댑터 인지 찾는다.RequestMappingHandlerAdapter 와 HttpRequestHandlerAdapter 는 아니므로 넘어가고 SimpleControllerHandlerAdapter이 처리 가능한 어댑터로 반환된다.여기까지입니다. 제가 특히나 궁금한 것은 핸들러 매핑입니다. 제가 적은 핸들러 매핑 방식은 핸들러 매핑이 먼저 우선순위대로 하나씩 선택되고 선택된 핸들러 매핑이 다시 컨트롤러들을 검사해서 알맞은 컨트롤러를 찾는 식으로 적어놨는데요.즉, 먼저 RequestMappingHandlerMapping 이 선택되고 @ReqiestMapping인 컨트롤러가 있는지 찾고 없으면 다음 BeanNameUrlHandlerMapping 이 선택되고 매핑 방식인 빈 이름으로 컨트롤러들을 검사해 있으면 반환.어댑터는 위에 적은 그대로입니다.이런 식으로 이해했는데 제대로 이해했을까요? 혹 틀린부분이나 잘못 이해하고 있다면 꼭 지적해주시면 감사하겠습니다. 감사합니다...!!
-
해결됨옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트
수업 자료는 어디에 있나요?
안녕하세요,수업자료 pdf는 어디에 있나요?
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
외부 API 테스트
kill9형 오매불망 테스트만 기다리고있었는데 업로드 되서 너무 좋다. 근데 외부 API 호출이 Step 안에 있는 경우 어떻게 테스트하면 좋을지 알려 줄 수 있을까?호출이 가능한 상황과 호출이 불가능한 상황 2가지 경우에 대해서 설명부탁해