묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
property editor 설치할때 오류가 나네요
다른 분들은 설치 잘 되나요? 구글검색해도 방화벽, 백신 등 문제라고 하는데 이것저것 해봐도 안되네요~저 url은 정상인건지??? HTTP Server 'Bad Gateway' : http://propedit.sourceforge.jp/eclipse/updates/content.xmlHTTP Server 'Bad Gateway' : http://propedit.sourceforge.jp/eclipse/updates/content.xmlHttpComponents connection error response code 502.Unable to read repository at http://propedit.sourceforge.jp/eclipse/updates/site.xml.Unable to read repository at http://propedit.sourceforge.jp/eclipse/updates/site.xml.PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
로그아웃이 작동하지 않아서 질문드립니다.
안녕하세요 제로초님 로그인은 되는데 로그아웃이 되지않아서 질문남깁니다.로그인 한 다음 로그아웃을 하면 위와 같이 AxiosError가 나서 네트워크와 리덕스를 확인해보니깐 로그아웃 요청시 302 Found가 뜨고 404 Not Found라는 에러 메세지가 뜹니다.그리고 리덕스에서는 실패 메세지가 뜹니다. // UserProfile import { logoutRequestAction } from '../reducers/user'; const dispatch = useDispatch(); const { me, logOutLoading } = useSelector((state) => state.user); const onLogOut = useCallback(() => { dispatch(logoutRequestAction()); }, []); <Button onClick={onLogOut} loading={logOutLoading}> 로그아웃 </Button> // 리덕스 logOutLoading: false, // 로그아웃 시도중 logOutDone: false, logOutError: null, export const LOG_OUT_REQUEST = 'LOG_OUT_REQUEST'; export const LOG_OUT_SUCCESS = 'LOG_OUT_SUCCESS'; export const LOG_OUT_FAILURE = 'LOG_OUT_FAILURE'; case LOG_OUT_REQUEST: draft.logOutLoading = true; draft.logOutDone = false; draft.logOutError = null; break; case LOG_OUT_SUCCESS: draft.logOutLoading = false; draft.logOutDone = true; draft.me = null; break; case LOG_OUT_FAILURE: draft.logOutLoading = false; draft.logOutError = action.error; break; 사가 axios.defaults.baseURL = 'http://localhost:3065'; function logOutAPI() { return axios.post('/user/logout'); } function* logOut() { try { yield call(logOutAPI); yield put({ type: LOG_OUT_SUCCESS, }); } catch (err) { console.log(err); yield put({ type: LOG_OUT_FAILURE, error: err.response.data, }); } } function* watchLogOut() { yield takeEvery(LOG_OUT_REQUEST, logOut); } app.js const express = require('express'); const cors = require('cors'); // session, cookieParser, dotenv const session = require('express-session'); const cookieParser = require('cookie-parser'); const dotenv = require('dotenv'); // passport 로그인 설정 const passport = require('passport'); const passportConfig = require('./passport'); passportConfig(); const postRouter = require('./routes/post'); const userRouter = require('./routes/user'); dotenv.config(); const app = express(); // 시퀄라이즈 - db 연결 const db = require('./models/index.js'); db.sequelize .sync() .then(() => { console.log('db 연결 성공'); }) .catch(console.error); app.use( cors({ origin: true, credentials: true, }) ); app.use(express.json()); app.use(express.urlencoded({ extended: true })); // session,cookieParser app.use(cookieParser(process.env.COOKIE_SECRET)); app.use( session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, }) ); app.use(passport.initialize()); app.use(passport.session()); app.use('/post', postRouter); app.use('/user', userRouter); app.listen(3065, () => { console.log('3065 포트에서 대기중'); }); user.js const express = require('express'); const router = express.Router(); const passport = require('passport'); const bcrypt = require('bcrypt'); const { User, Post } = require('../models'); // 로그인 POST/user/login router.post('/login', (req, res, next) => { passport.authenticate('local', (err, user, info) => { if (err) { console.error(err); return next(err); } if (info) { return res.status(403).send(info.reason); } return req.login(user, async (loginErr) => { if (loginErr) { console.error(loginErr); return next(loginErr); } const fullUserWithoutPassword = await User.findOne({ where: { id: user.id }, attributes: { exclude: ['password'], }, include: [ { model: Post, }, { model: User, as: 'Followings', }, { model: User, as: 'Followers', }, ], }); return res.status(200).json(fullUserWithoutPassword); }); })(req, res, next); }); // 로그아웃 POST/user/logout router.post('/logout', (req, res, next) => { req.logout(() => { res.redirect('/'); }); }); //회원가입 POST / user router.post('/', async (req, res, next) => { try { const exUser = await User.findOne({ where: { email: req.body.email, }, }); if (exUser) { return res.status(403).send('이미 사용중인 아이디입니다.'); } const hashedPassword = await bcrypt.hash(req.body.password, 10); await User.create({ email: req.body.email, nickname: req.body.nickname, password: hashedPassword, }); res.status(200).send('ok'); } catch (error) { console.error(error); next(error); } }); module.exports = router; 로그인과 회원가입은 제대로 작동하는데 로그아웃만 되지 않습니다.
-
미해결스프링 핵심 원리 - 기본편
AutowiredTest관련 질문
static class TestBean에서 @Autowired를 3개를 했지만 3개가 등록이 되는건 아니라고 하셨는데 위에서 저렇게 print를 했을때에는 나오지 않더라구요... 어떻게 해야지 밑에 @Autowired중에 잘 들어간 함수들을 출력해서 직접 볼 수 있을지가 궁금합니다.해당 코드를 실행했을 때의 결과는 다음과 같습니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
코드정리
AppBar 위젯 코드를 정리하실 때, stless위젯을 따로 만들지 않고 함수로 가져오셨는데 위젯을 함수로 가져올지 Expnade 위젯처럼 stless위젯으로 가져오는지 어떤 기준으로 나뉘는건가요?class AppBar extends StatelessWidget { const AppBar({super.key}); @override Widget build(BuildContext context) { return AppBar( title: Text( "App name", style: TextStyle( color: Colors.blueAccent, ), ), backgroundColor: Colors.white, ); } }또한 AppBar를 Stless 위젯으로 만들어보려고 했을때 title 부분과 backgroundColor 부분에서 오류가 나는데 그 이유도 알 수 있을까요?
-
미해결스프링 핵심 원리 - 고급편
NoLog
[질문 내용]DynamicProxyFilterConfig에서 PATTERNS에 들어있는 문자열이 메핑 주소에 들어있으면 로그가 안뜨는게 아니라 클래스 명에 포함되어 있으면 로그가 뜨지 않는 거로 이해했는데 맞을까요?
-
해결됨ARM Cortex-M 프로세서 프로그래밍
유저 mode, xSPR, 어셈블리어 활용, STM32 선정 이유 관련
안녕하세요.강의를 듣는 과정에서 궁금한 사항이 있어서 질문 드립니다.유저 모드 관련특권 모드와 유저 모드가 있는데, 대부분 특권모드에서 동작한다고 알려주셨습니다.인터럽트 핸들러도 특권모드에서 동작을 하고요.유저 모드에서는 특권모드로 이동도 못해서 제약이 상당히 많은 것 같은데,유저 모드는 어떠한 상황에서 사용되는지 궁금합니다.xSPR 관련AR, VR 등을 합쳐서 부르기 위해, XR이라고 부르는 것과 같이xSPR도 ASPR, ESPR 등을 통칭하기 위해 xSPR로 부르는 것인가요?아니면, xSPR은 ASPR, ESPR, ISPR을 모두 합친 프로세서 레지스터라고 봐야 할까요?어셈블리어 활용 관련요즘에는 어셈블리어로 코딩하는 일이 많지 않을 것 같은데,어셈블리어의 지식은 어떤 곳에 활용할 수 있을까요?프로그램에 문제가 생겼을 때 디버깅을 하면서 어셈블리어를 알면 문제 원인을 찾기가 쉬울 것 같은데,혹시 다른 용도로는 어떻게 활용할 수 있는지 궁금합니다.STM32 관련ARM Cortex-M4를 사용하는 MCU를 만드는 제조사는 ST Micronics 외에도 Nordic이나 Microchip등 여러 회사들이 있는 것을 알고 있습니다.그런데, 대부분의 강의를 보면 STM32 Series의 보드를 사용하시더라고요.STM32 Series 보드의 장점이 무엇이기에 대부분 이를 선택하시는지 궁금합니다.또한, STM Cube IDE와 유사하게 nRF Series에서도 segger IDE를 제공하는 것으로 알고있는데, Cube IDE처럼 segger로도 disassemble 등의 기능을 사용할 수 있는지도 궁금합니다.질문 사항이 좀 길어졌네요...강의는 잘 듣고 있습니다!감사합니다.
-
미해결프로그래밍 시작하기 : 도전! 45가지 파이썬 기초 문법 실습 (Inflearn Original)
json파일이 계속 안만들어져요..
상대경로로 해서 다 맞게 했는데 계속해서 해당 파일에 json파일이 안 만들어지네요.. 왜 그런거죠?d = {"group1":[ {'name': 'Park', 'age': '32', 'sex': 'Male'}, {'name': 'Cho', 'age': '44', 'sex': 'Female'}, {'name': 'Kang', 'age': '39', 'sex': 'Female', 'married': 'No'} ], "group2":[ {'name': 'Kim', 'age': '23', 'sex': 'Male', 'married': 'Yes'}, {'name': 'Lee', 'age': '37', 'sex': 'Male', 'married': 'No'} ], "type" : {"a": "employee", "b": "officer", "c": "director", "d": "manager", "e": "service provider"} }with open('../source/32-2.json', "w") as f: json.dump(d, f)
-
미해결유니티와 C#으로 배우는 카타나제로스타일 게임만들기 (기본편)
마우스 방향으로 공격을 하고 싶습니다.
using System.Collections;using System.Collections.Generic;using UnityEngine;public class VPlayer : MonoBehaviour{ #region 변수 모음 public float speed; public float power; public Vector3 direction; Animator pAnimator; Rigidbody2D pRig2D; SpriteRenderer sp; GrapplingHook grappling; // GrapplingHook C# 코드 불러오기 #endregion #region 점프 변수 모음 [Header("Jump System")] [SerializeField] float jumpUp; [SerializeField] float fallMultiplier; [SerializeField] float jumpTime; [SerializeField] float jumpMuitiplier; Vector2 vecGravity; bool isJumping; float JumpCounter; #endregion #region 벽 점프 변수 모음 [Header("Wall Jump System")] public Transform wallChk; public float wallchkDistance; public LayerMask wLayer; bool isWall; public float slidingSpeed; public float wallJumpPower; public bool isWallJump; float isRight = 1; #endregion #region 공격 관련 변수 [Header("Attack System")] public GameObject Vslash; // 공격 모션 #region 마우스 관련 변수 모음 Vector2 MousePos; Vector3 dir; float angle; Vector3 dirNo; #endregion #endregion #region 초기화 void Start() { pAnimator = GetComponent<Animator>(); pRig2D = GetComponent<Rigidbody2D>(); direction = Vector2.zero; sp = GetComponent<SpriteRenderer>(); grappling = GetComponent<GrapplingHook>(); vecGravity = new Vector2(0, -Physics2D.gravity.y); } #endregion void Update() { if (!isWallJump) { KeyInput(); Move(); mousePos(); } #region 점프 키 누름 if (Input.GetKeyDown(KeyCode.W)) { if (pAnimator.GetBool("Jump") == false) { Jump(); isJumping = true; JumpCounter = 0; pAnimator.SetBool("Jump", true); //JumpDust(); } } #endregion #region 점프 후 떨어질 때 가속 if (pRig2D.velocity.y < 0) { pRig2D.velocity -= vecGravity fallMultiplier Time.deltaTime; } #endregion #region 점프 키를 꾹 눌렀을 시 더 높이 점프 if (pRig2D.velocity.y > 0 && isJumping) { JumpCounter += Time.deltaTime; if (JumpCounter > jumpTime) isJumping = false; pRig2D.velocity += vecGravity jumpMuitiplier Time.deltaTime; } if (Input.GetKeyUp(KeyCode.W)) { isJumping = false; } #endregion #region 벽인지 체크 isWall = Physics2D.Raycast(wallChk.position, Vector2.right * isRight, wallchkDistance, wLayer); pAnimator.SetBool("Wall", isWall); #endregion #region 벽타기 if (isWall) { isWallJump = false; pRig2D.velocity = new Vector2(pRig2D.velocity.x, pRig2D.velocity.y * slidingSpeed); #region 벽을 잡고 있는 상태에서 점프 if (Input.GetKeyDown(KeyCode.W)) { isWallJump = true; //벽점프 먼지 //GameObject go = Instantiate(walldust, transform.position + new Vector3(0.6f * isRight, -0.32f, 0), Quaternion.identity); //go.GetComponent<SpriteRenderer>().flipX = sp.flipX; Invoke("FreezeX", 0.3f); pRig2D.velocity = new Vector2(-isRight wallJumpPower, 0.9f wallJumpPower); sp.flipX = sp.flipX == false ? true : false; isRight = -isRight; } #endregion } #endregion } private void FixedUpdate() { #region 바닥 감지 레이저 Debug.DrawRay(pRig2D.position, Vector3.down, new Color(0, 1, 0)); RaycastHit2D rayHit = Physics2D.Raycast(pRig2D.position, Vector3.down, 0.8f, LayerMask.GetMask("Ground")); #endregion #region Ground를 감지할 때 if (pRig2D.velocity.y < 0) { if (rayHit.collider != null) { if (rayHit.distance < 0.6f) { pAnimator.SetBool("Jump", false); } } #region 6-2. 떨어질 때의 감지 방식 else { if (!isWall) { //그냥 떨어지는 중 fall pAnimator.SetBool("Jump", true); } else { //벽타기 pAnimator.SetBool("Wall", true); } } #endregion } #endregion } #region 키 입력 void KeyInput() { direction.x = Input.GetAxisRaw("Horizontal"); #region 왼쪽 if (direction.x < 0) { //left sp.flipX = true; //점프벽잡기 방향 isRight = -1; pAnimator.SetBool("Run", true); } #endregion #region 오른쪽 else if (direction.x > 0) { //right sp.flipX = false; //점프벽잡기 방향 isRight = 1; pAnimator.SetBool("Run", true); } #endregion #region Idle 상태 else if (direction.x == 0) { pAnimator.SetBool("Run", false); } #endregion #region 공격 버튼 if (Input.GetMouseButtonDown(0)) { pAnimator.SetTrigger("Attack"); //Instantiate(hit_lazer, transform.position, Quaternion.identity); } #endregion } #endregion #region 이동 void Move() { if (direction.x != 0) { if (grappling.isAttach) { pRig2D.AddForce(new Vector2(direction.x * speed, 0)); //로프 이동 } else pRig2D.velocity = new Vector2(direction.x * speed, pRig2D.velocity.y); //보통 이동 } } #endregion #region 점프 public void Jump() { pRig2D.velocity = new Vector2(pRig2D.velocity.x, jumpUp); } #endregion #region 마우스 방향 public void mousePos() { Transform tr = GetComponent<Transform>(); MousePos = Input.mousePosition; MousePos = Camera.main.ScreenToWorldPoint(MousePos); Vector3 Pos = new Vector3(MousePos.x, MousePos.y, 0); dir = Pos - tr.position; // 바라보는 각도 구하기 angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; } #endregion #region 공격 이펙트 public void AttSlash() { pRig2D.AddForce(dir.normalized * power, ForceMode2D.Impulse); GameObject go = Instantiate(Vslash, transform.position, Quaternion.identity); if (dir.x <= 0) { sp.flipX = true; } else { sp.flipX = false; } } #endregion void FreezeX() { isWallJump = false; }} 마우스 방향 값을 이용해 좌클릭을 할 때 마우스 방향으로 공격을 하는 코드를 짜고 있는 데, 이동을 velocity로 해서 그런지 idle 상태 run 상태에서 좌클릭을 누르면 공격 모션만 마우스 방향으로만 가고 플레이어는 마우스 방향으로 앞으로 대쉬하지 않습니다. 이때는 어떻게 처리해야 하는 지 알려주시면 감사하겠습니다. 코루틴도 써봤지만 답이 안나와서 올립니다.
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
사용자가 특정 버튼 클릭 후 크롤링하는 로직 작성하는 방법
안녕하세요 강사님.모든 강의를 수강한 이후에 왜 처음에 beautiful soup로 시작해서 selenium으로 끝이 나는지 절실하게 깨달을 수 있었습니다. 가르쳐 주신 예제를 바탕으로 개인적으로 추가 실습을 진행하면서 크롤링에 대한 이해를 높이려고 하는데 selenium의 경우 특정 버튼을 클릭하여 넘어간 이후에 크롤링이 진행되도록 자동화에 맞추어져 있는 라이브러리임을 알 수 있었습니다.네이버 예제 화면에 있는 메일, 카페, 블로그, 쇼핑, 뉴스, 증권, 부동산, 지도, 웹툰이 모여져 있는 배너에서 사용자가 특정 버튼을 눌렀을 때 이동한 해당 페이지에서 크롤링을 진행할 수 있도록 자동화하는 예제를 스스로 만들어 공부 중인데 이러한 경우에서 if 메일 if 카페 if 블로그 같은 분기를 바탕으로 작성한 로직 대신 동적으로 사용자가 클릭했을 때의 정보를 가져올 수 있도록 하는 방법이 있을까요? 수많은 버튼이 존재하게 된다면 사용자가 어떤 버튼을 누를지 xpath라던가 class를 특정할 수 없는 경우가 생길 수 있을 것 같아서 질문 드립니다..!
-
미해결
어떤거부터 배워야할지 모르겠어요! 도와주세요!
안녕하세요 저는 직장인입니다.사무직을 하고있으며, 현재 회사는 개발부는 C언어, C#언어를 주로 사용합니다.저는 사무직으로써 먼가 성장하기위해 언어를 배워야하는거같은데나름 생각을 한게 엑셀 파일을 많이 만지고있어서 VBA를 배울까했습니다.근데 요즘은 파이썬으로 엑셀 자동화하는게 핵심인거같아 어떤걸 먼저 배워야할지 고민을 하고있습니다.그 후 최종적으로 C언어를 배울까 하는데 무엇부터 시작하는게 좋을까요?VBA > 파이썬 > C언어 로 가는게 좋을까요?파이썬 > VBA > C언어로 가는게 좋을까요?그리고 해당하는 인프런 강의도 추천해주시면 감사하겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringDataJpaMemberRepository 인터페이스를 만들 때 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]솔직히 인터페이스 처음 설정에 대한 내용이 하나도 이해가 가질 않네요.. SpringDataJPA가 JpaRepository를 상속 받은 SpringDataJpaMemberRepository에 대한 구현체를 스프링 빈으로 등록해준다는 건 알겠는데, JpaRepository<Member, Long>에 있는 Member와 Long은 어떤 역할을 하기에 들어가는 것이며, 그 뒤에 함께 상속받는 MemberRespository는 어떤 역할을 하기위해 상속되는 건지 궁금합니다. 기초적인 질문을 드려 죄송합니다만, GPT도 설명을 제대로 안해주기에 정말 모르겠어서 이렇게 질문드립니다.
-
미해결PWA 시작하기 - 웹 기술로 앱을 만들자
깃헙 권한 요청드립니다.
인프런 아이디: jsoh3327@raoncorp.com인프런 이메일: jsoh3327@raoncorp.com깃헙 이메일: orini22@gmail.com깃헙 Username: grace-ori
-
해결됨스프링 핵심 원리 - 기본편
Invalid test class 'hello.core.member.MemberServiceTest': 오류 질문
org.junit.runners.model.InvalidTestClassError: Invalid test class 'hello.core.member.MemberServiceTest': 1. Method join() should be public 영한님 코드랑 동일한데 해당 에러가 발생합니다.에러 메시지처럼 join() 에 public 을 붙여 줬더니 해결이 되었는데, 이유가 뭘까요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
정수 자릿수 출력 질문입니다.
print('%1.2f' % (12.345678))강의에서 배운대로면 이렇게 실행을 했을때 정수부분이 한자리만 나와야 한다고 학습했습니다. 근데 출력값이 계속 12.35 이 뜨는데 왜 정수부분이 1이 아니라 12 둘다 나오는건가요?
-
미해결생활코딩 - PHP 기본 A 부터 Z 까지
WAMP 관련
안녕하세요.WAMP 설치와 관련한 내용 업데이트가 필요한 것 같습니다.
-
미해결Flutter 초입문 왕초보편
52강 키/몸무게 값에 대한 조건을 더 추가해주고 싶으면 어떻게 해야 할까요?
만약에 키나 몸무게 필드에 숫자가 아닌 값을 입력할 경우 '숫자를 입력하세요'라고 출력하고 싶은데 어떻게 하면 좋을까요? 그리고 입력된 숫자가 특정 범위를 넘길 경우 제한 하는 방법도 궁금합니다. 뭔가 아래와 같은 느낌으로 하고싶은데 방법이 궁금합니다.TextFormField( decoration: const InputDecoration( border: OutlineInputBorder(), hintText: '키', ), keyboardType: TextInputType.number, validator: (value){ if(value == null || value.isEmpty){ return '키를 입력하세요'; }else if(value의 타입 != TextInputType.number){ return '숫자를 입력하세요.'; }else if(value > 1000){ return '정상적인 값이 아닙니다.'; } return null; }, ),
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
hello jpa 애플리케이션 개발 오류
자바 17 사용하는데 아래와 같은 오류가 납니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
GetWorld 가 nullptr
무한맵의 제작, 31분 26초 부근에 나오는 GetWorld()가 계속 nullptr가 뜹니다..
-
미해결WPF (C#, 자막제공)
6) Trigger - Property 설정 문의
안녕하세요.6)Trigger강의중 Trigger Property 설정에서 Control.IsMouseCaptured를 사용 할 수가 없습니다.ItemControl로 변환을 유도하는데 정작 ItemControl에는 IsMouseCaputred 구문이 없습니다.Setter 설정 시에도 Control. Foregruund 가 에러가 나서Property="ItemsControl.Foreground" 로 진행하였습니다.추가) 해당 구문을 다시 강제(?)로 입력하여 동작 확인 하였습니다. <Trigger Property="Control.IsMouseCaptured" Value="True"> <Setter Property="Control.Foreground" Value="Blue"> </Setter></Trigger>
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
저의 JpaRepository 인터페이스 내용이 달라요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]8분 20초 쯤에 JpaRepository 인터페이스로 들어가볼 때 강사님의 인터페이스 내용과 제 JpaRepository 인터페이스의 내용이 달라요.저는 findById()도 없고, findAll() 메서드의 리턴타입도 <S extends T> List<S> 이렇게 생겼고, 뭔가 강사님의 화면에서는 보이지 않는 잡다한 것들이 너무 많아요.저의 JpaRepository 인터페이스는 왜 이렇게 뜨는 걸까요ㅠㅠ 사진 첨부합니다. 위 사진이 저의 JpaRepository 전체 입니다.