묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findOne 메서드의 이름에 대하여
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 메서드 이름을 보던 중 의문이 생겨 이렇게 질문을 남깁니다. 서비스에서 findOne 메서드의 이름도 findById라고 하면 비록 리포지토리랑 이름이 겹치긴 해도 더 명확하고 좋을 거 같은데, 혹시 findOne이라고 짓는 특별한 이유가 있을까요? 강의에서 말씀하신 '서비스는 비즈니스에 가깝게 이름을 지어야 한다'는 내용과 관련된 것인지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA오류
[질문 내용]JPA 테스트 코드 오류============================CONDITIONS EVALUATION REPORT============================Positive matches:----------------- AopAutoConfiguration matched: - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition) AopAutoConfiguration.AspectJAutoProxyingConfiguration matched: - @ConditionalOnClass found required class 'org.aspectj.weaver.Advice' (OnClassCondition) AopAutoConfiguration.AspectJAutoProxyingConfiguration.CglibAutoProxyConfiguration matched: - @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition) ApplicationAvailabilityAutoConfiguration#applicationAvailability matched: - @ConditionalOnMissingBean (types: org.springframework.boot.availability.ApplicationAvailability; SearchStrategy: all) did not find any beans (OnBeanCondition) DataSourceAutoConfiguration matched: - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition) - @ConditionalOnMissingBean (types: io.r2dbc.spi.ConnectionFactory; SearchStrategy: all) did not find any beans (OnBeanCondition) DataSourceAutoConfiguration.PooledDataSourceConfiguration matched: - AnyNestedCondition 1 matched 1 did not; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource found supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType @ConditionalOnProperty (spring.datasource.type) did not find property 'type' (DataSourceAutoConfiguration.PooledDataSourceCondition) - @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)JPA코드를 작성하고 통합 테스트 코드를 작성하니 이와같은 오류가 뜹니다! 테스트 코드는 package hello.hello_spring.service; import hello.hello_spring.domain.Member; import hello.hello_spring.repository.MemberRepository; import jakarta.transaction.Transactional; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //Given Member member = new Member(); member.setName("hello"); //When Long saveId = memberService.join(member); //Then Member findMember = memberRepository.findById(saveId).get(); assertEquals(member.getName(), findMember.getName()); } @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));//예외가 발생해야 한다. assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }이렇게 되어있습니다!
-
미해결스프링 부트 - 핵심 원리와 활용
actuator 경로 질문
만약 컨트롤러를 설정할 때 actuator 경로를 쓰고 싶다면 어떻게 해야되는건가요?제가 테스트를 해보니 @Getmapping(/actuator) 했을 때 제가 설정한 컨트롤러를 타지 않고, 강의에서 알려주시는 액츄에이터 웹이 나오는 것을 확인했습니다.
-
미해결스프링 핵심 원리 - 기본편
aop 초기화 시점과 초기화 콜백 시점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 스프링 완전 정복 로드맵과 JPA 로드맵까지 전부 끝내고 개인 프젝 전에 복습을 하고 있습니다 확실히 전체 로드맵을 다 돌고 다시 보니까 아는 게 많아져서 그런지 더 재미있네요다름이 아니라 라이프 사이클을 복습하면서 스프링 aop 프록시 생성 시점과 콜백 시점은 정확히 언제일까? 먼가 먼저일까? 라는 궁금증이 생겼습니다그래서 개인적으로 테스트를 해보고 정리해 봤는데 아래 내용이 맞는지 읽어주시면 감사하겠습니다 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 ->postProcessBeforeInitialization -> 초기화 콜백 ->postProcessAfterInitialization ->소멸전 콜백 -> 스프링 종료직접 포스트 프로세서를 구현하고 ProxyFactory 사용해서 대체하니까포스트 프로세서의 어떤 메소드를 구현하냐고 프록시를 적용하냐에 따라서 콜백 메소드에 AOP 적용이 달라지더라구요초기화 콜백 이전에 AOP를 적용하면 초기화 콜백에도 부가 로그가 찍히고초기화 콜백 이후에 AOP를 적용하면 초기화 콜백에는 부가 로직이 안 찍히는걸 확인했습니다커스텀 말고 @Aspect를 통해서 적용하니까 콜백 메소드에 부가 로그가 안 찍히는걸로 봐서는 스프링 AOP는 postProcessAfterInitialization 메소드를 구현하는 걸로 추측해 봤습니다 감사합니다
-
미해결스프링 핵심 원리 - 고급편
@AfterReturning 설명 중 객체의 변경과 조작의 차이점
강의 18분 40초쯤 @AfterReturning 설명 중 반환되는 객체를 조작할 수는 있으나 변경할 수는 없다라고 말씀하셨는데 조작의 예시로 setter를 들어주시기는 했으나 setter를 통해 값을 변경하는 것도 결국 변경이 아닌가 생각이 들기도 하고 조작과 변경의 차이가 잘 이해되지 않습니다.조작과 변경의 차이를 조금 더 구체적이고 정확한 예시와 의미를 통해 이해시켜주실 수 있으실까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
GetMapping 경로 설정
프로젝트를 따로 만들면서 강의 들었던 내용을 참고하면서 혼자 해보는중입니다.근데 컨트롤러 경로 설정할때 /add 는 어디에도 없는데 왜 경로를 그렇게 했는지 궁금해서 작성합니다.컨트롤러 최상위는@Controller @RequestMapping("/basic/items") @RequiredArgsConstructor내부 컨트롤러는 @GetMapping("/add") public String addForm() { return "basic/addForm"; }html 경로는/resources/templates/basic/addForm.html `인데add 의 의미가 요청/응답 가상의 이름인지 아니면 제가 못찾은 경로의 이름인지 궁금합니다.
-
해결됨코드로 배우는 스프링 웹 프로젝트 - Basic
섹션5 파라미터 수집과 변환에서 시차 문의
강의4에서 강의5로 넘어오면SampleController.java에 작성하지 않았던 코드가 작성되어 있습니다. 강의에서 보여지던 git 주소와실제 git에서 검색되는 레파지토리 이름이 다름.spring2024_template 인가 싶어서 보면이것도 브런치 ch03, ch07 두개 뿐인데그나마도 강의에서 보여주는 소스코드와 다릅니다. 교재와 강의와 git이 모두일관성이 없어서 따라가기가 벅차네요.강의 찍으신 거 그대로 실습해보시고 올리시는 게 맞나요 ??강의초기에 미리 만들어둔 JSP 파일이 없어서 에러나는 부분 컨트롤러 소스 주석 푸실 때 언급이라도 해주시면 좋겠습니다. 강의 마칠 때(9:22) 즈음 되어서에러나는 게 정상입니다. 라고 하시면 1~4강 강의 진행 하다가 갑자기 5강 강의 초반에 에러 떠서 이것저것 확인해보고 하느라 시간 잡아먹게 되네요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
settings > plugins > marketplace : 수업영상의 lombok 와 명칭 똑같은게 없어요.
[질문 내용]강의 7:50 에 나오는 내용에서settings > plugins > marketplace : 수업영상의 lombok 을 설치하라고 나오는데,수업영상에 나오는것과 달리 지금은 lombok과 명칭이 일치하는게 없습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
build 시 jdk 깔았음에도 java installations does not exist 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 정말 하다 하다 안돼서 질문 남깁니다.. 공부하고 싶어요 도와주세요 ㅠㅠㅠㅠ 1 ) build 시 jdk 깔았음에도 java installations does not exist 에러예전에 jdk11썼었는데 학기끝나고 다시 공부하려고 보니 17로 바꾸라고 해서 jdk:17 / springBoot: 3 설정했는데 아래 첨부드린것 과 같은 에러가 나요.. 17로 바꿨음에도 불구하고 gradle 이 11을 찾는 것 같아보이는데(?) 왜 그런걸까요? ( 안쓰는 버전들의 jdk를 좀 지우긴 했어요..)1-1 )Gradle 사용자 홈 설정에서 path를 설정하는데, gradle파일이C:\Users\이름\.gradleC:\JavaSpring\hello-spring\gradle이렇게 두 개 존재하는 것 같은데 어떤걸로 해야 하는 건가요 ?제일 처음에 Gradle 사용자 홈 설정은 C:\JavaSpring\hello-spring\gradle 으로 되어있어서 이게 문제일까 싶어서 바꿨는데 어떤경로가 맞는건가요..? <에러화면><각종 설정 화면> templates/index.html -localhost:8080/hello 안뜸.. 2번은 해결했습니다. 1번은 아직이에요 ㅠㅠㅠㅠ
-
미해결스프링 시큐리티 OAuth2
스프링 부트 3버전으로 따라가시는 분들 참고하세요
build.gradle에서implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.3.RELEASE' 가 아닌 implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6:3.1.3.RELEASE' 으로의존성을 설정해야 합니다. 스프링 부트 3버전부터는 타임리프 엑스트라에서 5가 아닌 6만 인식하여 동작하므로 5로 설정하면 인증 동작에 오류가 생겨서 아무리 빌드를 다시해도 isAuthentication()이 동작하지 않으니 logout이 안 사라집니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
갑자기 빨간밑줄이 뜨며 실행이 안됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]에러메시지는 package org.aspectj.lang does not exist 라고 뜨며 TimeTraceAop 클래스 내에 곳곳 빨간줄이 뜹니다. 왜그러죠?? package hello.hello_spring.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect @Component public class TimeTraceAop { @Around("execution(* hello.hello_spring..*(..))")//그 실행하는데 패키지 명 그리고 거기 밑에 있는 거 여기에다가 여기다 클래스 명 등등에게 public Object execute( ProceedingJoinPoint joinPoint) throws Throwable {//서비스명만 측정하려면 hello.hello_spring.service long start = System.currentTimeMillis(); System.out.println("START: " + joinPoint.toString()); try { return joinPoint.proceed();//다음 메서드로 진행 } finally { long finish = System.currentTimeMillis(); long timeMs = finish - start; System.out.println("END: " + joinPoint.toString()+ " " + timeMs + "ms"); } } }
-
미해결실전! 스프링 데이터 JPA
auto-ddl 기능이 안됩니다 ㅠㅠㅠ
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]auto-ddl 기능이 제대로 작동하지 않아서 문의드립니다. 간단한 문제인데 혼자 해결 못해서 죄송합니다. yml 파일 문법은 다 맞는 걸로 보이는데... 혹시 틀린 거 있으면 말씀해주세요 ㅠㅠ spring: datasource: url: jdbc:h2:tcp://localhost/~/datajpa username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug # org.hibernate.type: trace import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class Member { @Id @GeneratedValue private Long id; private String username; public Member(String username) { this.username = username; } }혹시 몰라서 Member 엔티티 코드도 남깁니다!! 추가적으로 h2 데이터베이스에는 잘 접속하는 것 같아요 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@JsonIgnore가 실무에서 쓰이는 경우가 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 주문 조회 (/api/v1/simple-orders와 /api/v1/orders) api 학습하면서 궁금한 점이 생겼습니다.강의를 들으며 postman으로 request 했을 때, v1 코드에서 쿼리를 날릴 시 양방향 연관관계에서 문제가 발생할 수 있다는 것을 배웠습니다. 예를 들어, order list를 return했을 때, member와 delivery에 대한 프록시 객체로부터 필드를 조회해서 영속 상태의 객체를 반환하도록 구성한다면 v1에서는 @JsonIgnore로 양방향 연관관계에 대한 처리 코드를 작성해주어야만 이 문제가 해결되는 것으로 이해했습니다. 그런데 Dto를 만들어 반환하게 되면 @JsonIgnore을 없애도 이러한 문제가 사라지니, 사실상 @JsonIgnore을 실무에서 사용하는 일은 없지 않을까라는 생각이 들었습니다. 또한, 실무에서 양방향 매핑보다는 단방향 매핑을 선호하는 것으로 알고 있어 질문드립니다. 실무에서 이런 코드(@JsonIgnore)를 작성할 일이 있다면, 어떠한 경우인 지 예시가 있을까요?
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
dependencies 셋팅 부분에서 에러가 발생하네요
안녕하세요 강 프로젝트 세팅부분에서 javax.servlet groupId dependencies 에서 에러가 발생하는데 <properties> <javax.servlet-version>4.0.1</javax.servlet-version> <javax.servlet.jsp-version>2.3.3</javax.servlet.jsp-version> <javax.servlet.jsp.jstl-version>1.2</javax.servlet.jsp.jstl-version> <org.springframework-version>5.2.2.RELEASE</org.springframework-version> </properties> <!-- 라이브러리 셋팅 --> <dependencies> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${javax.servlet-version}</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>${javax.servlet.jsp-version}</version> <scope>provided</scope> </dependency>에러 발생 Missing artifact javax.servlet:javax.servlet-api:jar:1.2 입니다 .
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
404에러가 계속 뜹니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]404에러가 뜹니다. 폴더 경로라랑 빌드 그래들 등등 보여드리겠습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
model과 repository
memberRepository.save(member); 회원 정보를 repository(DB)에 담는건 이해가 됐습니다. 제 질문은 2가지입니다. 이게 비즈니스 로직인데 너무 짧아서 그냥 컨트롤러 로직에 함께 쓴 것인가요?실무에서도 model을 주로 request.setAttribute()로 사용하고 여기에 데이터를 담아서 쓰나요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
웹 개발을 할 때 HTTP API와 HTML 중에
만약 쇼핑몰 웹사이트를 만든다고 하면 요즘은 JSON으로 데이터만 넘겨주는 방식인가요? 아니면 프론트가 어떤 프레임워크를 사용하냐에 따라 달라지나요? 혹은 두 방식을 혼합해서 사용하는 경우도 있나요?
-
미해결스프링 시큐리티 OAuth2
CustomOAuth2AuthenticationFilter 구현 중 질문
CustomOAuth2AuthenticationFilter으로 인증까지 처리 후home으로 리다이렉션을 하는거 까지 구현을 하였는데요HomeController에서 인증객체를 가져오려고 하면 null을 가져오는데요 CustomOAuth2AuthenticationFilter에서 securitycontext에 저장하였다가 리다이렉션할 때 새로운 스레드에서 이것을 처리해서 그 스레드에는 securityContextHolder에는인증객체가 없는 거 같은거 같은데 해결방법이 있을까요nio-8081-exec-2 스레드는 customFilter에서 holder에 제대로 저장하는데 리다이렉션 후 home에서는 nio-8081-exec-3이 받습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
404에러에 관한 질문 static 폴더밑의 jsp 파일조차 실행안됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]새 프로젝트에 계속해서 404가 뜨는 상황입니다. 정적 컨텐츠조차도 404가 뜨는 상황인데 왜그런지 함 봐주실수 있나요? { "type": "about:blank", "title": "Not Found", "status": 404, "detail": "No endpoint GET /index.jsp.", "instance": "/index.jsp"}이렇게 화면에 뜹니다.
-
미해결스프링 시큐리티 OAuth2
AuthenticationManager 생성시점
가끔 securityconfig 설정 중 AbstractAuthenticationProcessingFilter 상속한 필터를 만들 때 AuthenticationManager가 필요해서 http.shareObject로 받아오면 Null을 반환하더라구요. protected void beforeConfigure() throws Exception { if (this.authenticationManager != null) { this.setSharedObject(AuthenticationManager.class, this.authenticationManager); } else { ObjectPostProcessor<AuthenticationManager> postProcessor = this.getAuthenticationManagerPostProcessor(); AuthenticationManager manager = (AuthenticationManager)this.getAuthenticationRegistry().build(); if (manager != null) { this.setSharedObject(AuthenticationManager.class, (AuthenticationManager)postProcessor.postProcess(manager)); } } 여기서 httpSecurity의 해당 메서드에서 providerManger를 생성하는 거 같으나 디버깅했을때여기보다 제가 Bean으로 정의한 SecurityFilterchain이 먼저 걸려 httpSecurity.getShareObject()를 하면 null을 반환하더라구요. 그래서 authenticationConfiguration.getAuthenticationManager()으로 넣기는 하였으나 이게 정확히 AuthenticationManager생성주기가 매우 궁금하여 질문드립니다.