묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 웹사이트제작! Step by Step! (쌩초보 코스)
어떤 순서로 강의를 들으면 좋을까요?
J영님의 강의 11개를 모두 신청했습니다. 실전! 웹사이트제작! Step by Step! (쌩초보 코스) 실전! 웹사이트제작! Step by Step! (한국소비자원 소비자시대- 레이아웃제작 기초) 실전! 웹사이트제작! Step By Step! _Basic (한화캐미컬_반응형웹) 실전! 웹사이트제작! Step by Step! (와이스튜디오_반응형웹) 실전! 웹사이트제작! Step by Step! (대방산업_InteractiveWeb) 실전! 웹사이트제작! Step by Step! (뮤자인_반응형웹) 실전! 웹사이트제작! Step by Step! ('라한호텔' 사이트제작_Application Course) 실전! 웹사이트제작! Step by Step! ('크루알라모드'_반응형웹 제작) 실전! 웹사이트제작! Step By Step! ('포메인'_풀페이지사이트 제작) 실전! 웹사이트제작! Step by Step! ('돕다' 사이트제작_Application Course) 실전! 웹사이트제작! Step by Step! ('돕다' 사이트제작_Basic Course) 어떤 순서로 들으면 좋을까요? 난이도에 따라 순서를 추천해주세요.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Update 할 때 조건검사(price >= 0) 는 어디서 하는게 좋은 방법일까요?
안녕하세요. 너무 좋은 강의 잘 듣고있습니다 !! :) 강의 마지막부분에서 가장 좋은 방법이라고 말씀해주신대로, Service 계층에 ItemUpdateDto 를 추가하고, 엔티티 클래스에 update() 함수도 만들어서 구현을 했습니다. 여기서 한 가지 궁금한점이 생겼는데요, - price >= 0 - stockQuantity >= 0 - name 은 빈 문자열이 아님(StringUtils.hasText == true) 등의 조건을 검사하여 exeception 을 날리거나, update 를 진행하고 싶을 때 조건검사를 어디서 하는 것이 가장 좋은지 고민이 됩니다. 제 생각에는 크게 세가지 방법이 있을 것 같은데요.. 1. Controller 에서 검사하여, 검증된 값만 DTO에 담아서 service 에 전달한다. 2. service 에서 엔티티의 update() 함수를 호출하기전에 검사한다. 3. 엔티티 클래스의 update() 함수 내부에서 검사한다. 세 가지 방법에대해 제가 고민해본 내용을 말씀드리면.. Book 클래스의 removeStock() 처럼 엔티티 내부에서 검사하고, NotEnoughStockException 같은 에러를 날리는 비지니스 로직을 넣어야할까요? (코드에 일관성이 있도록..) --> 3번 그런데, Controller 에서 미리 검사를 하면 굳이 service -> repository 를 타고 내려가서 select 쿼리를 날릴 필요가 없어지기 때문에 성능상 유리할 것 같다는 생각도 듭니다. --> 1번 두 군데에서 다 검사를 하는 것이 좋을까요? 실무에서는 보통 어떤 방법을 채택하는지 궁금합니다 .
-
미해결쉽게 시작하는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
192.168.1.10 에 접속되지 않습니다
강의 흐름대로 동일하게 진행했습니다. 그런데 192.168.1.10에다가 포트번호는 로그에 나온 31641을 입력했는데 접속이 되지 않습니다. 이런경우엔 무엇을 확인해봐야하나요?
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
제공 텍스트가 깨져서 나와요
이렇게 나오는데 해결방법 있을까요? ㅠㅠ
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
웹과 앱의 상태코드
안녕하세요. 양질의 강의 잘 듣고 있습니다. 안드로이드와 스프링 쪽만 건드려봐서 저는 웹 쪽의 지식이 거의 없습니다. 스프링으로 API를 만들어서 웹이 아닌 애플리케이션클라리언트에게 데이터를 넘길 때도 지금 설명하시는 HTTP 상태코드 스펙(100번대 ~ 200번대)을 사용하나요? 지금 약간 혼동이 오는 게 제가 옛날에 교육 받은 곳에서는 아래와 같이 상태 코드를 직접 만들어서 클라이언트와 통신했거든요.. 그럼 아래와 같은 방식으로 하는 건 업계에서 쓰이는 표준을 지키지 않은 건가요? (아래 코드는 상태 코드와 요청에 대한 응답 예시입니다.) package com.example.demo.config;import lombok.Getter;/** * 에러 코드 관리 */@Getterpublic enum BaseResponseStatus { /** * 1000 : 요청 성공 */ SUCCESS(true, 1000, "요청에 성공하였습니다."), /** * 2000 : Request 오류 */ // Common REQUEST_ERROR(false, 2000, "입력값을 확인해주세요."), EMPTY_JWT(false, 2001, "JWT를 입력해주세요."), INVALID_JWT(false, 2002, "유효하지 않은 JWT입니다."), INVALID_USER_JWT(false,2003,"권한이 없는 유저의 접근입니다."), EMPTY_REQUEST_DATA(false, 2004, "요청한 값이 DB에 없습니다(empty)"), // users USERS_EMPTY_USER_ID(false, 2010, "유저 아이디 값을 확인해주세요."), USERS_NO_LOGIN(false, 2011, "로그인을 해주세요"), USERS_INVALID_USER(false, 2012, "존재하지 않거나 적절하지 않은 사용자입니다. 유저 상태를 확인해주세요."), // [POST] /users POST_USERS_EMPTY_EMAIL(false, 2015, "이메일을 입력해주세요."), POST_USERS_INVALID_EMAIL(false, 2016, "이메일 형식을 확인해주세요."), POST_USERS_EXISTS_EMAIL(false,2017,"중복된 이메일입니다."), POST_USERS_INVALID_GENDER(false, 2018, "잘못된 성별입니다."), POST_USERS_EXISTS_NICKNAME(false, 2019, "중복된 닉네임입니다."), /** * 3000 : Response 오류 */ // Common RESPONSE_ERROR(false, 3000, "값을 불러오는데 실패하였습니다."), // [POST] /users DUPLICATED_EMAIL(false, 3013, "중복된 이메일입니다."), FAILED_TO_LOGIN(false,3014,"없는 아이디거나 비밀번호가 틀렸습니다."), /** * 4000 : Database, Server 오류 */ DATABASE_ERROR(false, 4000, "데이터베이스 연결에 실패하였습니다."), SERVER_ERROR(false, 4001, "서버와의 연결에 실패하였습니다."), //[PATCH] /users/{userIdx} MODIFY_FAIL_USERNAME(false,4014,"유저네임 수정 실패"), PASSWORD_ENCRYPTION_ERROR(false, 4011, "비밀번호 암호화에 실패하였습니다."), PASSWORD_DECRYPTION_ERROR(false, 4012, "비밀번호 복호화에 실패하였습니다."), /* * 5000: webtoons * */ INTEREST_WEBTOON_STATUS_INVALID(false, 5001, "알람 설정을 하기 위해, 관심 웹툰으로 우선 등록을 해주세요"), INVALID_EPISODE_IN_WEBTOON(false, 5002, "해당 웹툰에 속한 에피소드가 아닙니다."), INVALID_STARSCORE_VALUE(false, 5003, "별점 값을 다시 확인해주세요"), ALREADY_EXISTS_STARSCORE(false, 5004, "이미 별점이 존재합니다"), WEBTOONS_INVALID_WEBTOON(false, 5005, "존재하지 않는 웹툰이거나 적절하지 않는 요청입니다. 값을 확인해주세요"), EPISODES_INVALID_EPISODE(false, 5006, "존재하지 않는 에피소드이거나 적절하지 않는 요청입니다. 값을 확인해주세요"), HISTORIES_INVALID_HISTORY(false, 5007, "요청하신 기록이 존재하지 않습니다. 다시 확인해주세요"), NO_PAID_EPISODE(false, 5008, "구매가 필요한 에피소드입니다. 구매 후 이용해주세요"); // 6000 : 필요시 만들어서 쓰세요 private final boolean isSuccess; private final int code; private final String message; private BaseResponseStatus(boolean isSuccess, int code, String message) { this.isSuccess = isSuccess; this.code = code; this.message = message; } { "isSuccess": true, "code": 1000, "message": "요청에 성공하였습니다.", "result": { "webtoonInfo": { "webtoonIdx": 1, "color": "#FF001D", "webtoonProfileImageUrl": "https://imageUrl_신의탑_434×330", "webtoonName": "신의탑", "author": "SIU", "synopsis": "자신의 모든 것이었던 소녀를 쫓아 탑에 들어온 소년 그리고 그런 소년을 시험하는 탑", "genre": "판타지", "age": "12세 이용가", "day": "월요웹툰", "totalInterestNum": 8, "isInterested": null, "alarm": null, "paidEpisodeNum": 3 }, "episodeList": [ { "episodeIdx": 6, "thumbnailImageUrl": "https://image~~", "title": "3부 75화", "date": "16일 후 무료", "avgStarScore": null, "isWatched": null, "isPaid": null, "isLastWatchedEpisode": null, "cookie": 2 }, { "episodeIdx": 5, "thumbnailImageUrl": "https://image~~", "title": "3부 74화", "date": "9일 후 무료", "avgStarScore": null, "isWatched": null, "isPaid": null, "isLastWatchedEpisode": null, "cookie": 2 }, { "episodeIdx": 4, "thumbnailImageUrl": "https://image~~", "title": "3부 73화", "date": "2일 후 무료", "avgStarScore": null, "isWatched": null, "isPaid": null, "isLastWatchedEpisode": null, "cookie": 2 }, { "episodeIdx": 3, "thumbnailImageUrl": "https://image~~", "title": "3부 72화", "date": "21.06.13", "avgStarScore": "5.55", "isWatched": null, "isPaid": null, "isLastWatchedEpisode": null, "cookie": 0 }, { "episodeIdx": 2, "thumbnailImageUrl": "https://image~~", "title": "3부 71화", "date": "21.06.06", "avgStarScore": "5.80", "isWatched": null, "isPaid": null, "isLastWatchedEpisode": null, "cookie": 0 }, { "episodeIdx": 1, "thumbnailImageUrl": "https://image~~", "title": "3부 70화", "date": "21.05.30", "avgStarScore": "4.50", "isWatched": null, "isPaid": null, "isLastWatchedEpisode": null, "cookie": 0 } ] } }
-
미해결문과생도, 비전공자도, 누구나 배울 수 있는 파이썬(Python)!
수업자료 다운이 계속 오류가 계속 떠요.
- 압축을 해제 하는 과정에서 계속 이런 메세지가 떠서 파일이름 바꿔서도 해봤는데 그래도 안되네요.. 혹시 왜 그런지 알 수 있을가요?
-
미해결Spring Boot JWT Tutorial
findOneWithAuthoritiesByUsername로직
삭제된 글입니다
-
미해결스프링 핵심 원리 - 기본편
생성자, setter 주입 시 빈 생성
안녕하십니까 선생님 해당 '다양한 의존관계 주입 방법' 강의에서 강사님이 setter주입은 단계가 나눠져있고, 생성자 의존관계 주입은 빈을 등록하면서 의존관계 주입이 동시에 일어난다고 말씀해주셨습니다. 단계로 나눈다는 말씀은 빈을 등록하고, 의존관계 주입을 할 때, 컨테이너에서 빈을 조회하여 주입시킨다. 이 부분은 이해가 됩니다. 그런데 제가 이걸 강의를 두 번째 들으면서 너무 깊이 생각한건지 만약에 OrderServiceImpl을 빈으로 등록할 때, 자동으로 의존관계 주입이 일어난다고 하시지 않으셨습니까? 그러면 MemberRepository와 DiscountPolicy가 아직 빈에 등록이 안될 경우가 있나요?? 이럴 경우에 어떻게 실행과정이 이뤄지는지 궁금하여 QnA를 찾아보았습니다. https://www.inflearn.com/questions/89770 위의 답변을 보고 제가 이해한 내용은 빈 등록과 의존관계 주입이 동시에 일어나게 될 때, 1. MemberRepository가 아직 빈에 등록되지 않으면 스프링은 위의 빈을 찾아 등록하고 OrderServiceImpl의 의존관계 주입에 사용 2. DiscountPolicy도 1번과 같이 실행이 된다. 라고 생각하면 될까요?? 결국에는 setter 주입은 단계가 나눠지고, 생성자 의존관계 주입은 동시에 일어난다 이렇게 구분지어 말씀하신게 이해를 쉽게 하기 위해서 강의하신건지,, 아니면 setter주입과 생성자 주입에 상관없이 1,2번 처럼 되는지 궁금합니다. ------------------------------------------------ 14:33에 말씀하시는 생성자에서 의존관계 주입할 때 생성자 파라미터를 가리키시면서 가급적 필수값이라고 말씀하셨는데 인자가 필수라는 말씀이신건지, 객체가 무조건 있다는 말씀이신지 궁금합니다! ------------------------------------------------- setter주입은 선택, 변경 생성자 주입은 불변, 필수 라고 말씀하셨습니다. setter주입은 setXXX 메서드를 통하여 변경할 수 있고, 파라미터마다 setXXX를 만들면 선택적으로 주입할 수 있다.라고 생각이 들어 선택, 변경은 이해가 됐습니다. 생성자 주입은 생성자가 1번 호출 되는 것이 보장되기 때문에 불변도 이해가 됐습니다. 그러나 필수 이 부분은 어느 부분때문에 필수라고 말할 수 있는지 궁금합니다!! 긴 글 읽어주셔서 감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
JDK 11버전 사용중이고, 무료버전은 war를 사용할 때 톰켓 문제가 발생할 수 있다고 하셔서 gradle로 설정창에서 설정했습니다. 그리고 build.gradle에서 tomcat관련된 한 줄 삭제까지 했는데 톰캣 문제가 발생해요 ㅠㅠ
-
미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
nodemon
저 혹시 node typescript 에서 nodemon 을 설치해서 실행시킬려고하는데여 설치는 npm install -D nodemon 했구 package.json 에선 설정을 "scripts": { "dev": "nodemon", "start": "tsc && node index" }, 으로 했는데여 실행을 npm run dev 로 하니깐. cannot find module index.js 라고 나오더라구요. npx ts-node index.ts 로는 실행이 되는데 , 어디가 잘못됬을까요 ?
-
미해결실전! 스프링 데이터 JPA
RequestBody 내부에 List가 들어가는 경우
공부하다가 이해가 안되는게 있어서 남겨봅니다. 만약 post API가 다음과 같은 RequestBody를 받도록 설계하고 싶다고 가정해보겠습니다. // Item entity { "name": "string", "type": "string", "count": 999, "infoList": ["aaa", "bbb", "cc"], "remark": "string" } 질문 1. 강의를 통해 배운 방법으로 infoList를 만든다면 Info Entity를 별도로 만든 다음Item과 Info를 Join하는 방법이 있을 것입니다.그런데 info는 문자열만 있으면 되기 때문에 굳이 뎁스가 있게 구성하고 싶지 않았습니다.Info entity 없이 단순히 Item 엔티티에 배열만 넣는 방식은 무엇이 있을까요?@ElementCollection가 있다는 것은 아는데 이것만으로도 충분한지 궁금해서 질문을 남겨봅니다. 질문 2. 만약 Info entity를 만든다고 가정하고... 위 json처럼 리스트에는 문자열만 넣을 수 있을까요?@JsonUnwrapped라는 것이 있길래 이것으로 가능할까 궁금해서 질문을 남깁니다.
-
미해결따라하며 배우는 TDD 개발 [2023.11 업데이트]
beforeEach 사용 이유에 관해 질문드려요~
``` let req, res, next;beforeEach(() => { req = createRequest(); res = createResponse(); next = null;}); ``` beforeEach 강의 에서 전역 컨텍스트에 대해 위 코드처럼 하라고 말씀해주셨는데, 특정 describe 안에서만 공유 되는 값에 어떤 동작을 해야할 땐 beforeEach를 사용해야 하지만 위 코드처럼 단순히 '모든 테스트에서 공유해야 하는 값' 을 정의하는건 ``` const req = createRequest();const res = createResponse();const next = null; ``` 그냥 이렇게 상수로 정의하면 되지 않나요? beforeEach를 사용해야만 하는 이유가 있는지 궁금해서 질문드려요. 좋은 강의 잘 보고 있습니다 감사합니다.
-
미해결
백엔드 개발자 커리큘럼이 어떻게 되나요?
강의가 다양해서 어느 순서로 공부해야하는지 잘 모르겠습니다. 구글에 검색하면 프론트부터 맛보고 넘어가라는 분들도 있어서 인프런내에서 들을 수 있는 강의로 커리큘럼을 짜고싶습니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
플레이어 이동이 이상한 것에 관한 질문
두번째 while문 parent좌표를 꺼내올때 코드에서의 질문입니다. while(parent[y, x].Y != y || parent[y,x].X != x) { _points.Add(new Pos(y, x)); y = parent[y,x].Y; x = parent[y,x].X; } 저는 위와 같이 Y와 X에 parent[y,x]에서 바로 Y와 X를 가져와서 대입하는 식으로 코드를 작성하였습니다. 하지만 이 방식으로 코드를 작성하니 문제가 생겼습니다. 위 그림과 같이 플레이어가 모든 코너에서 그러는 것은 아니지만, 중간중간 코너를 지나갈때 코너를 거치지 않고 화살표 방향(대각선)으로 바로 이동하는 문제입니다. (미로는 잘 찾아갑니다) while(parent[y, x].Y != y || parent[y,x].X != x) { _points.Add(new Pos(y, x)); Pos pos = parent[y, x]; y = pos.Y; x = pos.X; } 그래서 혹시나 싶어서 선생님이 작성하신대로 위와 같이 변수 pos를 선언후에 parent[y,x]를 저장하여 y와 x에 대입하는 식으로 코드를 변경하였더니 모든 코너를 찍고 지나가며 정상적인 이동을 보여주었습니다. 위 코드와 아래 코드의 차이점이 무엇이고 왜 문제가 발생 하는것인가요? 과정의 차이일 뿐 결과는 같아야 하는것 아닌가요?
-
해결됨홍정모의 따라하며 배우는 C++
20.6 nanogui 실습 중 오류 발생 문제입니다.
영상에서 설명해주신 것과 같이 properties를 설정하고 빌드했습니다. exe파일 실행 시 abort() has been called 오류 팝업이 출력 됩니다.디버그 시도 시 bad allocation execption이 발생하네요. 해결할 방법을 찾지 못해 도움 부탁드립니다.
-
미해결초보자도 간단히 단숨에 배우는 파이썬 프로그래밍
주피터 창이 뜨지 않습니다
주피터를 실행하면 말씀하신 것처럼 홈페이지가 뜨는데, new>python3를 누르면 계속 새로고침 상태가 돌아가다가 제목없음이 뜨고 blank라고만 나옵니다. 시간을 두고 기다려봐도 나오지가 않는데, 어떻게 해결해야할까요?
-
미해결초보자도 간단히 단숨에 배우는 파이썬 프로그래밍
pip 설정
cmd를 열어서 pip --version을 치면 'pip'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 라고 뜹니다. 어떻게 해야할까요?
-
미해결초보자도 간단히 단숨에 배우는 파이썬 프로그래밍
if문 elif 사용
숫자맞추기 게임에서 while문 뒤에 if가 두 번 오는데 if, elif, else로 쓰지 않고 if로 두 번 써도 되는 것일까요? elif도 다른 조건이 있을 때 쓰는 것은 아닌지 궁금합니다!
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
2분3초에 data=df_last
삭제된 글입니다
-
미해결스프링 핵심 원리 - 기본편
스프링부트 사용 방법
스프링 부트를 사용하면(@SpringBootApplication를 사용하면) 설정 파일을 따로 만들지않고 클래스에 @Repository, @Service, @Controller를 붙여서 자동으로 빈을 등록하고 주입받는 방식으로 개발을 하는건가요?