묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결쉽게 시작하는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
2.3 vagrant up 실행 시 오류
질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다![질문 전 답변]1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | 아니요]2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | 아니요]3. 질문 잘하기 법을 읽어보셨나요? [예 | 아니요](https://www.inflearn.com/blogs/1719)4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.5. vagrant up 에서 발생하는 문제는 주로 호스트 시스템(Windows, MacOS)과 연관된 다양한 조건에 의해 발생합니다. 따라서 이를 모두 제가 파악할 수 없어서 해결이 어렵습니다. vagrant up으로 진행이 어렵다면 제공해 드리는 가상 머신(VM) 이미지를 import해서 진행하시기 바랍니다. (https://www.inflearn.com/questions/992407/comment/281901)[질문 하기] The box failed to unpackage properly. Please verify that the boxfile you're trying to add is not corrupted and that enough disk spaceis available and then try again.The output from attempting to unpackage (if any):bsdtar.EXE: Error opening archive: Unrecognized archive format 현재 용량 600기가 이상 남아있는 상태인데..해당 오류가 발생합니다..ㅠ
-
미해결실무 중심! FE 입문자를 위한 React
git 명령어를 찾을 수 없다고 하는데 git을 따로 설치해야 하는건가요?
PS D:\reactWorkspace\memo-project> git reset --hardgit : 'git' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.위치 줄:1 문자:1+ git reset --hard+ ~~~ + CategoryInfo : ObjectNotFound: (git:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundExceptionPS D:\reactWorkspace\memo-project>
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
섹션4 유저 데이터 저장 보충된 강의 부분에서...
안녕하세요 이번에 unity 처음 배우고 있는 학생입니다. PlayerPrefs를 한번에 저장하는 것에서 각 Class에서 저장하는 것으로 바꾸었는데 PlayerPrefs가 내부적으로 값이 변경되었는지 여부를 확인하여 저장을 하나요??만약 내부적으로 확인하지 않고 계속 저장한다면 오히려 디스크에 무리가 갈 것 같아 질문을 드립니다!
-
미해결
안녕하세요! IT 연합동아리 DND 입니다!
🎁선물 고민 해결을 위한 설문에 참여해주세요!🎁안녕하세요! IT 연합 개발 동아리 DND에서 사이드 프로젝트를 진행하고 있는 팀입니다.어떤 선물을 준비해야 할지 막막하셨던 경험이 있으신가요?저희는 선물 준비 과정을 도와주는 서비스를 기획하고 있습니다!선물을 준비했던 경험을 공유해주시면, 그 의견을 바탕으로 더 좋은 서비스를 만들고자 합니다!✔ 소요 시간: 약 5분➡ 설문 참여하기https://docs.google.com/forms/d/e/1FAIpQLSeAJLMoqQGVkG1MbtMA65D1adO7WsnBqCx9Jjqz0vCuN5tUMQ/viewform참여해주신 분들 중 추첨을 통해 아메리카노 기프티콘을 드립니다. 많은 참여 부탁드립니다! 🎉감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ArgumentResolver가 Service레이어 클래스, DB접근에 접근하는 클래스에 의존하도록 설계해도 괜찮나요?
문제 상황을 설명드리겠습니다. page 정보를 받아서 게시글 리스트, 페이지 정보를 View로 전달하는 Controller 코드 입니다. @GetMapping("/posts") public String getPosts(@RequestParam("page") String page, Model model) { // 사용자가 입력한 page문자열과 모든 post의 개수를 매개변수로 받아서 page 정보 생성 // 사용자가 입력한 page값을 검증 후 올바른 Page 정보를 반환한다. // "@#$", "hello" 같은 이상한 page값이 들어오면 모두 1로 변경한다. Page page = Page.validateAndCreate(page, postService.getPostsCount()); // page 정보를 사용하여 해당 page에 속하는 post들을 반환한다. List<Post> posts = postService.getPostList(page); // view로 데이터를 전달한다. model.addAttribute("page", page); model.addAttribute("posts", posts); }처음에는 위 방식으로 코드를 작성했습니다. 그런데 page정보 뿐 아니라, 다른 sorting정보, searching정보 등 여러 매개변수들이 들어오다 보니, Controller 코드가 복잡해진다고 느꼈습니다. 간단한 예시 코드는 아래와 같습니다.@GetMapping("/posts") public String getPosts(@RequestParam("page") String page, @ModelAttribute("sort") Sort sort, @ModelAttribute("search") Search search, .... 등등 , Model model) { // 여러가지 전처리 로직들 Page page = Page.validateAndCreate(page, postService.getPostsCount()); Sort sort = Sort.validateAndCreate(sort, ... ) Search search = Search.validateAndCreate(search, ...) ....등등 // 위에서 생성한 정보들을 바탕으로 DB에 쿼리를 날려 posts 데이터를 받아온다. List<Post> posts = postService.getPostList(page, sort, search, ...등등); // view에 필요한 데이터를 전달한다. model.addAttribute("page", page); model.addAttribute("posts", posts); model.addAttribute("sort", sort); ... 등등 }예시 코드는 문제상황 설명을 위해서 깔끔하게 작성했으나,실제로는 제 부족한 실력 탓에 지저분합니다. 저는 Controller 코드를 지저분하게 만드는 원인으로여러가지 전처리 로직들 (ex. Page.validateAndCreate(...) 코드들)View에 필요한 데이터들을 전달하는 model.addAttribute(...) 코드들 때문이라고 생각했습니다. 위 문제에 대한 해결방안으로 저는 ArgumentResolver를 사용하는 것을 떠올렸습니다.page에 대해서 @PageInfo라는 애노테이션을 정의하고, 이 애노테이션이 달린 매개변수에 대해서 1.여러가지 전처리 로직들을 수행해주고, 2.View에 자동으로 데이터들을 전달해주는, ArgumentResolver를 만들어주었습니다. Page에 대한 ArgumentResolver 코드는 다음과 같습니다. @RequiredArgsConstructor @Component public class PageRequestArgumentResolver implements HandlerMethodArgumentResolver { // 이 부분이 걱정입니다! ArgumentResolver가 특정 Service클래스에 의존해도 될까요? private final QuestionService questionService; @Override public boolean supportsParameter(MethodParameter parameter) { // @PageInfo를 가지고 있는 경우만 적용. boolean hasPageInfoAnnotation = parameter.hasParameterAnnotation(PageInfo.class); // 타겟변수가 Page 타입인 경우만 적용. boolean isPageClass = parameter.getParameterType().equals(Page.class); return hasPageInfoAnnotation && isPageClass; } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { // url에서 page문자열 정보를 추출. String pageString = webRequest.getParameter("page"); // page문자열 정보를 검증 및 생성. Page page = Page.validateAndCreate(pageString, questionService.provideAllQuestionsCount()); // mavContainer에 해당 정보를 넣어서 View로 자동전달. if (mavContainer != null) mavContainer.addAttribute("page", page); // 컨트롤러의 매개변수에 page정보를 바인딩. return page; } } 위 처럼 page정보 뿐 아니라, 다른 자주쓰는 매개변수들에도 ArgumentResolver를 정의하고 적용하면, 아래와 같이 Controller코드가 굉장히 깔끔해진다고 느꼈습니다.@GetMapping("/posts") public String getPosts(@PageInfo Page page, @SortInfo Sort sort, @SearchInfo Search search, ... 등등, Model model) { // 여러가지 전처리 로직들은 ArgumentResolver가 해주기 때문에 코드가 사라집니다. // 비즈니스 로직을 수행합니다. List<Post> posts = postService.getPostList(page, sort, search, ...등등); // View에 필요한 데이터도 ArgumentResolver의 mavContainer를 통해서 자동 전달됩니다. // 컨트롤러에서 관심이 있는 posts 정보만 전달합니다. model.addAttribute("posts", posts); } 그런데 이게 정말 좋은 코드인지 판단이 잘 서질 않습니다. 그리고 ArgumentResolver가 다른 Service 클래스에 의존을 해도 되는지가 의문입니다. AI에게 물어보니, 순환참조 문제가 발생할 수 있기 때문에 웬만해서는 하지 말라고하는데...
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
npx create-react-app mall 에러가 납니다
호환성 문제라고 본거같아서 이것저것 google에있는거 해보고 밀고 해보고 밀고 해봤는데도 안됩니다...
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 1부 저자 직강 (2024년 버전)
3.2.2.4 모드 복귀 부분
IRQ 모드에서 슈퍼바이저 모드로 복귀할 때의 SPSR_irq.M에 왜 다시 0x13을 넣어주는지 잘 모르겠습니다. 이미 해당 레지스터는 0x13으로 지정되어 있는데 SPSR_irq가 아니라 SPSR_svc.M에 CPSR.M을 넣고 오히려 CPSR.M을 0x13으로 변경해야하는 것이 아닌가요?
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
오류
아직 사용하기 전에 변수들이 있는 경우 아래 사진과 같이 표시되는데 오류가 발생하지 않도록 설정은 어떻게 하나요?
-
해결됨[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.
(해결)업그레이드 질문
안녕하세요, st link를 교환받은 학생입니다. st link와 연결하여 위의 프로그램을 통해 업그레이드 진행은 성공적으로 되었습니다.이후 st link와 보드를 연결하고 ide내부에서 업그레이드를 진행(HAL_INIT();디버깅 오류가 나서 업데이트 창이 뜸)하였으나위와 같은 오류가 떴습니다.보드에도 따로 usb케이블을 연결하여 전원을 공급하여 업그레이드를 진행하였으나 2번의 오류가 다시 발생합니다.** st link와 보드를 연결시 보드에 불이 들어오지 않습니다.이후 보드에 휴대폰 충전 어댑터를 이용해 전원을 공급하면 일시적으로 빨간불이 들어오나 이내 곧 다시 꺼집니다.더 진행해봐야 할 사항이 있을까요? 해결하였습니다.고속 충전용 휴대폰 어댑터를 사용해서 보드에 전원이 바로 꺼지는 것인가 싶습니다.낮은 출력의 어댑터를 이용하여 보드에 전원 공급시 빨간불이 지속적으로 들어와있는 상태였고3.IDE에서 기존 설정해둔 폴더와 파일을 삭제 후 다시 처음부터 프로젝트를 만들었습니다. 더불어 경로상에 한글이 없도록 지정해두었습니다. 위 3가지를 모두 적용하였더니 정상적으로 HAL_Init()에서 걸렸습니다. 이것이... 임베디드의 길인가요,, 추가질문 - 보드에 별도 전원을 연결하지 않을시 보드에 LED가 들어오지 않는다면 실습하는 동안은 계속 보조 전원을 통해 전원을 공급해야하나요?
-
해결됨쉬운 모바일 테스트 자동화 시작하기 : Appium Studio
가상 Device에서 App 설치시 생기는 에러 팝업 해결 문의
Android studio 에서 가상 device를 설정 한뒤 Appium과 연결 한 후 Experibank를 install 해보려고하는데 에러 팝업이 발생하여 Android studio의 SDK Manamger > API LEVEL 확인시 34, 24, 14 다 체크표시로 확인 되는데 제가 여기서 추가적으로 설치하거나 확인 해야 하는게 있을까요? 에러팝업 문구 내용: The application installation on the device sdk_gphone 16k_x86_64 has failedfailed to install application:INSTALL_FAILED_DEPRECATED_SDK_VERSION:App package must target at least SDK Version 24, but found 14
-
미해결3D 모델링 입문을 위한 라이노(Rhino) '꿀팁' Part.2
라이노 저장
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 수업하다가 중간에 라이노 수업 듣다가 라이노에서 파일-저장 하게되면 전에 사용하던 뒤로가기나 앞으로 가기는 당연히 안되는게 당연한거겠죠?파일을 저장하고 다시 실행하였는데 돌출을 서피스 방향을 양쪽으로 하고 싶은데 ctrl+z 눌러서 다시 전으로 돌아가려고 하니 실행 취소할 내용이 없다고 하는데 처음부터 그러면 다시 만들어야될까요?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
name을 넣지 않을 경우 input에 입력되지 않는 이유
안녕하세요 강사님수업 도중에 input 태그에 name을 넣지 않을 경우 아무런 입력이 되지 않는걸 확인했습니다.그래서 onChange 함수에서 에러가 발생해서 이벤트가 도중에 끊겼을 것이라고 예상하고 try catch로 감았는데도 exception이 발생하지 않더라구요.혹시 왜 입력이 되지 않는 것인지 알 수 있을까요?감사합니다~~! import { useState } from "react"; const Register = () => { const [input, setInput] = useState({ name: "", birth: "", country: "", bio: "" }) const onChange = (e) => { try { setInput({ ...input, [e.target.name]: e.target.value }) } catch (err) { console.log(err); } // setInput({ // ...input, // [e.target.name]: e.target.value // }) } //const onChangeName = (e) => { // setInput({ // ...input, // name: e.target.value // }) //}; //const onChangeBirth = (e) => { // setInput({ // ...input, // birth: e.target.value // }) //}; //const onChangeCountry = (e) => { // setInput({ // ...input, // country: e.target.value // }) //}; //const onChangeBio = (e) => { // setInput({ // ...input, // bio: e.target.value // }) //}; return ( <div> <div> <input // name="name" value={input.name} //onChange={onChangeName} onChange={onChange} placeholder={"이름"} /> {input.name} </div> <div> <input name="birth" value={input.birth} //onChange={onChangeBirth} onChange={onChange} type="date" /> {input.birth} </div> <div> {/* <select value={input.country} onChange={onChangeCountry}> */} <select value={input.country} name="country" onChange={onChange}> <option value=""></option> <option value="kr">한국</option> <option value="us">미국</option> <option value="uk">영국</option> </select> {input.country} </div> <div> {/* <textarea value={input.bio} onChange={onChangeBio} /> */} <textarea value={input.bio} name="bio" onChange={onChange} /> {input.bio} </div> </div> ); }; export default Register;
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ResponseStatusException 질문 (강의 13분 54초)
[질문 내용]ResponseStatusException에 세개의 파라미터가 담기는데, 세번째 파라미터가 무엇인지 정확히 이해가 가지 않습니다. 실제로 /api/response-status-ex2가 호출 되었을 때, IlleagalArgumentException이 발생한다면,그 대신에 HttpStatus.NOT_FOUND(404)를 내보내주고, "error.bad"를 메시지로 내보내준다는 뜻이 맞나요?
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
몬스터 스폰 관련 질문
안녕하세요 강사님.강의 잘 보고 있습니다.지금 섹션 4. Multiplay의 몬스터 스폰 영상을 보고 있는데, Spawner 로직과 관련하여 궁금한 점이 있어 글을 남기게 되었습니다.영상 중에 강사님께서 “상대방의 몬스터는 위쪽에, 자신의 몬스터는 아래쪽에 나오는 것을 볼 수 있다.”라고 설명해주셨는데요,제가 직접 클라이언트 쪽 스폰 로직을 수정하여 테스트해본 결과, 호스트와 클라이언트 각각에서 상대방이 요청한 몬스터가 화면의 하단에 표시되는 것으로 확인되었습니다.물론 제가 아직 섹션 4. Multiplay의 몬스터 스폰 영상까지만 본 상태이므로, 이후 강사님께서 정정해주셨을 수도 있습니다. 다만 혹시라도 같은 부분에서 궁금증을 가지실 수강생들을 위해, 가능하시다면 이 내용을 한 번 확인해주시면 감사하겠습니다.제가 잘못 이해한 부분이 있다면 언제든 말씀 부탁드립니다.항상 좋은 강의 제공해주셔서 감사합니다.좋은 하루 되세요![Spawner에서 수정한 부분][클라이언트에서 본 각각의 몬스터]Client 0 즉, 호스트의 요청으로 스폰된 몬스터가 상대방인 클라이언트의 입장에서 아래쪽에 보이는 모습.Client 1 즉, 클라이언트 자신의 요청으로 인해 스폰된 몬스터가 상단에 위치한 모습 [호스트에서 본 각각의 몬스터]
-
미해결프로젝트로 배우는 Python 챗봇 & RAG - LangChain, Gradio 활용
[질문드립니다] poetry export -f requirements.txt --output requirements.txt
선생님께서 알려주신대로 txt 파일 뽑은 후(해시가 담겨있는) requirements.txt 업로드 시 서버에서 아래와 같은 에러가 났었습니다. 혹시 몰라서 pip freeze > requirements.txt로 생성한 뒤 업로드 해보니 제대로 실행이 되더라고요...! 이게 왜 그런걸까요? 선생님께서는 현재도 poetry export -f requirements.txt --output requirements.txt 로 만든 후 업로드 해도 실행이 잘 되시는 걸까요?'에러': ===== Application Startup at 2025-01-09 14:21:54 ===== Traceback (most recent call last): File "/home/user/app/app.py", line 2, in <module> from dotenv import load_dotenv ModuleNotFoundError: No module named 'dotenv'QnA 정리:poetry export -f requirements.txt --output requirements.txt 한 후에 업로드 했더니 서버에서 모듈을 다운로드 하지 못함pip freeze > requirements.txt 로 한 후에 업로드 했더니 서버에서 모듈을 정상적으로 다운로드 하고 app.py를 실행함
-
해결됨그림으로 쉽게 배우는 네트워크
서브넷 마스크로 IP주소 낭비를 막는 부분 질문드립니다.
서브넷 마스크에 대해 잘 이해가 안가서 질문드립니다. IP를 관리하는 기관에서 IP 클래스를 크게 줄 수 밖에 없어서, 서브넷 마스크로 더 잘게 나눠 IP주소 낭비를 막는다고 설명해주셨는데요. 만약 300개의 IP가 필요한 회사에서 기관에 클래스 C가 부족해서, 클래스 B IP(6만5천개)를 할당받는다고 가정할때서브넷 마스크는 회사의 네트워크 관리자가 관리하니까 클래스 B의 IP를 서브넷팅을 해서 분리하더라도, 할당받은 클래스 B IP는 계속 가지고 있어, 낭비되는거 아닌가요? 서브넷 마스크가 기존 IP 비효율적인 할당을 어떻게 줄일 수 있는지 추가적인 설명 부탁드려봅니다.
-
미해결모바일 웹 퍼블리싱 포트폴리오 with Figma
모바일 웹 레이아웃 도움요청드립니다! (왕초보)
CSS 구조 문의드립니다.Wrapper를 이용해서 인증번호, 재발송, 우편번호 찾기 버튼을 화면 안으로 넣고 싶은데 어떻게 하는지를 도저히 모르겠습니다.. 아시는 분은 도와주시면 정말 감사하겠습니다.style.css 일부/* Import Local CSS */ @import url('/css/reset.css'); @import url('/css/variables.css'); * { font-family: var(--primary-kr); font-weight: 500; box-sizing: border-box; } body { margin: 0; font-family: var(--primary-kr); color: var(--dark-black); font-size: 14px; } .container { width: 100%; max-width: 393px; margin: 0 auto; padding: 16px; background-color: var(--white); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 10px; box-sizing: border-box; font-family: var(--primary-kr); } .phone-input-wrapper { display: flex; /* 플렉스 박스 설정 */ justify-content: space-between; } .phone-input-wrapper input[type="tel"] { width: 60%; /* 입력 필드가 가변적인 공간을 차지 */ padding: 10px; border: 1px solid var(--gray); font-size: 14px; height: 40px; /* 동일한 높이 */ box-sizing: border-box; /* 패딩과 테두리를 포함한 크기 계산 */ } .phone-input-wrapper .btn-certification { width: 40%; /* 선택박스의 고정 너비 */ height: 40px; /* 입력 필드와 동일한 높이 */ padding: 10px; border: 1px solid var(--gray); font-size: 14px; box-sizing: border-box; /* 패딩 포함 */ } /* 인증번호 입력 필드 */ .auth-input-wrapper { display: flex; /* Flexbox로 가로 정렬 */ align-items: center; /* 세로 중앙 정렬 */ justify-content: space-between; width: 100%; /* 부모 요소의 너비를 꽉 채움 */ max-width: 393px; box-sizing: border-box; /* 패딩 포함 */ position: relative; /* 타이머 배치를 위해 필요 */ flex-wrap: wrap; } .auth-input-wrapper input { flex: 0; /* 입력 필드가 가용 공간을 차지 */ height: 40px; border: 1px solid var(--gray); font-size: 14px; box-sizing: border-box; min-width: 70%; /* 최소 너비 설정 */ } .auth-input-wrapper .timer { flex: 0; position: absolute; /* 입력 필드 내부 배치 */ right: 45%; top: 50%; transform: translateY(-50%); font-size: 14px; color: var(--alert-red); pointer-events: none; /* 클릭 불가 */ } .auth-input-wrapper .reset { display: flex; position: absolute; align-items: center; right: 40%; justify-content: center; text-decoration: none; /* 기본 링크 스타일 제거 */ margin-left: 10px; /* 타이머와의 간격 */ overflow: hidden; } .auth-input-wrapper .reset-link img { width: 16px; /* 아이콘 크기 */ height: 16px; } .auth-input-wrapper .reset-link:hover { background-color: var(--lightblue); /* 호버 시 색상 변경 */ transition: background-color 0.2s ease; } .auth-input-wrapper .btn-resend { flex: 1; height: 40px; font-size: 14px; color: white; background-color: var(--blue); border: none; border-radius: 6px; cursor: pointer; white-space: nowrap; /* 텍스트 줄바꿈 방지 */ min-width: 60px; /* 버튼 최소 너비 */ } /* 주소 필드 래퍼 */ .address-wrapper { display: flex; align-items: center; width: 100%; /* 화면 너비에 맞춤 */ box-sizing: border-box; } .address-wrapper input[type="text"] { width: 60%; height: 40px; padding: 10px; border: 1px solid var(--gray); font-size: 14px; box-sizing: border-box; min-width: calc(70% - 10px); /* 최소 너비 */ } .address-wrapper .btn-post-search { flex: 0 0 auto; /* 버튼 크기 고정 */ height: 40px; padding: 0 15px; font-size: 14px; color: white; background-color: var(--navybutton); border: none; border-radius: 6px; cursor: pointer; white-space: nowrap; /* 텍스트 줄바꿈 방지 */ min-width: 100px; /* 버튼 최소 너비 */ } signup-email.html <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>회원가입</title> <link rel="stylesheet" href="/css/style.css"> </head> <body> <!-- Signup Form --> <div class="signup-content"> <div class="signup-field"> <label for="username">아이디<em>*</em></label> <input type="text" id="username" placeholder="아이디 입력" required> </div> <div class="signup-field"> <label for="password">비밀번호<em>*</em></label> <input type="password" id="password" placeholder="영문+숫자+특수문자 8자 이상" required> </div> <div class="signup-field"> <label for="password-check">비밀번호 확인<em>*</em></label> <input type="password" id="password-check" placeholder="비밀번호 확인 입력" required> </div> <div class="signup-field"> <label for="name">이름<em>*</em></label> <input type="text" id="name" placeholder="이름 입력" required> </div> <div class="signup-field"> <label for="email"> 이메일<em>*</em> </label> <div class="email-input-wrapper"> <input type="email" id="email" name="email" placeholder="이메일 입력" required> <select name="email-domain" id="email-domain"> <option value="">선택하기</option> <option value="gmail.com">gmail.com</option> <option value="naver.com">naver.com</option> <option value="daum.net">daum.net</option> </select> <span class="dropdown-icon"></span> <!-- SVG 아이콘 위치 --> </div> </div> <div class="signup-field"> <label for="phone">휴대폰<em>*</em></label> <div class="phone-input-wrapper"> <input type="tel" id="phone" placeholder="숫자만 입력" required> <button class="btn-certification">인증번호</button> </div> </div> <div class="signup-field"> <label for="auth-code"></label> <div class="auth-input-wrapper"> <input type="text" id="auth-code" placeholder="인증번호 입력" required> <span class="timer">00:00</span> <a href="#" class="reset"> <img src="/images/reset.svg" alt="Reset Icon"> </a> <button class="btn-resend" type="button">재발송</button> </div> </div> <div class="signup-field"> <label for="address">주소<em>*</em></label> <div class="address-wrapper"> <input type="text" id="address" placeholder="주소 입력" required> <button class="btn-post-search">우편번호 찾기</button> </div> </div> <div class="signup-field"> <label for="address-detail"></label> <input type="text" id="address-detail"> </div> <div class="signup-field"> <label for="address-detail">상세주소<em>*</em></label> <input type="text" id="address-detail" placeholder="상세 주소 입력" required> </div> <p class="notice">배송지에 따라 상품 정보가 달라질 수 있습니다.</p> <div class="thirdline"></div> <!-- 위에 줄 --> </div> </body> </html> style.css
-
미해결리눅스 입문 - 개념으로 탄탄히!!
소프트링크 질문
안녕하세요 강의 잘 듣고있는 예비 개발자입니다.별로 쓸모없는 질문일수도 있지만 궁금해져서 여쭤봅니다.혹시 심볼릭 링크의 권환만 바꿀수 있나요?예를들어 원본파일의 권환이 777일때 심볼릭 링크만 444로 바꿔 읽기접근만 가능하게 할 수 있나요?실제로 chmod 실행시 원본파일의 권환이 바뀌어서 질문드려봅니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
39:33 res 리턴값
너무 잦은 질문 죄송합니다.몇번을 돌려봐도 리턴이 헷갈리네요 재귀함수를 통해 int res = 15 를 구한다음메인함수에 int sum=nSum(n)에 들어 가는거 같은데res가 갑자기 nSum에 리턴이 되는걸 어떻게 이해해야 될지 모르겠습니다. 첫번째 호출->자기자신 호출까지는 이해했는데결과값이 리턴하는 순서? 공식?이 잘 정립이 안되네요 ㅠㅠ
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
API 다중 요청시 refreshToken 다중 요청에 대해서
Dio로 inspector을 구현한 이후 토큰 만료 시 refreshToken으로 accessToken을 재발급하는 과정에서 만약 API요청을 하나만이 아니라 동시에 3개가 요청되는 상황일 때 어떻게 되는지 궁금합니다. 시나리오는 게시글의 상세페이지로 이동하였을 때 게시글, 댓글, 사용자 정보 등의 API를 동시에 보내게 된다면 모두 요청 중인 상황이고 그 상황에서 accessToken이 만료된 상황이라면 3 모두 다 refreshToken으로 3번 accessToken을 요청되어 accessToken이 꼬이게 되는 상황이 나올 것 같아 질문 드립니다