묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
원하는대로 DB에 저장이 안됩니다.ㅠㅠ 어느 부분을 잘못한 것일까요?
@Entity@Getter@Setter@ToStringpublic class Item { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "item_id") private Long id; //아이템 고유번호 @Column(name = "sentence_info") private String sentenceInfo; //문장 정보 @ManyToOne(fetch = LAZY) @JoinColumn(name = "member_id") private Member member; public static Item createItem(Item itemList, Member member) {Item item = new Item(); item.setMember(member); item.setSentenceInfo(itemList.sentenceInfo); return item; }} @Entity@Getter@Setter@ToStringpublic class Member { @Id// @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "member_id") private String memberId; //회원 아이디 private String name; //회원이름 private String email; //이메일 @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, fetch = LAZY) private List<Item> itemList = new ArrayList<>(); //== 연관관계 편의 메서드==// public void setItems(Item item) { itemList.add(item); item.setMember(this); } //==회원가입 ==// public static Member createMember(MemberForm memberForm) { Member member = new Member(); String password = passwordEncoder.encode(memberForm.getPassword()); member.setMemberId(memberForm.getMemberId()); member.setName(memberForm.getName()); member.setEmail(memberForm.getEmail()); return member; }} @Getter@Setter@ToStringpublic class MemberForm { @NotEmpty(message = "아이디는 필수 입력 값입니다.") private String memberId; @NotEmpty(message = "이름은 필수 값 입니다.") private String name; @NotEmpty(message = "이메일은 필수 입력 값입니다.") @Email(message = "이메일 형식에 맞지 않습니다.") private String email;} 위와같이 설정을 하고 @Controller@RequiredArgsConstructorpublic class MemberController { private final MemberService memberService; /** * 회원가입 폼 호출 * * @param model * @return */ @GetMapping("/members/new") public String createForm(Model model) { model.addAttribute("memberForm", new MemberForm()); return "members/createMemberForm"; } /** * 회원가입 * * @param form * @param result * @return */ @PostMapping("/members/new") public String create(@Valid MemberForm form, BindingResult result, Item item) { if (result.hasErrors()) { return "members/createMemberForm"; } memberService.save(form, item); return "redirect:/"; }} @Service@Transactional(readOnly = true)@RequiredArgsConstructorpublic class MemberService { private final MemberRepository memberRepository; private final ItemRepository itemRepository; /** * 회원가입하기 테스트 */ @Transactional public void save(MemberForm form, Item item) { //회원 저장 Member savedMember = Member.createMember(form); //아이템 저장 Item savedItem = Item.createItem(item, savedMember); memberRepository.save(savedMember); System.out.println("SavedFinished"); } /** * 회원가입 * @param member * @return */ @Transactional public String join(Member member) { validateDuplicateMember(member);//중복회원 검증 memberRepository.save(member); return member.getMemberId(); } private void validateDuplicateMember(Member member) { List<Member> findMembers = memberRepository.findByName(member.getMemberId()); //회원수를 카운트 해서 0보다 클 경우에 문제가 있다... 하면 최적화가 될 수 있다. if (!findMembers.isEmpty()) { throw new IllegalStateException("이미 존재하는 회원입니다."); } }} @Repository@RequiredArgsConstructorpublic class MemberRepository { private final EntityManager em; /** * 회원 저장 * @param member */ public void save(Member member) { em.persist(member); }} @Repository@RequiredArgsConstructorpublic class ItemRepository { private final EntityManager em; /** * 저장 * @param item */ public void save(Item item) { em.persist(item); }} 위와같이 설정을 했는데 생각했던대로 동작이 안되서 도저히 이해가 안되서 문의드립니다. 원하는 결과는 1. 회원가입을 한다.2. 회원가입을 할 때 Item 테이블에 있는 항목도 같이 입력을 한다.3. 회원가입 완료 후 회원가입 테이블에 등록한 회원이 저장되고, 관련 Item테이블에도 FK가 설정이 되어있으니 정보가 저장된다.Item테이블이 Many라 (회원 한 명당 Item을 여러개 등록할 수 있어서) ManyToOne을 Item에 넣었고, JoinColumn도 Item에 설정을 하고 PK를 member_id로 설정했습니다.Member는 참조만 되는 테이블이라 OneToMany로 설정하고 mappedBy를 member로 설정했습니다.그리고 연관관계 편의 메서드를 아이템을 저장할 때 회원정보도 저장하게 했습니다.회원가입, 아이템 엔티티에 create~ 메소드를 만들어서 service단에서 저장을 할 수 있도록 설정을 했습니다.제가 어느 부분을 잘못 설정을 했는지 MemberService에서 memberRepository.save~를 호출해서 저장을 하면 생성되는 쿼리에 insert문이 두개가 생성이 됩니다. 어?? 이상하다 해서 MemberService에서 createMember에서 저장한것은 반영이 안된다고 알고 있는데..이상하다고 생각을 해서 혹시나 해서 memberRepository.save~~를 주석처리하면 당연히 저장이 안되고 insert쿼리문도 출력이 안됩니다.(repository 안에 em.persist(~)를 save()에서 호출하기 때문에 save를 반드시 호출해야 저장이 되기때문에 안되는게 당연하겠죠.)궁금한점이..위와같이 소스를 작성할 때 어느부분이 잘못됐는지 DB에 원하는 정보들이 저장이 안되는것과 createMember가 왜 insert쿼리문이 생성이 되는지.. 아니면 제가 잘못 알고있는게 있는지 궁금합니다.(insert쿼리가 두개가 만들어지는게 이해가 안됩니다.)
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
Postman 데이터 연동시 콘솔창 이슈
포스트맨을 이용하여 작성 후, 개발자 메뉴에서 콘솔을 봤을 때, 강사님께서 올려주신 것 처럼 Array(3) 아래 데이터가 나열되지 않고, 다음과 같이 하나의 텍스트?로만 표현이 됩니다. 진행중인 스크립트와 postmon도 이상 없이 따라하고 있었습니다. 혹시 해당 이슈에 대해서 팁이나 조언 부탁드립니다
-
해결됨C#과 유니티, 실전 게임으로 제대로 시작하기 (저자 직강)
안녕하세요. 생성자와 속성의 역할에 대해 질문드립니다.
전 강의와 현재의 코드들을 보고 궁금한 점이 생겨서 질문드립니다. 생성자와 속성의 기능에 대한 질문입니다. Human 클래스안에 속성과 생성자가 둘다 들어있는데 이 강의에서 상속을 예시로 설명하실 때 Name, Height, Age 를 각각 속성으로 설정하시고 Adult, Baby 객체를 만들고 변수에 접근 할 때 속성을 사용하셨는데 그렇다면 생성자는 언제 쓰이고, 왜 필요한 것 인지 모르겠습니다. 그리고 속성의 구조에서 get, set의 기능을 잘 모르겠습니다. 예를 들어 age 변수 값을 설정할때는 tom.Age = 20; 이런식으로 설정하는데 여기서 set 메서드가 작동한다면 value라는 변수는 어떤 역할을 하는것인지 모르겠습니다. value 대신에 아무 단어라도 들어가면 작동하는건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 이번 강의에 궁금한 점이 있어 질문 드립니다.
TryDelete에서 popCount를 검사하는 부분에서 이중으로 검사하는 이유가 정말 궁금합니다. 혹시나 다른 수강생도 궁금하셨을까 싶어 찾아보니 이미 질문주신 분이 있어 답변을 보았습니다. 다만 popcount가 1인 것을 검사하고 펜딩 리스트를 분리까지 하였다면 그 이후에 다른 스레드가 어떤 식으로 참견하여도 delete에 방해가 될 수 없다는 생각이 자꾸 듭니다. 분리 이후엔 사실상 popCount가 의미가 없는 것이 아닌지 여쭙고 싶습니다.
-
미해결쉽게 시작하는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
쿠버네티스에서의 통신
안녕하세요. 강의 잘 보고 있습니다. 쿠버네티스 구성에 대해서 많은 것을 배우고 갑니다. 쿠버네티스 구성은 MSA라고 할 수 있습니다. 그럼, 쿠버네티스 내에서 통신은 어떻게 해야 하는지 궁금합니다. Pod → Pod 호출 Deployments → Deployments 호출 Pod → Deployments 호출 Deployments → Pod 호출 Pod 내 Container → Container 호출 위와 같은 통신은 어떻게 설정을 해야 하는지 궁금합니다. 혹은, 다음 강좌에서 학습을 할 수 있나요? 저의 최종 목표 쿠버네티스에 현재 개발하고 있는 MSA를 로컬에서 셋팅을 하고 싶습니다.
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 커리큘럼 관련되서 질문 드립니다.(커리큘럼 관련되서 질문할 곳을 찾지 못해서 ㅠㅠ 여기다 올린점 양해 부탁드려요 ㅠ)
안녕하세요. 커리큘럼 관련되서 질문드리고자 이렇게 글 올립니다. 저는 일단 C++을 사용하는데 있어 큰 무리없이 사용하는 편입니다. (modern c++포함) 반면 C#은 거의 모르는 상태인데요, 강사님 커리큘럼중에 C#을 이용해서 MMORPG를 만드는 커리큘럼도 있던데 아래처럼 병행해서 커리큘럼을 짜도 될지 궁금해서 문의 드립니다. [C#과 유니티로 만드는 MMORPG게임 개발시리즈] Part1, Part3, Part7, Part9 만 듣고, [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4 이렇게 들어서 일단 Unreal 로 연동하는 강의가 나올때까지, 유니티 2D게임을 C++게임서버에 연동해보고 싶은데요, 굳이 C# 게임서버 제작 강의를 들어야할 필요가 있을까요?? C#으로 게임서버를 만들어야겠다는 생각이 들면 듣겠지만, 지금은 우선 게임 클라이언트 자체를 서버에 연동시키는것(구체적으로 맵을 어떻게 서버에서 처리하고, 스킬이나 hit 판정을 어떤식으로 하는지에 대한 것들)을 목표로 하고 있는데, C#게임서버 강의랑 C++ 게임서버 강의가 겹치는 부분이 많아서 C#게임서버 강의를 통해 들어야할지 고민이 됩니다. 결론으로 C# 강의 Part1, Part3, Part7, Part9 와 C++강의 Part4 이렇게 병행하는데, 무리 없이 커리큘럼을 수행할 수 있는지 궁금합니다. 긴글 읽어주셔서 감사드리며, 항상 좋은 강의 올려주셔서 감사합니다.!!!
-
미해결웹 게임을 만들며 배우는 React
getWinNumbers가 여러번 실행되지 않는데 업데이트된건가요?
콘솔로 getWinNumbers를 찍어보았는데 componentDidMount때 딱 한 번 실행되고 재실행되지 않는 것 같습니다. 제가 코드를 강의와 똑같이 작성한다고 한건데, 혹시 잘못 작성해서 의도와 다르게 작성된 부분이 있어서 그런 것인지 아니면 버전이 업데이트된 것인지 궁금해서 질문 남깁니다! const React = require('react'); const { useState, useRef, useEffect } = React; const Ball = require('./Ball'); function getWinNumbers() { console.log('getWinNumbers'); const candidate = Array(45).fill().map((v, i) => i + 1); const shuffle = []; while (candidate.length > 0) { shuffle.push(candidate.splice(Math.floor(Math.random() * candidate.length), 1)[0]); } const bonusNumber = shuffle[shuffle.length - 1]; const winNumbers = shuffle.slice(0, 6).sort((p, c) => p - c); return [...winNumbers, bonusNumber]; } const LottoHooks = () => { const [winNumbers, setWinNumbers] = useState(getWinNumbers); const [winBalls, setWinBalls] = useState([]); const [bonus, setBonus] = useState(null); const [redo, setRedo] = useState(false); const timeouts = useRef([]); useEffect(() => { for (let i = 0; i < winNumbers.length - 1; i++) { timeouts.current[i] = setTimeout(() => { setWinBalls((prevWinBalls) => [...prevWinBalls, winNumbers[i]]); }, (i + 1) * 1000); } timeouts.current[6] = setTimeout(() => { setBonus(winNumbers[6]); setRedo(true); }, 7000); return () => { // componentWillUnmount timeouts.current.forEach((v) => { clearTimeout(v); }); }; }, [timeouts.current]); const onClickRedo = () => { setWinNumbers(getWinNumbers()); setWinBalls([]); setBonus(null); setRedo(false); timeouts.current = []; }; return( <> <div>당첨 숫자</div> <div id="결과창"> {winBalls.map((v) => <Ball key={v} number={v}/>)} </div> <div>보너스!</div> {bonus && <Ball number={bonus}/>} {redo && <button onClick = {onClickRedo}>한 번 더!</button>} </> ); } module.exports = LottoHooks;
-
미해결홍정모의 따라하며 배우는 C언어
출력 오류가 발생합니다.
강의에서 말씀해 주신 pointer를 이용해서 예제를 작성했는데 첫 줄만 출력되고 둘째줄 부터는 출력이 되지 않습니다. print_books 함수에서 books[1]->name, books[2]->name 등이 접근이 되지 않는데 코드에 무슨 문제가 있는 걸까요? 확인 부탁드립니다. 감사합니다. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> // strrlen(), strcmp() #include <string.h> // malloc(), free() #define SLEN 100 struct book { char name[SLEN]; char author[SLEN]; }; void print_books(const struct book *books[], int n); int main(void) { struct book* my_books = (struct book*)malloc(sizeof(struct book) * 3); my_books[0] = (struct book){ "a","b" }; my_books[1] = (struct book){ "baa","f" }; my_books[2] = (struct book){ "g","a" }; print_books(&my_books, 3); free(my_books); return 0; } void print_books(const struct book *books[], int n) { for (int i = 0; i < n; i++) printf("Book %d : %s written by %s \n", i + 1, books[i]->name, books[i]->author); }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello-static.html 위치가 맞는데도 실행시 오류가납니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]https://github.com/herry215/hello-spring-0.0.1-SNAPSHOT.jar.git 크롬으로 바로 실행하면 잘 출력이 되는데 , localhost:8080/hello-static.html 로 실행하면 실행이 안되네요.. 위의 깃허브 주소에 파일을 올려놨습니다. 무엇이 잘못되었는지 알려주실수 있으신가요ㅠㅜ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
오류가 납니다 ㅠㅠ
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]1, [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 오류가 나면서 실행이 안되는데 dispatcherServlet설정을 어디서 하나요... 초반에 제가 설치해야 하는 부분을 설치 못한건지 궁금합니다.. 2, 번외로 죄송하지만 콘솔 글꼴을 변경하고싶어서 자주하는 질문에 있는 글을 보고 수정 하였는데도 변경이안되어 혹시 다른 방법 알고계시면 감사하겠습니다 ㅠㅠ 가독성이 너무 떨어져서..인터넷 찾아보고 해도 잘 안되네요..
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
gist 권한 요청
안녕하세요. 강의를 듣고있는 수강생입니다. 아침에(2021.12.09)에 gist 권한을 요청했는데 승인됐는지 확인할 수 없습니다. 인프런 아이디 : bskhan912@gmail.com인프런 이메일 : bskhan912@gmail.com깃헙 아이디 : bskhan깃헙 Username : bskhan-- 수강생 맞는데 자동 로그인 되서 ID가 맞는지 모르겠습니다. 틀리면 알려주세요 확인 부탁드립니다. 제 또다른 e-mail은 bskhan@nate.com입니다. 감사합니다.
-
미해결반응형 웹사이트 포트폴리오(Architecture Agency)
선생님, 수업에는 나오지 않는 부분인데 궁금한게 있어서 질문드립니다.
안녕하세요 선생님! 먼저 선생님 강의를 잘듣고있는 학생입니다. 기본CSS부터 FLEX 그리고 포트폴리오강의까지 너무나 잘듣고 있습니다.^^ 포트폴리오 강의에는 해당 내용이 없는것 같은데 제가 너무 궁금해서 질문드립니다. 요즘 웹페이지를 보면 흔하게 볼수 있더라구요. 페이지가 전환될때나 스크롤을 내리면서 컨텐츠가 보일때 페이드인 되면서 애니매이션이 작동하는 방식이요! 페이지가 전환될때도 페이드아웃되고요. 부드럽게 넘어가는게 고급스러운 느낌을 주더라구요 ^^; (그래서 저도 써보고 싶어서 이리저리 검색해봤는데 며칠째 원하는 답을 찾지못했습니다.ㅜㅜ 그렇게 간단하지 않은것 같더라구요. DOM의 실행순서와 자바스크립트의 연관성이 있어보이던데...) 어떤 코드를 입력해야 구현이 가능한걸까요? 도움주시면 너무 감사하겠습니다!! http://andneeds.co.kr/ (여기웹을 보시면 home에서 shop으로 넘어갈때 애니메이션이 발생합니다. 그리고 shop에서 아래로 스크롤을 하면 애니메이션이 또 발생합니다.)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
response.sendError와 return ModelAndView 관계
sendError(400) 를 호출했기 때문에 WAS에서 다시 오류 페이지( /error )를 내부 요청한다. 라는 의미는 WAS에서 다시 디스패쳐 서블릿을 통해서 해당 에러를 요청하는 컨트롤러까지 다시 호출된다는 의미로 이해가됩니다. 그런데, sendError를 하면서 return ModelAndView를 하게 되면 이 에러는 resolve되어서 WAS에서는 정상적인 response로 처리된다고 이해를 했습니다. ResponseStatusExceptionResolver.applyStatusAndReason 여기를 보면 이렇게 처리되어있습니다. 하지만 위 글의 첫 문장처럼 sendError를 하게되면 WAS에서는 내부적인 처리를 다시한다고 써있습니다 (dispacterType == ERROR) ModelAndView를 반환해도, sendError를 같이 리턴하게 되면 다시 WAS 내부적으로 호출된다고 이해하면 되나요?
-
해결됨비전공자를 위한 진짜 입문 올인원 개발 부트캠프
한개의 item에 height와width를 설정 상태에서 margin/padding/border등을 주면, item크기가 어떻게 변하나요?
한 개의 item에 height와width를 설정 상태에서 margin/padding/border등을 주면, item크기가 어떻게 변하나요? 예를 들어 #item1의 크기를 height/width를 300px, 300px로 설정하고 padding을 30px로 준다고 하면, 330px, 330px이 되는 건가요? 아니면 300px, 300px은 변하지 않고 안에 padding이 생기는 건가요? 마찬가지로 border, margin을 30px씩 준다면 item1의 크기가 어떻게 변하는지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
print_binary_loop
void print_binary_loop(unsigned long n) { int i, j, ary_num = 0; int bin[] = {0}; for (i = 0; n > 0; n = n / 2, i++) { if ((n / 2) != 0) bin[i] = n % 2; else bin[i] = 1; ary_num += 1; } for (j = ary_num - 1; j >= 0; j--) printf("%d", bin[j]); printf("\n"); } 아직 c언어 배열은 안배웠지만 파이썬 배열과 다를게 없다 생각해서 기본적인 문법만 구글링하면서 써봤습니다. 제가 직접 루프를 짜봤는데 교수님꺼보단 많이 복잡하지만,,, 실행시킬 때마다 이런 오류가 뜨고 무시를 누르면 잘 실행이 되기는 합니다. 이 오류를 고치고 싶은데 방법을 모르겠습니다 ㅠ
-
미해결iOS/Android 앱 개발을 위한 실전 React Native - Basic
강사님 에러때문에 강의를 못 듣고 있습니다.
sour > Task :react-native-screens:compileDebugKotlin FAILED
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
강의를 보며
강사님 강의를 보며 제가 다른 웹사이트를 커스텀해서 사용하고자 공부중에 있습니다 ㅎㅎ 근데 저도 아무리 찾아봐도 해결되지 않는 문제점이 있어 여기다 이렇게 질문을 드립니다. 우선 관련있을 코드는 붙여드리겠습니다 ㅠㅠ ... 제가 생각하기로는 DB정보에서 값을 불러오지 못해서 발생하는 문제라 생각합니다. DB는 postgresSQL연동해서 사용중입니다! 문제점이 무엇일까요... 구분 구분
-
미해결실전! 웹사이트제작! Step by Step! ('돕다' 사이트제작_Basic Course)
width100%궁금합니다~
안녕하세요~ 선생님 .wrap에 width : 100% 를 주었는데 자식인 header에게도 width:100%를 주는 이유가 있을까요? 자식은 부모의 너비를 상속받는다고 알고있는데 가장 상위의 .wrap이 width 100%를 가지고 있으면 안에 자식들은 width100%를 안써도 되는것인지 아니면 언제 width 100%를 써야하는지 궁금합니다. 감사합니다.
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
ModelViewSet과 ListCreateAPIView의 차이점이 무엇인가요?
강의를 보며 DRF 공부하고 있는데 ModelViewSet과 ListCreateAPIView이 어떤 차이점이 있는지 궁금합니다. 조회값(?)을 보니 두개 다 같은 것으로 확인되는데 어떠한 차이점이 있는건가요?
-
미해결스프링부트 시큐리티 & JWT 강의
pom.xml file 과 의존성 라이브러리가 모두 깨지는것 같습니다. 원인을 알려주실수 있을까요?
문의 드립니다. 개발하시는 툴이 이클립스를 사용하는것 같으신데.. 저는 intellj 를 사용하고 있습니다. 실행은 정상적으로 되는데 의존성 추가된 라이브러리들이 깨지는 것 같습니다. 원인을 알수 있을 까요? github 을 보니 1년 전에 커밋하신 소스라서 그런지 버젼을 타는것 같습니다. 원인을 가르쳐 주실수 있을까요? - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.