묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨곰책으로 쉽게 배우는 최소한의 운영체제론
DMA와 고성능 소켓관련 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강의를 보다 IOCP를 사용할 경우 사용자의 메모리에 바로 copy되는 부분을 보고 몇가지 글을 읽은뒤 궁금한점이 생겨 질문드리게 되었습니다. 먼저 IOCP를 사용할 때 SO_RCVBUF의 사이즈를 0으로 한 후에WSARecv()함수를 사용하여 사용자 메모리를 재공했을 떄 혼잡제어가 어떻게 동작하는 지 궁금합니다. 혼잡제어가 사용자가 제공한 메모리 크기기 준으로 동작허게 되나요?
-
해결됨그로스해킹 - 데이터와 실험을 통해 성장하는 서비스를 만드는 방법
retention rate, revenue 쪼개보기를 sql로 작성해 보았습니다.
https://github.com/NeoSeo/Obsidian/tree/5b5e077f431f28b174d0174e5f594b9ed5a13b7b/Project/Retention_Rate분석 공부하시는 분 중에 sql 공부하시는 분도 많을 것 같아서 sql용 쿼리도 만들어 봤습니다. 도움이 됐으면 좋겠습니다.Postgresql로 작성했으니 참고하세요~
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다..!
안녕하세요 선생님. 좋은 강의 잘 듣고 있습니다.다름이 아니라 컴공과 학생이라 github를 만들어보고 싶은데 유튜브 강의를 봐도 어떻게 코드를 올리고 쉽게 조작하는지 쉽지가 않더라구요.. git를 다 설치하고 아이디는 만들었는데 레퍼토리를 올리고 조작하는게 너무 어렵네요:(혹시 github에 대한 영상이나 방법은 따로 올리신게 없을까요?항상 감사드립니다 선생님!
-
해결됨디지털포렌식 입문자를 위한 디지털포렌식 전문가 2급 실기 시험대비 강의(Encase/Autopsy)
Ence 프로그램 관련
안녕하세요.</>드디어 11강을 시작하게되어 Ence 프로그램을 접하게 되었는데요. 아래와같은 질문이 있습니다.[1]Ence는 동글이 없으면 작동이 안되나요?[2]시험장에도 동글을 지참해서 가야하나요? 위의 두가지 질문을 드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
BasicErrorController과 WebServerCustomizer의 동시사용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요BasicErrorController를 사용하면 뷰템플릿만 작성을 하여도 해당 에러에 맞는 뷰를 렌더링해준다는 것으로 이해했는데요, 에러페이지를 직접등록할때는 ErrorPage errorPageEx = new ErrorPage(RuntimeException.class, “/error-page/500”);처럼 런타임예외가 터졌을때 /error-page/500경로에 해당하는 핸들러메소드를 호출할 수 있었습니다. 만약 RuntimeException이 터졌을때 특정 뷰템플릿을 렌더링하고싶을때는 어떻게 해야할지 궁금합니다. BasicErrorController를 씀과 동시에 WebServerCustomizer에서 에러페이지를 등록해줘야 하는 것일까요?그리고 저희가 ErrorPage를 등록할 떄 BasicErrorController를 알지 못한 상태였는데요, 이는 에러페이지를 직접 등록했을 때는 BasicErrorController에 의한 뷰템플릿호출이 후순위로 밀려 작동하지 않는다고 볼 수 있을까요?
-
미해결캐글 Advanced 머신러닝 실전 박치기
초거대 데이터셋을 Submission하려면?
안녕하세요, 캐글 공부하다가 궁금증이 생겼습니다. 제가 참여하고 있는 Closed 대회 데이터가 워낙 커지니 모델의 크기도 그만큼 커지게 되는데, 이때 Kaggle Notebook은 성능이 그닥 좋지 못해서 모델 학습 시간이 너무 오래 걸려 Timeout되거나 OOM이 뜹니다. 이를 해결하는 방법이 어떤 게 있을까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
save에서 Item을 반환하는 이유가 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제목 그대로 ItemRepository의 save는저장소에 저장만 하는 메서드인데 void를 쓰지 않고 Item을 반환하는 이유가 따로 있을까요??
-
미해결모던 안드로이드 - 코틀린과 Jetpack 활용
Room db kotlin 강의중에서
강사님 늘 건강하시고 부자되세요 아래 activity_main.xml 내의 요소들과 관련된 부분에서 빨간줄이 생깁니다 왜 그런지 .....
-
미해결따라하면서 배우는 고박사의 유니티 기초
2D Tilemap Editor 2:00에서요
+ -> tile을 누르라 하셨는데 어딜 찾아봐도 안보이네요 그래서 7개 중에서 뭐라도 눌러야 할까요?
-
미해결홍정모의 따라하며 배우는 C++
class 생성자 함수 오버로딩
안녕하세요. 8.5강 3:55 부근입니다. 교수님께서//아래는 Student Class의 생성자들입니다. Student(const string& name_in) //: m_id(0), m_name(name_in) : Student(0, name_in) {} Student(const int& id_in, const string& name_in) : m_id(id_in), m_name(name_in) {} ... 와 같이 Student 클래스에 생성자 두 개를 만드셨습니다. 이때, 아래와 같이 Student클래스에 대한 인스턴스가 각각 st1, st2이렇게 있는데요int main() { Student st1(0, "Jack Jack"); st1.print(); Student st2("Dash"); st2.print(); return 0; }st1는 Student st1(0, "Jack Jack"); 와 같이 (표현이 올바른지는 모르겠습니다 -->) 생성자 함수를 int와 string 두 개의 매개변수로 호출하는데, 이때, 이름이 같은 생성자 함수가 여러개 있음에도 함수 오버로딩을 통해 int와 string을 매개변수로 가지는 생성자 함수를 알아서 찾게 됨으로써Student(const int& id_in, const string& name_in) : m_id(id_in), m_name(name_in) {}의 생성자만 단독으로 호출되는 원리인가요? 감사합니다.
-
미해결데이터 분석 SQL Fundamentals
schema 설치 이상 (nw)
hr schema는 정상적으로 설치가 되고 작동하는 것 같은데,nw schema는 설치시에 오류가 뜨게 됩니다.본수업에서 했던 방식에서 nw 열었을 때, 내용이 비어 있어서 github에 올린 것으로 create schema nw 진행했습니다. 그런데 이런 오류가 발생하고 있습니다.Dbeaver를 재설치 하거나 하지는 않았고,schema를 지웠다가 다시 해도 동일한 오류가 뜨고 있습니다.(맥환경입니다.) 강의를 따라해도 되지 않고, 방법을 몰라 여쭈어 봅니다.
-
미해결스프링 부트 - 핵심 원리와 활용
executable jar 파일 만들기에 질문이있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.fat 방식의 executable jar 방식 외에,지정된 lib 폴더로 별도 디펜던시가 있는 jar 파일을 복사가 되게하여 jar 패키징시 MANIFEST.MF 에 main class 와 class-path 를 지정된 lib 폴더 경로를 주어서 executable jar 로 만들어 주면 jar 가 자신의 내부의 jar 를 class path 로 로딩 할수 있는 것으로 생각하였습니다.강의에서 말씀해주신 내용을 보면 별도의 클래스로더가 있어야만 하는것 같아서 해당 내용 관련해서 심층있게 한번더 설명해주실수 있을까해서 질문드렸습니다.감사합니다.
-
미해결배달앱 클론코딩 [with React Native]
장소 검색 기능 구현을 하다가 난관에 봉착해, 조언을 요청드립니다.
질문 카테고리를 변경하다가 내용이 다 삭제되어 다시 질문을 올립니다ㅠㅠ우선 좋은 강의 만들어 주셔서 감사합니다!초보자임에도 불구하고 강의를 듣고 나서 앱을 만들 수 있겠다는 자신감을 얻어 앱을 만들던 중 난관에 봉착하여 질문을 드립니다. 만드려고 하는 기능은 다음과 같습니다.사용자가 장소를 검색.검색한 장소를 네이버 지도에서 마커로 표시해줌. 질문은 다음과 같습니다.장소 검색 기능을 추가하려고 합니다. 카카오 장소 검색 api를 사용하는 것이 제일 좋은 방법인지 궁금합니다.카카오 장소 검색 api는 웹뷰를 이용해야 하는 것 같은데 웹뷰 구동 방식이 제가 생각하는 방식이 맞는지 궁금합니다.reactnative에서 react 프로젝트 호출 -> react에서 카카오 장소 검색 api 호출 -> 카카오 api 응답 -> react에서 reactnative 프로젝트로 응답 전달 -> reactnative에서 응답을 받아서 사용 제가 알아본 과정은 다음과 같습니다.제로초님께서 react-native-naver-map 라이브러리는 장소 검색 기능이 없다는 것을 알게 되었습니다.장소 검색을 하기 위해서는 새로운 api를 사용해야 한 다는 것을 깨닫고, 네이버 장소 검색 api를 확인해본 결과, 네이버 장소 검색 api는 최대 5개의 결과값만 받을 수 있다는 것을 알게 되었습니다.응답을 5개만 받을 수 있다는 한계가 너무 명확하여, 대안을 찾던 도중 카카오 장소검색 api, 구글 장소 검색 api가 있는 것을 확인하였습니다.구글 장소 검색 api를 사용한 블로그 글이 꽤 있었지만 네이버 지도 + 구글 장소 검색 api 조합을 사용 할 거라면 차라리 구글 지도 + 구글 장소 검색 api 조합이 더 좋을 것 같다는 판단을 하였지만 네이버 지도를 사용하고 싶었기 때문에 최종적으로는 네이버 지도 + 카카오 api를 사용하려고 합니다.카카오 장소 검색 api를 사용하기 위해 카카오 장소 검색 안드로이드 api 공식 문서를 살펴본 결과, 내용이 자바 코드로 안내가 되어있었습니다.처음에는 자바 코드로 작성되어 있어서 어리둥절 하였지만 안드로이드는 자바 or 코틀린으로도 개발한다는 것을 알게 되었습니다. 몇몇 블로그를 살펴보니 reactnative에서 카카오 장소 검색 api를 사용할 때는 웹뷰를 사용한다는 사실을 알게 되었습니다.웹뷰를 사용한다면 리액트 프로젝트를 따로 만들고 구동해야 하는 것 같은데, 이게 최선의 방법인지 혼란스러워서 질문을 남기게 되었습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
오라클 연동되어 있는데 h2데이터베이스 설치해야될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 인텔리제이 유료버전으로 설치해서 오라클을 연동해서 데이터베이스를 불러올수 있습니다선생님이 설치하시는 h2 로 설치해서 수업을 따라가야 할지 오라클로 진행해도 무리 없을지문의드립니다(스프링 기본편도 들을 예정입니다)유료버전과 강의의 무료버전으로 진행하는게 다른점이 있을지도 문의드립니다(유료버전 첫달 사용해보려는데 굳이 유료를 쓰는 이유가 어떤게 있을지도 알수 있을까요?저는 우선 추천받아서 결제를 진행하였습니다!)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
오라클 연동되어 있는데 h2데이터베이스 설치해야될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 인텔리제이 유료버전으로 설치해서 오라클을 연동해서 데이터베이스를 불러올수 있습니다선생님이 설치하시는 h2 로 설치해서 수업을 따라가야 할지 오라클로 진행해도 무리 없을지문의드립니다(스프링 기본편도 들을 예정입니다)유료버전과 강의의 무료버전으로 진행하는게 다른점이 있을지도 문의드립니다(유료버전 첫달 사용해보려는데 굳이 유료를 쓰는 이유가 어떤게 있을지도 알수 있을까요?저는 우선 추천받아서 결제를 진행하였습니다!)
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
await 관련해서 질문드릴게 있습니다!!
안녕하세요 강사님 !! ㅎㅎ 강의 재밌게 듣고 있습니다. async await 방식이 코틀린의 코루틴과 굉장히 유사하다고 생각이 되는데 그럼 다음과 같이 Promise.all 대신 await를 늦추는 방식으로 풀어써도 똑같이 동작하나요?? async createBlog() => { await Promise.all([ Blog.insertOne({...}), // 1000ms User.UpdateOne({...}) // 1000ms ]) } // 실행시간 : 1000ms // 질문코드 async createBlog() => { const blogPromise = Blog.insertOne({...}) // 1000 ms const userPromise = User.updateOne({...}) // 1000 ms A(await blogPromise, await userPromise) } // 실행시간 : 1000ms(?)
-
해결됨홍정모의 따라하며 배우는 C언어
2분 5초경 5분 37초경 질문있습니다.
5분 37초 ch = fgetc(fp);로 버퍼에 문자들을 채우고 거기서 1글자를 가져오고 for (int i = 0; i < sizeof(buffer); ++i) printf("%c", buffer[i]);printf("\n");로 버퍼에 있는 내용들을 전부 출력해보면 fgetc() 함수로 가져온 문자를 포함해모든 문자가 출력되는 걸 볼 수 있는데 제가 알기로는 버퍼에 있는 내용을 복사를 하면 복사를 한 내용이 버퍼에서는지워지는 걸로 알고 있는데 그렇다면 버퍼에서 먼저 fgetc() 함수로 가져온 문자가지워져서 버퍼의 내용들을 출력할 때 그 문자는 제외되어야 하는 것 아닌가요?제가 버퍼에 대해 잘못 이해하고 있는 건가요?
-
미해결
403 인증 토큰을 가져오지 못하고 리다이렉트 실패하는 에러.
403 에러로 고생을 겪고 있습니다. fetch에러로, 인증 문제 로그인 페이지로 리다이렉트 되야 되는데 서버에서 받지 못해 로그에는 [nio-8080-exec-7] c.e.d.security.JwtAuthenticationFilter : Received token from request: null 이렇게 뜹니다. 서버측 코드package com.example.demo.security; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AbstractAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @Slf4j @Component public class JwtAuthenticationFilter extends OncePerRequestFilter { @Autowired private TokenProvider tokenProvider; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { try { // 요청에서 토큰 추출 및 로깅 String token = parseBearerToken(request); log.info("Received token from request: {}", token); if (token != null && !token.equalsIgnoreCase("null")) { // 토큰 검증 및 로깅 String userId = tokenProvider.validateAndGetUserId(token); log.info("Authenticated user ID: {}", userId); // 인증 완료; SecurityContextHolder에 등록 AbstractAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( userId, null, AuthorityUtils.NO_AUTHORITIES ); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(authentication); SecurityContextHolder.setContext(securityContext); } } catch (Exception ex) { log.error("Could not set user authentication in security context", ex); } filterChain.doFilter(request, response); } private String parseBearerToken(HttpServletRequest request) { String bearerToken = request.getHeader("Authorization"); if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { return bearerToken.substring(7); } return null; } } package com.example.demo.security; import com.example.demo.model.UserEntity; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; import io.jsonwebtoken.SignatureAlgorithm; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Date; import java.security.Key; @Slf4j @Service public class TokenProvider { private static final Key key = Keys.secretKeyFor(SignatureAlgorithm.HS512); public String create(UserEntity userEntity) { // 기한을 현재부터 1일로 설정 Date expiryDate = Date.from( Instant.now() .plus(1, ChronoUnit.DAYS)); // JWT Token 생성 return Jwts.builder() // header에 들어갈 내용 및 서명을 하기 위한 시크릿 키 .signWith(key) // payload에 들어갈 내용 .setSubject(userEntity.getId()) // sub .setIssuer("demo app") // iss .setIssuedAt(new Date()) // iat .setExpiration(expiryDate) // exp .compact(); } public String validateAndGetUserId(String token) { // parseClaimsJws 메서드가 Base64로 디코딩 및 파싱. // 즉, 헤더와 페이로드를 setSigningKey로 넘어온 시크릿을 이용해 서명 후, token의 서명과 비교. // 위조되지 않았다면 페이로드(Claims) 리턴 // 그 중 우리는 userId가 필요하므로 getBody를 부른다. Claims claims = Jwts.parserBuilder() .setSigningKey(key) .build() .parseClaimsJws(token) .getBody(); return claims.getSubject(); } } package com.example.demo.config; import com.example.demo.security.JwtAuthenticationFilter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; import org.springframework.web.filter.CorsFilter; import org.springframework.web.cors.CorsConfiguration; @EnableWebSecurity @Slf4j @Configuration public class WebSecurityConfig { @Autowired private JwtAuthenticationFilter jwtAuthenticationFilter; @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .cors(cors -> cors.configurationSource(request -> { CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOriginPattern("http://localhost:3000"); // 변경된 부분 config.addAllowedHeader("*"); config.addAllowedMethod("*"); return config; }))// CORS 설정 .csrf(csrf -> csrf.disable()) // CSRF 설정 비활성화 .httpBasic(httpBasic -> httpBasic.disable()) // HTTP Basic 인증 비활성화 .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 세션 관리 설정 .authorizeHttpRequests((authorizeRequests) -> authorizeRequests .requestMatchers("/", "/auth/**","/login").permitAll() .anyRequest().authenticated() ) .addFilterAfter(jwtAuthenticationFilter, CorsFilter.class); return http.build(); } } 프론트엔드 측 코드 // ApiService.js import { API_BASE_URL, ACCESS_TOKEN } from "../app-config"; export function call(api, method, request) { let headers = new Headers({ "Content-Type": "application/json", }); const accessToken = localStorage.getItem(ACCESS_TOKEN); if (accessToken && accessToken !== null) { headers.append("Authorization", "Bearer " + accessToken); } let options = { headers: headers, url: API_BASE_URL + api, method: method, }; if (request) { options.body = JSON.stringify(request); } return fetch(options.url, options) .then((response) => { if (!response.ok) { throw new Error(response.status); } return response.json(); }) .catch((error) => { console.log(error); if (error.message === "403") { window.location.href = "/login"; } return Promise.reject(error); }); } export function signin(userDTO) { return call("/auth/signin", "POST", userDTO).then((response) => { if (response.token) { localStorage.setItem(ACCESS_TOKEN, response.token); window.location.href = "/"; } }); } export function signout() { localStorage.setItem(ACCESS_TOKEN, null); window.location.href = "/login"; } export function signup(userDTO) { return call("/auth/signup", "POST", userDTO); } 프론트엔드에서 토큰을 생성하고 서버와 통신하는데, 403에러로 인증이 되지 않은 사용자는 login 페이지로 가는 것인데 처음부터 로그인 페이지가 뜨질 않습니다.
-
해결됨Flutter로 SNS 앱 만들기
섹션6 갤러리에서 여러개의 이미지 선택에서 비동기동작
body: Container( alignment: Alignment.topCenter, padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15), child: InkWell( onTap: () { selectImages(); }, child: Container( width: 80, height: 80,selectImages(); 여기에서 비동기로 동작한다고 했는데 왜 비동기 동작인지요?
-
미해결배달앱 클론코딩 [with React Native]
장소 검색 기능 구현을 하다가 난관에 봉착해, 조언을 요청드립니다.
[제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다.