묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결비전공자도 이해할 수 있는 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를 통해 제공하면 비용문제가 심각한가요? 일단 서비스 개발과 업그레이드를 하면서 고객을 확보하고 나중에 좀 커졌을때 따로 데이터센터를 만든다고 하면 어떨까요??
-
미해결
스프링부트 EC2 배포 시 소셜로그인, JWT, S3 처리
스프링부트를 EC2에 배포할 때 OAuth2, JWT나 S3를 이미지 넣는 설정 파일(yml)을 보안상 git에 안올라가게 막아주는데 그러면 배포할 때는 어떻게 처리를 해줘야 배포상태에서 OAuth2, JWT나 S3를 이미지 넣는 기능을 사용할 수 있나요??
-
미해결
ec2재부팅 후 ec2 주소 접근 불가능 !!!!! (스프링 배포)
https://velog.io/@dasd412/ec2-%EC%9E%AC%EB%B6%80%ED%8C%85-%ED%9B%84-%EC%97%B0%EA%B2%B0-%EB%B6%88%EA%B0%80-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0이걸 참고해도 보안 다시 해도 전 여전히 안되더라구요.. 결론적으로 배포를 성공했고 배포한 주소가 회원가입에 접근을 못해서 시큐리티 설정 때문에 그런줄 알았는데 여기서 멈췄어야 했나봅니다..로컬에서는 되고 ec2주소로는 접속이 안되어서 찾아보던 중 ec2를 재부팅 하면 해결된다고 해서 따라 했더니https://github.com/jojoldu/freelec-springboot2-webservice/issues/485 이제는 아예 ec2주소에 접근이 불가능합니다 ㅠㅠㅠㅠㅠ 이걸 해결해야 하는데 어떡하나요..
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
ec2 도커 빌드중 빌드 멈춤
안녕하세요 멘토님! 강의 잘 듣고 열심히 정리중 입니다.ㅎㅎ프로젝트를 도커로 배포하는 중에 문제가 발생했습니다.위와같이 도커로 배포중 yarn build를 실행할 때 빌드 시간이 멈추고 진행되지 않습니다.새로고침하고 다시 인스턴스 터미널에 들어가면 연결이 지연되어 연결실패가 뜹니다.(해당 에러는 인스턴스 상태에서 재부팅을 통해 해결했습니다.)해당 문제를 해결하기 위해 아래와 같이 시도했습니다.1. 도커 푸룬으로 이미지, 캐시등 삭제 - docker system prune -a 2. ec2 볼륨을 16기가로 올렸습니다. - 파티션화도 완료시켰습니다. - df -h로 xada1의 용량이 46%에서 23%로 줄어든 것을 확인했습니다. 더이상의 방법이 구글링과 제 머리로는 해결되지 않아 질문 올립니다.감사합니다!
-
미해결
배포에 대한 질문이 있습니다. 급합니다 ㅠㅠ
현재 프론트하고 백엔드하고 배포를 따로 하려고 하는데이 배포를 언제까지 유지해야 하는지가 궁금합니다.포폴에 배포 링크를 담아주고 취업할 때 까지 유지해야 하는지 아니면 배포하고 시연 이미지 첨부한 설명을 포폴에 담고 배포를 종료해도 되는지 어떻게 해야하는지 궁금합니다. 알려주시면 감사하겠습니다 ㅠㅠ (__) 꾸벅
-
미해결
EC2 리눅스에서 리액트 빌드 오류
안녕하세요 제가 AWS EC2 리눅스에서 리액트 프로젝트를 빌드하려는데 오류가 납니다.npm start 까진 잘 되는데 npm run build 명령어를 실행하면 위와 같은 오류가 뜨는데 해결방법이 있을까요...