묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결처음 만난 AWS
전반적으로 다 좋은데요..
전반적으로 설명이 참 좋고 입문자들 보기에 좋긴한데, 람다 파트는 조금 너무하신 것 아닌가 생각이 듭니다..람다에 대한 설명은 앞서 해주시긴 했지만 그 내용에 대해 활용을 해봐야 의미가 있는데 그냥 간단하게 이미 짜여져있는 블루프린트 선택 후 기본 함수들 불러와진걸 Test - 짠 불러와졌네요, 람다를 삭제하겠습니다.이런 식의 진행은 조금 힘이 빠지게 됩니다. 아주 간단한 함수라도 직접 작성해보며 이걸 어떨 때, 왜 사용하는지에 대해 조금 더 설명이 있었으면 좋지 않았을까 하는 아쉬움에 끄적여봅니다.
-
미해결실리콘밸리 엔지니어와 함께하는 아마존 웹서비스(Core)편
수업 자료 관련 문의
선생님~ 안녕하세요,강의 자료로 제공해주시는 PDF를 아이패드에 담아서 보고 있는데요,강의마다 pdf가 첨부되어 있어서 60강이 넘는 pdf를 매 번 다운로드 받아야 하는 것이 너무 번거롭습니다.혹시 처음부터 끝까지 하나로 합쳐진 통합본 pdf 제공 가능하실까요?감사합니다!
-
미해결비전공자도 이해할 수 있는 AWS 입문/실전
Elb에 무료도메인 연결할수도 있나요?
Elb에 무료도메인 연결할 수 있나요
-
해결됨비전공자도 이해할 수 있는 AWS 입문/실전
Route53에 설정하는 ELB, CF 질문
안녕하세요~ 선생님!#섹션6. 웹페이지 배포하기/[실습]4.도메인 연결하기, HTTPS 적용하기#강의 수강 중 질문있습니다. [개념정리 : 브라우저 <-> AWS]1)브라우저 > AWS(ELB) > 서버 > DB(필요하다면)2)브라우저 > AWS(CF) > 서버(캐싱된 문서가없다면) > DB(필요하다면)이렇게 정리했습니다. [질문]우선 url에 처음 접속시, 로그인 페이지가 나온다고 하면1) CDN통하여 로그인 페이지 받아옴2) 아이디 비밀번호 입력 후 전송버튼 누름2번의 경우, CDN이아닌 본 서버(웹서버)로 API호출을 해야할것같은 느낌이 드는데요.그렇다면 AWS에서는 [개념정리]의 1,2(ELB,CF) 두개 다 Route53에 등록 되어야 하는게 맞을까요?ex) API호출할떄는 ELB로 호출, 페이지 받을떄는 CF로 호출 강의 04:32에서 기존 ELB레코드는 삭제하는 장면을 보고 궁금하여 질문드립니다.
-
미해결
ec2 스프링 https 적용 (feat. 도메인 적용)
안녕하세요 웹 프로젝트 진행 중 궁금한 점이 생겨 질문드립니다.react와 spring으로 개발을 진행하였고 둘다 ci/cd 적용을 해서 배포를 해둔 상태입니다! 문제상황프론트는 도메인을 구입하여 https가 적용된 상태벡엔드는 Ec2에서 돌아가고 있어 탄력적 ip만 사용하여 http만 적용해결방법프론트 도메인이 xxx.com이고 도메인을 하나 더 구입하여(xxx.net) 서버가 돌고 있는 ec2와 연결해 aws acm을 사용해 https가 적용되도록 하였습니다.궁금한 점프로젝트가 끝난 후 찾아보니 xxx.com(프론트 도메인)에 서브 도메인을 등록하여서 백엔드 로드벨런서를 적용하면 api.xxx.com을 백엔드 도메인으로 사용이 가능한 것으로 이해했는데 맞을까요?서브 도메인 말고 하나의 도메인으로 프론트와 백엔드를 처리하는 방법이 있을까요?실제로 많이 사용하는 서버가 올라가져 있는 ec2에 https를 적용하는 방법은 무엇인지 궁금합니다
-
미해결비전공자도 이해할 수 있는 AWS 입문/실전
nginx사용여부
위 강의에서는 nginx를 사용하지 않고 있는데,nginx를 대신하는 기능을 하는 것이 이 강의에서 무엇인지 궁금합니다! 또한 위 내용이 맞다면, 8080포트(spring)로 포트포워딩을 nginx를 사용하여 작업하는 것이라고 알고있는데 그 작업또한 이 강의에서는 언제 해야하는건지 질문드립니다!
-
미해결처음 만난 AWS
인스턴스와 이미지 생성 질문
강의에서 인스턴스를 만들때 wordpress img를 생성해줬었는데요,'섹션6. (실습)AMI 생성하기'에서, 이미 wordpress img가 생성된 인스턴스에서 이미지를 또 생성하는건 어떤 작업인지가 궁금합니다. 또한 인스턴스 만들때 생성하는 img와 이미 만들어진 인스턴스에서 이미지생성하는것과 어떤 차이가있는지 궁금합니다.
-
미해결비전공자도 이해할 수 있는 AWS 입문/실전
S3 이미지 다운로드
S3 이미지 다운로드 아키텍쳐에 질문이 있습니다. 제가 이해한 순서는,프런트에서 이미지를 백엔드 서버에 던진다.백엔드에서 S3 버킷에 저장한다.S3는 해당 이미지에 대한 링크를 다시 서버에 돌려준다.서버는 링크를 DB에 넣는다.사용자가 API get 요청을 할 때, DB에 있는 이미지 링크를 프런트로 띄어줌으로서 화면에 페인팅해준다. ------03:42 이미지를 다운 받아와서 렌더링 시켜야 된다고 말씀해주셨는데, DB에 담긴 값을 프런트로 보내줌으로서 화면 렌더링을 말씀해주신게 맞으실까요?아니면 웹을 접속할때마다 화면이 렌더링이 되는데, 이때 S3 이미지 파일을 새롭게 계속 다운받아 온다는 말씀이실까요?
-
미해결비전공자도 이해할 수 있는 AWS 입문/실전
도메인 보안
안녕하세요 재성님, 혹시 이렇게 IP주소를 설정한다면, 일반적인 보안에는 크게 문제가 없는지 궁금합니다~
-
미해결비전공자도 이해할 수 있는 AWS 입문/실전
인스턴스에 배포한 Express 서버 중지 시키고 삭제 하는 방법
[실습] 7. Express 서버를 EC2에 배포하기 를 다 따라하고 이제[보충 강의] 7-2. Spring Boot 서버를 EC2에 배포하기를 보면서 따라해보려고 하는데요이전 강의에서 인스턴스에 배포한 Express 서버를 끄고 삭제한 다음 그 인스턴스에 Spring Boot 서버 배포하고 싶은데 어떻게 해야하나요?
-
해결됨비전공자도 이해할 수 있는 AWS 입문/실전
S3를 활용해 Express 서버에 이미지 업로드 시 Error: Region is missing 발생할 경우
.env 파일에 아래와 같이 리전 변수가 추가되어야 합니다.AWS_REGION=ap-northeast-2
-
해결됨실리콘밸리 엔지니어와 함께하는 아마존 웹서비스(Core)편
최신 소식은 어떻게 접할 수 있을까요?
안녕하세요!파이썬 강의를 완강하고 이번 aws 강의를 수강하게 되었습니다.다름이 아니라 이번 강의 소개에서도 컨퍼런스나 여러 최신 소식에 대해 항상 잘 말씀해주시고, 그런 내용을 언급해주실 때마다 중요성을 많이 느낍니다.혹시 실리콘밸리 개발자분들은 이런 소식을 접하는 커뮤니티 같은 게 별도로 활성화가 되어있나요? 저는 이제야 주니어 개발자로 시작하는 입장이라 그런 노하우라든지 소식을 어디서 접해야 하는지 어디서부터 어떻게 시작해야 하는지 방향성을 잘 모르는 상태라 질문드립니다.
-
해결됨
젠킨스와 도커를 사용해서 배포할 때
인터넷에서 조사한 대로 하다가 에러를 만났는데 해결전에 프리티어 기간이 끝나서 결국 실습으로 해결하지 못해서 질문드립니다 ㅠㅠ 제가 진행한게 맞는지 이해한게 맞는지도 독학으로 하다보니 잘 모르겠네요...진행한 순서 : EC2 리눅스 생성EC2 시간 설정과 프로젝트에서 사용할 환경변수 설정git 설치 sudo yum install git도커 다운 sudo yum install docker도커 시작 sudo systemctl start docker도커로 자바 다운 docker pull openjdk:11도커로 젠킨스 이미지 다운로드 docker pull jenkins/jenkins:jdk11다운로드 이미지 조회 docker images젠킨스 이미지를 컨테이너로 실행 ocker run -d -p 8080:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:jdk11젠킨스에서 가입젠킨스에서 시간 설정젠킨스에서 사용할 플로그인 다운받아서 플러그인 올리기로 등록젠킨스 디렉토리 생성 sudo mkdir -p /home/jenkins/.sshSSH 권한 부여 sudo chmod 700 /home/jenkins/.sshSSH key 생성 sudo ssh-keygen -t rsa키 파일 설정 구간 /home/jenkins/.ssh/id_rsa비밀번호 없이 진행할 수 있도록 jenkins ALL=(ALL) NOPASSWD: ALLssh 퍼블릭을 복사해서 개발서버(authorized_keys)에 복사git에서 프로젝트의 레포지토리의 설정에서 Deploy keys에 ssh 퍼블릭을 넣음웹훅 설정 : 젠킨스가 설치된 서버 :포트/github-webhook/Git Token 발급Credential 등록 Kind : SSH Username with private keyUsername : 깃허브 아이디(닉네임)password : git token ID : 원하는 값 설정(아무거나)private key : ssh private 넣기Publish Over SSH 설정 name : 본인이 사용하고자하는 이름HostName : EC2 퍼블릭 ipusername : 리눅스니 ec2-userdirectory : 인스턴스 디렉토리`/home/ec2-user`여기서 Test Configurations을 누르면 에러발생여기서부터 막혀서 진행이 안됐는데 다음꺼는 조사한 거로 정리한건데 맞는지 확인을 위해 올립니다.Dockerfile 작성 FROM openjdk:11-jre-slim-buster ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] 젠킨스 item 생성 :파이프라인 파이프라인 설정파이프라인 충돌 방지 옵션 체크스크립트 작성pipeline { agent any stages { stage('Checkout') { steps { git branch: '원하는 브랜치명', url: '본인의 깃 레파지토리 URL(.git으로 끝나는링크)' } } stage('Build') { steps { sh './gradlew build' } } stage('Dockerize') { steps { sh ''' docker stop my_container_name || true docker rm my_container_name || true docker rmi my_image_name || true docker build -t my_image_name . ''' } } stage('Deploy') { steps { sh 'docker run -d --name my_container_name -p 8080:8080 my_image_name' } } } }도커 허브에 회원가입도커 로그인젠킨스 build 부분 수정./gradlew clean build echo " Execute shell start" # 도커 빌드와 개시 삭제 sudo docker build --no-cache -t cova1256/dev . # 기존 서버에 있는 컨테이너 중지 sudo docker stop spring-container || true #기존 서버에 있는 컨테이너 삭제 sudo docker rm -f spring-container || true # 도커 로그인 sudo docker login -u cova1256 -p password 입력 # 도커 이미지 태그 설정 및 태그가 없다면 오류가 발생해도 넘어가도록 true 처리 sudo docker image tag dev cova1256/dev || true # 도커 허브에 나의 레포지토리에 도커 푸시 sudo docker push cova1256/dev # 푸시 후 빌드한 이미지 삭제 sudo docker rmi -f cova1256/dev || true echo " Execute shell end"빌드 후 조치echo " 빌드 후 조치 start" # 기존에 있는 이미지를 삭제합니다. sudo docker rmi -f cova1256/dev || true # 기존에 있는 컨테이너를 중지합니다. sudo docker stop spring-container || true # 기존에 있는 컨테이너를 삭제합니다. sudo docker rm -f spring-container || true # 컨테이너를 설치하고 실행합니다. sudo docker run -d -p 8080:8080 --name spring-container cova1256/dev # none인 이미지 삭제 sudo docker rmi $(docker images -q -f dangling=true) echo " 빌드 후 조치 end" 질문 1 : 제가 진행했던 진행하려고 정리하는 방식이 맞나요?질문 2 : 저는 현재 EC2 외부에서 환경변수를 사용하는 방법을 사용했는데 Docker에서 외부 설정 파일 주입할 수도 있다고 하던데 Docker을 사용할 때는 후자의 방법을 선택해야 하나요?질문 3 : 저 에러는 어떻게 고칠 수 있을 까요? 찾아보니 권한을 줘야한다고 해서 주었고 git이나 젠킨스에 모두 넣었는데...
-
해결됨비전공자도 이해할 수 있는 AWS 입문/실전
[실습] 1.S3 버킷 생성하기 영상 짤림(?)
안녕하세요. 강의 잘 듣고있습니다.강의 내용에 관한 질문은 아니구요. 커리큘럼 중, '섹션5. 파일 및 이미지 업로드 (S3)'의 '[실습] 1.S3 버킷 생성하기' 강의가 있는데, 영상이 3초로 이상 편집된 것 같습니다. 저만 그렇게 보이는 것인지 모르겠지만 확인 부탁드립니다.
-
미해결실리콘밸리 엔지니어와 함께하는 아마존 웹서비스(Core)편
강의내용 중복
11:46 구간에서 강의가 끝났는데요 다시 중간으로 돌아가서 강의가 반복 재생됩니다. 확인바랍니다~
-
해결됨비전공자도 이해할 수 있는 AWS 입문/실전
ELB로 부하분산되고 있는 EC2의 서비스를 블루그린 배포하는 강의를 추가해주시면 감사하겠습니다.
안녕하세요, 강사님좋은 강의 만들어 주셔서 감사합니다.다름이 아니오라 ELB로 부하분산되고 있는 EC2의 서비스를 블루그린 배포하는 강의를 추가해주시면 감사하겠습니다.강사님, 오늘도 기분 좋은 하루 되세요~
-
미해결
EC2 배포후 구글 로그인 안됨
스프링부트 REST + OAuth2 + JWT를 사용하고 있는 상황인데로컬에서는 잘 돌아갑니다.로컬에서 소셜로그인이 성공하면 OAuth2SuccessHandler에서 바로 JSON으로 반환해주는 형태입니다. 즉, 컨트롤러가 딱히 무슨 역할을 하지 않아도 바로 반환을 해줍니다.하지만 EC2에 배포하고 구글 개발자 센터, yml에 EC2 퍼블릭을 제대로 입력해주고 제대로 일치하는 것을 확인했고버튼을 클릭하면 아이디들이 제대로 뜹니다. 하지만 로그인한 결과 로그인할 아이디를 클릭을 하면Whitelabel Error Page 404페이지가 뜹니다. 그래서 실패했을 때 JSON으로 반환시켜주는 로직을 추가해서 확인한 결과"error 발생 : ": "[authorization_request_not_found] "이러한 오류가 발생했습니다. 항상 체크해야하는요소yml 체크함구글 개발자 센터 확인함→ 1, 2번은 일치함EC2 인스턴스의 보안 그룹이 OAuth2 콜백 URL로 요청을 수신할 수 있도록 올바르게 설정되었는지 확인 → 이거는 어떻게 다른 설정법이 있을까요?application.yml 또는 application.properties에 설정된 값들이 프로덕션 환경에 맞게 정확히 설정이렇게 환경변수를 받아서 ec2 배포시 사용할 수 있도록 설정했는데 추가적으로 또 뭔가를 해줘야 하나요? 혹시 OAuth2 google을 테스터로 해놓고 http로 해놓으면 ec2 배포시에는 사용하지 못하나요?
-
미해결
배포후 소셜로그인 에러
스프링부트 REST + OAuth2 + JWT를 사용하고 있는 상황인데로컬에서는 잘 돌아갑니다.로컬:<a id="google-login" href="/oauth2/authorization/google">구글 로그인</a> <a id="naver-login" href="/oauth2/authorization/naver">네이버 로그인</a> @Service @Log4j2 @RequiredArgsConstructor public class PrincipalOAuth2UserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> { private final MemberRepository memberRepository; private final JwtProvider jwtProvider; private final TokenRepository tokenRepository; @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { // userRequest.getClientRegistration()은 인증 및 인가된 사용자 정보를 가져오는 // Spring Security에서 제공하는 메서드입니다. ClientRegistration clientRegistration = userRequest.getClientRegistration(); log.info("clientRegistration : " + clientRegistration); // 소셜 로그인 accessToken String socialAccessToken = userRequest.getAccessToken().getTokenValue(); log.info("소셜 로그인 accessToken : " + socialAccessToken); OAuth2UserService<OAuth2UserRequest, OAuth2User> oAuth2UserService = new DefaultOAuth2UserService(); log.info("oAuth2UserService : " + oAuth2UserService); // 소셜 로그인한 유저정보를 가져온다. OAuth2User oAuth2User = oAuth2UserService.loadUser(userRequest); log.info("oAuth2User : " + oAuth2User); log.info("getAttribute : " + oAuth2User.getAttributes()); // 회원가입 강제 진행 OAuth2UserInfo oAuth2UserInfo = null; String registrationId = clientRegistration.getRegistrationId(); log.info("registrationId : " + registrationId); if(registrationId.equals("google")) { log.info("구글 로그인"); oAuth2UserInfo = new GoogleUser(oAuth2User, clientRegistration); } else if(registrationId.equals("naver")) { log.info("네이버 로그인"); oAuth2UserInfo = new NaverUser(oAuth2User, clientRegistration); } else { log.error("지원하지 않는 소셜 로그인입니다."); } // 사용자가 로그인한 소셜 서비스를 가지고 옵니다. // 예시) google or naver 같은 값을 가질 수 있다. String provider = oAuth2UserInfo.getProvider(); // 사용자의 소셜 서비스(provider)에서 발급된 고유한 식별자를 가져옵니다. // 이 값은 해당 소셜 서비스에서 유니크한 사용자를 식별하는 용도로 사용됩니다. String providerId = oAuth2UserInfo.getProviderId(); String name = oAuth2UserInfo.getName(); // 사용자의 이메일 주소를 가지고 옵니다. // 소셜 서비스에서 제공하는 이메일 정보를 사용합니다. String email = oAuth2UserInfo.getEmail(); // 소셜 로그인의 경우 무조건 USER 등급으로 고정이다. Role role = Role.USER; MemberEntity findUser = memberRepository.findByEmail(email); if(findUser == null) { log.info("소셜 로그인이 최초입니다."); log.info("소셜 로그인 자동 회원가입을 진행합니다."); findUser = MemberEntity.builder() .email(email) .memberName(name) .provider(provider) .providerId(providerId) .memberRole(role) .nickName(name) .build(); log.info("member : " + findUser); findUser = memberRepository.save(findUser); } else { log.info("로그인을 이미 한적이 있습니다."); } // 권한 가져오기 List<GrantedAuthority> authorities = getAuthoritiesForUser(findUser); // 토큰 생성 TokenDTO tokenForOAuth2 = jwtProvider.createTokenForOAuth2(email, authorities, findUser.getMemberId()); // 기존에 이 토큰이 있는지 확인 TokenEntity findToken = tokenRepository.findByMemberEmail(tokenForOAuth2.getMemberEmail()); TokenEntity saveToken; // 기존의 토큰이 없다면 새로 만들어준다. if(findToken == null) { TokenEntity tokenEntity = TokenEntity.tokenEntity(tokenForOAuth2); saveToken = tokenRepository.save(tokenEntity); log.info("token : " + saveToken); } else { // 기존의 토큰이 있다면 업데이트 해준다. tokenForOAuth2 = TokenDTO.builder() .grantType(tokenForOAuth2.getGrantType()) .accessToken(tokenForOAuth2.getAccessToken()) .accessTokenTime(tokenForOAuth2.getAccessTokenTime()) .refreshToken(tokenForOAuth2.getRefreshToken()) .refreshTokenTime(tokenForOAuth2.getRefreshTokenTime()) .memberEmail(tokenForOAuth2.getMemberEmail()) .memberId(tokenForOAuth2.getMemberId()) .build(); TokenEntity tokenEntity = TokenEntity.updateToken(findToken.getId(), tokenForOAuth2); saveToken = tokenRepository.save(tokenEntity); log.info("token : " + saveToken); } // 토큰이 제대로 되어 있나 검증 if(StringUtils.hasText(saveToken.getAccessToken()) && jwtProvider.validateToken(saveToken.getAccessToken())) { Authentication authenticationToken = jwtProvider.getAuthentication(saveToken.getAccessToken()); log.info("authentication : " + authenticationToken); SecurityContextHolder.getContext().setAuthentication(authenticationToken); UserDetails userDetails = new User(email, "", authorities); log.info("userDetails : " + userDetails); Authentication authenticationUser = new UsernamePasswordAuthenticationToken(userDetails, authorities); log.info("authentication1 : " + authenticationUser); SecurityContextHolder.getContext().setAuthentication(authenticationUser); } else { log.info("검증 실패"); } // attributes가 있는 생성자를 사용하여 PrincipalDetails 객체 생성 // 소셜 로그인인 경우에는 attributes도 함께 가지고 있는 PrincipalDetails 객체를 생성하게 됩니다. PrincipalDetails principalDetails = new PrincipalDetails(findUser, oAuth2User.getAttributes()); log.info("principalDetails : " + principalDetails); return principalDetails; } // 권한 가져오기 로직 private List<GrantedAuthority> getAuthoritiesForUser(MemberEntity findUser) { Role role = findUser.getMemberRole(); List<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority("ROLE_" + role.name())); log.info("권한 : " + role.name()); return authorities; } } @Log4j2 @RequiredArgsConstructor @Component public class OAuth2SuccessHandler implements AuthenticationSuccessHandler { private final MemberRepository memberRepository; private final TokenRepository tokenRepository; // Jackson ObjectMapper를 주입합니다. private final ObjectMapper objectMapper; @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { try { log.info("OAuth2 Login 성공!"); // 소셜 로그인 이메일 가져오기 String email = authentication.getName(); log.info("email : " + email); // 토큰 조회 TokenEntity findToken = tokenRepository.findByMemberEmail(email); log.info("token : " + findToken); // 토큰 DTO 반환 TokenDTO tokenDTO = TokenDTO.toTokenDTO(findToken); // 회원 조회 MemberEntity findUser = memberRepository.findByEmail(email); // 회원 DTO 반환 ResponseMemberDTO memberDTO = ResponseMemberDTO.socialMember(findUser); // 헤더에 담아준다. response.addHeader("email", memberDTO.getEmail()); // 바디에 담아준다. Map<String, Object> responseBody = new HashMap<>(); responseBody.put("providerId", memberDTO.getProviderId()); responseBody.put("provider", memberDTO.getProvider()); responseBody.put("accessToken", tokenDTO.getAccessToken()); responseBody.put("refreshToken", tokenDTO.getRefreshToken()); responseBody.put("email", tokenDTO.getMemberEmail()); responseBody.put("memberId", tokenDTO.getMemberId()); responseBody.put("grantType", tokenDTO.getGrantType()); // JSON 응답 전송 response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(objectMapper.writeValueAsString(responseBody)); } catch (Exception e) { // 예외가 발생하면 클라이언트에게 오류 응답을 반환 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); response.getWriter().write("OAuth 2.0 로그인 성공 후 오류 발생: " + e.getMessage()); response.getWriter().flush(); } } }로컬에서 소셜로그인이 성공하면 OAuth2SuccessHandler에서 바로 JSON으로 반환해주는 형태입니다. 즉, 컨트롤러가 딱히 무슨 역할을 하지 않아도 바로 반환을 해줍니다. 하지만 EC2에 배포하고 구글 개발자 센터, yml에 EC2 퍼블릭을 제대로 입력해주고로그인한 결과 아이디들 제대로 뜨는데 로그인할 아이디를 클릭을 하면Whitelabel Error Page 404페이지가 뜹니다. 로컬 코드를 그대로 배포한건데 왜 안될까요?
-
미해결
배포 후 소셜 로그인
로컬에서는 구글 소셜로그인이 제대로 돌아가고 로그인시 가입, JWT 발급까지 제대로 돌아가는데 프로젝트를 EC2에 배포하고 개발자센터에 승인된 URI에 등록하고 yml에 redirect-uri 똑같이 등록을 했는데 배포시에는 에러가 발생합니다.발생한 에러:구글 아이디들이 나오기는 하는데 클릭을 하면이 에러가 발생합니다. 이게 로컬에서도 안되면 이해가 가는데 로컬에서는 에러없이 잘돌아갑니다. 대체 무슨 문제일까요... ㅠㅠ 급합니다.
-
미해결처음 만난 AWS
클라우드 스토리지 서비스
네이버 마이박스나 구글 드라이브처럼 사진을 저장해놓는 클라우드 스토리지 서비스를 만들고 싶습니다이런 서비스들은 클라우드 컴퓨팅을 운영하는 회사들 특히 대기업들이 많이 하고 있는데요개발이나 운영에 다른 서비스들보다 힘든가요? 왜 스타트업들은 많이 없는지 궁금합니다또 이런 스토리지 서비스를 aws를 통해 제공하면 비용문제가 심각한가요? 일단 서비스 개발과 업그레이드를 하면서 고객을 확보하고 나중에 좀 커졌을때 따로 데이터센터를 만든다고 하면 어떨까요??