묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
네이버 쇼핑 정보 크롤링 중 '요소를 찾을 수 없는 오류'
안녕하세요 강사님! 올려주신 강의 잘 수강하고 있습니다. 강사님께서는 네이버 쇼핑 사이트에서, 안나플러스 4GF 남자 스킨 제품 리뷰를 크롤링하셨는데저는 네이버 쇼핑 사이트에서, 설화수 윤조 에센스 6세대 90ml 제품 리뷰 크롤링을 하며 강의 내용을 복습하려고 했습니다. 따라서 이렇게 코드를 변경해보았는데요. (이 외에 강사님 코드 중 변경한 부분은 없습니다.)############################################################################################################ name = ['설화수 윤조 에센스 6세대 90ml'] ns_address = "https://search.shopping.naver.com/catalog/41452071623?&NaPm=ct%3Dlom567qo%7Cci%3D0626056d8aed283141db9c13254eb1ca5283307e%7Ctr%3Dslcc%7Csn%3D95694%7Chk%3D20ea68fdd5b7cd13a1caaf25826165e0d0bdd99f" shoppingmall_review = "/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[2]/div/div[2]/ul/li[5]/a" category_total = "/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[7]/div[2]/div[2]/ul/li[1]/a" ############################################################################################################ 이런 오류가 발생했습니다.--------------------------------------------------------------------------- NoSuchElementException Traceback (most recent call last) <ipython-input-9-b59caa4ea12b> in <cell line: 2>() 1 # 2023.05.08 변경 find_element_by_xpath TO find_element ----> 2 driver.find_element(By.XPATH, category_total).click() #스크롤 건드리면 안됨 3 cnt=1 4 page=1 2 frames /usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response) 243 alert_text = value["alert"].get("text") 244 raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here --> 245 raise exception_class(message, screen, stacktrace) NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/div/div[2]/div[2]/div[2]/div[3]/div[7]/div[2]/div[2]/ul/li[1]/a"} (Session info: headless chrome=90.0.4430.212); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception Stacktrace: #0 0x57930a7c37f9 <unknown> #1 0x57930a7633b3 <unknown> #2 0x57930a4ab016 <unknown> #3 0x57930a4df81e <unknown> #4 0x57930a5158fb <unknown> #5 0x57930a502ded <unknown> #6 0x57930a5139e1 <unknown> #7 0x57930a502c93 <unknown> #8 0x57930a4d4ce4 <unknown> #9 0x57930a4d64d2 <unknown> #10 0x57930a78f542 <unknown> #11 0x57930a79ece7 <unknown> #12 0x57930a79e9e4 <unknown> #13 0x57930a7a313a <unknown> #14 0x57930a79f5b9 <unknown> #15 0x57930a784e00 <unknown> #16 0x57930a7b65d2 <unknown> #17 0x57930a7b6778 <unknown> #18 0x57930a7cea1f <unknown> #19 0x7cccaee40ac3 <unknown> #20 0x7cccaeed2a40 <unknown> 캡쳐본 첨부합니다.뭐가 문제고, 어떻게 해결하면 좋을까요?답변 기다리겠습니다. 감사합니다!
-
해결됨Airflow 마스터 클래스
dag 스케줄링 관련
안녕하세요? 좋은 강의에 진심으로 감사드립니다. 책으로 공부했으면 아직 헤매고 있을텐데, 친철하게 설명해 주셔서 그동안 들었던 강의를 바탕으로 어제 data.go.kr에서 기상청이 제공하는 대기정체지수를 다운로드 받는 dag을 만들어 수동으로 실행을 해보니, 수동으로는 csv 파일 생성까지 success가 되는 것을 확인하였습니다. 그런데 오늘 새벽에 자동으로 실행이 되도록 컴퓨터를 켜두었었는데, 아침에 보니 돌아가지 않았습니다. ㅠㅠ DAG에 크론 일정은 "0 5 \* \* \*"로 주고 , start_date는 어제 날짜 2023. 11. 5. in_timezone('Asia/Seoul')로 주었었습니다. (매일 새벽 5시에 돌아서 전일자로 업데이트된 데이터를 받고자 하였습니다.) airflow를 직접 사용해 보니 UTC와 KST가 혼재되어서 사용시에 헷갈리기도 하고, 실제로 제가 만들어 보니 권한 문제, 패키지 추가 문제 등 여러가지 난관에 봉착했었습니다만, 여기 질문 게시판을 참조하면서 모든 문제를 해결할 수 있었는데, 일정 셋팅 관련해서는 제가 아주 기본적인 airflow의 시간 개념을 잘 못 이해하고 있는 것 같아서 질문드립니다. 위의 두가지 말고 따로 확인해야 하는 사항이 있는지요? 여기 게시판의 첫번째 질문도 시간개념이었는데, 읽어봐도 제 입장에서는 제 문제 해결방법이 명확해 지는 것 같지는 않아서 이렇게 폐를 끼치게 되었습니다. 여담입니다만,기상청에서 제공하는 API 데이터들은 1루치 정도만 제공되어서, 매일 접속을 해서 처리를 해두지 않으면 데이터가 사라져 버립니다. 수작업으로 하는 것이 예상보다 피곤하였고, 중간중간 잊고 지나치는 경우가 생겨서, 데이터의 완결성이 떨어지는 등 아쉬운 점이 있었습니다. 제 계획은 노트북을 출근전에는 꺼놓고, 퇴근후 집에와서 WSL에 airflow 도커로 올려서 새로 켜놓고, 새벽에 Dag이 일정대로 돌아서, 아침에 일어나면 데이터들이 제가 원하는 형태대로 정리되고, 이메일로 완료되었다고 노티를 받는 것입니다. 가능할 거라고 보시는지요?
-
미해결장고 설계철학으로 시작하는 파이썬 장고 입문
pyenv
제가 python 3.10.4를 다운할려고 pyenv를 2.64.11로 다운그레이드를 했는데 다시 pyenv를 3.1.1로 바꿀려면 어떻게 해야하나요?만약 3.1.1로 바꾼다면 전에 설정한것들이 사라지나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-H 문제 질문
안녕하세요 선생님 좋은 강의 매번 감사합니다. 강의를 보며 풀이를 보다 의문점이 생겨 질문드립니다. 답안코드의for(int i = 3; i <= max_n; i++){ f[i] = f[i - 1] + f[i - 2] + 1; } 이 부분에서 i의 조건이 i <= max_n 인 이유를 잘 모르겠습니다.앞에서 f 를 선언할때 int f[max_n] 으로 선언하였는데 위의 조건이 되면 for문 안에서 f[max_n] 까지 값을 할당해주는것인데 이러면 index범위를 벗어나서 할당하는것 아닌가요? 만약 max_n이 40이라면 마지막 인덱스는 f[40]이 아닌 f[39]으로 알고있어서 혹시 그게 맞지 않나싶어 질문드립니다! 왜 오류가 안나는지 궁금합니다. 아니면 제가 놓치고 있는 부분이 있을까요?
-
미해결대세는 쿠버네티스 (Helm편)
tomcat 배포시 pod pending 현상
안녕하세요 수업 잘 듣고 있습니다. helm install my-tomcat . -f values.yaml해당 명령어로 차트 실행까지는 정상적으로 되었고 에러 문구도 따로 뜨지 않았습니다. svc는 nodeport로도 잘 연결되어 있는데 pod가 pending이어서 describe를 해보니 PVC가 Unbound 상태여서 그런 것 같습니다. PVC 로그로는 PV가 존재하지 않다는데 다른 설정 파일을 apply 해주어야 하는 걸까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GStateNotifier로 선언했는데, watch할때, provider명은 왜 다른가요?
class명을GStateNotifier로 만들었는데, 실제 사용할때는gStateNotifierProvider로 앞에 G대문자가 소문자가 되는 이유가 있나요? 강의 설명엔 뭘 써도 된다라고 하셨는데, 어떤 이름으로 쓰든, gStateNotifierProvider가 된다는것인지.이 부분이 명확하지 않아서 문의 드립니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
continual_remove 함수에서 global blank, ch 선언 질문
안녕하세요.continual_remove 함수에서 global blank, ch 선언 하는 이유가 DFS에서 global blank, ch 참조할때 어디에서 선언한 변수를 참조할지 헷갈려서 그런건가요?continual_remove 함수에서 global 선언을 하지 않으니 정상동작하지 않는걸로 봐서는 DFS에서 참조하는 global blank, ch는 main에서 선언한 부분을 참조하는것 같은데, 혹시 제가 이해한게 맞는지 확인 부탁드립니다.
-
미해결공공데이터 CSV 파일을 이용해 테이블 만들기
[13강.zip_code_DB]변경분 처리sql관련
안녕하세요. 세세한 설명 감사드립니다.sql 초급이라 자세한 설명에 맞추어 잘 따라가고 있었는데요.13강의 변경분처리 sql 에대해 loop 처리관련하여서는 전체 코드를 좀 공유해주시면 안될까요?개념적으로는 알곘는데아직 loop 문과 변수에 대해서 적용하는 것에는 익숙하지가 않아서 어떻게 해야 할 지를 모르겠습니다. ㅡㅡ;
-
해결됨OpenGL 쉐이더 (7) shader 3D 그래픽스 - 텍스처 매핑, 큐브 맵, 환경 매핑, 범프 매핑
part8 오픈 일정 - 재질문
이전에 part8 강의 오픈 일정에 대해 문의 드렸었는데 그때 주신 답변이 아래와 같았습니다.'part 8 은 9월 중순경에 릴리즈 될 것으로 보이고,vulkan 은 10월 말까지 완결될 것으로 보입니다.' 강의를 기다렸는데 늦어지시는 것 같아 재차 질문 드리게 되었습니다.part8 과 vulkan 강의 오픈 일정을 알 수 있을까요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
No post matches the given query
강사님 안녕하세요, 오류가 발생해서 질문 드립니다 ㅜㅜhttp://127.0.0.1:8000/post/1/로 접속을 하면계속 이와 같은 오류가 뜹니다 ㅠㅠ이렇게 분명 포스트가 db 에 저장되어있는데 말이죠 .. ㅠㅠ이전에 작성했었다가 사용자를 다시 지우면서 같이 삭제된 포스팅이 있는데 그것 때문에 pk 값이 꼬인 것은 아니겠죠? urlpatterns = [ path('post/new/', views.post_new, name='post_new'), path('post/<int:pk>/', views.post_detail, name='post_detail') ](제 앱 이름은 myblog 로 해두었습니다)from django.contrib import messages from django.contrib.auth.decorators import login_required from django.shortcuts import get_object_or_404, redirect, render from .forms import PostForm from .models import Post # Create your views here. @login_required def post_new(request): if request.method == 'POST': form = PostForm(request.POST, request.FILES) if form.is_valid(): post = form.save(commit=False) post.author = request.user post.save() # 이걸 나중에 하면 안되나? post.tag_set.add(*post.extract_tag_list()) messages.success(request, "포스팅을 등록했습니다.") return redirect("/") # TODO : get_absolute_url 활용 else: form = PostForm() return render(request, "myblog/post_form.html", { "form": form, }) def post_detail(request, pk): post = get_object_or_404(Post, pk=pk) return render(request, "myblog/post_detail.html", { "post" : post, }) views.pyimport re from django.conf import settings from django.db import models from django.urls import reverse # Create your models here. class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) photo = models.ImageField(upload_to="myblog/post/%Y/%m/%d") caption = models.CharField(max_length=1000) tag_set = models.ManyToManyField('Tag', blank=True) location = models.CharField(max_length=100) def __str__(self): return self.caption def extract_tag_list(self): tag_name_list = re.findall(r"#([a-zA-Z\dㄱ-힣]+)", self.caption) tag_list = [] for tag_name in tag_name_list: tag, _ = Tag.objects.get_or_create(name=tag_name) tag_list.append(tag) return tag_list def get_absolute_url(self): return reverse("myblog:post_detail", args=[self.pk]) class Tag(models.Model): name = models.CharField(max_length=50, unique=True) def __str__(self): return self.namemodels.py이상한 부분은 없는 것 같습니다만 왜 이러는지 모르겠네요..ㅠㅠ그런데 또 쌩뚱맞은 http://127.0.0.1:8000/post/5/ url 을 입력하면 아래와 같이 다른 오류가 뜹니다.. 감사합니다 ! ㅠㅠ
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
named lock vs 비관적 락
좋은 강의 너무 감사합니다.강의를 보며 궁금한 점이 생겨서 질문 드립니다. named lock을 통해 동시성 문제를 해결하는 예시를 보았을 때, 비관적 락과 무엇이 다른 것인지 큰 차이를 느끼지 못했습니다.named lock이 비관적 락에 비해 가지는 장단점에 비해 찾아보니, timeout 설정이 좀 더 간편하다는 내용 말고는 유의미한 차이를 찾지 못했습니다.(그러나 비관적 락 + queryhint 를 사용하면 비관적 락 사용 시에도 딱히 어려움 없이 timeout을 설정할 수 있었습니다.) 혹시 named lock이 비관적 락에 비해 지니는 장단점과, 어떤 경우에 비관적 락 대신 Named lock을 통해 분산락을 구현하시는지 궁금하여 질문드립니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
언리얼 클라 연동강의
안녕하세요 루키스님질문 게시판을 보다가 루키스님이 주말마다 클라이언트 연동 강의를 진행하고 계시고 마무리 단계라는 글을 봤습니다.강의 출시 예정이 6개월~1년 텀을 두고 오픈한다고 하셨는데 혹시 더 빠르게 출시하실 생각은 없으신가요?ㅠㅠㅠ대학교 졸업 작품을 언리얼을 사용해서 작업하기로 했는데 서버랑 연동하는게 생각보다 어려워서요.그리고 루키스님 강의에 유니티 서버 연동강의가 있는데 그걸 봐도 언리얼에서 연동을 어느 정도 작업을 할 수가 있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
인터페이스 상속조합에대해서 질문드립니다.
인터페이스 설명하신거보고 상속을 이용해서 여러가지 타입을 레고처럼 조립해서 새로운 형태의 타입을 만들어낼수도 있겠구나 라는 생각을 하게됐습니다.그런데 이게 구조적으로 원래이런건지 몰라서 질문을 드려봅니다.예를 들어서 Iflyable, Ishoutable, Iattackable 이라는 인터페이스를 구현해서각각Iflyable에는 fly라는 함수를 Ishoutable에는 shot이라는 함수를 Iattackable에는 attack이라는 함수를 넣고flyshouter라는 class가 Iflyable과 Ishoutable을 상속받아서 날면서 소리를 지르는 능력을 얻었다고 가정해볼게요.그리고 두번째로 ShoutAttacker라는 class가 Ishoutable과 IAttackable을 상속받아서 소리지르면서 공격을 하는 능력을 얻었다고 가정해보겠습니다.그러면 어찌됐던지 인터페이스가 상속이 돼었기때문에각각 flyshouter => fly와shout라는 함수를 shoutattacker => shout와 attack이라는 함수를 구현해야하잔아요?그러면 결국엔 구현에서 shout라는 공통의 함수를 구현하게 될텐데물론 소리를 지르더라도 뭐 캐릭터에따라서 조금 다르게 소리를 낼수도 있긴하지만 기능자체가 완전 똑같다고 했을때flyshouter와 shoutattacker는 완전 형태가 똑같은 shout 함수를 각각 하나씩 가지고 있어야하는건가요?제가 이질문을 하는 이유는 저렇게 능력들을 인터페이스로 부여받았을때 상속받은 클래스마다 구현을 다 따로하는데 구현부가 완전 똑같은경우에는그냥 복사 붙여넣기로 하나씩 들고 있는게 맞나싶어서 질문 드려봤습니다. 뭐 한두개정도는 복붙해서 사용해도 크게 문제는 없을거같은데지금은 예시로 각각 함수를 하나씩 물고 있는 형태로만 말씀드렸는데 저게 만약에 많아지면 많아지는만큼 늘어나는만큼 계속 복붙을 하는게 맞는지 궁금해서 질문 올렸습니다.
-
미해결비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지
버튼 누를시 인포윈도우 닫는 방식 설명좀 다시 부탁드려도 될까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 빈 배열 객체 생성 let infowindow = []; 거기에 for문 돌면서 infowindow 집어넣기infowindowArray.push(infowindow);1,2번 까지는 말 그대로 빈 배열객체를 생성후기존의 infowindow를 집어넣어 기존의 자료가 들어간infowindowArray를 만든것까진 알겠는데그 이후에 3. function closeInfoWindow(){ for (let infowindow of infowindowArray){ infowindow.close(); } };이게 무슨 말 일까요? 사실 모든 원리가 잘 이해가 되질 않습니다..ㅜㅜ기존에는 그냥 인포윈도우 클릭하면 해당정보가 나타나고 그것을 다른 것을 누르면 끄려 그러는데 왜 빈 배열객체를 만드는지 부터 잘 이해가 안되네요..
-
미해결[하루 10분|Web Project] HTML/JS/CSS로 나만의 심리테스트 사이트 만들기
result 에서 결과가 안 나와요.
result 페이지에서 결과가 안 나와요resultname, resultdesc가 안 뜨는데이미지는 선택된 결과 제대로 뜨는 걸로 봐선 알고리즘엔 문제가 없는데 어디서 잘못된 걸까요? 제 코드는 이렇습니다. const main = document.querySelector("#main"); const qna = document.querySelector("#qna"); const result = document.querySelector("#result"); const endpoint = 6; const select = [0, 0, 0, 0, 0, 0]; function claResult() { console.log(select); var result = select.indexOf(Math.max(...select)); return result; } function setResult() { console.log(name); let point = claResult(); const resultname = document.querySelector('.resultname'); resultname.innerHTML = infoList[point].name; var resultImg = document.createElement('img'); const imgDiv = document.querySelector('#resultImg'); var imgURL = '../image/image-' + point + '.png'; resultImg.src = imgURL; resultImg.alt = point; resultImg.classList.add('img-fluid'); imgDiv.appendChild(resultImg); const resultDesc = document.querySelector('.resultDese'); resultDesc.innerHTML = infoList[point].desc; } function goResult() { qna.style.WebkitAnimation = "fadeOut 1s"; qna.style.animation = "fadeOut 1s"; setTimeout(() => { result.style.WebkitAnimation = "fadeIn 1s"; result.style.animation = "fadeIn 1s"; setTimeout(() => { qna.style.display = "none"; result.style.display = "block"; }, 450) }) setResult(); } function addAnswer(answerText, qIdx, idx) { var a = document.querySelector('.answerBox'); var answer = document.createElement('button'); answer.classList.add('answerList'); answer.classList.add('mx-8'); answer.classList.add('py-3'); answer.classList.add('mx-auto'); answer.classList.add('fadeIn'); a.appendChild(answer); answer.innerHTML = answerText; answer.addEventListener("click", function () { var children = document.querySelectorAll('.answerList'); for (let i = 0; i < children.length; i++) { children[i].disabled = true; children[i].style.WebkitAnimation = "fadeOut 0.5s"; children[i].style.animation = "fadeOut 0.5s"; } setTimeout(() => { var target = qnaList[qIdx].a[idx].type; for (let i = 0; i < target.length; i++) { select[target[i]] += 1; } for (let i = 0; i < children.length; i++) { children[i].style.display = 'none'; } goNext(++qIdx); }, 450) }, false); } function goNext(qIdx) { if (qIdx === endpoint) { goResult(); return; } var q = document.querySelector('.qBox'); q.innerHTML = qnaList[qIdx].q; for (let i in qnaList[qIdx].a) { addAnswer(qnaList[qIdx].a[i].answer, qIdx, i); } var status = document.querySelector('.statusBar'); status.style.width = (100 / endpoint) * (qIdx + 1) + '%'; } function begin() { main.style.WebkitAnimation = "fadeOut 1s"; main.style.animation = "fadeOut 1s"; setTimeout(() => { qna.style.WebkitAnimation = "fadeIn 1s"; qna.style.animation = "fadeIn 1s"; setTimeout(() => { main.style.display = "none"; qna.style.display = "block"; }, 450) let qIdx = 0; goNext(qIdx); }, 450); }
-
미해결빅데이터분석기사 실기대비 (R 활용)
섹션 4 작업형 2유형 (16:29) 결과 추가 문의
안녕하세요 선생님, 상세한 강의 잘 듣고 있습니다. 감사합니다. 수강 중, 위의 [섹션4. 2유형] 강의 내용 중 문의사항이 있어 질문을 남깁니다.[동일 내용 문의 링크]맨 마지막 p3에서 2,482명이 나와야 되는거 아닌가요??? - 인프런 | 질문 & 답변 (inflearn.com)문의 커뮤니티 내 동일한 질문이 있어 일부 연장선 문의를 드립니다. (체험) 제2유형 - 체험하기 (goorm.io) - 해당문제model1, model2 을 평균을 내서 최종 모델 p3을 만들고 이를 적용했을 때최근 답변 기준으로 2482개에서 1611개를 제외한 871개의 행이 출력되는 부분은 이해하였습니다.연습 중 제출 형식을 보니, 규정에는 총 2482개의 온전한 데이터 예측 결과를 제출해야 한다고 명시되어 있고이를 강의 상의 871개짜리 데이터로 최종 제출해도 채점 기준에 부합하는지 궁금합니다.저는 TEST 파일은 열 생략이나 결측지 보정 들의 수정이 가해지면 안되는 원본 데이터의 상태로예측 모델을 적용하는 것으로 인지하고 있는데, 해당 부분에 대한 보충 회신을 주시면 감사드리겠습니다. (채점을 위한 기관측의 추가 별도 데이터를 대입하여 예측결과가 실제로 산출되는지 확인하는 부분이 있다하여, 모든 독립변수 행에 대해서도 대응할 수 있는 모델에 대해서 추가 설명이 있으면 도움이 될 것 같습니다.) 제가 강의 내용 중 못 따라간 부분이 있을 수도 있어, 코드 작성 내 놓친 부분이 있는지 계속 수강내용과 확인해 보겠습니다.감사합니다.
-
미해결초보를 위한 도커 안내서
Error establishing a database connection 에러 해결좀 해주세요
윈도우 환경이구요.포트 번호 하나 바꾸지 않고 똑같이 복붙했습니다.윈도우 cmd를 통해 ubuntu 설치 후 mysql, wordpress설치 하고 localhost:8080 접속했는데Error establishing a database connection 에러가 나네요;;;;;;;;; 왜 에러가 나는걸까요..? -MYSQL 생성docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mariadb:10.9 -MYSQL 명령어docker exec -it mysql mysql create database wp CHARACTER SET utf8; grant all privileges on wp.* to wp@'%' identified by 'wp'; flush privileges; quit -워드프레스 명령어docker run -d -p 8080:80 -e WORDPRESS_DB_HOST=host.docker.internal -e WORDPRESS_DB_NAME=wp -e WORDPRESS_DB_PASSWORD=wp wordpress 이렇게 실행했는데 문제가 있는건가요?
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
querydsl을 사용할 때 java의 Q클래스와 kotlin의 Q클래스 함께사용 가능한가요??
기존에 진행 중이던 프로젝트에서 신규로 개발할 기능들은 kotlin으로 개발하려합니다. 강사님 강의에서 나온 프로젝트의 build.gradle 파일을 참고해서 설정을 하니 java의 Q클래스와 kotlin의 Q클래스가 둘다 생겨버려서 중복이라는 에러가 발생하더군요.... 혹시 java,kotlin 2개를 동시에 Q클래스를 사용할 수 있는 방법은 없을까요??아니면 java의 Q클래스만 생성해서 kotlin에서 java에서 생성한 Q클래스를 사용하면 될까요??그런데 이 방법으로 시도해보려니 설정이 꼬여서 그런지 자꾸 Q클래스는 생성읻되었는데 경로를 못찾는다고 에러가 발생하더라고요ㅠㅠ 좋은 방법있으면 알려주시면 감사하겠습니다. plugins { id 'org.springframework.boot' version '2.2.2.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' id 'org.jetbrains.kotlin.jvm' version '1.6.21' id 'org.jetbrains.kotlin.plugin.jpa' version '1.6.21' id 'org.jetbrains.kotlin.plugin.spring' version '1.6.21' id 'org.jetbrains.kotlin.kapt' version '1.6.21' } group = 'com.maturi' version = '0.0.1-SNAPSHOT' sourceCompatibility = '8' configurations { compileOnly { extendsFrom annotationProcessor } developmentOnly runtimeClasspath { extendsFrom developmentOnly } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' developmentOnly("org.springframework.boot:spring-boot-devtools") compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:2.7.0' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.modelmapper:modelmapper:2.4.2' testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-mail' implementation 'com.querydsl:querydsl-jpa' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } implementation group: 'org.javassist', name: 'javassist', version: '3.15.0-GA' implementation group: 'com.google.firebase', name: 'firebase-admin', version: '8.1.0' implementation 'org.springframework.social:spring-social-facebook:2.0.3.RELEASE' implementation 'org.apache.httpcomponents:httpclient:4.5.2' implementation 'com.googlecode.json-simple:json-simple:1.1.1' kapt("com.querydsl:querydsl-apt:5.0.0:jpa") kapt("org.springframework.boot:spring-boot-configuration-processor") } test { exclude { '/**/*' } useJUnitPlatform() } compileKotlin { kotlinOptions { jvmTarget = "8" } } compileTestKotlin { kotlinOptions { jvmTarget = "8" } } def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } clean { delete file('src/main/generated') }
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Custom Getter 에 대해 질문이 있습니다.
안녕하세요 태현님! 이 강의 덕분에 코틀린을 재미있게 학습하고 있습니다. Custom Getter 에 대해 질문이 있어서 질문드립니다. name 을 대문자로 만드는 것을 예시로 Custom Getter 를 사용하는 것과, 프로퍼티로써 사용하는 것에 대해 설명해주셨는데요, 제가 잘 이해하지 못했는지.. 두 방법에 대해 차이가 있는것 같습니다. Custom Getter 를 사용할 경우fun main() { val personTest = PersonTest("abc", 10) println(personTest.name) } class PersonTest ( name: String, var age: Int ) { init { if (age <= 0) { throw IllegalArgumentException("나이는 ${age}일 수 없습니다." ) } println("초기화 블록") } val name = name get() = field.uppercase() }위의 경우 ABC가 출력이 됩니다.생성자를 통해 name 값이 "abc"로 객체가 생성되었으나, custom getter 를 통해 uppercase 되어서 ABC 로 출력되는 것을 볼 수 있습니다. 프로퍼티를 사용하는 경우fun main() { val personTest = PersonTest("abc", 10) println(personTest.name) println(personTest.uppercaseName) } class PersonTest ( val name: String, var age: Int ) { init { if (age <= 0) { throw IllegalArgumentException("나이는 ${age}일 수 없습니다." ) } println("초기화 블록") } val uppercaseName: String get() = this.name.uppercase() }위의 경우는 그대로 "abc" 가 출력이 됩니다.당연히 personTest 객체를 통해 프로퍼티인 upppercaseName을 출력하면 ABC가 출력이 되지만요.. 강의에서 태현님께서 backing field 를 사용하지 않고, 프로퍼티를 통해 사용한다고 하셨는데.. 둘의 작동이 다른 것 같아서요! 제가 짐작컨데, 말씀하신 내용이backing field 처럼 사용되는 경우가 많지 않다.주로 getter 로 값을 가져오는 경우에는 값 자체를 가져오는 경우가 많으므로 프로퍼티를 통해 값을 가져오도록 한다.라고 이해해도 되는 것일까요?
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
g_pHeadNode
g_pHeadNode는 왜 주솟값을null로 갖고있나요?