묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Test를 만들땐 항상 처음부터 시작하는 식으로 코드를 짜나요?
항상 Member객체를 만들고 시작하시는 것 같은데, 실제로는 멤버객체가 이미 있고 그걸 find하든 save하든 할거아니예요?? Test할땐 항상 처음부터 시작한다고 생각하고 로직을 짜나요??그리고 Test코드를 작성하는 이유는 무엇인가요? 기능 테스트를 할 때 항상 postman으로 했는데 그렇게 하는 것과 차이점이 있을까요 ???그리고 테스트코드에서는 main 디렉토리에 있는 클래스를 자유롭게 접근할 수 있는건가요? 예시에서도 MemoryMemberRepository를 쓰시길래 궁금해서 여쭤봅니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
통합테스트를 진행할때 bad SQL grammer 에러가 납니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select * from member where name = ?]Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "MEMBER" not found (this database is empty); SQL statement: select * from member where name = ? [42104-214] org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select * from member where name = ?]통합테스트를 진행시키면 위와 같은 에러가 나옵니다.강의를 들으면서 MemberServiceIntegrationTest.java를 작성했고, jdbc 템플릿을 이용해 db 구축도 했습니다. 오타가 있는지 계속 확인해보았지만 오타로 보이는것이 없어 질문 올립니다. 스프링이 완전 처음이라 강의를 100퍼센트 이해하면서 코드를 따라 짜지 못했기 때문에, 질문을 정확하고 자세하게 말씀 못드려서 죄송합니다...https://github.com/ffe4el/Spring_prj/tree/main/hello-spring오류가 나는 코드를 깃허브 위 주소에 올려놓았습니다. 살펴봐주세요...ㅠ
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV1 @RequiredArgsConstructor 질문입니다
@RequiredArgsConstructor이 애노테이션은 final이 붙은 변수의 생성자를 자동으로 생성해주고, 생성자가 하나만 있다면 @AutoWired를 생략할 수 있다고 알고 있습니다.private final MemberRepositoryV1 memberRepository;근데 여기서, MemberRepositoryV1가 Bean으로 등록되지 않았는데 어떻게 자동으로 주입을 받을 수 있는 것이죠?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
인텔리제이 Run이 실패합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]Run이 실패하는데 제가 환경변수를 잘못 설정한건지 설ㅍ치를 잘못 한건지 뭐가 문제인건지 모르겠네요ㅠㅠㅠ
-
미해결스프링부트 시큐리티 & JWT 강의
enum 타입의 getAuthorities
강사님 안녕하세요. 강사님 강의를 듣고 jwt를 배우고 있습니다. Users entity의 role를 enum타입으로 변경하고 싶은데 , PrincipalDetails의 getAuthorities을 어떻게 설정하면 될까요?UsersRole enum 클래스 PrincipalDetails 클래스
-
해결됨스프링 핵심 원리 - 기본편
테스트 검증할 때
안녕하세요 !계속 테스트 검증하는 과정을 반복하다보니 궁금증이 생겨 질문드립니다.강사님이 검증 코드를 작성하실 때이 강의 코드로 예시를 들면memberService.getMemberRepository();가memberRepository1 변수로 있음에도 불구하고assertThat(memberRepository1).isSameAs(memberRepository);으로 작성하지 않고assertThat(memberService.getMemberRepository()).isSameAs(memberRepository);로 작성하시더라구요.이 강의에서뿐만 아니라 지금까지 다른 강의에서도 검증 코드를 작성하실 때 변수를 사용하시지 않는 것 같았는데,혹시 이렇게 작성하시는 이유가 따로 있을까요?
-
해결됨스프링 핵심 원리 - 기본편
DI 과정을 보고 싶습니다.
Controller에서 필요한 파라미터는 ArgumentResolver가 만들거나 변환해서 넣어주듯이 DI과정에스프링 빈 생성할 때 필요한 의존성 주입을 해주는 오브젝트나 메서드가 있을거 같은데 검색을 해도 다 의존성 주입 방법만 나오더라구요..어디서 확인해야 할까요 ??
-
해결됨스프링 핵심 원리 - 기본편
excludeFilters
@Configuration //없어도 문제가 없다. 하지만 관례상 설정 파일임을 보여주기 위해 붙인다. @ComponentScan( basePackages = "hello.core", excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) )AutoAppConfig에서 @Configuration은 관례상 붙인다라는 답변을 확인했습니다.그리고 exlucdeFilters를 보던 중 궁금증이 생겼습니다.excludeFilters는 @Configuration 클래스를 제외한다고 했는데 그러면 실제 spring을 동작 시켜서 springContainer에 빈이 등록될 때는 autoAppConfig.class는 bean으로 등록이 안되지만 @ComponentScan으로 인해서 나머지 @Component class들은 bean으로 등록된다고 생각했는데 올바르게 생각한것인지 궁금합니다.
-
해결됨스프링 시큐리티 OAuth2
모바일앱의 인증을 위해 자체 인가서버와 소셜로그인을 함께 사용하는 경우
우선 좋은 강의 감사하다는 말씀드립니다. 올려주신 강의 2편 모두 잘 보고 있고 실무에서 많은 도움을 받고 있습니다.강사님께 배운 내용을 토대로 인증시스템을 구성해보려던 중 질문 사항이 있어 질문드립니다. 강의에서는 웹애플리케이션 기반 인증에 비중을 두고 설명을 잘 해주셨는데, 모바일 애플리케이션에 대상으로 인증을 구성을 해보려하니 조금 헷갈리는 부분이 있네요.요구사항은 아래와 같은데요,추후 내부 리소스를 외부서비스에 제공하기 위한 자체 OAuth2.0인가 서버 구성모바일 애플리케이션에서 JWT기반 인증을 할 수 있는 인증 및 회원 가입 API자체 OAuth2 인가서버와 연계하여 구성되는 리소스서버 구성소셜로그인 기능인증 시스템을 구성하기 위해 아래와 같은 방법을 생각하고 있습니다.자체 인증 시스템을 통한 로그인의 경우 자체 모바일앱에 별도의 web view를 생성하고 싶지 않으므로 API로 로그인 정보를 바로 받아서 내부적으로 Resource Owner Password Flow 처리하여 토큰 반환유저가 모바일앱 UI에 OAuth2 인가서버 계정정보(ID/PASSWORD)를 직접 입력로그인 버튼 클릭 시, 서버가 계정 정보를 API로 직접 전달받아 내부적으로 Resource Owner Password Flow를 통해 검증하고 토큰 및 인증 필요 정보를 클라이언트에 반환소셜로그인의 경우, 안전한 인증을 제공하기 위해 모바일 UI에 별도의 webView를 띄우고 Authorization Code Grant방식으로 인증진행webView를 통해 외부서비스에 대한 Authorization Code Grant 흐름이 진행.최종적으로 서버가 리다이렉트 주소를 통해 code를 전달받아 소셜 인증이 완료되는 경우(최초 회원인 경우 가입 처리하고), 서버는 자체 리소스서버에서 검증할 수 있는 Access Token을 따로 발급하여 응답하고 이를 모바일앱이 수신하여 인증처리. 질문은 아래와 같습니다.OAuth2.0 인가서버를 운용하는 경우 자사 모바일 앱의 자체로그인을 Resource Owner Password Flow로 직접 처리하는 것이 일반적인 방법인지? 더 좋은 방법은 없는지?외부 소셜 로그인의 경우 패스워드 없이 가입처리를 해야하는데 자체인가서버의 회원과 어떻게 일괄적으로 관리가 가능할지?외부 소셜 로그인의 경우라도 최종 발급되는 토큰은 자체 리소스서버에서 검증가능하도록 자체로그인과 일괄된 방법으로 JWT 발급이 되어야 할 것 같은데, Spring Authorization Server를 통해 효율적으로 구성이 가능할지?소셜로그인의 경우 서버가 리다이렉트 주소를 통해 code를 받아오더라도 OAuth2AuthorizedClient까지만 확인하고 세션에 인증정보를 저장하고 싶지 않은데 어떻게 효율적으로 custom 가능할지?oauth2Client API 및 OAuth2AuthorizedClientManager를 통해 토큰을 받아오는 것을 생각하고 있는데 더 합리적인 방법은 없을지?긴 질문 읽어주셔서 감사합니다. 질문가지수가 많아서 죄송하네요. 답변 주실 수 있는 부분까지만 주셔도 괜찮습니다.혹시 제가 구상하는 방법에서 개선되어야 하는 부분이나 혹시나 제가 잘못 생각하고 있는 부분은 없을 지 이런 부분도 조언해주시면 너무 감사하겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 폼태그 form:textarea에 디비에서 불러온 값을 표시하는 방법
안녕하세요.스프링 폼태그를 이용해서 디비에 저장된 값을 textarea에 출력하고 싶습니다.그런데 스프링 폼태그는 태그 사이에 값을 넣을 수 없고, form:textarea에는 value 속성이 없습니다. placeholder에 넣는 방법도 있긴 한데 그건 저 코드와 동일하진 않아서요.HTML로 작성한<textarea rows="5" cols="20" placeholder="내용" name="content">${board.content}</textarea>를 스프링 폼태그로 바꾸려면 어떻게 하는 게 좋을까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 여부 체크
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요!pdf7장에 1쪽에상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠지만, 등록, 수정, 삭제, 조회 등등 상품관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 라고 하셨는데 로그인 여부 체크를 세션을 통해서 하면 되는걸까요?? 아니면 다른 방법이 있나요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Connection, pstmt 질문입니다
public void aaa() throws SQLException { String sql = "delete from member where member_id =?"; String memberId = "!"; try { Connection con = getConnection(); PreparedStatement pstmt = null; pstmt = con.prepareStatement(sql); } catch (Exception e) { } }이렇게 try 문 안에서 한번에 받지 않고Connection con = null; PreparedStatement pstmt = null;이렇게 null로 외부에서 선언을 하는 것은 finally 문 안에 close 메서드에 파라미터로 넘겨주기 위함이 맞나요 ?
-
해결됨토비의 스프링 부트 - 이해와 원리
메타어노테이션을 파악하는 주체가 디스패처 서블릿 -> 에 대한 질문이 있습니다!
안녕하세요 토비님!! @Component 스캔 강의 마지막 즈음에 1. @RestController는 내부에 @ResponseBody를 메타어노테이션으로 가지고 있기에 디스패처 서블릿이 컨트롤러에 @ResponseBody가 붙어있는 것으로 인지할 수 있고 2. 더 나아가 @RestController와 @Controller가 클래스 레벨에 붙게 되면 @RequestMapping을 삭제할 수 있기 때문에 디스패처 서블릿이 내부적으로 매핑 정보가 있음을 인식한다고 말씀하셨습니다!! 이전에 자바 웹 프로그래밍 Next Step 책으로 공부를 했을때 디스패처 서블릿은 내부적으로 핸들러에 대한 매핑을 가지고 있고 핸들러 매핑 구현체는 ApplicationContext를 통해 @Controller 어노테이션이 붙어있는 클래스를 요청하여 받아와 사용하기 편리한 형태의 오브젝트로 만들어 보관하는것으로 알고 있습니다! 만약 책에서 공부했던 내용과 실제 Spring MVC 구조가 동일하다면, 위와 같은 상황 때문에 디스패처 서블릿이 내부적으로 매핑 정보가 있음을 인식한다고 말씀하신것인지 확인차 질문드립니다!! 그리고 1번의 경우를 실제 코드레벨로 보고 싶어서 찾아보고 있는데 어떤 코드를 봐야할지 모르겠습니다.. 혹시 약간의 힌트를 주실 수 있을까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
DataAccessException 타입으로 던졌는데, BadSqlGrammarException으로 잡을 수 있는 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Java 기본 문법을 여쭤보는 것 같지만 궁금합니다ㅜㅜ. 어떻게 부모타입(DataAccessException)으로 throw했는데 자식타입(BadSqlGrammarException)으로 catch할 수 있는 건가요?이렇게 테스트를 해보았는데, 잡히더라구요. 그래서 catch문에서 자동으로 upcasting이 되는건가 싶어서 RuntimeException이 아닌 Checked Exception으로도 진행을 해보았습니다.하지만 컴파일 에러가 발생하더라구요ㅜㅜ. RuntimeException만 upcasting을 해주는 건지, 아니라면 어떻게 자식타입으로 catch할 수 있는건지 궁금합니다!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
new-form.jsp를 접속하려면 에러가 뜨는데 왜 그러는지 궁금합니다.
안녕하세요!아래 올려드린 소스코드로http://localhost:8080/jsp/members/new-form.jsp 를 접속하면 에러가 뜨는데jsp를 사용할 수 있도록 build.gradle의 dependencies에 잘 추가한 것 같은데 왜 안될까요?커뮤니티 검색도 하고 구글링도 해보았는데 방법을 못찾았어요ㅠ 디렉토리 구조도 잘 맞는 것 같은데 이상하네요..! https://drive.google.com/file/d/1U-T6v83kwoCgceYkzs6EZOJaJhbudPQP/view?usp=share_link
-
미해결스프링 부트 - 핵심 원리와 활용
모니터링
좋은 강의 올려주셔서 정말 감사합니다. spring boot, jvm을 모니터링하고 있는데 system cpu, proess cpu 같은 치수들을 보면서 무엇이 위험한 수치이고 어떻게 대응해야 하는 지 감이 오지 않아서제 나름대로 공식 문서나 구글링을 찾아보곤 하는데 혹시 어떤 문서를 읽는 것이 좋은 가요? 예를 들면 cpu 사용량이 0.006정도 되는데 얼마의 치수가 되면 위험하고 대응해야 하는 지 궁금합니다... 읽어주셔서 정말 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
7:31초쯤 영속성이 끊긴 멤버 반환
안녕하세요. 많이 찾아봤는데 없는것같기도 하고, 7:31초쯤을 시작으로 영속상태가 끊긴 멤버가 반환이 된다라는 말씀을 듣고 질문드립니다. Service에서 반환이 되는 Controller에서 Entity Manager를 사용하기 위해서 @PersistenceContext 어노테이션을 사용해서 em을 주입받았습니다.# MemberApiController# MemberService# 로그이렇게 됬을때 PK가 1인 Member를 Controller에서 찾아보았는데, 만약에 영속성이 끊긴 Member가 반환이 된다면 로그에 "???"이라는 문구 사이에 Select문을 통해서 PK가 1인 멤버를 가져와야하지 않나요? 영속성컨텍스트에서 관리를 하지 않은 Member를 반환했고, 그 Member를 다시 찾으려고 시도하기때문입니다.# EntityManager.contains 사용영속성 컨텍스트에서 관리되는 Object인지 확실히 확인하기 위해서 EntityManager의 contains 메서드를 통해서 확인해보았을때 로그가 아래와 같이 나왔습니다.결론적으로 memberService.update를 통해서 반환된 Member객체는 영속성이 끊기지 않은 객체이지 않나요??감사합니다 :D
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
스프링 db-2 트랜잭션 질문
트랜잭션이 적용이 되어있는지 확인을 하실때, 의존성 주입으로 확인을 하시는 것을 보고 왜 저렇게 해야하지 그냥 직접 객체 생성을 해서 하면 안될까..? 의문을 가지고 해봤는데 안되는 모습을 보고 질문드립니다. 왜 작동이 안하는 것일까요@Autowired 로 안하고, 그냥 new 로 직접 등록했습니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
프로퍼티 접근, 직접호출
user.username은 user의 username을 프로퍼티 접근을 해서 user.getUsername()을 호출하고, user.getUsername()은 user의 getUsername()을 직접 호출한다고 하셨는데,똑같이 getUsername()을 호출하는건데 무슨 차이가 있는건지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
TestDataInt
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]TestDataInt 가 @Component인 이유는ItemRepository와 MemberRepository의 의존관계 주입을 위해서 인가요?? 다른 이유도 있을까요?