묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨독하게 시작하는 C 프로그래밍
선택정렬 if 교환
소스코드 18라인에 if로 j가 변환할떄만 바꿔주신다고 했는데 변환하지 않아도 자기자신끼리 교환하는 거니까 결과값이 달라지진 않잖아요. 근데도 조건문을 사용하는게 더 좋은 코드인건가요?
-
해결됨독하게 시작하는 C 프로그래밍
질문
수업듣다가 말씀하신 부분중에 궁금한부분이 있어서요.혹시 스태틱바인딩, 다이나믹 바인딩 관해서 더 알아보고 싶은데, 설명을 어디강의에서 들을 수 있나요 ~~~?????
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 13 질문
FileWriter fw = new FileWriter("saying.txt"); BufferedWriter bw = new BufferedWriter(fw);복습 차원에서 파일 생성하고 작성 하는 것 까지 한번 해봤는데요.위 부분에서 앞선 강의에선 윗줄과아랫줄을 합쳐서 BufferedWriter bw = new BufferedWriter(new FileWriter("saying.txt"));이렇게 만들고 이것을 TryWithResources 방법으로 구현하는 방법을 배웠는데, TryWithResources방법이 기억이 안 나서 try { BufferedWriter bw = new BufferedWriter(new FileWriter("saying.txt")); bw.write("세 살 __ 여든까지 간다"); bw.newLine(); // . // . // . } catch (IOException e) { throw new RuntimeException(e); }이렇게 전체를 트라이캐치 구문으로 묶어 버렸어요. 실행 해보니 파일에 글자가 아예 안 찍히더라고요. TryWithResources방법을 안 써도 글자는 찍힐 거라고 생각했는데 왜 안 찍히는 것일까요.
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
안녕하세요 에러질문있습니다
실습3) Tomcat 서버에 배포하기 실습중 다음과 같은 에러가 발생하는데 원인을 모르겠습니다ㅜㅜ Maven JVM terminated unexpectedly with exit code 134 그리고 부록 파트에서 톰캣사용하면서 deploy계정을 추가한적 이 있다는데 부록파트는 어디에 있나요? 강의듣기전에 섹션8을 모두 진행한다음에 강의를 들으면되는건가요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
강의 내용 블로그에 정리해서 포스팅해도 괜찮을까요!
안녕하세요 강사님! 시큐리티부터 열심히 수강중입니다! 혹시 강의내용을 정리해서 블로그에 포스팅 해도 괜찮을까요? 항상 좋은 강의 올려주셔서 감사합니다!
-
미해결
Optional , NullpointException 관련 Error
안녕하세요 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 섹션 3 ) 회원 관리 예제 - 백엔드 개발강의 내용을 따라 하던 중 Optional , NullpointException 관련 Error 가 났는데 오류의 원인을 찾을 수 없어 문의글 남깁니다 강사님이 작성한 코드와 다른점이 없는것같은데 뭐가 문제일까요??
-
해결됨배달앱 클론코딩 [with React Native]
Flipper Plugin 'Async Storage' is not supported by the selected application
안녕하세요 환경 -운영체제 : win10 -node버전 : 16.17.0-react-native 버전 : 0.66.5-에뮬레이터 : nexus5 , x86_64 , android13-flipper 버전 : 0.239.0Flipper의 Async Storage를 다운로드 후 추가를 하려는 도중 추가할 수 없는 Unavailable plugins에 있어서 질문드립니다.Async Storage가 Unavailable plugins안에 있어서 질문드립니다마우스를 올렸을 떄 아래와 같은 메세지를 주고 있습니다. Async Storage' is not available x86_64Plugin 'Async Storage' is not supported by the selected application 추가적으로 Flipper를 실행시켰을때 왼쪽 상단에 Flipper(0.239.0)(Unsuppoerted)가 발생하고 있습니다감사합니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
안녕하세요 공유해주신 노션이 열리지 않아 문의 남깁니다.
안녕하세요. 금일 노션 공유를 naver 이메일을 통해 받았는데요. 노션 자체를 제가 구글 아이디로 사용하고 있어서 그런건지 정확한 이유는 모르겠지만 노션이 열리지 않아서요. 혹시 bluesea9519@gmail.com으로 다시 보내주실수 있을까요?
-
미해결스프링 핵심 원리 - 기본편
DiscountPolicy는 인터페이스인데 .class가 붙는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. code 일부분 ac.getBeansOfType(DiscountPolicy.class);2. 궁금한점DiscountPolicy는 인터페이스인데 .class가 붙는 이유가 메타데이터에 접근하기위해서 '.class'가 붙는것인가요?
-
해결됨공공데이터로 파이썬 데이터 분석 시작하기
msno.matrix(df) 밸류에러
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) Cell In[46], line 2 1 # heatmap 으로 표현합니다. ----> 2 msno.matrix(df) File ~\anaconda3\Lib\site-packages\missingno\missingno.py:72, in matrix(df, filter, n, p, sort, figsize, width_ratios, color, fontsize, labels, sparkline, inline, freq, ax) 70 # Remove extraneous default visual elements. 71 ax0.set_aspect('auto') ---> 72 ax0.grid(b=False) 73 ax0.xaxis.tick_top() 74 ax0.xaxis.set_ticks_position('none') File ~\anaconda3\Lib\site-packages\matplotlib\axes\_base.py:3194, in _AxesBase.grid(self, visible, which, axis, **kwargs) 3192 _api.check_in_list(['x', 'y', 'both'], axis=axis) 3193 if axis in ['x', 'both']: -> 3194 self.xaxis.grid(visible, which=which, **kwargs) 3195 if axis in ['y', 'both']: 3196 self.yaxis.grid(visible, which=which, **kwargs) File ~\anaconda3\Lib\site-packages\matplotlib\axis.py:1660, in Axis.grid(self, visible, which, **kwargs) 1657 if which in ['major', 'both']: 1658 gridkw['gridOn'] = (not self._major_tick_kw['gridOn'] 1659 if visible is None else visible) -> 1660 self.set_tick_params(which='major', **gridkw) 1661 self.stale = True File ~\anaconda3\Lib\site-packages\matplotlib\axis.py:932, in Axis.set_tick_params(self, which, reset, **kwargs) 919 """ 920 Set appearance parameters for ticks, ticklabels, and gridlines. 921 (...) 929 gridlines. 930 """ 931 _api.check_in_list(['major', 'minor', 'both'], which=which) --> 932 kwtrans = self._translate_tick_params(kwargs) 934 # the kwargs are stored in self._major/minor_tick_kw so that any 935 # future new ticks will automatically get them 936 if reset: File ~\anaconda3\Lib\site-packages\matplotlib\axis.py:1076, in Axis._translate_tick_params(kw, reverse) 1074 for key in kw_: 1075 if key not in allowed_keys: -> 1076 raise ValueError( 1077 "keyword %s is not recognized; valid keywords are %s" 1078 % (key, allowed_keys)) 1079 kwtrans.update(kw_) 1080 return kwtrans ValueError: keyword grid_b is not recognized; valid keywords are ['size', 'width', 'color', 'tickdir', 'pad', 'labelsize', 'labelcolor', 'zorder', 'gridOn', 'tick1On', 'tick2On', 'label1On', 'label2On', 'length', 'direction', 'left', 'bottom', 'right', 'top', 'labelleft', 'labelbottom', 'labelright', 'labeltop', 'labelrotation', 'grid_agg_filter', 'grid_alpha', 'grid_animated', 'grid_antialiased', 'grid_clip_box', 'grid_clip_on', 'grid_clip_path', 'grid_color', 'grid_dash_capstyle', 'grid_dash_joinstyle', 'grid_dashes', 'grid_data', 'grid_drawstyle', 'grid_figure', 'grid_fillstyle', 'grid_gapcolor', 'grid_gid', 'grid_in_layout', 'grid_label', 'grid_linestyle', 'grid_linewidth', 'grid_marker', 'grid_markeredgecolor', 'grid_markeredgewidth', 'grid_markerfacecolor', 'grid_markerfacecoloralt', 'grid_markersize', 'grid_markevery', 'grid_mouseover', 'grid_path_effects', 'grid_picker', 'grid_pickradius', 'grid_rasterized', 'grid_sketch_params', 'grid_snap', 'grid_solid_capstyle', 'grid_solid_joinstyle', 'grid_transform', 'grid_url', 'grid_visible', 'grid_xdata', 'grid_ydata', 'grid_zorder', 'grid_aa', 'grid_c', 'grid_ds', 'grid_ls', 'grid_lw', 'grid_mec', 'grid_mew', 'grid_mfc', 'grid_mfcalt', 'grid_ms'] df도 제대로 정의 했고missingno도 잘 깔린 것 같은데 왜이러는건가요??
-
미해결PHP 개발자의 최종 테크트리, 라라벨 강의
강사님 깃허브 폴더를 연결하고 싶습니다.
예전에 수강을 완료 했고 복습을 하려고 하는데 안되는게 있어 질문 드립니다.curl -s https://laravel.build/example-app | bash명령어를 이용하여 최신버전인 10버전을 설치하고 도커까지 연결해서 라라벨은 실행 하면 잘 됩니다.하지만 강사님 깃허브 자료를 받아서 실습했던 파일을 실행하려고 하니까 안되네요. 우분투에서 폴더 복사를 해서 폴더를 가져왔습니다.여기서 실행을 하면 아래와 같이 나옵니다.vendor 폴더 자체가 없던데 구동이 되기 위해 필요한 라이브러리들을 설치하고 실행하려면 어떻게 해야 할까요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
외래키 중복 관련 질문
import com.example.banking.domain.user.User import com.example.banking.support.BaseEntity import jakarta.persistence.Entity import jakarta.persistence.FetchType import jakarta.persistence.JoinColumn import jakarta.persistence.ManyToOne @Entity class Account( var balance: Double, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") val user: User, id: Long = 0 ) : BaseEntity(id) { fun addAccount(user: User) { user.accounts.add(this) } fun addBalance(amount: Double) { balance += amount } fun subtractBalance(amount: Double) { balance -= amount } }import com.example.banking.domain.account.Account import com.example.banking.support.BaseEntity import jakarta.persistence.* @Entity class Transaction( val amount: Double, @Enumerated(EnumType.STRING) val type: TransactionType, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn val sender: Account, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn val recipient: Account?, id: Long = 0L ) : BaseEntity(id) { constructor(amount: Double, type: TransactionType, sender: Account) : this(amount, type, sender, null) } import com.example.banking.domain.account.Account import com.example.banking.domain.user.User import com.example.banking.domain.user.UserInfo import com.example.banking.repository.account.AccountRepository import com.example.banking.repository.transaction.TransactionRepository import com.example.banking.repository.user.UserRepository import jakarta.persistence.EntityManager import jakarta.transaction.Transactional import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.annotation.Rollback @SpringBootTest @Transactional @Rollback(value = false) class TransactionTest( @Autowired private val em: EntityManager, @Autowired private val transactionRepository: TransactionRepository, @Autowired private val userRepository: UserRepository, @Autowired private val accountRepository: AccountRepository ) { @Test fun testTransaction() { val user1 = User(UserInfo("b", "Seoul", "123", "123")) val user2 = User(UserInfo("b2", "Seoul", "123", "123")) userRepository.save(user1) userRepository.save(user2) em.flush() em.clear() val account1 = Account(100.0, user1) val account2 = Account(100.0, user2) account1.addAccount(user1) account2.addAccount(user2) accountRepository.save(account1) accountRepository.save(account2) em.flush() em.clear() val sender = accountRepository.findById(account1.id).get() val recipient = accountRepository.findById(account2.id).get() val transaction = Transaction(50.0, TransactionType.TRANSFER, sender, recipient) transactionRepository.save(transaction) em.flush() em.clear() val transaction2 = Transaction(50.0, TransactionType.DEPOSIT, sender) transactionRepository.save(transaction2) // assertThat(sender.balance).isEqualTo(50.0) // assertThat(recipient.balance).isEqualTo(150.0) } } 위와같이 Transaction 엔티티와 Account 엔티티가 ManyToOne 으로 매핑되었을때, 테스트코드를 위와같이 작성시,transactionRepository.save(transaction2) 이 라인에서 Duplicate entry '97' for key 'transaction.UK_96vb4d846be64bta5qbxiicb1' 에러가 발생합니다.제가 알기론 외래키의 경우 중복된 값을 가지는것이 가능한것으로 알고 있는데, 같은 account id로 새로운 Transaction 을 생성할 시에 키가 중복이라는 에러가 발생하는데 왜 그런지 알고싶습니다. 코틀린으로 코드 작성한 점 양해부탁드립니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-B 정답코드에 대해 잘 이해가 안 됩니다.
https://www.acmicpc.net/source/share/c19e6a890efe4edcb2a98fedca33b37b안녕하세요. 4-b가 어려워 강의를 들었는데도 답지코드도 이해가 안되는 부분이 있어서 질문드립니다. 16번째 라인에 sum += min(cnt, n - cnt); 해당 부분이 이해가 잘 안 됩니다. cnt를 구하는 부분이나 n-cnt를 하는 부분은 열을 뒤집을지 말지를 결정하기 위해 필요한 값이라는 것은 알고 있습니다. 하지만 min(cnt, n-cnt)를 구하여 열을 뒤집을지말지를 결정해서 연산+1 을 하는 것이 아니라, 더한다는 의미가 어떤 것인지 잘 이해가 안 갑니다.또한 행을 뒤집으면 최적해가 이미 정해졌다는 것까지는 강의를 듣고 어렴풋이 알 것 같은데, 행을 뒤집는 연산에 대한 +1은 하지 않는지도 궁금합니다. (행을 두개 뒤집는다든지, 한 개 뒤집는다든지,, 등) min(cnt, n-cnt)를 더하는 것이 행과 열의 연산을 모두 포함하는 것 같기도 한데 원리(?)에 대해 이해하기가 어렵습니다. 도와주세요!!
-
미해결F6-비전공자·일반인을 위한 기업재무회계의 이해와 활용
강의자료 요청드립니다
강의 잘 시청하고 있습니다. 좋은 강의 감사드립니다.강의 자료를 요청드립니다. drju0624@gmail.com
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
회원조회 API 버전1 포스트맨에서 could not get response
아래의 코드대로 회원 조회 API를 버전1 과 버전2를 수행하는데, 버전2의 경우는 응답이 잘 받아지는데 버전1은 error: abort 가 뜹니다. /* * 회원 조회 * */ @GetMapping("/api/v1/members") public List<Member> membersV1(){ return memberService.findMembers(); } @GetMapping("/api/v2/members") public Result membersV2(){ List<Member> findMembers = memberService.findMembers(); List<MemberDto> collect = findMembers.stream() .map(m -> new MemberDto(m.getName())) .collect(Collectors.toList()); // 스트림의 처리 결과를 리스트 형태로 수집 return new Result(collect); // Result 클래스를 통해 List<MemberDto>를 반환 }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemoryMemberRepository와 MemberService의 차이는 무엇인가요?
이 둘은 비슷한 메서드를 구현한다고 느껴집니다.(save=join) 왜 이런 구조로 작성하나요?
-
미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
맵 예제 코드가 바이러스 검사에 걸려요
if _, ok := map12["kiwi"]; !ok { fmt.Println("ex7 : kiwi is not exist!") }visual studio code 1.86.2에디션 Windows 10 Pro버전 22H2설치 날짜 2023-10-09OS 빌드 19045.4046경험 Windows Feature Experience Pack 1000.19053.1000.0 이 버전에서 Map 기초 수업의 예제 코드가 바이러스 체크에 걸립니다..!굉장히 흥미로운 현상인데, 같은 현상을 겪으시는 분이 있으신가요?왜 그런 것일까요? 최대한 문제의 소스코드만 발라내보려고 했는데, 코드가 조금 덜어지면 디펜더에 안걸리네요... 신기하네요... 메모리 침범이라도 되나...// 자료형 맵 package main import "fmt" func main() { // 맵 (Map) // 해시테이블, 딕셔너리(파이썬) // Key-Value로 자료 저장 // 레퍼런스 타입 (참조값 전달) // 비교 연산자 사용 불가능 (참조 타입이므로) // 참조 타입으로는 Key에 사용 불가. Value로는 모든 타입 가능 // make 함수 및 축약 (리터럴) 로 초기화 가능 // 순서 없음 // 예제 1 var map1 map[string]int = make(map[string]int) // 정석 var map2 = make(map[string]int) // 자료형 생략 map3 := make(map[string]int) // 리터럴형 fmt.Println("ex1 : ", map1) fmt.Println("ex1 : ", map2) fmt.Println("ex1 : ", map3) fmt.Println() // 예제 2 map4 := map[string]int{} // Json 형태 map4["apple"] = 25 map4["banana"] = 40 map4["orange"] = 33 map5 := map[string]int{ "apple": 15, "banana": 40, "orange": 23, } map6 := make(map[string]int, 10) map6["apple"] = 25 map6["banana"] = 40 map6["orange"] = 33 fmt.Println("ex2 : ", map4) fmt.Println("ex2 : ", map5) fmt.Println("ex2 : ", map6) fmt.Println("ex2 : ", map6["orange"]) fmt.Println("ex2 : ", map6["apple"]) // 예제 3 맵 조회 및 순회 (Iterator) map11 := map[string]string{ "daum": "http://daum.net", "naver": "http://naver.com", "google": "http://google.com", } fmt.Println("ex3 : ", map11["google"]) fmt.Println("ex3 : ", map11["daum"]) fmt.Println() // 예제 4 순서 없으므로 랜덤 for k, v := range map11 { fmt.Println("ex4 : ", k, v) } for k, v := range map11 { // 실행 중에도 순서 보장 X fmt.Println("ex4 : ", k, v) } for _, v := range map11 { // 스킵 가능 fmt.Println("ex4 : ", v) } fmt.Println() // 예제 5 맵 값 변경 및 삭제 fmt.Println("ex5 : ", map11) map11["home"] = "localhost" // 없을 때 추가 fmt.Println("ex5 : ", map11) map11["home"] = "http://test.com" // 있을 때 수정 fmt.Println("ex5 : ", map11) delete(map11, "home") // 삭제 fmt.Println("ex5 : ", map11) // 예제 6 맵 조회할 경우의 주의 및 팁 map12 := map[string]int{ "apple": 15, "banana": 115, "orange": 1115, "lemon": 0, } value1 := map12["lemon"] value2 := map12["kiwi"] // 존재 X. 변수형 기본값 int 0, string "", float 0.0 value3, ok1 := map12["kiwi"] // 키값 존재를 확인하기 위해 true, false value4, ok2 := map12["lemon"] // 두번째 리턴값으로 키값 존재 확인 fmt.Println("ex6 : ", value1) fmt.Println("ex6 : ", value2) fmt.Println("ex6 : ", value3, ok1) fmt.Println("ex6 : ", value4, ok2) // 예제 7 if value, ok := map12["kiwi"]; ok { fmt.Println("ex7 : ", value) } else { fmt.Println("ex7 : kiwi is not exist!") } if value, ok := map12["banana"]; ok { fmt.Println("ex7 : ", value) } else { fmt.Println("ex7 : banana is not exist!") } if _, ok := map12["kiwi"]; !ok { // _ 사용 가능, 키값 없을 때 예외 처리할 때 많이 사용 fmt.Println("ex7 : kiwi is not exist!") } // ??? 윈도우 디펜더에서 바이러스 있어보인다고 막네요 ??? }
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
mysql프로젝트 관련 크롤링 질문
https://davelee-fun.github.io/ 이 사이트 크롤링을 1번 사진처럼 4파트로 분리해서 크롤링후 2번 사진 처럼 만들어놓은 DB 테이블에 insert하는 코드를 작성해보았는데, (3번사진) 크롤링부분에서 잘못된건지 코드가 잘 돌아가지 않습니다. 혹시 어느부분이 잘못됬는지 알수있을까요?import requests from bs4 import BeautifulSoup import re pg=1 if pg==1: #1페이지 크롤링시 res = requests.get('https://davelee-fun.github.io/') #웹사이트 get request 1페이지 soup = BeautifulSoup(res.content, 'html.parser') #html 파싱 items = soup.select('div.card h') product_id=17890001 #promary key 임의설정 page_num=pg for item in items: recom_info=item.select_one('a.text-dark') #추천 product_name=item.select_one('h4.card-text') #상품명 provider=item.select_one('a[target="_blank"]') #제공자 -> teddy register_date=item.select_one('span.post-date') #등록일자 -> 05 jun 2020 SQL = """INSERT INTO product_info VALUES('"""+product_id+"""', '""" + str(recom_info.get_text()) + """','""" + str(product_name.get_text()) + """','""" + str(provider.get_text()) + """', '""" + str(register_date.get_text()) + """','""" +page_num+ """'); """ print(SQL) cursor.execute(SQL)우선 1페이지를 크롤링한 값을 넣어보려고 했습니다.
-
해결됨
스프링 DB1편 update 메소드 질문
public void update(String memberId, int money){ String sql = "update member set money = ? where member_id=?"; Connection con = null; PreparedStatement psmt = null; try { con = getConnection(); psmt = con.prepareStatement(sql); psmt.setInt(1,money); psmt.setString(2,memberId); int result = psmt.executeUpdate(); log.info("result size={}",result); } catch (SQLException e) { throw exTranslator.translate("update",sql,e); }finally { close(con,psmt,null); } }save() , findById() 처럼 Member객체를 반환하지않는 이유가 궁금합니다.int update()로 1,0으로 정상 비정상을 확인하는 방법도 있나요 ?아니면 Member update()로 코드를 짜볼수도있을까요 ? 위의 방식으로update()에서 업데이트가 잘되었는지 리턴값으로 확인하고싶을때는 어떤식으로 해야하나요 ?제대로 된 질문인지는 잘 모르겠네요 ㅠㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence.xml 의 필요성
스프링 DB 2편 강의에서는 jpa를 사용할 때 프로젝트에 따로 persistence.xml을 설정해주지 않았는데 이번 강의에서는 persistence.xml이 없으면 jpa가 제대로 동작하지 않는다고 하셔서 그 이유가 궁금합니다.이전 강의에서는 전부 설정을 gradle로 했는데 이번 강의에서는 maven을 사용해서 그런건가요, 아니면 강의 초반에 스프링이 개입되지 않은 순수 자바로만 jpa 프로젝트를 진행한다고 하신 그 이유 때문인가요? 항상 강의 강의 잘 듣고있습니다. 감사합니다!