묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 데이터 JPA
연관관계 편의 메서드에서 mappedBy 필드에 대한 수정 로직 추가여부
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예https://www.inflearn.com/questions/25417/changeteam-%EA%B4%80%EB%A0%A8%ED%95%98%EC%97%AC-%EC%A7%88%EB%AC%B8-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 연관관계 편의 메서드 관련 질문인 위 링크의 글과 연관이 있습니다. 질문을 먼저 작성해놓고 질문 끝에 다시 언급해놓겠습니다.1) 어쩌면 필요없는 구현일 수 있는데, 이런 습관?을 들여도 괜찮은지2) 아니면 강의처럼 DB에 반영되지 않고 거의 문제가 발생할 가능성이 없는 부분은 간단하게 구현하고 넘어갈지 mappedBy로 read-only상태인 조회 전용 필드인 members는 변경 상태가 DB에 반영되지 않지만,인스턴스 입장에서는(객체지향적으로는?) 어플리케이션 런타임 시점에 변경을 해주어야한다고 생각했습니다.위 링크의 영한님 말씀처럼 데이터 변경 후 이를 즉시 재활용하는 일은 극히 드물지만 말이죠. Member 엔티티// 연관관계 편의 메서드 public void changeTeam(Team team) { // 기존에 팀이 있다면 탈퇴 if (this.team != null) { // 탈퇴를 위한 비즈니스 로직을 Team에 구현함 this.team.removeMember(this); } this.team = team; team.getMembers().add(this); }그래서 위와 같이 if 분기를 두고 소속 팀이 있는 회원은 해당 팀에서 회원 자신을 지우는 로직을 추가했습니다. this.team.removeMember(this)위 로직은this.team.getMembers().remove(this)와 같지만 의미있는 메서드를 만들어보고 싶어서 아래처럼 removeMember 를 구현했습니다.Team 엔티티// 비즈니스 로직 -> read-only 필드라서 DB에는 반영 안됨 public void removeMember(Member member) { this.members.remove(member); } null 확인 로직이 changeTeam() 내부에 있으므로 Member 엔티티 생성자는 다음과 같이 작성했습니다.public Member(String username, int age, Team team) { this.username = username; this.age = age; changeTeam(team); } 결론적으로 물어보고 싶은 질문은1) 어쩌면 필요없는 구현일 수 있는데, 이런 습관?을 들여도 괜찮은지2) 아니면 강의처럼 DB에 반영되지 않고 거의 문제가 발생할 가능성이 없는 부분은 아래처럼 간단하게 구현하고 넘어갈지// 연관관계 편의 메서드 public void changeTeam(Team team) { this.team = team; team.getMembers().add(this); } 이렇게 두 가지 질문이 있습니다.늘 좋은 강의 해주셔서 감사합니다.
-
미해결스프링 시큐리티 OAuth2
7:50 초 authentication token 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Oauth2AuthenticationToken 이라는 것이 사실은 인가서버로의 인증을 의미하는 것이지 client 서버로의 인증이라고는 볼 수 없는 것 아닌가요? 그러니까 Oauth2 과정을 거쳤다는 것은, 해당 유저의 resource 를 auth 서버든 resource 서버든 접근이 가능하다는 것이지, 우리 서버에 인증이 되었다는 것은 아니라고 저는 이해했는데요. 왜, oauth2 프로세스가 끝나면 최초 요청지 (예를들어 localhost:8081/home -> 로그인 창으로 가서 oauth2 process 끝 -> localhost:8081/home 이라고 할때, 최초 요청지는 localhost:8081/home) 가 접근이 되는 것이죠?
-
해결됨김영한의 실전 자바 - 기본편
부모의 부모 인스턴스
예를 들어 ElectricCar extends Car, Car extends Vehicle의 상속 관계를 가질 때 new ElectricCar()를 호출하면 부모 인스턴스인 Car도 같이 생성하는데 이 경우 Car는 Vehicle 의 상속을 받으니까 Vehicle 인스턴스도 함께 생성되나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-J 다른 풀이 방법 질문드립니다.
제가 처음에 접근했던 방법은 옷의 개수가 3가지라면 3C0 + 3C1 + 3C2 + 3C3으로 입을 수 있는 모든 경우의 수를 구한 후, 같은 종류의 옷을 입은 경우의 수를 구해 빼는 방식이였는데void combi(int start, vector b){ if(b.size() == k){ print(b); return; } for(int i = start + 1; i < n; i++){ b.push_back(i); combi(i, b); b.pop_back(); } return; }이 함수를 사용해서 map<string,string>mp을 선언하고 옷의 이름과 종류 모두 입력 받아서 같은 종류의 옷을 입은 경우를 판별하여 구할 수는 없는지 여쭤보고 싶습니다.
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
downgrading 관련질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 강의 내용을 질문할 경우 몇분 몇초의 내용에 대한 것인지 반드시 기재 부탁드립니다. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.사이킷런 다운그레이딩시 계속 오류가 나서, 파이썬을 3.9버전으로 다운그레이드 시킨 후 하면 된다고 해서 파이썬을 다운그레이드 하려고 했는데요.맥 터미널에서 다음과 같이 뜨고 Version이 바뀌지가 않네요 ㅜㅜ 제발 좀 도와주세요 ㅜㅜ
-
미해결스프링 시큐리티 OAuth2
26:30 경에 userinfo 분기가 강사님과 다릅니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. OicdUserService의 아래 메서드에서 true를 반환해버리는데요. 우선 해당 함수의 if(authroization_code 이냐?) 분기를 타고, accessibleScopes가 empty 가 아닙니다. 아마 키클록에서 default 스코프가 있기 때문인거 같은데요. shouldRetrieveUserInfo 해당 영상에서는 키클록의 default 스코프가 빠진걸까요? 아니면 grant type 문제일까요? 참고로 grant type 은 별다른 옵션 없이도, registration repository에서 꺼내오는 순간 registration에는 authroization_code 입니다.
-
미해결스프링 부트 - 핵심 원리와 활용
게이지 관련 질문
[질문 내용]- 재고와 같은 것을 조회하기 위해서는 일반적으로 WAS 서버에 저장하기보다 DB에 저장을 하는것으로 아는데 그러면 게이지 측정할때마다 DB에 요청이 가게 되는건가요??? 실무에서는 어떻게 하는 지 궁금합니다 ! 매초마다 DB에 요청이 가게 되면 성능에도 문제가 갈수있을거같은데 redis와 같은 캐시를 사용하는건지... 어렵네요
-
미해결Next + React Query로 SNS 서비스 만들기
next.config.js에서 redirect 옵션을 사용해도 괜찮은가요?
/login -> /i/flow/login으로 redirect 할때 next.config.js에서 const nextConfig = { async redirects() { return [ { source: "/login", destination: "/i/flow/login", permanent: true, }, ]; }, }; module.exports = nextConfig;이런식으로 코드를 짜면 redirect가 되는데 login폴더를 굳이 만들지 않고 위와 같이 설정해도 괜찮은가요?
-
미해결
김영한님의 스프링 로드맵을 따르면 웹페이지 생성이 가능한가요?
김영한님의 스프링 강의를 수강중인데 html의 기본지식을 거의 잊은 상태입니다. html태그에 대한 기본 지식을 습득한 후 스프링 강의를 들으면 저만의 동적웹을 개발하여 배포가 가능할까요?추가로 주변 사람들의 jsp에 대한 공부를 하라고 하였는데 jsp를 알아야 웹 개발이 가능한가요? jsp가 thymeleaf와 비슷한 기능을 하는 도구라고 알고 있는데 jsp에 대한 지식도 필요한가요?
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
강의 docker질문
백엔드인 전 mysql이 있는 상태인데프론트엔드가 mysql이 없는 상태라면 프론트엔드를 위해서 강의와 같이 docker로 mysql 환경 설정을 해야하는 건가요?? nginx를 통해서하면 프론트엔드는 mysql를 설치할 필요가 없다고 들었어서요
-
미해결스프링 핵심 원리 - 기본편
getBean() 관련 질문 - MemberServiceImpl
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제가 제대로 잘 이해를 못하는 지 관련 질문을 못 찾겠습니다. ConfigurationSingletonTest 학습할 때 MeberServiceImpl과 OrderServiceImpl의 getMemberRepository 매써드를 사용하기 위해서 getBean의 타입을 다음과 같이 지정한다고 하였는데 @Beand을 통해 생성된 memberService 매써드가 MemberService 클래스를 반환하는 데 그게 아닌 구현한 MemberServiceImpl 클래스를 변환해서 가져오겠다는 건가요? 어떤 식으로 작동하게 되는 지 잘 모르겠습니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
제약조건으로 시간 복잡도를 구하는 방법..
안녕하세요. 코테 제약조건으로 시간 복잡도 계산하는 부분을 듣고 있는데요.10^4에 n^2을 넣으면 10^8이 된다고 하셨는데 제가 예체능 수포자여서 이 계산 방법이 잘 이해가 안됩니다. ㅠㅋ용어가 맞는지 모르겠지만... BigO로 표기했을 때의 시간 복잡도의 지수와 제한 사항으로 주어진 지수끼리의 곱이 시간 초과 때문에 8이 넘으면 안된다고 이해하면 되는건가요? 이렇게 구하는 게 맞는지...그리고 제약 조건에서 n을 구할 때 연산자 사이에 있는 조건이 n이 되는 것이고 그 n이 1이 되는지, n^2이 되는지에 따라 시간 복잡도를 따지는 건가요?시간 복잡도를 중첩 반복문으로 계산하는 정도만 공부를 해서 잘 이해가 안됩니다. ㅠㅠ
-
미해결[R] KOSPI/KOSDAQ 전 종목 데이터 수집 및 관리
한국거래소에서 전종목 코드를 받는 기존 메뉴는 사라졌습니다.
한국거래소를 타고서 예전에는 받을 수 있었던 것 같은데,현재는http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020303이 곳으로 들어가야 종목코드를 다운받을 수 있게 바뀌었네요.. 초보라 한참 찾았습니다. 그리고 강의하시는 제목 "stock R"이 사실은 다운로드 받은 자료의 "naver증권크롤링_예제.R"이네요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6 - F
http://boj.kr/798b9379c3254770abccef965fd8ee87몬스터 때리는 부분을 제외하면 작성해주신 정답 코드랑 유사해보이는데 어디가 잘못됐는지 잘 모르겠습니다.
-
미해결냉동코더의 알기 쉬운 Modern Android Development 입문
searchBooks() 에서 북 검색 입력을 너무 빨리 할 경우 마지막 글자로 검색이 안돼요.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래 코드를 private fun searchBooks() { var startTime = System.currentTimeMillis() var endTime: Long binding.etSearch.text = Editable.Factory.getInstance().newEditable(searchViewModel.query) binding.etSearch.addTextChangedListener { text: Editable? -> endTime = System.currentTimeMillis() if (endTime - startTime >= SEARCH_BOOKS_TIME_DELAY) { text?.let { val query = it.toString().trim() if (query.isNotEmpty()) { searchViewModel.searchBooksPaging(query) searchViewModel.query = query } } } startTime = endTime } }아래처럼 바꿔봤는데 입력 시마다 runnable을 매번 생성하는데 문제 되진 않을까요? 코틀린에 익숙치 않아서 더 좋은 방법이 있다면 알고 싶습니다. private var handler: Handler = Handler(Looper.getMainLooper()) var runnable: Runnable? = null private fun searchBooks() { binding.etSearch.addTextChangedListener { text: Editable? -> if (runnable != null) { handler.removeCallbacks(runnable!!) } // 텍스트 입력 후 N 초 간 입력 없으면 검색 실행 runnable = Runnable { text?.let { Log.d(TAG, "text:$it"); val query = text.toString().trim() if (query.isNotEmpty()) { bookSearchViewModel.searchBooks(text.toString()) bookSearchViewModel.query = query } } } handler.postDelayed(runnable!!, Constants.SEARCH_BOOKS_TIME_DELAY) } }
-
미해결2시간으로 끝내는 코루틴
코루틴 취소 관련 질문
fun main(): Unit = runBlocking { val job = launch { var i = 1 var nextPrintTime = System.currentTimeMillis() while (i <= 5) { if(nextPrintTime <= System.currentTimeMillis()){ printWithThread("${i++}번째 출력!") nextPrintTime += 1_000L } } } delay(100L) job.cancel() }수업 때 예시로 보여주신 코드인데 이 코드는 "5번째 출력!"까지 출력하고 끝이 나는데요. 반면에 아래 코드는 한번만 출력하고 끝이 납니다.fun main(): Unit = runBlocking { val job = launch { var nextPrintTime = System.currentTimeMillis() repeat(5) { if (nextPrintTime <= System.currentTimeMillis()) { printWithThread("${it + 1}번째 출력!!") nextPrintTime += 1_000L } } } delay(100L) job.cancel() }이는 단순히 repeat문이 무한루프가 아니어서 나오는 차이일까요?
-
미해결스프링 핵심 원리 - 기본편
web 라이브러리 추가 시 CoreApplication 무한 로딩
안녕하세요. request 스코프 예제를 시작하려다가 web 라이브러리를 다음과 같이 추가하고,CoreApplication에서 main method를 실행하였는데요.무한 로딩 되는 현상이 발생합니다. 체크 표시가 뜨지 않고계속 이 상태에서 돌아가는데 왜이런지 알 수 있을까요..? 어떻게 해결하면 좋을까요ㅜㅠ
-
미해결엑셀기초 실무핵심만 뽑아 3시간에 끝내기
강의 자료 다운 안됩니다
강의 자료 안보이네요.. 어디서 다운 받을 수 있나요?메일로 보내주시면 감사하겠습니다! dk.kate2@gmail.com
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
팔로잉, 팔로워 목록은 잘 불러왔으나 콘솔에 Warning: Failed prop type: The prop `data` is marked as required in `FollowList`, but its value is `undefined`. 에러가 발생합니다!
안녕하세요 제로초님!! 해당 강의 영상을 끝까지 수강한 수강생 입니다!항상 강의 영상 잘 보고 있습니다. 복잡한 질문에도 친절히 답해주셔서 감사합니다~! 첫 번째 에러를 번역해보니 'FollowList'에 prop 'data'가 필요한 것으로 표시되어 있지만 값은 'undefined'입니다. 라고 뜹니다.문제가 생긴 profile.js 에서 console.log(data)를 해보니 역시 data가 undefined 가 나옵니다.FollowList.js의 data가 profile.js로 전달이 되지 않은 것인가요? 만약 그렇다면 어디를 봐야 하는지 힌트 부탁 드립니다!(data의 프롭타입은 배열입니다!)https://github.com/ZeroCho/react-nodebird/blob/master/ch6/front/pages/profile.js질문을 올리기 전에 제로초님 깃허브를 꼼꼼히 참고하고 스스로 구글링 해보았지만 해결이 어려워 질문 올립니다!포기하지 않고 끝까지 완강을 목표로 하겠습니다! 아래 사진은 상단 이미지에서 잘린 에러 전체입니다.감사합니다!
-
해결됨HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
disabled 디자인 이렇게 하면 될까요?
안녕하세요... 강의 3분 8초에 나오는 체크된 부분 퍼블리싱에 대해 질문드립니다.. 라이브 서버로는 되는 것 같기는 한데혹시 더 낫게 하는 방법이나 실무에서 더 선호되는 방법이 있다면 알려주시면 감사하겠습니다... <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://kit.fontawesome.com/c0fe093804.js" crossorigin="anonymous"></script> <link rel="stylesheet" href="02.fontawesome-active.css"> </head> <body> <form> <input type="checkbox" id="chk1" checked> <label for="chk1">HTML</label> <input type="checkbox" id="chk2"> <label for="chk2">CSS</label> <input type="checkbox" id="chk3"> <label for="chk3">Javascript</label> <input type="checkbox" id="chk4" disabled> <label for="chk4">UIKit</label> </form> </body> </html> /* Google Web Fonts CDN Raleway */ @import url('https://fonts.googleapis.com/css?family=Raleway&display=swap'); /* Google Web Fonts CDN Noto Sans KR */ @import url('https://fonts.googleapis.com/css?family=Noto+Sans+KR:300,400,500,700,900&display=swap'); @import url('https://kit.fontawesome.com/c0fe093804.js" crossorigin="anonymous'); body{ font-family: 'Raleway', sans-serif; /* font-family: 'Noto Sans KR', sans-serif; */ color: #222; line-height: 1.5em; font-weight: 300; margin: 0; font-size: 30px; display: flex; justify-content: center; align-items: center; height: 100vh; } a{ color: #222; text-decoration: none; font-size: 12px; } form input[type=checkbox]{ display: none; } form label{ display: block; margin-bottom: 3px; } form label:before{ content: '\f00c'; text-align: center; line-height: 30px; font-family: fontawesome; margin-right: 8px; border: 1px solid #292929; color: transparent; display: inline-block; width: 30px; height: 30px; vertical-align: middle; padding: 2px; border-radius: 3px; font-size: 30px; transition: 0.2s; } form input[type=checkbox]:checked + label:before{ background-color: crimson; color: #fff; border: 1px solid crimson; /* border-color: transparent; */ } /* 눌리는 효과 */ form input[type=checkbox] + label:active:before{ transform: scale(0); } form input[type=checkbox]:disabled + label:before{ border: 1px solid rgba(220, 20, 60, 0.233); background-color: rgba(220, 20, 60, 0.233); color: #fff; } form input[type=checkbox]:disabled + label:active:before{ transform: scale(100%); }