묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
빈 등록 과정 질문입니다.
안녕하세요빈 수동등록과 자동등록 과정에 대해서 질문드립니다.챕터 4번째인 스프링 컨테이너와 스프링 빈 편의 교재에 나와있는 참고사항에서 궁금한 점이 생겼습니다.참고 : 스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다. 그런데 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리된다. 여기서는 이해를 돕기 위해 개념적으로 나누어 설명했다. 자세한 내용은 의존관계 자동 주입에서 다시 설명하겠다. 용어에 대해서 궁금한 점이 있어요. 교재에 나와있는 빈의 생성은 빈의 등록과 같은 의미인가요?아니면 빈의 생성은 new키워드로 객체를 생성한다는 의미인가요..? 죄송합니다. 이 부분은 쓸 데 없는 질문이지만, 정확한 원리를 모르기 때문에 이러한 단어들의 차이 때문에 혼동이 오는 경우가 있어서요ㅠㅠ. 수동 빈 등록 시 원리가 궁금합니다.@Bean이 붙은 메서드에서 new 키워드로 객체를 생성하고, return이 되는 객체가 빈으로 등록되는 게 맞나요?자동 빈 등록 시 원리가 궁금합니다.@Component가 붙게 되면 해당 클래스 객체를 생성한 뒤에 그 인스턴스를 빈에 등록하는 것이 맞나요? 빈이 등록되는 데에는 순서가 있다고 배웠습니다.2번 질문에서 제가 여쭤본 것 처럼, 수동 등록은 @Bean이 붙은 메서드에서 자바코드로 의존관계를 주입하고 난 뒤에, return으로 반환되는 객체가 비로소 빈으로 등록되는 건가요? 그러면 교재에 나와있듯이, 의존관계 주입은 return하기 전, 즉 객체생성 시에 이뤄지는 건가요? 반면 @ComponentScan방법인 자동등록은 생성자주입일 때를 제외하면, 모든 방법들이 클래스가 우선 빈으로 등록되고 난 뒤에 의존관계 주입이 이뤄지는 것인가요? 그러니까 객체생성 후, 빈으로 등록이 되고, 의존관계는 그 이후에 의존관계가 주입이 되는건지요. 제가 이런 질문으로 확인하고 싶은 점은 스프링 컨테이너에 빈이 등록되는 정확한 시점을 알기 위함입니다. 수동 등록은 @configuration 클래스의 빈 메서드에서 의존관계를 수동으로 모두 설정 후에 return한 객체가 스프링 컨테이너에 빈으로서 올라가는 것인지.또자동 등록은 @Component가 붙은 클래스의 객체를 생성할 때, 생성자 주입이면 의존관계가 우선적으로 주입이 되고 스프링 컨테이너에 빈으로서 등록이 되는지.또한 @Component방법의 나머지 방법들은 객체의 인스턴스가 우선적으로 스프링 컨테이너에 빈으로서 등록이 되고 난 뒤에 의존관계주입이 일어나는지 그 시점들이 궁금합니다. 답변 부탁드립니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
함수형 인터페이스(전반전) 람다식 질문있습니다
convertUSD 전달값이 인터페이스 변수임에도 람다식으로 작동되는 이유가 궁금합니다 주석 밑에 코드는 람다식을 인터페이스 변수에 넣고 전달값으로 사용하는건 이해가 가는데 주석으로 되어있는 11번째 코드는 인터페이스 변수가 아닌 그냥 람다식을 붙여넣은건데 이게 인터페이스 convert 메소드인걸 어떻게 알았는지 모르겠네요convert메소드가 하나만있기에 찾아내서 정상작동된건가요?
-
미해결프론트엔드 개발환경의 이해와 실습 (webpack, babel, eslint..)
mode=production 빌드 시 문제 발생
안녕하세요, 원인을 도저히 모르겠어서 질문 남깁니다.mode를 production으로 했을 때만 아래 사진처럼 에러가 나는데요, 코드상에 문제가 있는지 한번 봐주실 수 있을까요?mode=development에서는 보시다시피 잘 나옵니다.아래는 소스코드입니다.package.json{ "name": "lecture-frontend-dev-env", "version": "1.0.0", "description": "\"프론트엔드 개발 환경의 이해\" 강의 자료입니다.", "main": ".eslintrc.js", "devDependencies": { "@babel/cli": "^7.21.0", "@babel/core": "^7.21.0", "@babel/preset-env": "^7.20.2", "babel-loader": "^9.1.2", "css-loader": "^6.7.3", "html-webpack-plugin": "^5.5.0", "mini-css-extract-plugin": "^2.7.2", "sass": "^1.58.3", "sass-loader": "^13.2.0", "style-loader": "^3.3.1", "webpack": "^5.75.0", "webpack-cli": "^5.0.1" }, "scripts": { "dev": "webpack --mode=development --config webpack.config.js", "build": "webpack --mode=production --config webpack.config.js" }, "repository": { "type": "git", "url": "git+https://github.com/jeonghwan-kim/lecture-frontend-dev-env.git" }, "keywords": [], "author": "", "license": "ISC", "bugs": { "url": "https://github.com/jeonghwan-kim/lecture-frontend-dev-env/issues" }, "homepage": "https://github.com/jeonghwan-kim/lecture-frontend-dev-env#readme", "dependencies": { "core-js": "^3.29.0" } }webpack.config.jsconst path = require("path"); const webpack = require("webpack"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); module.exports = (env, argv) => { const title = argv.mode === "development" ? "(개발용)" : ""; return { entry: { main: "./src/app.js", }, output: { filename: "[name].js", path: path.resolve(__dirname, "dist"), clean: true, }, module: { rules: [ { test: /\.s[ac]ss$/i, use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"], }, { test: /\.(png|svg|jpg|jpeg|gif)$/i, type: "asset", parser: { dataUrlCondition: { maxSize: 20 * 1024, // 20kb }, }, generator: { publicPath: "../dist/", }, }, { test: /\.js$/i, exclude: /node_modules/, use: { loader: "babel-loader", options: { configFile: path.resolve(__dirname, "babel.config.js") }, }, }, ], }, plugins: [ new webpack.BannerPlugin({ banner: `빌드 날짜: ${new Date().toLocaleString()}`, }), new HtmlWebpackPlugin({ template: "./src/index.html", templateParameters: { env: title }, }), new MiniCssExtractPlugin(), ], }; };babel.config.jsmodule.exports = { presets: [ [ "@babel/preset-env", { targets: { ie: 11 }, useBuiltIns: "usage", corejs: 3, }, ], ], };다른 폴더 및 파일은 건드리지 않았습니다.
-
미해결NEW!! 12시간 안에 끝내는 R 활용 데이터분석 / 시각화
8차시 텍스트데이터시각화하기 질문
자바 환경구축 및 힘든 코드는 게시판에 올려주신다고 하셨었는데 어디에 올려주셨는지 모르겠네요..그리고 제가 코드 일일이 쳐서 진행하던 와중에install_jdk 하니깐 amazon corretto setup이 뜨는 게 맞을 까요 선생님이랑 출력이 되는 내용이 달라서 궁금하네요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3 - D 어떤 부분이 잘못된 건지 봐주세요
http://boj.kr/a87bcdc8a73f4c8d8cc5e8f31aebfe75로직은 선생님과 동일한데요 자잘한 것 3 개만 바꿨습니다.in 함수 -> underOver 함수맵 초기화시 'J'인 경우 지훈이의 체크 배열[i][j] = 1선생님은 맵 초기화시 할당하지 않고 지훈이의 최단 거리를 돌리기 직전에 할당하셨어요.지훈이의 처음 좌표 tie(y, x)로 추출선생님은 새롭게 변수를 선언하고 초기화하셨어요.int y = q.front().first();int x = q.front().second();어떤 곳이 틀린 걸까요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
동시성 이슈 원인에 대해 질문드립니다.
안녕하세요. 강의 잘 듣고 있습니다. 4분 17초부터 동시성 이슈의 원인을 db select, update하는 과정이 순서가 보장되지 않아 생기는 문제라고 설명해주시는데요. 해당 관점에 더해서 "stock을 select하고 와서 quantity 변수를 수정할때도 메모리상에 read,update,write가 이루어질텐데 여기서도 스레드들이 메모리 접근 순서를 보장할수 없기때문에 이와 같은 동시성 이슈가 생긴다" 라는 생각도 맞을까요?답변부탁드립니다.감사합니다.
-
미해결팀 개발을 위한 Git, GitHub 입문
강의 자료 부탁드립니다!
how0332@naver.com강의자료 부탁드립니다..!
-
해결됨모두의 깃 & 깃허브
노션에 내용 정리
안녕하세요. 강민철 저자님. 저는 항상 공부한 것을 노션에 정리하여 올리고 있습니다. 그 가운데에 영상의 내용을 일부 캡쳐하여 정리하고 있습니다. 그 이유는 나중에 돌려보았을 때 더 이해하기 쉽도록 하는 이유입니다.현재 제 노션은 비공개로 다른 사람들에게 보이지 않지만 추후 공개로 돌리게 될 수도 있을 것 같습니다.영상의 내용 일부 화면을 캡쳐하여 정리하고 그것을 공개하는 것에 대해서 문제가 되는지. 그리고 문제가 된다면 어느 정도까지 허용이 가능한지 궁금합니다. 영상 잘 보겠습니다. 감사합니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Identity 생성 전략에서 em.persist(entity) 호출 시 동작 과정 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 강의를 듣다가 기본키 생성전략으로 IDENTITY를 사용했을 때, 동작 과정이 명확하게 이해되지 않아서 질문드립니다. 현재 제 생각에는em.persist(entity) 호출 -> pk값이 null인 상태로 1차 캐시에 저장(영속 엔티티) -> Insert 쿼리가 DB에 전달 -> DB에서 PK 값 생성 -> PK값을 조회해서 영속 엔티티에 적용하고, PK 값이 적용된 영속 엔티티가 스냅샷으로 사용됨.이런 과정으로 진행되는 것 같은데, 제가 생각한 과정이 맞는 지 질문드립니다..감사합니다.
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
passport.authenticate('local/kakao') 관련 질문
안녕하세요routes/auth.js에서 passport.authenticate('local' / 'kakao')로 로그인전략을 실행할 때auth.js에서는 local(), kakao()가 있는 passport/index.js를 require 한 적이 없는데도 실행되는 걸 보고 질문드립니다.passport 모듈 내에 passport폴더를 자동으로 인식하는 기능이 있는건가요?
-
미해결만들면서 배우는 프론트엔드 DO IT 코딩 (Next.js, Typescript)
수강기간 관련하여 질문 드립니다.
안녕하세요 강사님! 수강을 완료하고 개인적으로 플젝을 진행하며 복습을 하고있습니다.많은 도움이 되었고, 강의 내에 코드 짤 때의 깨알 꿀팁도 많아서코드 짜는 실력이 많이 늘었습니다. 다시 한 번 감사합니다. 지금 강의를 다시 들으며 머릿속을 정리하고 싶은데기간이 3주도 채 안남아있어서 혹시 연장이 가능할지 여쭤봅니다😥😥 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
라이브러리 인식?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]외부 라이브러리 인식이 잘 되지 않습니다. 여러가지 방법을 시도해봤더니.. 왼쪽 목록에서 build.gradle 오류표시가 사라지지않습니다....테스트와 http://localhost:8080 로 확인 하였으나 따로 오류 발생은 하지 않았습니다. 외부라이브러리만 인식이 안되는 것 같은데 이유를 알수있을까요?build.gradleplugins { id 'java' id 'org.springframework.boot' version '2.7.8' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'jpabook' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' developmentOnly 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } test { useJUnitPlatform() } 외부라이브러리 주소는 implementation("com.github.gavlyukovskiy:p6spy-spring-boot-starter:${version}") implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' 이거 두개 사용해 봤고 깃허브에 나온 버전 다른 것도 사용시 안됨요 memberRepositoryTestpackage jpabook.jpashop; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import ch.qos.logback.core.joran.conditional.IfAction; @RunWith(SpringRunner.class) //스프링과 관련된걸 테스트 할거야~ @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) //롤백안하고 커밋하는 것 public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("memberA"); //when Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); //then Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember).isEqualTo(member); System.out.println("findMember==member : "+ (findMember == member)); } }
-
미해결홍정모의 따라하며 배우는 C언어
조건문에 c == 'a' 대신에, c == 'a' | 'A' 를 하면 에러가 발생합니다
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int printfMenu() { printf("Enter the letter of your choice:\n"); printf("a. avengers "); printf("b. beep\n"); printf("c. count "); printf("d. quit\n"); } int selectA() { printf("Avengers assemble!\n"); } int selectB() { printf("\a"); } int selectC(){ int n; printf("Enter an integer:\n"); scanf("%d", &n); for (int i = 1; i <= n; i++) { printf("%d\n", i); } } int clearBuffer() { while (getchar() != '\n') continue; } int main() { char c; while (1) { printfMenu(); c = getchar(); printf("%c", c); if (c == 'a'|'A') { selectA(); } else if (c == 'b'|'B') { selectB(); } else if (c == 'c'|'C') { selectC(); } else if (c == 'd'|'D') { break; } else { printf("Wrong input. try again.\n"); } clearBuffer(); } return 0; }강의 전에 혼자 만들어본 코드인데요. 그 전에는 모든게 정상작동되었는데, 기존의 " if(c == 소문자알파벳)" 에서 " if(c == 소문자 | 대문자 )" 로 변경하면 scanf에 무엇을 입력하던지 if (c == 'a'|'A') 가 true가 되어 실행됩니다. c에 입력이 잘못들어가는지 F10으로 확인해보려고 printf("%c", c); 코드도 추가해서 찍어봤는데, c = 'B' 처럼 변수에 제대로 저장되어도, 조건문 if (c == 'a' | 'A')가 실행되네요. 제가 무엇을 잘못한건가요?? 어떻게 고칠수 있을까요 ?? 답변 부탁드리겠습니다 !
-
미해결MERN STACK 커뮤니티 : 시작부터 배포까지 알려주는 React
이미지 수정이 안되고 이전 이미지 경로가 안떠요 ㅜㅜ
(사진)
-
미해결[핵집] 2025 빅데이터 분석기사(필기)_과목 3~4
교안파일 부탁드립니다
3-4과목 파일 요청드립니다educom02@naver.com감사합니다
-
해결됨기출로 대비하는 개발자 전공면접 [CS 완전정복]
DB index 적용 column (1% and 99%)
안녕하세요.Column에 index를 생성할 때는 SELECT 횟수가 INSERT/UPDATE/DELET 연산보다 많고 column의 데이터 중복도가 낮으며 데이터 양이 많아야 효율적이다라는 것은 이해했습니다. 그렇기 때문에 남자 1% 와 여자 99%인 column에서는 index를 생성하면 안된다는 것도 이해했습니다.그러다가 만약 "1%와 99%인 column에서 조회만 발생하는데 비즈니스 요구사항에 따라 1%에 대해서만 조회가 일어나면 index를 생성하여도 되는가?"에 대해서 의문이 생겼습니다.예를 들어 1이 백만개가 있고 2가 1개 있으며 조회가 굉장히 많이 일어나는데 어떠한 경우에서도 2에 대해서만 조회가 발생한다고 한다고 가정했을 때 index를 생성하지 않으면 백만하고도 한 번의 탐색을 해야 합니다. 하지만 index를 하면 한 번의 탐색으로 조회를 완료할 수 있습니다. 이럴 경우에는 index를 생성하는 것이 더 효율적일 수도 있나요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
drift설치 관련 질문드립니다.
pubspec.yaml에서 drift패키지를 설치하다가 Because every version of flutter_test from sdk depends on path 1.8.2 and calendar_schedular depends on path ^1.8.3, flutter_test from sdk is forbidden. 이런 오류가났습니다.질문글에서 저와 비슷한경우를 확인하고 저도 flutter upgrade를 했는데도 같은 오류가 났어요.검색을 해보니 path의 버젼을 낮추라고 해서 drift docs에 있는 1.8.3버젼대신 1.8.2버전으로 pubget을 하니 오류없이 잘 설치되었습니다. 제가 궁금한점은 flutter가 최신버전인데도 왜 path의 최신버전을 깔수없는걸까요?
-
미해결스프링 시큐리티
쿠키의 단점을 보완한 세션
쿠키 값을 변조 가능, → 예상 불가능한 복잡한 세션Id를 사용한다.-> 그런데 세션도 변조가능한거아닌가요? 그냥 더 예상이 불가능하다는건가요? 쿠키값도 랜덤값을 사용한다고 알고있어서요... 쿠키에 보관하는 정보는 클라이언트 해킹시 털릴 가능성이 있다. → 세션Id가 털려도 여기에는 중요한 정보가 없다.-> 쿠키에 보관하는 정보는 보통 그럼 중요한 정보를 보관하는건가요..? 왜 중요한 정보를 보관하는거죠 털릴수도있는데..
-
미해결스프링 시큐리티
쿠키가 세션보다 보안에 취약한 이유가 뭔가요?
쿠키가 세션보다 보안에 취약한 이유가 잘 이해가 가지 않습니다1. 쿠키가 세션보다 더 털릴 가능성이 높아서인가요?근데 세션도 결국 쿠키의 형태로 로컬에 저장되잖아요!2. 그리고 chatgpt에게 물어보니 쿠키는 클라가 변경할 수 있는데 세션은 변경을 못한다고 합니다. 세션이더라도 다른사람의 세션id값을 탈취할 수만있다면 헤더값만 변경하면 클라가 변경할 수 있게 되는거잖아요.그래서 챗지피티가 한말이 이해가 잘안가네요.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
get body
http method를 GET으로 설정했을 경우 파라미터로만 보내는 것이 일반적인가요? Body에 json 등을 통하여 전달하는 방식은 post method에서 적용하는 게 맞나요?