묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
돌아왔습니다..
개발에 대하여 더 깊이 학습하고자 김영한님 스프링MVC강의를 듣는 도중에 HTTP에 대한 지식이 너무 부족하다 느껴서 듣던 스프링mvc 강의를 멈추고 이번 강의부터 시작하여 HTTP에 대한 이해를 더 높이고 스프링MVC강의를 다시 들으려 합니다 ! 화이팅
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
test 오류 질문
test 부분 실습하면서 코드를 그대로 작성했는데 계속 같은 오류가 뜹니다...! 코드는 똑같이 적어서도 했고 복사 후 붙여넣기도 해 봤는데 안 돼서 문의 드립니다!! 아마 get 부분에서 계속 오류가 나는 것 같습니다
-
미해결비전공 기획자 및 관리자를 위한 IT 필수 지식
강의 자료 요청
강사님, 안녕하세요. 강의자료 요청 드립니다. 아래 메일로 공유 부탁드립니다! goonee265@naver.com
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
쿼리빌더 사용과 조인과 셀렉트에 관련된 질문입니다.
안녕하세요 조현영님. 이번에는 쿼리빌더로 원하는 데이터를 얻기 위해 조인과 셀렉트 과정에서 오류가 발생하여 질문드립니다. 일단 질문을 드리기 전에 제 상황에 대한 사전지식이 필요하기 때문에 코드를 같이 보여드리겠습니다. @Entity("users") export class UserEntity extends CommonEntity { @OneToOne(() => UserProfileEntity, (common) => common.id) @JoinColumn({ name: "commonId", referencedColumnName: "id" }) profile: UserProfileEntity; @OneToOne(() => UserAuthEntity, (auth) => auth.id) @JoinColumn({ name: "authId", referencedColumnName: "id" }) auth: UserAuthEntity; @OneToOne(() => UserActivityEntity, (activity) => activity.id) @JoinColumn({ name: "activityId", referencedColumnName: "id" }) activity: UserActivityEntity; } 사용자에 관련된 엔티티입니다. 사용자와 관련된 컬럼들은 세부적으로 엔티티를 나눈 다음 그 엔티티안에 정의 해두었습니다. 사용자 엔티티에는 프로필, 인증, 활동 엔티티의 아이디만 존재합니다. 아래에는 사용자 엔티티에게 상속을 해주는 CommonEntity입니다. export abstract class CommonEntity { @IsUUID() @PrimaryGeneratedColumn("uuid") id: string; @CreateDateColumn({ type: "timestamp" }) createdAt: Date; @UpdateDateColumn({ type: "timestamp" }) updatedAt: Date; @DeleteDateColumn({ type: "timestamp" }) deletedAt: Date | null; } 아래에는 각각 프로필, 인증, 활동 엔티티의 대한 코드입니다. @Entity("users profile") export class UserProfileEntity { @PrimaryGeneratedColumn("uuid") id: string; @IsString() @IsNotEmpty() @Column({ type: "varchar", length: 20, nullable: false }) realname: string; @IsDateString() @IsNotEmpty() @Column({ type: "date", nullable: false }) birth: Date; @IsEnum(["male", "female"]) @IsNotEmpty() @Column({ type: "enum", enum: ["male", "female"] }) gender: "male" | "female"; @IsMobilePhone() @IsNotEmpty() @Column({ type: "varchar", length: 15, unique: true, nullable: false }) phonenumber: string; @OneToOne(() => UserEntity) user: UserEntity; } @Entity("users auth") export class UserAuthEntity { @PrimaryGeneratedColumn("uuid") id: string; @IsString() @IsNotEmpty() @Column({ type: "varchar", length: 20, unique: true, nullable: false }) nickname: string; @IsEmail() @IsNotEmpty() @Column({ type: "varchar", length: 60, unique: true, nullable: false }) email: string; @IsString() @IsNotEmpty() @Matches(/^[A-Za-z\d!@#$%^&*()]{8,30}$/) @Column({ type: "varchar", nullable: false }) password: string; @Column({ type: "enum", enum: ["general", "special", "admin"], default: "general", }) userType: "general" | "special" | "admin"; @OneToOne(() => UserEntity) user: UserEntity; @OneToMany(() => ImagesEntity, (join) => join.uploader) image: ImagesEntity[]; } @Entity("users activity") export class UserActivityEntity { @PrimaryGeneratedColumn("uuid") id: string; @Column({ type: "smallint", default: 0 }) bonusPoint: number; @Column({ type: "smallint", default: 0 }) purchaseCount: number; @Column({ type: "smallint", default: 0 }) productInquiryCount: number; @Column({ type: "smallint", default: 0 }) productReviewCount: number; @OneToOne(() => UserEntity) user: UserEntity; @OneToMany(() => ReviewEntity, (review) => review.reviewer) review: ReviewEntity; } 이런식으로 한 사용자 엔티티에는 프로필, 인증, 활등 에 대한 엔티티와 1:1 관계를 설정 해 두었습니다. 그리고 이제 특정 사용자에 대한 정보를 가져올 때 사용되는 메서드입니다. async findUserWithId(userId: string): Promise<UserEntity> { try { return await this.userRepository .createQueryBuilder("user") .innerJoinAndSelect("user.profile", "profile") .innerJoinAndSelect("user.auth", "auth") .innerJoinAndSelect("user.activity", "activity") .where("user.id = :id", { id: userId }) .getOneOrFail(); } catch (err) { throw new UnauthorizedException("해당 사용자아이디는 존재하지 않습니다."); } } userId 매개변수는 CommenEntity에서 상속된 id컬럼을 사용합니다. 즉 사용자 엔티티 id라고 보시면 됩니다. userRepository또한 아래처럼 사용자 엔티티의 리파지토리입니다. @InjectRepository(UserEntity) private readonly userRepository: Repository<UserEntity> 이제 본격적으로 문제에 관련된 질문을 드리자면 innerJoinAndSelect를 사용할 시 관계가 맺어진 엔티티들의 정보들을 모두 가져오게 되어서 노출이 되어서는 안될 비밀번호등 까지 보여지게 됩니다. 그래서 저는 innerJoinAndSelect대신 innerJoin으로 관계가 맺어진 엔티티들을 조인하고 select메서드로 원하는 컬럼만 선택하려했습니다. async findUserWithId(userId: string): Promise<UserEntity> { try { return await this.userRepository .createQueryBuilder("user") .select(this.select.UserInformationReturnProperty) .innerJoin("user.profile", "profile") .inneroin("user.auth", "auth") .innerJoin("user.activity", "activity") .where("user.id = :id", { id: userId }) .getOneOrFail(); } catch (err) { throw new UnauthorizedException("해당 사용자아이디는 존재하지 않습니다."); } } select안에 인수는 아래와 같습니다. UserInformationReturnProperty: [ "profile.realname", "auth.nickname", "profile.birth", "profile.gender", "auth.email", "profile.phonenumber", "auth.userType", "activity.purchaseCount", "activity.bonusPoint", "activity.productInquiryCount", "activity.productReviewCount", ] 이렇게 보여줘도 상관없을 만한 정보들로 구성하였습니다. 문제는 이렇게 하고 쿼리를 돌렸을 때 'EntityNotFoundError: Could not find any entity of type "UserEntity" matching: [object Object]'이런 오류가 납니다. 해석해보면 '일치하는 "UserEntity" 유형의 엔터티를 찾을 수 없음' 이런 뜻인거 같은데 분명히 리파지토리도 UserEntity이고 select 대신 innerJoinAndSelect를 하면 정상적으로 불러와 지는데 어떤 부분이 잘못된건지 모르겠어서 질문드립니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
col-sm-12 태그에서 post_card 와 timeline_sidebar 가 가로로 정렬이 되지 않습니다
안녕하십니까 :) 유익한 수업 잘 듣고 있습니다! django templates 관련해서 index.html 태그와 timeline_sidebar.html 에서 코드가 동일한데 좌 우가 아닌 위 아래로 배치가 되고 있어요. (하단의 그림 1) 1. 검사와 html 태그와의 차이점(이상하다고 느낀 점) index.html 에서는 row 태그 안에 col-sm-8 과 col-sm-4 태그를 넣어서 배치했는데, 실제 웹에서 보면 col-sm-4 코드가 바깥으로 나온 것으로 보여집니다. include 를 해서 그런것인지, 그리드를 잘못 활용한 것인지 이유와 해결책이 궁금합니다! (그림 1)
-
미해결스프링 핵심 원리 - 고급편
추상클래스의 메서드를 포인트컷으로 잡을 수 없나요?
안녕하세요. AOP 포인트컷 관련 테스트를하다가 제가 잘 모르는 부분이 있어서 질문을 드립니다. 인터페이스에서 구체클래스의 내부메서드를 포인트컷으로 잡지 못하는것은 이해가 잘되는데요. 구체클래스(자식클래스)에서 부모클래스를 잡을 수 있을것이라고 생각했는데테스트해보니, 제 의도와 다른결과가 나오더라고요. 프록시는 프록시 클래스의 메서드(직접 정의했거나 Override)만 대상이 되나요? 어떤부분,키워드로 이해를 위한, 부족한 지식을 보완할 수 수 있을까요..?강의에 언급되었는데 제가 놓쳤다면, 그 부분을 알려주시면 다시 보도록 하겠습니다. 감사합니다. --- 샘플코드: https://github.com/seolys/spring-aop-pointcut-oop- 테스트코드로 작성하였습니다: 테스트코드 경로
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 될까요??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 import sys sys.stdin=open("pythonalgorithm/섹션 2/9. 주사위 게임/in1.txt", "rt") n=int(input()) tot=[] for _ in range(n): tmp=list(map(int,input().split())) tmp.sort() a, b, c = tmp if a==b==c: tot.append(10000+a*1000) elif a==b or a==c: tot.append(1000+a*100) elif b==c: tot.append(1000+b*100) else: tot.append(c*100) print(max(tot)) 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
노드 버전에 따른 패키지 버전 관련하여 궁금합니다.
선생님 안녕하세요, 좋은 강의 잘 듣고있습니다. 다름이 아니라 노드 버전에 따른 패키지 버전 관련하여 궁금합니다. 예를 들어 예전 노드 버전에서 최신 express 패키지를 사용하면 문제가 있을 수 있는 것처럼 해당 노드 버전에 맞는 패키지 버전을 알 수 있는 npm 명령어 또는 사이트가 있는지 궁금합니다. 구글링을 해봤는데, 잘 안나오네요... ㅠㅠ 혹시 알고 계시다면 답변 부탁드리겠습니다. 강의랑 책 모두 잘 보고있습니다. 감사합니다 :)
-
미해결스파크 머신러닝 완벽 가이드 - Part 1
databricks 클러스터 생성하는 데 오류가 생깁니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 2주가 지나서 구글 계정 하나를 다시 생성해서 회원 가입 후 클러스터를 생성해보려 하는 데 backend service unavailable이라는 에러가 뜨면서 생성이 안됩니다. 왜 이러는 걸까요?
-
미해결실전! 스프링 데이터 JPA
컬렉션 페치조인 batch size 활용 후 두개이상의 depth의 toOne 관계 lazy loading 시 join 이나 한방쿼리 활용방법 질문
안녕하세요! 개인 프로젝트 중 만난 상황에 대해 질문이 있습니다! 컬렉션 페치조인, 페이징 처리시, batch size 를 활용하여 최적화를 진행 중입니다. 위와 같은 erd 에서 아티클을 페이징 조회 하면서 프로필, 태그 목록 까지 조회하고 싶습니다. 이때 아티클당 작성자의 프로필은 toOne 관계 이기 때문에 fetch join을 활용 하여 진행할 수 있었습니다. 이후에 프록시로 조회된 아티클 태그를 batch Size 를 이용해 n+1 문제 없이 조회하고 아티클 태그 에서는 태그를 조회해서 아티클->아티클태그->태그의 연관을 땡겨 올 수 있습니다. 결국 총 3회의 쿼리가 발생하는데 아티클 태그, 태그를 조회하는 추가 쿼리를 join 이나 where 절을 사용해 한방 쿼리로 묶을 수 있는 방법이 있는지 궁금합니다. @Override public List<ArticleJpaEntity> searchArticle(long offset, long limit) { //쿼리 1 List<ArticleJpaEntity> articles = query .selectFrom(articleJpaEntity) .distinct() .join(articleJpaEntity.authorProfile, profileJpaEntity).fetchJoin() .offset(offset) .limit(limit) .fetch(); //아티클 -> 아티클 태그 -> 태그의 lazy loading : 쿼리 2, 쿼리 3 /* ArticlJpaEntity 의 메서드 public List<String> getTagList() { //쿼리 2: 아티클 -> 아티클 태그 레이지 로딩 발생 return articleTags.stream() //쿼리 3 : 아티클 태그 -> 태그의 레이지 로딩 발생 .map(ArticleTagJpaEntity::getTagName).collect(toList()); } */ //조회된 아티클을 돌며 수동 레이지 로딩 - batch size 로 n+1 방지 for (ArticleJpaEntity article : articles) { article.getTagList(); } return articles; } querydsl 을 활용하였고 활용한 코드는 위와 같습니다. 발생한 쿼리를 요약하면 아래와 같습니다. 쿼리 1 select distinct a.*, p.* from article a inner join profile p on a.author_profile_id = p.id limit 20 쿼리 2 select at.* from article_tag at where at.article_id in (7, 8, 9) 쿼리 3 select t.* from tag t where t.id in (16, 17, 18) 참고로 전체 데이터는 아래와 같습니다. insert into profile (bio, image, user_id, username, id) values ('user1bio', 'user1image', 1, 'user1', 4); insert into profile (bio, image, user_id, username, id) values ('user2bio', 'user2image', 2, 'user2', 5); insert into profile (bio, image, user_id, username, id) values ('user3bio', 'user3image', 3, 'user3', 6); insert into article (author_profile_id, body, created_at, description, slug, title, updated_at, id) values (4, 'article7body', '2022-07-11 22:42:43', 'article7desc', 'article7slug', 'article7title', NULL, 7); insert into article (author_profile_id, body, created_at, description, slug, title, updated_at, id) values (5, 'article8body', '2022-07-11 22:42:43', 'article8desc', 'article8slug', 'article8title', NULL, 8); insert into article (author_profile_id, body, created_at, description, slug, title, updated_at, id) values (6, 'article9body', '2022-07-11 22:42:43', 'article9desc', 'article9slug', 'article9title', NULL, 9); -- 태그 16, 17, 18 insert into tag (name, id) values ('tag16', 16); insert into tag (name, id) values ('tag17', 17); insert into tag (name, id) values ('tag18', 18); -- 아티클 7 -> 아티클 태그 19 -> 태그 16 - tag16 -- 아티클 8 -> 아티클 태그 20 -> 태그 16 - tag16 -- 아티클 8 -> 아티클 태그 21 -> 태그 17 - tag17 -- 아티클 9 -> 아티클 태그 22 -> 태그 16 - tag16 -- 아티클 9 -> 아티클 태그 23 -> 태그 17 - tag17 -- 아티클 9 -> 아티클 태그 24 -> 태그 18 - tag18 insert into article_tag (article_id, tag_id, id) values (7, 16, 19); insert into article_tag (article_id, tag_id, id) values (8, 16, 20); insert into article_tag (article_id, tag_id, id) values (8, 17, 21); insert into article_tag (article_id, tag_id, id) values (9, 16, 22); insert into article_tag (article_id, tag_id, id) values (9, 17, 23); insert into article_tag (article_id, tag_id, id) values (9, 18, 24); === 요약 - 쿼리 2와 쿼리 3을 한방 처리 할 수 있나요??
-
미해결[엔트리] 코딩능력마스터 2급 자격증 강의
기출문제
기출문제는 어디서 다운받나요?
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "실전편"
unref 질문이요
unref(params) 로 파라메터를 넘기는데 애초에 List에서 params.value를 넘겨도 동작에는 문제가 안생기는데요 unref 를 사용하는 목적이 궁급합니다.
-
미해결앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정)
해당 강의에 Life Cycle 선택란이 안보이시면 그냥 넘어가세요 😉
자유주제에도 올렸지만 바로 처음 보이는게 질문 탭이라 여기도 올립니다! Life Cycle 선택란이 2022년 현재는 Xcode의 업데이트로 이젠 사라진듯 하네요. 슬랙 질문방 찾아보니 강사님이 그냥 넘어가도 문제 없다고 답변하신게 있습니다. 혹시나 저 처럼 앱 만들기 시작부터 당황하시는분들 있을텐데 슬랙에 뭔가 물어보긴 너무 가벼운거 같기도 하고 고민하실 분들 계실까봐 여기 글 올려요 🙂
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
안녕하세요 리덕스 질문 하나 해도 될까요?
안녕하세요 리덕스에서 action시 데이터를 수정하고 싶은데 변경하지 않는 값은 ...기본값, 수정값 : 값 이러는 걸로 알고 있습니다, 혹시 맨밑 사진처럼 할려면 코드를 어떻게 짜야할까요?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Penguin 클래스의 legCount getter를 override 할 때 질문 있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강의 정말 잘 듣고 있습니다! 여기서 Penguin 클래스의 인스턴스를 만들고 getter를 사용해봤더니 오류가 납니다. override val legCount를 public override val legCount로 변경해주어야 조회가 가능했습니다. Animal 추상 클래스를 만들 때 legCount 프로퍼티의 getter가 protected로 만들어져서 Penguin 클래스에서 오버라이드 했을 때도 protected로 만들어져서 그런건가요?
-
미해결Three.js로 시작하는 3D 인터랙티브 웹
WebGLRenderer
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. WebGLRenderer 과 WebGL1Renderer 차이가 무엇인가요 ? threejs.org 에서 r118이후 WebGLRenderer 는 WebGL 2 렌더링 컨텍스트 사용한다고 적혀있는데 WebGL1Renderer은 어떤것이 다른지 궁금해서 여쭙습니다
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
모델 관련해서 질문이 있습니다.
안녕하세요 강사님! 개인프로젝트를 만들고 있는데 실례가 안된다면 간단한 질문드려도 될까요?? 제가 프로젝트에서 신고기능을 만들고 있는데요, 모델을 이렇게 만드는게 맞는지 모르겠어서 여쭤봅니다.. 신고기능은 유저신고, 댓글신고, 대댓글 신고가 있습니다. user, comment, recooment모두 외래키로 받아와야 해서 아래 캡쳐사진과 같이 다 따로 작성했는데요 코드 중복이 너무 많이 있는 것 같아서 이게 맞는지 모르겠습니다..! 코드중복 문제 때문에 제가 생각한 다른 방법은 Report라는 모델을 만들고 거기에 신고대상인 user, comment, recomment 필드를 만들어서 user가 신고되었을 경우엔 나머지 필드를 null로 처리해주는 방법을 생각했습니다. 혹시 이 방법 외에도 다른 좋은 방법이 있을까요? 추가적으로 캡쳐사진처럼 모델을 다 나눠서 적는게 보통 개발하는 방법인가요? 개인프로젝트인데 질문드려 죄송하고 감사합니다ㅠㅠ
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
RetinaNet 실습
안녕하세요 강사님 RetinaNet 강의를 열심히 듣다가 이론듣고 실습으로 넘어간다고 했는데 실습이 없어서요 RetinaNet 실습부분은 어디서 참조 할 수있을까요?
-
미해결Vue.js 끝장내기 - 실무에 필요한 모든 것
incompatible architecture (have 'arm64', need 'x86_64')) 에러 : 해결
/vue-til-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')) 이라는 에러 메시지가 나와서 검색해보니 npm i canvas --save 이것 설치하라해서 설치했더니 서버 동작하였습니다
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
9.5.1 스스로 해보기
해당 스스로 해보기에 대한 정보는 어디에서 확인할수 있나요? 개정판기준으로 된것을 찾고있는데 없어서 질문드려요.