묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
쿠폰 발급 요청방법
모든 (기존,신규)수강생에 한해 https://www.inflearn.com/course/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%BD%94%EC%8A%A4-ea-%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC무료쿠폰드리고 있습니다.자신의 인프런 닉네임을 적어서 쿠폰요청으로 메일 주시면 감사하겠습니다.vmproductor@gmail.com
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
그림에 있는 웹서버가 무엇인가요??
그림에 있는 웹서버가 무엇인가요?? 요청을 사용자 컴에서 보내면 문서 + css파일 + js파일 다 받아온 후에 사용자 컴퓨터의 브라우저가 조립해서 표기를 해주는것으로 알고있습니다.제가 헷갈리는 부분은 웹서버에서 정적 파일 서빙이후파일 받으면 웹서버를 거쳐서 was를 갈 필요 없이바로 was로 갈 수 있을텐데 구조가 저렇게 되있으면 반드시 거쳐가야 하는것 아닌가? 하는 의문이 들었습니다. 물론 서비스를 제공하는 회사별로 다르겠지만 일반적으로 어떻게 되는 것인가요?
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
EA + egovframe 쿠폰
EA + egovframe 신규 강의를 보고 어?! 설마 하고 찾아봤는데 기존에 전자정부 수강생에게는 쿠폰을 준다하여 문의 남깁니다~
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
EA + egovefrm 수강 관련 쿠폰 요청합니다.
EA + egovefrm 수강 관련 쿠폰 요청합니다.
-
미해결
EA + egovefrm 수강 관련 쿠폰 요청합니다.
EA + egovefrm 수강 관련 쿠폰 요청합니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
onSaved의 타입
안녕하세요. 중급까지 다 듣긴했는데 프로젝트 중, 폼필드 부분에 복습을 할 필요성이 생겨 돌아와서 보던중 궁금한 점이 생겨서 질문드립니다.onSaved의 타입이 현재의 플러터(3.7.11) 혹은 다트(2.19.6)에서 확인을 해보면 text_form_field.dart에서 내용이 저는 ValueChanged<String?> onFieldSubmitted, super.onSaved, super.validator,로 표기가 됩니다. text_form_field.dart 에서는 FormFieldSetter<String> 에 해당하는 타입이나 문구는 cmd+f를 해서 찾아보아도 나오진 않아요.다만 Form 위젯의 정의에서는 타입데프로 나오긴 하며, 강의에서 처럼 onSaved를 매개변수로 받아 외부에서 입력하도록 했을때 FormFieldSetter<String>로 해도 작동은 하네요.버전이 바뀌며 변경이 있었던 건지 이 부분은 왜 text_form_field.dart에서 찾을 수가 없는지 궁금합니다. 또한 이런 경우 Form위젯을 뒤지지 않고도 적절한 타입을 찾을 수 있는 방법을 알고 싶습니다.감사합니다.
-
미해결비전공 기획자 및 관리자를 위한 IT 필수 지식
안녕하세요! 강의자료 요청드립니다.
안녕하세요! 강의자료 요청드립니다.tnfl0825@gmail.com 이메일로 보내주시면 감사드리겠습니다!좋은 하루 보내세요.
-
미해결[2025년 출제기준] 웹디자인기능사 실기시험 완벽 가이드
HTML 유효성 검사에서 오류가 나옵니다.
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>푸른마을</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="container"> <div class="main-content"> <div class="left"> <header> <div class="header-logo"> <a href="#none"><img src="images/logo-header.png" alt="header logo"></a> </div> <div class="navi"> <ul class="menu"> <li><a href="#none">OnSale</a></li> <li><a href="#none">기획전</a></li> <li><a href="#none">푸른마을 레시피</a></li> <li><a href="#none">매장안내</a></li> <div class="sub-back"> <div class="mega-menu"> <div class="sub-menu"> <a href="#none">할인행사</a> <a href="#none">덤증정</a> </div> <div class="sub-menu"> <a href="#none">봄 먹거리</a> <a href="#none">여름 먹거리</a> <a href="#none">가을 먹거리</a> <a href="#none">겨울 먹거리</a> </div> <div class="sub-menu"> <a href="#none">메인요리</a> <a href="#none">밑반찬</a> <a href="#none">간식</a> <a href="#none">브런치</a> </div> <div class="sub-menu"> <a href="#none">신규매장</a> <a href="#none">추천매장</a> <a href="#none">공지사항</a> </div> </div> </div> </ul> </div> <div class="spot-menu"> <a href="#none">로그인</a> <span>|</span> <a href="#none">회원가입</a> </div> </header> </div> <div class="right"> <div class="slide"> <div class="slide-image"> <div class="slide-image-inner"> <a href="#none"><img src="images/slide-01.jpg" alt="slide1"></a> <a href="#none"><img src="images/slide-02.jpg" alt="slide2"></a> <a href="#none"><img src="images/slide-03.jpg" alt="slide3"></a> </div> </div> <div class="banner"> <a href="#none"><img src="images/banner-01.jpg" alt="banner1"></a> <a href="#none"><img src="images/banner-02.jpg" alt="banner2"></a> <a href="#none"><img src="images/banner-03.jpg" alt="banner3"></a> </div> </div> <div class="items"> <div class="shortcut"> <img class="shortcut-image" src="images/shortcut-01.jpg" alt="shortcut image"> <div class="shortcut-content"> <h2>얼리버드 선착순 할인 이벤트, 신규강의 최대 30% 할인</h2> <p> 12월은 사랑의 달~ 코딩웍스에서 여러분께 사랑을 뿌려요~<br> 12월 개강반을 12월 06일까지 접수하는 분들께는 15%~ 20% 의 얼리버드 할인을 제공합니다.<br> 더불어 소중한 리뷰를 꼼꼼히 남겨주시는 분들을 뽑아 더 큰 적립금을 추가지급해 드릴 예정이오니 리뷰도 놓치지 마시고 작성해주세요~^^<br> 기간: 2022년 12월 18일~ 12월 25일 </p> </div> <a href="#none"><img src="images/shortcut-02.png" alt="shortcut link"></a> </div> <div class="news-gallery"> <div class="tab-inner"> <div class="btn"> <a class="active" href="#none">공지사항</a> <a href="#none">갤러리</a> </div> <div class="tabs"> <div class="tab1"> <a class="open-modal" href="#none">스트리밍 서버 이전 작업으로 2시간 서비스 중지<b>2022.12.20</b></a> <a href="#none">얼리버드 선착순 할인 이벤트 최대 50% 할인<b>2022.10.13</b></a> <a href="#none">내 집 마련의 꿈을 꿈이 아닌 현실로 만드는 진짜 방법<b>2022.11.31</b></a> <a href="#none">외국인과 영어로 네이티브처럼 대화하는 노하우<b>2022.08.09</b></a> <a href="#none">월 500만원 매출을 내는 블로그 운영하는 노하우<b>2022.07.07</b></a> </div> <div class="tab2"> <a href="#none"><img src="images/gallery-01.jpg" alt="gallery1"><span>체스키크룸로프성</span></a> <a href="#none"><img src="images/gallery-02.jpg" alt="gallery2"><span>럭셔리 범선 선셋</span></a> <a href="#none"><img src="images/gallery-03.jpg" alt="gallery3"><span>거제 바람의언덕</span></a> <a href="#none"><img src="images/gallery-04.jpg" alt="gallery4"><span>연천 덴마크 가평</span></a> <a href="#none"><img src="images/gallery-05.jpg" alt="gallery5"><span>담양 메타프로방스</span></a> <a href="#none"><img src="images/gallery-06.jpg" alt="gallery6"><span>잘츠카머쿠트</span></a> </div> </div> </div> </div> </div> </div> </div> <footer> <div class="footer-logo"> <a href="#none"><img src="images/logo-footer.png" alt="footer logo"></a> </div> <div class="footer-content"> <div class="footer-link"> <a href="#none">회사소개</a> <a href="#none">찾아오시는길</a> <a href="#none">개인정보처리방침</a> <a href="#none">이용약관</a> <a href="#none">고객지원</a> <a href="#none">제휴문의</a> </div> <div class="copyright"> 상호 : (주)코딩웍스 | 대표자 : 홍길동 | 개인정보관리책임자 : 성춘향 부장 사업장주소 : 경기도 남양주시 별내동 1234 코딩웍스 빌딩 6층 (주)코딩웍스 </div> </div> </footer> </div> <div class="modal"> <div class="modal-content"> <h2>스트리밍 서버 이전으로 서비스 장애</h2> <p> 스트리밍 서버 이전 작업으로 2시간 서비스 중지됩니다.<br> 주요 작업 내용은 아래와 같습니다.<br> <br> 1. 서버 이전에 따른 DNS 이전으로 기존 호스팅 서비스 대체<br> 2. 문자셋을 utf-8로 변경 후 모바일 등에 대처하기 위해 미리 조치<br> 3. 스트리밍 서버 CDN과 연동 후 멀티미디어 이러닝 서비스가 제공<br> <br> 위 내용을 보시면 제법 큰 작업이었음을 알 수 있습니다.<br> 특히 문자셋의 변경에 따라 기존의 DB, data, 웹사이트 솔루션 등의 커스트마이징 등에 상당한 어려움이 있었고, 이에 따른 일부 접속 오류가 있을 수 있었음에 양해를 구합니다.<br> 서버 이전 작업으로 고객님들께 불편을 드려서 대단히 죄송합니다.<br> 정상 운영되도록 최선을 다하겠습니다. 감사합니다. </p> <a class="close-modal" href="#none">닫기</a> </div> </div> <script src="script/jquery-1.12.4.js"></script> <script src="script/custom.js"></script> </body> </html> @charset "UTF-8"; body { margin: 0; background-color: #fff; color: #333; font-size: 15px; } a { color: #333; text-decoration: none; } .container {} .main-content { display: flex; } .main-content > div { /* border: 1px solid black; */ /* height: 800px; */ } .left { width: 200px; } .right { flex: 1; } header { position: relative; z-index: 10; } header > div { /* border: 1px solid red; */ } .header-logo { height: 100px; display: flex; align-items: center; } .navi { height: 200px; } /* Navigation */ .menu { list-style: none; padding: 0; width: 90%; margin: auto; margin-top: 10px; position: relative; } .menu li { text-align: center; background-color: #fff; } .menu li > a { border: 1px solid #000; display: block; padding: 5px; transition: 0.5s; } .menu li:hover > a { background-color: #000; color: #fff; } .sub-back { background-color: rgba(0, 0, 0, 0.5); position: absolute; top: 0; left: 100%; width: calc(100vw - 208px); z-index: 1000; display: none; } .mega-menu {} .sub-menu { height: 32px; display: flex; align-items: center; gap: 15px; margin-left: 15px; } .sub-menu a { padding: 5px; transition: 0.5s; color: #fff; } .sub-menu a:hover { background-color: #000; } .spot-menu { height: 50px; text-align: center; } .spot-menu a { color: blue; } .spot-menu a:hover { text-decoration: underline; } .slide { position: relative; } .slide > div { /* border: 1px solid blue; */ } .slide-image { height: 400px; } .slide-image-inner { font-size: 0; height: inherit; overflow: hidden; position: relative; } .slide-image-inner a { height: inherit; position: absolute; top: 0; left: 0; animation: slide 10s linear infinite; visibility: hidden; } .slide-image-inner a:nth-child(1) { animation-delay: 0s; } .slide-image-inner a:nth-child(2) { animation-delay: 3.5s; } .slide-image-inner a:nth-child(3) { animation-delay: 7s; } .slide-image-inner a img { height: inherit; width: 100%; object-fit: cover; } @keyframes slide { 0% { opacity: 0; } 5% { opacity: 1; visibility: visible; } 35% { opacity: 1; } 40% { opacity: 0; visibility: hidden; } 100% { opacity: 0; } } .banner { width: 150px; height: 300px; position: absolute; top: 0; right: 10px; } .banner a img { width: 150px; border-radius: 10px; margin: 5px 0; } .items {} .items > div { /* border: 1px solid green; */ } .shortcut { height: 200px; display: flex; align-items: center; justify-content: space-around; } .shortcut .shortcut-image { height: 150px; border-radius: 30px; } .news-gallery { height: 250px; } /* News & Gallery */ .tab-inner { width: 95%; margin: auto; margin-top: 25px; } .btn {} .btn a { border: 1px solid #000; display: inline-block; width: 100px; text-align: center; padding: 5px; border-radius: 5px 5px 0 0; border-bottom: none; margin-right: -6px; margin-bottom: -1px; background-color: #ccc; } .btn a.active { background-color: #fff; } .tabs {} .tab1 { /* display: none; */ border: 1px solid #000; height: 170px; box-sizing: border-box; padding: 10px 15px; } .tab1 a { display: block; padding: 5px; border-bottom: 1px solid #000; } .tab1 a:last-child { border-bottom: none; } .tab1 a b { float: right; font-weight: normal; padding-right: 50px; } .tab2 { border: 1px solid #000; height: 170px; text-align: center; box-sizing: border-box; padding-top: 10px; display: none; } .tab2 a { display: inline-block; text-align: center; } .tab2 a img { height: 130px; border-radius: 10px; margin: 0 55px; } .tab2 a span { display: block; } footer { display: flex; height: 120px; align-items: center; } footer > div { /* border: 1px solid red; */ } .footer-logo { width: 200px; } .footer-content { flex: 1; } .footer-content div { /* border: 1px solid red; */ /* height: 60px; */ padding: 10px 15px; } .footer-link {} .copyright {} .footer-link a { color: blue; } .footer-link a::after { content: "|"; margin-left: 5px; } .footer-link a:last-child::after { display: none; } .footer-link a:hover { text-decoration: underline; } .modal { background-color: #00000060; position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 100; display: none; } .modal-content { background-color: #fff; width: 500px; padding: 20px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .close-modal { float: right; border: 1px solid #000; padding: 5px 10px; } .modal-content h2 { text-align: center; } $('.menu').mouseenter(function(){ $('.sub-back').stop().fadeIn() }) $('.menu').mouseleave(function(){ $('.sub-back').stop().fadeOut() }) $('.btn a:first-child').click(function(){ $('.tab1').show() $('.tab2').hide() $(this).addClass('active') $(this).siblings().removeClass('active') }) $('.btn a:last-child').click(function(){ $('.tab2').show() $('.tab1').hide() $(this).addClass('active') $(this).siblings().removeClass('active') }) $('.open-modal').click(function(){ $('.modal').fadeIn() }) $('.close-modal').click(function(){ $('.modal').fadeOut() })
-
미해결CloudNet@ - AWS 네트워킹 입문
학습 자료 압축 풀기
학습 자료 다운로드 받아서, 압축 해제가 안됩니다. M1 Mac pro이고 다른 인프런 강의 자료 받아서 압축해제 잘 되는 것 확인했습니다...!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
얍바레
라잇웨잇 베이베!!!!!!!!!!!!!!!!!!!!!!
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
sonarqube와 powershell, cmd의 호환성
sonarqube 실행 시 powershell에서는 계속 에러가 발생하는데 cmd에서는 정상적으로 실행되서 질문입니다.제 컴퓨터는OS: Windows 10 Homeversion: 22H2이고,sonarqube는 vmware centos7 환경에서 docker로 실행했습니다. springboot project에서 pom.xml의 plugin 설정입니다.<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.9.1.2184</version> </plugin> </plugins> </build> 그리고 powershell로 sonarqube를 실행했을 때의 상태입니다.cmd로 sonarqube를 실행했을 때의 상태입니다.git bash shell로 했을 때도 정상적으로 실행됐습니다.https://okky.kr/questions/804636 에서는"다른 쉘 환경이다보니 환경변수를 다루는 방식이 달라서 " 라고 하기도 하고,https://okky.kr/questions/1403875 에는"반면에 PowerShell은 .NET 프레임워크 기반으로 만들어졌기 때문에," 나,"PS는 .Net 기반이다 보니 .Net 버전 별 호환성 이슈가 있습니다." 말이 있는데 "아파치 메이븐은 자바 프로젝트들을 위한 빌드 자동화 도구" 라서 powershell과 호환성이 안맞는 부분도 있을 수 있다 라고 해석해도 될까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[Error] Member cannot be resolved to a type
save.jsp를 요청할 때, Member cannot be resolved to a type라는 에러가 나옵니다.패키지의 문제인가 싶어서 아래와 같이 확인했습니다.스프링부터 2.6.3버전이고, implementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '9.0.44' implementation 'javax.servlet:jstl' //스프링부트 3.0 미만위 코드를 gradle에 추가했습니다. 프로젝트창에 jstl과 tomcat을 검색하면 외부 라이브러리로 설치됨을 알 수 있습니다. 경로의 문제일 수 있을까요? 내 파일경로는 위와 같고, save.jsp의 코드는 아래와 같습니다.<%@ page contentType="text/html;charset=UTF-8" language="java"%> <%@ page import="hello.servlet.domain.member.Member" %> <%@ page import="hello.servlet.domain.member.MemberRepository" %> <% MemberRepository memberRepository = MemberRepository.getInstance(); String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); Member member = new Member(username, age); memberRepository.save(member); %> <html>...</html>경로의 문제일까요? jsp파일이 Member클래스를 참조못하는듯보입니다.
-
해결됨우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
클로져를 학습 중에 궁금한게 생겨 질문드립니다
#1def clos(): series = [] def averager(v): series.append(v) return sum(series) / len(series) return averager avg_clos = clos() print(avg_clos(10)) print(avg_clos(20)) print(avg_clos(30))#2def clos(): a = 0 b = 0 def averager(v): a += v b += 1 return a / b return averager avg_clos = clos() print(avg_clos(10)) print(avg_clos(20)) print(avg_clos(30)) series든 a,b든 변수에 할당하고 수정하는건 같은데 왜 #2번만 nonlocal을 적용해야 실행이 되는 건지 잘모르겠습니다 . ㅠ.ㅠ
-
미해결조코딩의 코딩 기초와 웹 풀스택 개발
인프런은 질문을 안받아주시나요?
ㅠㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloController 밒 hello.html 실행 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예{[질문 내용]여기에 질문 내용을 남겨주세요. 제 hello.html에는 강사님과 다르게 ${data}" 부분에 주황색 글씨로 표기가 안되고 HelloControlle에서 string hello 부분에도 주황색 글씨로 표기가 안되는데 어떤 오류가 있을까요..?
-
미해결
스프링 이슈해결 스터디
프로젝트 스케일로 스터디를 진행할 예정입니다스프링을 개발하면서 직면하는 이슈와 고민거리에 대한 해결책과 근거를 제시할 수 있는 것을 목표로 다음과 같이 진행할 예정입니다프로젝트를 하면서 마주치는 이슈나 고민해야할 것들을 컴팩트하게 정의해서문제상황 코드를 작성하고해당 문제를 해결했다 혹은 이해했다고 판단할 수 있는 테스트케이스, 결과예시를 작성합니다각자 이를 해결하는 코드를 작성하고,마지막으로 서로의 코드를 리뷰합니다스터디에서 해결할 이슈는 다음과 같습니다.특정기술이 무엇이고, 내부적으로 어떻게 동작하는지써야하는 상황과 그 이유, 쓰지 말아야하는 상황과 그 이유설계적 측면에서 효율적인 설계와 그 이유프로젝트 진행시 마주칠 수 있는 이슈와 그 해결방안스터디는주 1회 대면 / 장소는 홍대 혹은 신촌대면에서의 활동: 해결 코드 설명, 다음이슈 선정, 문제상황코드 작성, 테스트케이스 작성주별 과제: 선정된 이슈 해결코드 작성하기, 다음이슈 생각해오기툴로 깃헙을 적극적으로 활용할 계획이며대면 스터디 시간이 남을 시, CS면접스터디를 추가로 진행할 예정입니다소규모 인원으로 진행할 예정입니다.아래로 연락부탁드립니다https://open.kakao.com/o/sdPjm7ff
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
깃권한 요청드려요
인프런 아이디 : kik1611인프런 이메일 : kik1611@nate.com깃헙 아이디 : kik87827@gmail.com깃헙 Username : kik87827
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
개발환경을 바꿨는데 alt + 엔터 (장고 API 임포트 자동완성) 기능 동작이 안되고 있는 이슈
프로젝트를 파이참으로 로드/열고 가상환경으로 다시 만들어 주었고 프로젝트와 가상환경을 연동해주었습니다. 여기서 궁금한게 2가지 있습니다.장고프로젝트마다 혹은 가상환경이 바뀔때 마다File Watchers 에 black 규칙을 추가해 주어야 하나요? 그리고 상황(프로젝트코드, 가상환경) 이 바뀌어서 그런지 이전 장고설계철학 강의에서 잘되던 장고 임포트 자동완성이 계속 안되고 있어서Languages&Frmaworks 설정도 확인해서 잘되어있음을 확인했고 (아래 이미지)File > Invalide Caches > Invalidate and Restart 해줬는데도 안되고 있습니다. (체크박스 옵션은 모두 체크 안 했습니다)음..혹시 이유와 해결책이 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
쿼리 최적화 관련 (직접 쿼리날리기, 엔티티를 통한 접근)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.특정 엔티티에 접근을 하려고 할 때 1)직접 쿼리를 통해 접근 하는 방법, 2) 엔티티와 자바 메소드를 통해 접근하는 방법 중 어떤 것을 선택해야할까요?예를 들어 User엔티티와 Follow엔티티가 1대N으로 설정되어있다고 가정한다면. user.getFollows()를 한다면 Select 쿼리가 한 번 더 나가게됩니다. 이것도 user를 repository에서 가져올때 follows를 join fetch 해온다면 괜찮지만insert또는 delete할 때가 고민입니다Insert일 때1) cascade타입을 persist또는 all로 설정해둔다면user.getFollows.add(follow) 쿼리로 할 수 있습니다하지만 이렇다면 Select문, Insert문 쿼리가 두번이 추가가 됩니다2)하지만 followRepository.save(follow)를 한다면 insert문 한 번의 쿼리만 나가게 됩니다.delete일 떄1)user.getFollows.delete(follow)또한 Select문, delete문 두번의 쿼리가 나가지만2)followRepository.delete(follow)는 한 번의 쿼리가 나갑니다. 하지만 이마저도 이전에 follow를 검색하는 과정에서 쿼리가 더 나갈 수 있습니다ex) User user = userRepository.findByUserId(userId);Follow follow = user.get~~; // 삭제할 follow를 구별해내는 메소드user.getFollows.delete(follow)-> 쿼리가 총 4번이 나갈 수 있습니다하지만 이걸 followRepository에서@Query("delete ~~");void deleteByUserId(@Param("userId"))이 메소드를 한 번 실행시키는 걸로 축소한다면 단 한 번의 쿼리로 축소할 수 있습니다.이렇다면 웬만한 데이터에 접근할 때 직접 쿼리를 날리는게 좋지 않나요? 왜 엔티티상으로 데이터에 접근하는지 궁금합니다.그리고 만약에 특유의 이유가 있다고 하여도 (객체 지향의 이유 등등) 쿼리를 4번에서 1번으로 줄일 수 있는 것을 포기할 정도의 이유인지도 궁금합니다!
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
글쓰기화면에서리스트로갈떄 파라미터값을 못가지고오는 오류가 발생하네요 이유가 뭘까요?
서비스부분 컨트롤부분 매퍼부분 xml부분 오류코드부분