묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결선형대수학개론
18분경 example 2.에서 질문 있습니다.
R4 onto R3인 이유가 해가 존재하기 때문인데 existence and uniqueness theorem에서 rightmost column이 pivot이 아니어야 consistent면 지금 0005기때문에 inconsistent로 해가 없는게 아닌가요?ㅠㅠ 앞에 찾아보면서 봐도 이해가 안가서 질문 올립니다. ps. 혹시 augmented matrix가 아닌건가요 ?? 그렇다면 이해가 갑니다!!
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
queue가 더 효율적인 이유가 무엇인가요?
이 문제를 queue로 접근하는 이유가 무엇인가요? 채점기를 돌렸을 때는 이상이 없는 코드입니다. 공주 구하기나 응급실 문제처럼 원소를 리스트에서 제거할 필요가 없는 문제 같은데 pop(deque의 경우 popleft)을 사용해야 하는 이유가 무엇인지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
선생님 질문이 있습니다.
선생님께서 applicationcontext ac = new annotationConfig -----(클래스이름. class) 이런식으로 만들어주시면서 테스트코드 하단에 빈에 등록할 클래스를 만들어주시고 @autowired 어노테이션 막 넣고 하시는데 하다가 문득 이전에 했던 appconfig 같이 @configuration 어노테이션이 붙어있는 구성정보 클래스를 만들지 않으시는 거같아서요... ac 객체를 생성할 때 인자로 들어가는 클래스에 자동으로 @component가 붙는 건 알겠는데 나중에 개발할 때 configuration 에 componentscan이라던가 등등 어노테이션이 붙은 구성정보 클래스를 따로 생성하지 않고 그냥 바로바로 클래스를 만들어서 @autowired를 붙여가며 개발을 해도 상관이 없는건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@ManyToMany 연결테이블 양방향
안녕하세요 선생님! @ManyToMany를 @OneToMany, @ManyToOne 관계로 바꾸는 것에 대해 질문이 있습니다. 앞서 강의에서 양방향 보다 단방향 관계를 맺게 하고 비지니스 로직상 필요한 곳에만 양방향으로 설정하라고 하셨는데, 만약 ManyToMany 관계를 맺은 두 엔티티가 서로 가끔씩만 연관되어서 사용되는 경우에는 연결테이블과 단방향으로만 (@ManyToOne 으로만) 관계를 맺도록 해도 될까요? 감사합니다!
-
미해결코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
개념 설명이 잘못나온거 같습니다.
queue & stack 파트인데 개념 설명은 Array가 나옵니다.!!
-
미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
실행해서 무기와 공이 맞닿으면 로딩상태로 멈추네요
import pygame import os ############################################ # 0. 기본 초기화 (반드시 해야 하는 것들) pygame.init() # 화면 크기 설정 screen_width = 640 screen_height = 480 screen = pygame.display.set_mode((screen_width, screen_height)) # 화면 타이틀 설정 pygame.display.set_caption("Nado Pang") # FPS clock = pygame.time.Clock() ############################################ # 1. 사용자 게임 초기화 (배경 화면, 게임 이미지, 좌표, 속도, 폰트 등) # 현재 파일의 위치를 반환 e:\PythonWorkspace\pygame_basic\pygame_project current_path = os.path.dirname(__file__) # images 폴더 위치 반환 image_path = os.path.join(current_path, "images") # 배경만들기 background = pygame.image.load(os.path.join(image_path, "background.png")) # 스테이지 만들기 stage = pygame.image.load(os.path.join(image_path, "stage.png")) stage_size = stage.get_rect().size stage_height = stage_size[1] # 캐릭터 만들기 character = pygame.image.load(os.path.join(image_path, "character.png")) character_size = character.get_rect().size character_width = character_size[0] character_height = character_size[1] character_x_pos = (screen_width / 2) - (character_width / 2) character_y_pos = screen_height - (stage_height + character_height) # 캐릭터 이동 방향 character_to_x = 0 # 캐릭터 이동 속도 character_speed = 5 # 무기 만들기 weapon = pygame.image.load(os.path.join(image_path, "weapon.png")) weapon_size = weapon.get_rect().size weapon_width = weapon_size[0] # 무기는 한 번에 여러 발 발사 가능 weapons = [] # 무기 이동속도 weapon_speed = 10 ball_images = [ pygame.image.load(os.path.join(image_path, "balloon1.png")), pygame.image.load(os.path.join(image_path, "balloon2.png")), pygame.image.load(os.path.join(image_path, "balloon3.png")), pygame.image.load(os.path.join(image_path, "balloon4.png")) ] # 공 크기에 따른 최초 스피드 ball_speed_y = [-18, -15, -12, -9] # index 0,1,2,3에 해당하는 값 # 공들 balls = [] balls.append({ "pos_x": 50, # 공의 x 좌표 "pos_y": 50, # 공의 y좌표 "img_idx": 0, # 공의 이미지 인덱스 "to_x": 3, # x축 이동 방향, -3 이면 왼쪽으로, +3 이면 오른쪽으로 "to_y": 6, # y축 이동방향 "init_spd_y": ball_speed_y[0] # y 최초 속도 }) # 사라질 무기와 공 정보 weapon_to_remove = -1 ball_to_remove = -1 running = True while running: dt = clock.tick(30) # 2. 이벤트 처리 (키보드, 마우스 등) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: # 캐릭터를 왼쪽으로 character_to_x -= character_speed elif event.key == pygame.K_RIGHT: # 캐릭터를 오른쪽으로 character_to_x += character_speed elif event.key == pygame.K_SPACE: # 무기발사 weapon_x_pos = character_x_pos + \ (character_width / 2) - (weapon_width / 2) weapon_y_pos = character_y_pos weapons.append([weapon_x_pos, weapon_y_pos]) if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: character_to_x = 0 # 3. 게임 캐릭터 위치 정의 character_x_pos += character_to_x if character_x_pos < 0: character_x_pos = 0 elif character_x_pos > screen_width - character_width: character_x_pos = screen_width - character_width # 무기 위치 조정 weapons = [[w[0], w[1] - weapon_speed] for w in weapons] # 무기 위치를 위로 # 천장에 닿은 무기 없애기 weapons = [[w[0], w[1]] for w in weapons if w[1] > 0] # 공 위치 정의 for ball_idx, ball_val in enumerate(balls): ball_pos_x = ball_val["pos_x"] ball_pos_y = ball_val["pos_y"] ball_img_idx = ball_val["img_idx"] ball_size = ball_images[ball_img_idx].get_rect().size ball_width = ball_size[0] ball_height = ball_size[1] # 가로벽에 닿았을 때 공 이동위치 변경 (튕겨나오는 효과) if ball_pos_x < 0 or ball_pos_x > screen_width - ball_width: ball_val["to_x"] = ball_val["to_x"] * -1 # 세로벽에 닿았을 때 if ball_pos_y >= screen_height - stage_height - ball_height: ball_val["to_y"] = ball_val["init_spd_y"] # 스테이지에 튕김 else: # 그 외 모든 경우에는 속도를 증가 ball_val["to_y"] += 0.5 ball_val["pos_x"] += ball_val["to_x"] ball_val["pos_y"] += ball_val["to_y"] # 4. 충돌 처리 # 캐릭터 rect 정보 업데이트 character_rect = character.get_rect() character_rect.left = character_x_pos character_rect.top = character_y_pos for ball_idx, ball_val in enumerate(balls): ball_pos_x = ball_val["pos_x"] ball_pos_y = ball_val["pos_y"] ball_img_idx = ball_val["img_idx"] # ball 정보 업데이트 ball_rect = ball_images[ball_img_idx].get_rect() ball_rect.left = ball_pos_x ball_rect.top = ball_pos_y # 공과 캐릭터 충돌처리 if character_rect.colliderect(ball_rect): running = False break # 공과 무기들 충돌처리 for weapon_idx, weapon_val in enumerate(weapons): weapon_pos_x = weapon_val[0] weapon_pos_y = weapon_val[1] # 무기 rect 정보 업데이트 weapon_rect = weapon.get_rect() weapon_rect.left = weapon_pos_x weapon_rect.top = weapon_pos_y if weapon_rect.colliderect(ball_rect): weapon_to_remove = weapon_idx # 해당 무기 값 설정 ball_to_remove = ball_idx # 해당 볼 없애기 위한 값 설정 # 가장 작은 크기의 공이 아니라면 둘로 나눠준다 if ball_img_idx < 3: # 현재 공크기 정보를 가지고 옴 ball_width = ball_rect.size[0] ball_height = ball_rect.size[1] # 나눠진 공 정보 small_ball_rect = ball_images[ball_img_idx + 1].get_rect() small_ball_width = small_ball_rect.size[0] small_ball_height = small_ball_rect.size[1] # 왼쪽으로 튕겨나가는 작은공 balls.append({ # 공의 x 좌표 "pos_x": ball_pos_x + (ball_width/2) - (small_ball_width/2), # 공의 y좌표 "pos_y": ball_pos_y + (ball_height/2) - (small_ball_height/2), "img_idx": ball_img_idx + 1, # 공의 이미지 인덱스 "to_x": -3, # x축 이동 방향, -3 이면 왼쪽으로, +3 이면 오른쪽으로 "to_y": -6, # y축 이동방향 # y 최초 속도 "init_spd_y": ball_speed_y[ball_img_idx + 1] }) # 오른쪽으로 튕겨나가는 작은공 balls.append({ # 공의 x 좌표 "pos_x": ball_pos_x + (ball_width/2) - (small_ball_width/2), # 공의 y좌표 "pos_y": ball_pos_y + (ball_height/2) - (small_ball_height/2), "img_idx": ball_img_idx + 1, # 공의 이미지 인덱스 "to_x": 3, # x축 이동 방향, -3 이면 왼쪽으로, +3 이면 오른쪽으로 "to_y": -6, # y축 이동방향 # y 최초 속도 "init_spd_y": ball_speed_y[ball_img_idx + 1] }) break # 충돌된 공 or 무기 없애기 if ball_to_remove > -1: del balls[ball_to_remove] ball_to_remove = -1 if weapon_to_remove > -1: del weapons[weapon_to_remove] weapon_to_remove = -1 # 5. 화면에 그리기 screen.blit(background, (0, 0)) for weapon_x_pos, weapon_y_pos in weapons: screen.blit(weapon, (weapon_x_pos, weapon_y_pos)) for idx, val in enumerate(balls): ball_pos_x = val["pos_x"] ball_pos_y = val["pos_y"] ball_img_idx = val["img_idx"] screen.blit(ball_images[ball_img_idx], (ball_pos_x, ball_pos_y)) screen.blit(stage, (0, screen_height - stage_height)) screen.blit(character, (character_x_pos, character_y_pos)) pygame.display.update() pygame.quit() 무기를 발사하면 공과 무기가 맞닿는 순간 무한루프처럼 로딩이 되는데 왜 그런지 모르겠습니다 의심가는 곳을 주석처리하고 실행해 봤을 때 append 코드를 만나면 로딩이 길어지는 것 같은데 정확한 원인이 뭔지 모르겠어요 도와주세요 ㅠㅠ
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
강사님 질문있습니다!
6분7초쯤부터 mappedBy = "team"한 부분 클릭(커맨드 클릭?) 하니까 Member의 team으로 이동했는데 저는 Cannot find declaration to go to 이렇게 뜨더라구요 ㅠㅠ 현재 인텔리제이 얼티메이트2020.3.2버전 쓰고있는데 혹시 따로 플러그인 을 설치하신건가요? 아니면 뭔가 다른 기능을 임포트해야하나요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
<html xmlns:th="http://www.thymeleaf.org"> 부분
안녕하세요 김영한 강사님! 오늘 강의를 시작하게 되었고 잘 보고 있습니다:) 다름이 아니라 "http://www.thymeleaf.org"부분에서 계속 형광펜이 뜨고, 옆에 형광등을 눌러서 fetch external resource를 눌러도 No XML at the location: http://www.thymeleaf.org 라고 뜹니다.. ${data}도 안되는 것 같은데 어떻게 하면 좋을까요?
-
미해결윤재성의 Google 공식 언어 Kotlin 프로그래밍 시작하기
모듈 사용 등록
testmodule 추가했는데 unresolved reference: TestClass1 오류가 뜹니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
질문 드립니다!!
빈 클래스 생성시에, 디폴트 생성자, 생성자, getter setter를 만들어야하는 이유를 알 수 있을까요...? helloWorldBean 예제에서는 생성자만 만들어도 될 것 같은데 getter setter 도 추가적으로 필요한건지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테이블 아이디 설계 및 hidden 태그 관련 질문 드립니다.
항상 명강의 감사합니다. 강의를 들을때마다, 강사님에 노고가느껴지니, 매번 소름이 돋네요. ㅎㅎ 오늘도 강의 잘 듣고 있습니다. 2가지 질문을 드립니다. 1. 테이블 아이디 설계 저는 회원 테이블을 설계할때, 기본키를 '아이디' 로 설정했었습니다. 아이디가 유니크 하기 때문에 기본키로 잡았었는데, 강의에서는 엔티티에서 기본키를 따로 잡으시고(기본키는 자동으로 값을 셋팅) 진행을 하시던데 실무에서도 회원 테이블을 설계하신다면 '회원 아이디' 와는 별개로 기본키 필드를 설계하고 @GereratedValue 로 자동으로 값을 할당하도록 진행하시나요.? 2. hidden 태그(다소 부족한 질문일수도 있습니다.)강의 내 코드를 보면, 회원에 대한 아이디를 hidden 태그에 노출하는데, 이게 보안상에 문제가 될 여지는 없을 까요.? 물론 서버단에서 회원에 권한을 체크한다면 문제가 되지 않는다고는 생각하지만, 노출된다는게 꺼림칙해서요.....(단순히 제생각입니다.) 아니면 hidden 태그를 사용하지 않고, 구현하는 방법이 따로 있을까요.?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
헤메고 있어 질문드립니다.
이런 식으로 질문드리는 게 문제라는 점을 알면서도 어디서부터 건드려야 할 지 감이 오지 않아 질문드립니다. bind 함수에서 다른 유형은 문제 없는데 bind<Image>(typeof(Images)) 로 바인드 할 경우 문제가 발생합니다. 디버그를 해보니 Bind<T>로 이동하여 typeof(T) == typeof(gameObject) 조건을 만족하지 않아 else 문 FindChild<T>로 이동합니다. 그 다음 go == null 조건 만족하지 않고 리커시브도 트루기에 맨 아래 foreach문으로 이동하는데 디버깅을 해보니go.GetComponentsInChildren<T>()을 가져온 component에 ItemIcon이 아닌 PointButton이 들어갑니다. 이게 무슨 까닭으로 이리 되는 건지 가닥을 잡을 수 없어 장황하게 질문 남깁니다.
-
해결됨스스로 구축하는 AWS 클라우드 인프라 - 기본편
간단한 질문입니다.
좋은 강의 감사드립니다. 정상적으로 index3.html 과 로고가 올라오는데요 X-Cache 값이 Miss from cloudfront 로 올라오는 이유가 궁금합니다. 또한 새로고침시 url 주소가 cloud front의 Domain Name이 아닌 s3 주소로 변경되는 이유가 궁금합니다.
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
안녕하세요 개인 프로젝트를 하는데 같은 함수 호출이 여러번 됩니다.
import React, { useEffect, useState, useMemo, useCallback, useRef } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Row, Col, Button, Form, Input, Typography, Modal, Avatar, Upload, message } from 'antd'; import { useDropzone } from 'react-dropzone'; import ImgCrop from 'antd-img-crop'; import useInput from './hooks/useInput'; import { CHANGE_PROFILE_REQUEST, CHANGE_NICKNAME_REQUEST, CHANGE_INTRO_REQUEST } from '../reducers/user'; const { Dragger } = Upload; const { TextArea } = Input; const { Text } = Typography; const ProfileForm = () => { const { me, changeProfileLoading, changeNicknameLoading, changeNicknameDone, changeNicknameError, changeIntroLoading, changeIntroDone, changeIntroError, } = useSelector((state) => state.user); const [nickname, onChangeNickname] = useInput(me?.nickname || ''); const [intro, onChangeIntro] = useInput(me?.introduction || ''); const [profileImage, onChangeProfileImage, setProfileImage] = useInput(); const dispatch = useDispatch(); useEffect(() => { if (changeNicknameError) { Modal.error({ content: '닉네임 변경 중에 오류가 발생했어요.', }); } }, [changeNicknameError]); useEffect(() => { if (changeNicknameDone) { Modal.success({ content: '닉네임을 변경했어요!', }); } }, [changeNicknameDone]); useEffect(() => { if (changeIntroError) { Modal.error({ content: '자기소개 변경 중에 오류가 발생했어요.', }); } }, [changeIntroError]); useEffect(() => { if (changeIntroDone) { Modal.success({ content: '자기소개를 변경했어요!', }); } }, [changeIntroDone]); const beforeUpload = useCallback((file) => { console.log('beforeUpload'); if (file.type !== 'image/jpg' && file.type !== 'image/jpeg' && file.type !== 'image/png') { message.error('jpg jpeg png 사진만 가능해요!'); return false; } if (file.size > 2 * 1024 * 1024) { message.error('프로필 이미지는 2MB 이하만 가능해요!'); return false; } setProfileImage(file); return true; }); const onUpload = useCallback( (files) => { console.log('onUpload'); if (!changeProfileLoading) { const imageFormData = new FormData(); imageFormData.append('image', profileImage); console.log(profileImage); dispatch({ type: CHANGE_PROFILE_REQUEST, data: imageFormData, }); } }, [profileImage, changeProfileLoading] ); const onSubmitNickname = useCallback(() => { dispatch({ type: CHANGE_NICKNAME_REQUEST, data: nickname, }); }, [nickname]); const onSubmitChangeIntro = useCallback(() => { dispatch({ type: CHANGE_INTRO_REQUEST, data: intro, }); }, [intro]); const style = useMemo(() => ({ marginBottom: '20px', border: '1px solid #d9d9d9', padding: '20px' }), []); return ( <Row justify="center"> <Col xs={24} md={12}> <Form style={style} layout="vertical"> <Form.Item style={{ textAlign: 'center' }}> <ImgCrop rotate quality="0.8" modalTitle="이미지 조정" modalOk="저장" modalCancel="취소"> <Upload showUploadList={false} accept=".jpg,.jpeg,.png" onChange={onUpload} beforeUpload={beforeUpload}> <Avatar src={me?.profile ? `http://localhost:3100/${me?.profile}` : null} size={256}> {me?.profile ? null : me?.nickname[0]} </Avatar> </Upload> </ImgCrop> </Form.Item> <Form.Item label={<Text strong>이메일</Text>}> <Text type="secondary">{me?.email}</Text> </Form.Item> <Form.Item label={<Text strong>닉네임</Text>}> <Input value={nickname} onChange={onChangeNickname} maxLength="20" suffix={<Text type="secondary">{` ${nickname.length} / 20`}</Text>} /> <Button type="primary" onClick={onSubmitNickname} loading={changeNicknameLoading} disabled={me?.nickname === nickname}> 변경 </Button> </Form.Item> <Form.Item label={<Text strong>자기소개</Text>}> <TextArea placeholder="당신을 멋지게 소개해보세요!" value={intro} onChange={onChangeIntro} rows="5" spellCheck={false} style={{ resize: 'none' }} showCount maxLength="500" /> </Form.Item> <Form.Item style={{ textAlign: 'center' }}> <Button type="primary" shape="round" size="large" onClick={onSubmitChangeIntro} loading={changeIntroLoading} disabled={me?.introduction === intro} style={{ width: 200, }} > 저장 </Button> </Form.Item> </Form> </Col> </Row> ); }; export default ProfileForm; 강의를 듣고 나서 개인 프로젝트를 만드는 중인데, antd의 Upload 컴포넌트를 이용해서 이미지 업로드를 구현했습니다. 그런데 이미지를 업로드하면 onUpload 함수가 3번 실행됩니다. beforeUpload는 1번만 실행되는데, onUpload 만 3번 실행이 됩니다. 오늘 하루종일 찾아봤는데 문제점을 모르겠습니다. 혹시 어디가 문제일까요?
-
풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
css main 클래스 관련 질문
삭제된 글입니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Error creating bean EntityManagerFactory define in class 오류가 나옵니다.
build.gradle에 org.javassist를 추가해봤는데 서버 실행이 되지 않습니다. 꼭 알려주세요.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
회원 가입 리팩토링 및 테스트 영상 질문입니다.
@DisplayName("회원 가입 처리 - 입력값 정상") @Test void signUpSubmit_with_correct_input() throws Exception { mockMvc.perform(post("/sign-up") .param("nickname", "keesun") .param("email", "email@gmail.com") .param("password", "12345678") .with(csrf())) .andExpect(status().is3xxRedirection()) .andExpect(view().name("redirect:/")); assertTrue(accountRepository.existsByEmail("email@gmail.com")); BDDMockito.then(JavaMailSender).should().send(any(SimpleMailMessage.class)); } 회원 가입 처리 - 입력값 정상 테스트의 마지막줄인 BDDMockito.then(JavaMailSender).should().send(any(SimpleMailMessage.class)); 쪽이 인식을 못하고 빨간줄을 내보냅니다. 영상에서는 then(JavaMailSender).should().send(any(SimpleMailMessage.class)); 코드인데 then 앞에 BDDMockito.를 선언 안하면 아예 인식을 못하더군요. BDDMockito를 사용하여 then을 인식시키면 에러가 뜹니다. .send(any(SimpleMailMessage.class)); 센드쪽에서 any들어가는걸 인식 못하는것 같은데 junit을 써본적이 없어서 이부분을 잘 모르겠습니다. 어디가 잘못 된건지 알 수 있을까요??? spring boot version 2.4.2 입니다. java 11입니다. ======================================================================================= package com.studyolle; import static org.hamcrest.CoreMatchers.any; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; import javax.mail.internet.MimeMessage; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.mockito.BDDMockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.test.web.servlet.MockMvc; import com.studyolle.account.AccountRepository; @SpringBootTest @AutoConfigureMockMvc class AppTests { @Autowired private MockMvc mockMvc; @Autowired private AccountRepository accountRepository; @MockBean JavaMailSender JavaMailSender; @DisplayName("회원 가입 화면 보이는지 테스트") @Test void signUpForm() throws Exception { mockMvc.perform(get("/sign-up")) .andDo(print()) .andExpect(status().isOk()) .andExpect(view().name("account/sign-up")) .andExpect(model().attributeExists("signUpForm")); } @DisplayName("회원 가입 처리 - 입력값 오류") @Test void signUpSubmit_with_wrong_input() throws Exception { mockMvc.perform(post("/sign-up") .param("nickname", "keesun") .param("email", "email..") .param("password", "12345") .with(csrf())) .andExpect(status().isOk()) .andExpect(view().name("account/sign-up")); } @DisplayName("회원 가입 처리 - 입력값 정상") @Test void signUpSubmit_with_correct_input() throws Exception { mockMvc.perform(post("/sign-up") .param("nickname", "keesun") .param("email", "email@gmail.com") .param("password", "12345678") .with(csrf())) .andExpect(status().is3xxRedirection()) .andExpect(view().name("redirect:/")); assertTrue(accountRepository.existsByEmail("email@gmail.com")); BDDMockito.then(JavaMailSender).should().send (any(SimpleMailMessage.class)); } }
-
미해결홍정모의 따라하며 배우는 C언어
getchar() 에 관해 질문 드립니다.
위와 같은 코드를 실행하였을 때, 콘솔창에서 입력을 할 때 엔터를 누를 때 마다 엔터 전의 문자들이 출력이 됩니다. 엔터도 그냥 문자 '\n' 으로 인식해서 다음 줄에서 입력을 계속 할 수 있을 것으로 생각했는데 왜 그런 건가요?!
-
미해결단 두 장의 문서로 데이터 분석과 시각화 뽀개기
cumsum ratio 관련하여 다시 질문드립니다.
머리가 안돌아가네용..ㅠㅠ cumsum 이라는 누적 합 필드를 만들었는데 ratio 를 뒤로갈수록 커지는 우상향 선그래프로 그리고 막대그래프와 겹치고 싶어요 상기 이미지가 지금까지 한거고 그리고 싶은 그래프는 이거에요. 혹시 설명이 가능하실까요? ㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OSIV 를 끈 상태에서 개발하면 지연 로딩만 조심하면 되나여?
1.osiv를 끈 상태에서는 지연 로딩 관련 로직들을 서비스 계층 이후로 트랜잭셔날의 영향권 아래에 있는 로직으로 옮기면 되는건가여? 지연 로딩 관련만 옮기면 되는건가여? 아니면 다른것들도 옮겨야 되나여?2.성능 극대화가 필요한 앱이면 로직 구성이 조금더 복잡해지고 어려워지는건가여? 아니면 서비스 계층에서 로직이 좀더 길어지는거 말고는 별 차이가 없는건가여 이부분도 간단하지는 않아 보이는데 v1, v2, v3, v4, v5 를 OSIV 를 끄고도 개발할수 있어야 되나여? 3.근데 스프링 부트 jpa가 원래 이렇게 어려운건가여 끝이 없네여 ㅋ; 기본편 스프링 data jpa , quer dsl 다 들어야 되요 ㅠ; 알려주신 스펙 다 적용해서 실전 어플리케이션은 언제 만들죠 ㅠ; 4.리액트나 스벨트까지 연동해서 풀스택 프로젝트 강의도 언제인가 만들어 주실건가요? 5.훌륭한 강의 만들어 주셔서 감사합니다 좋은 주말 되세여!