let params = new URLSearchParams(location.search);
params.set("page", "0");
location.href = `/question?${params.toString()}`;

 

 

 

 

 

 

 

 

 

 

리눅스 우분투에 도커 설치

https://shanepark.tistory.com/237

 

Ubuntu 20.04 LTS ) Docker 설치하기

Intro Docker는 제가 회사에서 사용하는 노트북의 OS를 Windows 에서 Ubuntu 로 변경하게 된 트리거 였습니다. Docker를 사용하면 정말 편하게 격리된 컨테이너들을 구성해 가상화의 장점을 정말 잘 살릴

shanepark.tistory.com

 

-------------------------------------------------

 

[1] 이미지 생성
docker build -t 이미지이름 도커파일경로
 
M1 맥북 도커의 경우  docker build —platform linux/amd64 -t 이미지이름 도커파일경로
 
[2] 컨테이너 생성 및 구동
Mac OS, Linux
1. docker run -it --restart=always -d -p 포트:포트(인바운드 설정) --name 컨테이너이름 이미지이름
Window에서 구동 (테스트 서버)
docker run -it --restart=always -d -p 포트:포트(인바운드 설정) --name 컨테이너이름 이미지이름
--restart=always : 도커 재구동시 자동 실행
-d : 백그라운드 실행
-p : 포트설정 ex) 80:8080 80으로 접속시 8080으로 인바운드
--name : 컨테이너 이름 설정
 

-------------------------------------------------------------------------------------------------------------

 
도커 미사용 이미지 컨테이너 제거
docker system prune -a

 

-------------------------------------------------------------------------------------------------------------

 

도커 마리아DB 설정
 
mariadb 이미지 다운로드
docker pull mariadb
 
도커 컨테이너를 재실행하면 데이터가 모두 날아가기 때문에 데이터를 살려두려면 호스트의 디렉토리에 볼륨을 생성하여 연결하여야 한다.

 

볼륨생성

docker volume create test_volume

볼륨확인

docker volume ls

도커에서 볼륨 관리
docker run -it --restart=always -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -v test_volume:/var/lib/mysql --name testmariadb mariadb
또는 디렉토리를 직접 설정
docker run -it --restart=always -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -v /usr/local/dockerMariaDBVolume/volume1:/var/lib/mysql --name testmariadb mariadb
두 방식 중 하나를 선택하여 사용하자.
 

-e MYSQL_ROOT_PASSWORD=password 는 도커파일을 사용할 경우 쓰지 않아도 된다

docker run -it --restart=always -d -p 3306:3306 -v test_volume:/var/lib/mysql --name testmariadb mariadb

데이터베이스를 도커파일 없이 돌릴 경우 타임존 문제가 발생하였다. 도커파일을 이용하여 타임존을 설정하자

 

----------------------------------------------------------------------------------------------------------------------

 

nextjs 도커파일 예제

# 도커 허브에서 이미지를 가져와서 이미지를 작업한다
# FROM (이미지 이름:버전)
# FROM node:14.15.4
FROM node

# 컨테이너 실행 전 작동할 명령
# RUN (명령)
# 타임존 설정 (설정을 하지 않으면 시간 저장시 다른 시간대로 저장됨)
RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
RUN echo Asia/Seoul > /etc/timezone

# 컨테이너 내 작업 경로
# WORKDIR (경로)
WORKDIR /app

# 작업 파일을 컨테이너로 복사
# COPY (파일명 또는 ${변수명}) (복사할 파일명)
# app dependencies, install 및 caching
COPY . .

# 컨테이너 실행 전 작동할 명령
# RUN (명령)
RUN yarn install

# 이미지 내부 환경 설정
# ENV (타겟) (내용)
# `/app/node_modules/.bin`을 $PATH 에 추가
# (bin폴더를 찾기 어려울 수 있으므로 환경변수에 추가해줌)
ENV PATH /app/node_modules/.bin:$PATH

RUN yarn build

# 컨테이너 시작 시 내릴 명령 (CMD와 ENTRYPOINT 차이 확인)
# ENTRYPOINT [(명령),(매개변수),(매개변수),(...)]
CMD ["yarn", "start"]

 

스프링부트 도커파일 예제

 

# 도커 허브에서 이미지를 가져와서 이미지를 작업한다
# FROM (이미지 이름:버전)
FROM openjdk:11.0.8-jre-slim

# 컨테이너 실행 전 작동할 명령
# RUN (명령)
# 타임존 설정 (설정을 하지 않으면 시간 저장시 다른 시간대로 저장됨)
RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
RUN echo Asia/Seoul > /etc/timezone

# 컨테이너 내 작업 경로
# WORKDIR (경로)
WORKDIR /app

# 작업 파일을 변수화 하기
# ARG (변수명)=(파일명)
ARG JAR_FILE=demo*.jar

# 작업 파일을 컨테이너로 복사
# COPY (파일명 또는 ${변수명}) (복사할 파일명)
COPY ${JAR_FILE} application.jar

# 컨테이너 시작 시 내릴 명령 (CMD와 ENTRYPOINT 차이 확인)
# ENTRYPOINT [(명령),(매개변수),(매개변수),(...)]
ENTRYPOINT ["java","-jar","application.jar"]

 

마리아 db 도커파일 예제

# 도커 허브에서 이미지를 가져와서 이미지를 작업한다
# FROM (이미지 이름:버전)
FROM mariadb

# 컨테이너 실행 전 작동할 명령
# RUN (명령)
# 타임존 설정 (설정을 하지 않으면 시간 저장시 다른 시간대로 저장됨)
RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
RUN echo Asia/Seoul > /etc/timezone

# 이미지 내부 환경 설정
# ENV (타겟) (내용)
ENV MYSQL_USER testuser
ENV MYSQL_PASSWORD password
ENV MYSQL_ROOT_PASSWORD password

 

'Infra > Docker' 카테고리의 다른 글

도커 설치 및 기본 이용  (0) 2020.10.27

 

0. 개요

AWS에서 서버를 배포하려면
AWS에서 도메인을 구매하고
AWS에서 호스팅을 하고
AWS에서 인증서를 만드는 것이 편하다.

위 내용을 설명한 링크다.

https://ondolroom.tistory.com/873

 

AWS 도메인 등록 / 호스팅 관리 / HTTPS 적용

[도메인 등록] 1. Route53 페이지로 이동 2. 도메인 등록 화면으로 이동 3. 도메인 등록을 클릭 4. 도메인 이름을 선택 - 도메인 이름을 선택하고 기관(.com 등)을 선택하고 확인을 눌러서 사용 가능한

ondolroom.tistory.com

 

 

이번에는 AWS 외부에서 만든 도메인을 AWS와 연동시키는 방법을 간단히 설명한다.

내용 중 생략된 부분은 위 링크에 포함되어 있으니 참고 부탁드린다.

 

1. 가비아 도메인 생성

가비아에서 원하는 도메인을 만든다.

 

2. AWS Route 53 접속 및 호스팅 영역 생성

AWS Route53에 접속하여 호스팅 영역을 생성한다.

 

외부에서 만든 도메인을
도메인 이름에 입력하고
퍼블릭 호스팅 영역을 선택한 뒤
호스팅 영역을 생성하면 된다.

 

3. 호스팅 영역 확인

제작한 호스팅 영역의 도메인 이름을 확인하여 클릭한다.

 

4. 호스팅의 레코드들을 확인

호스팅 레코드 유형은 A / NS / CNAME / SOA 등등이 있다.

한번쯤 역할과 특성을 검색해보시길 바란다.

지금 확인 해야할 것들은 NS에 있는 4개의 값들이다.

맨 뒤에 .을 제거하고 (ns-asdf.com. -> ns-asdf.com) 모두 메모장에 저장해 놓자.

 

5. 가비아 도메인 네임서버 변경

가비아 도메인 관리 페이지로 가보면 네임서버가 아래와 같이 되어 있다.

이것을 AWS 호스팅 영역의 NS 것으로 변경해야한다.

네임서버 설정 버튼을 눌러 변경하도록 하자.

 

1~4차 내용을 모두 지우고 메모장에 저장해놓은 AWS 호스팅 영역의 NS로 입력하자.
(다시 한 번 말씀드리지만 입력 시 맨 뒤의 점(.) 은 없애야한다. )

 

적용 후 일정 시간이 걸린다고 하니 참고 바란다. 

 

6. AWS 호스팅 영역에서 A 유형을 세팅

세팅 시

example.com
www.example.com

두가지 각각 해주어야한다.

값에 EC2에서 만든 인스턴스의 탄력적 IP를 입력한다.
(EC2 생성 방법과 탄력적 IP는 이 링크 참고. https://ondolroom.tistory.com/878)

 

아래와 같이 되면 완료.

 

여기까지가 HTTP 적용방법이다.

HTTPS 적용방법은 맨 위쪽에 링크한 주소에서 확인 가능하나,

인증서 제작방법 및 적용화면은 한번 더 아래에서 소개하겠다.

 

7. 인증서 제작 방법

AWS Certificate Manager에 접속한다.

 

요청을 클릭한다.

 

퍼블릭 인증서 요청을 선택하고 다음을 클릭한다.

 

도메인 이름에

완전히 정규화된 도메인이름(www가 포함된 주소)을 입력하고

다른 이름 추가 버튼을 눌러 www가 제외된 주소도 입력한다.
(입력하지 않으면 www로만 인증서가 발급된다.)

검증 방법은 이메일도 가능하나 CNAME을 수동을 세팅해야되기 때문에 DNS 검증을 추천한다.

 

설정이 완료되면 요청버튼을 누른다.

 

아래와 같이 뜨면 인증서 보기를 클릭한다.
(나오지 않으면 해당 인증서 ID를 클릭하면 된다)

 

Route 53에서 레코드 생성 버튼을 누른다.
(이미 생성된 것을 예시로 보여주는 것이기 때문에 상태가 성공으로 보이지만 여러분은 검증 대기중으로 보일 것이다.)

 

외부에서 가져온 도메인이기 때문에 해당 필터를 클릭하여 없애준다.

 

 

관련된 도메인 모두 체크한 뒤 레코드 생성을 해준다.

 

Route 53에서 해당 도메인 레코드들을 확인하여 유형들이 아래와 같으면 된다.

Certificate Manager에 수시로 들어가 성공되었는지 확인해보자.

 

8. HTTPS 적용

맨 위쪽 링크의 로드 밸런싱 부분을 참고하기를 바람.

 

(끝)

 

'Infra > Aws' 카테고리의 다른 글

가비아 도메인 IP 연결하기  (0) 2022.01.17

 

1. 로그인 후 마이페이지 My가비아로 접속한다.

 

2. 도메인을 클릭

 

3. 연결할 도메인의 관리 버튼을 클릭한다.

 

4. 도메인 연결 설정 버튼을 클릭한다.

 

5. 해당 도메인을 체크하고 DNS 설정을 클릭한다.

 

6. 호스트 이름과 IP주소를 입력한다.

이후 확인 버튼을 누른뒤 저장하면 완료.

 

참고.

https://customer.gabia.com/manual/dns/3041/3040

 

가비아: 국내 1위

 

customer.gabia.com

 

 

'Infra > Aws' 카테고리의 다른 글

가비아 도메인 + AWS IP 연결하기  (0) 2022.01.18

0. 준비물

aws 계정

mobaXterm 프로그램 (무료버전)

기능이 완성된 Jar 파일 (여기서는 메모리 h2 데이터베이스를 사용함.)

 

1. aws를 켠다

 

2. ec2로 접속한다

 

3. 인스턴스 시작을 누른다

 

4. AMI를 선택한다

여기서는 Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type를 사용했다.

Ubuntu 등 원하는 것을 사용하면 된다.

 

5. 인스턴스 유형을 선택한다

자기가 원하는 사양을 고르면 된다.

사양이 높으면 높을수록 비싸진다.

여기서는 프리티어 t2.micro를 사용하였다.

여담이지만 초경량 배포를 위해서라면 ec2가 아닌 lightsail을 사용하는 것도 고려해볼만하다.

제한 사항이 꽤 있지만 매우 저렴한 비용으로 서버를 운영할 수 있다.

 

6. 인스턴스 세부 정보 구성

특별한 설정이 필요하지 않다면 다음으로 넘기자

 

7. 스토리지 추가

기본 설정은 8기가로 되어 있고, 프리티어 사용시 30기가까지 사용할 수 있다고 한다.

프리티어가 남아 있다면 30기가로 설정해서 이용하자.

 

8. 태그 추가

특별한 설정이 필요하지 않다면 다음으로 넘기자

 

8. 보안 그룹 구성

여기서 세팅해도 되나 추후 세팅해보기로 하고, 아래와 같이 기존 보안그룹을 선택한 뒤 패스 하자

 

9. 검토 및 시작 클릭

 

10. 시작하기 클릭

키 페어를 선택하라고 아래와 같이 뜨게 된다

새 키 페어 생성을 선택한 뒤 이름을 정하고 다운로드 한다.

한번 잃어버린 키페어는 다시 다운로드가 불가능하다고 하니 잘 보관하자.

 

11. 인스턴스 확인

ec2 대시보드에서 인스턴스를 선택해보자

 

아래와 같이 나오면 성공

 

12. ip 설정

인스턴스는 기본적으로 중지되었다가 실행되면 아이피가 변할 수 있는 상태이다.

서버 주소가 계속 변한다면 많은 애로사항이 꽃필 것이다.

변하지 않게 하려면 탄력적 IP를 만들어 주어야한다.

왼쪽의 카테고리에서 탄력적 IP를 찾아보자

 

들어갔다면 탄력적 IP 주소 할당을 누른다

 

특별히 건드릴 게 없다면 할당을 클릭하자

 

할당되었다면 해당 ip를 클릭하고 작업에서 탄력적 IP 주소 연결을 눌러보자

 

이전에 만들었던 인스턴스를 선택하면 되고, 해당 인스턴스의 프라이빗 IP주소를 선택하면 된다.

선택 후 연결을 눌러주자 

 

연결한 뒤 인스턴스로 돌아가서 인스턴스 재부팅을 해주면 탄력적 IP로 변경된 것을 확인할 수 있다.

 

13. 보안그룹 설정

SSH 통신을 위해서 보안그룹 설정을 하여야한다.

왼쪽 카테고리에서 보안 그룹 탭을 클릭하자.

 

보안 그룹 생성을 클릭하자.

 

보안 그룹 이름 / 설명을 입력하고 VPC는 특별한 사항이 없으면 그대로 두자.

 

인바운드 아웃바운드 규칙을 설정하자.

SSH 통신을 위해서  22포트를 열어주고 소스는 테스트 시 Anywhere로 하고 실제 배포 시엔 관리자 IP로 변경하자.

 

보안 그룹 생성을 누르자.

 

인스턴스로 돌아가서 이전에 생성한 인스턴스를 오른쪽 클릭하여 보안 그룹을 변경하자.

 

내가 만든 보안그룹을 선택하고 보은그룹 추가를 클릭하자.

그리고 이전에 연결된 보안 그룹을 제거하자.
(여러 보안그룹을 같이 사용할 수도 있다.)

이후 저장하면 완료.

 

14. SSH 접속

접속 방법은 다양하다.

첫번째 방법 = AWS 사이트에서 인스턴스를 선택후 연결.

웹상에서 바로 컨트롤 가능하다.

 

 

 

두번째 방법 = Putty , FileZilla 를 사용하기.

나쁘지 않으나 더 좋은 방법이 있다.

 

세번째 방법 = MobaXterm 사용하기

Putty , FileZilla를 같이 사용하는 느낌이다. 편해서 자주 사용한다.

무료버전을 사용해도 충분히 쓸 수 있으니 무료버전을 다운로드하여 사용하자.

다운로드하여 실행하면 아래와 같이 나온다.

Session을 클릭하여 새 세션을 만들자.

 

SSH를 선택.

이전에 생성한 탄력적 IP 입력.

아마존 리눅스의 기본 유저네임은 ec2-user 이다.

Advanced SSH settings를 선택.

Use private key를 클릭하여 이전에 만든 키페어를 선택.

OK를 누르면 세팅 완료.

 

접속하면 아래와 같이 뜬다.

루트 권한으로 사용하려면 sudo su를 사용하자.

서버 세팅은 완료 되었다.

 

혹시 연결이 되지 않을 경우 아래를 따라보자.

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html?icmpid=docs_ec2_console#ec2-instance-connect-setup-security-group 

 

Set up EC2 Instance Connect - Amazon Elastic Compute Cloud

If you previously configured AuthorizedKeysCommand and AuthorizedKeysCommandUser, the Instance Connect installation will not change the values and you will not be able to use Instance Connect.

docs.aws.amazon.com

 

 

15. 도커를 설치하자

아래 사이트를 통해서 도커를 설치하고 자동실행 등록하자.
(컨테이너 다운로드 실행은 하지 않아도 된다.)

https://niceman.tistory.com/36

 

[Docker] CentOS 7 - Docker 설치 및 실행 방법

1. Docker 기본 설치 # 1.yum 패키지 업데이트 yum -y update # 2.Docker & Docker Registry 설치 yum -y install docker docker-registry cs 2. Docker 실행 및 자동(On Boot) 실행 서비스 등록 #..

niceman.tistory.com

 

16. 파일을 넣자

mobaX에서 usr/local 로 접속하여 폴더를 생성하려고하면

Permission Denied 관련 에러가 난다.

 

아래 사이트의 맨 아랫줄과 같이 이렇게 입력하면 에러가 풀릴 것이다.

 

 

17. 파일을 업로드하자

target 폴더 안에는 jar파일이 있다.

Docker 파일도 작성하여 올려주자.

도커파일 내용

FROM openjdk:11.0.8-jre-slim
RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
RUN echo Asia/Seoul > /etc/timezone
WORKDIR application
ARG JAR_FILE=target/springdatajpa*.jar
COPY ${JAR_FILE} application.jar
ENTRYPOINT ["java","-jar","application.jar"]

 

18. 이미지를 생성하자

sudo su를 사용하여 루트권한을 얻자.

Dockerfile이 있는 디렉토리로 이동하여야한다.

 

이미지를 생성하자.

형식은 docker build -t [이미지이름] [도커파일 디렉토리]

docker build -t todo_img .

 

 

아래 명령어를 통해서 이미지가 생성 되었는지 확인 가능하다.

docker images

 

 

컨테이너를 생성하고 실행하자.

docker run --restart=always -d -p [외부포트]:[서버포트] --name [컨테이너명] [이미지명]

docker run --restart=always -d -p 8082:8082 --name todo_con todo_img

 

--restart=always 옵션은 컨테이너가 종료되면 다시 실행하도록 한다.

-d 옵션은 백그라운드 실행 설정이다.

-p 옵션은 포트설정 옵션이다.

--name 옵션은 컨테이너명을 설정할 수 있다.

 

아래 명령어를 통해서 컨테이너가 생성 되었는지 확인 가능하다.

docker ps

 

서버가 작동되어 있는지 확인하려면 아래 명령어를 사용해보자.

docker logs -f --tail=10 [컨테이너명]

docker logs -f --tail=10 todo_con

 

-f 옵션은 실시간 모니터링을 가능하게 해준다.

--tail=10 옵션은 마지막 10줄만 보여준다는 뜻이다.

 

 

 

로그 보기를 종료하려면 컨트롤 C를 누르자.

 

기타 도커에 관한 사항은 아래를 참고하자.

https://www.yalco.kr/36_docker/

 

가장 쉽게 배우는 도커

어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!

www.yalco.kr

 

 

 

 

 

 

 

 

0. 해결법

시간이 없으신 분들은 이곳을 통해 빠른 해결 하시기를 기원합니다.

https://stackoverflow.com/questions/68387270/android-studio-error-installed-build-tools-revision-31-0-0-is-corrupted

 

 

1. 사건의 발단

회사에 예전에 제작하고 유지하고 있는 안드로이드 프로젝트가 있다. 

그런데 최근 일부 기능이 사용되지 않으면서 외부 서비스에 비용이 매달 지출된다는 것을 발견하였다.

그 기능을 일시적으로 비활성화 하기로 하였다.

 

2. 기능 수정은 간단하군

오랜만에 건드리는 프로젝트라 걱정이 앞섰으나, 사실 그렇게 어려운 부분은 없었다.

해당 기능을 사용할 수 없도록 화면을 약간 수정하고 소스코드를 몇가지 주석처리를 했을 뿐이다.

1시간도 걸리지 않은 것 같다.

 

3. 즐거운 마음으로 배포하고 퇴근하자

오후 4시에 시작한 수정 작업은 5시쯤 완료 되었다. 

테스트폰에 돌려보니 잘돌아간다.

인텔리제이가 targetSdkVersion 30에 노란불을 띄웠길래 버전업이 되었구나 하며 31버전으로 바꾸었다.

이제 구글 플레이 콘솔에 업로드만 하면 배포 준비는 끝... 이라고 생각하였으나

업로드하자 콘솔에서 배포불가능한 코드라는 식의 메시지가 뜬다.

해당 사진자료를 스크린샷하지 못하였지만 대략 아래와 비슷한 내용이었다.

아 안돼... 

퇴근시간 안에 배포해야 한다. 그래야 칼퇴가 가능하다.

 

4. 와 야근!

빨리 빨리...

원인을 찾자. 내가 무얼했지?

아 그래, sdk 버전을 올렸지. 업데이트하는 김에 타겟을 높이면 좋잖아?

그게 문제였나.

좋다. 그럼 버전을 내려서 다시 업로드해야지.

그래들에서 sdk버전을 내린 뒤 apk 빌드를 시작한다... 엥?

The minCompileSdk (31) specified in a dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) is greater than this module's compileSdkVersion (android-30).

위와 같은 에러가 발생했다. 

디펜던시 문제라고 한다.

'androidx.appcompat:appcompat:1.4.1' 때문이란다.

내 프로젝트엔 'androidx.appcompat:appcompat:1.4.1'이 없는데?

점점 미궁으로 빠져든다.

다시 compileSdkVersion과 targetSdkVersion을 31버전으로 올려서 빌드해본다... 엥?

Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.

아 현기증이 올라온다. 시간은 벌써 9시.

칼퇴는 무슨... 집으로 가자.

 

5. 간과한 점은 무엇인가

다음 날 아침, 멘탈을 다시 부여잡고 냉정하게 상황 판단을 시작한다.

내가 간과한 것이 무엇인가?
    - 프로젝트를 오랜만에 수정하였다
    - 작업 컴퓨터를 바꾸었다
    - 안드로이드 스튜디오 버전이 바뀌었다
    - 모바일 플랫폼은 수시로 업데이트되고 바뀐다

정리가 되기 시작한다.

프로젝트를 작년에 완료한 후 작업 컴퓨터를 바꾸었고, 해당 프로젝트는 Github에 저장되어 있으니, 로컬에는 받아놓지도 않았다.

젯브레인 툴박스로 안드로이드 스튜디오를 설치하니, Arctic Fox가 설치된다. 일부러 설치 안하던 버전이었는데 이제는 강제로 설치된다.

 컴파일 및 타겟 sdk버전을 주의없이 수정하였다. (이건 억울하다. Arctic Fox 때문이다...)

 

6. 해결

'정답은 구글이 알고 있다'는 옛 선현들의 말씀에 따라 다시 해결책을 찾아 나선다.

인텔리제이 캐시를 비워보기도 하고
그래들 디펜던시 캐시도 삭제해보고
Arctic Fox 최신버전을 설치해보고
sdk버전도 30~32를 넘나들며 바꿔보았다.

그래도 안돼?

이건 정상적인 방법으로는 해결할 수 없다는 직감이 온다.

스택오버플로우를 계속 파본다.

그러던 중 발견한 해결법.

https://stackoverflow.com/questions/68387270/android-studio-error-installed-build-tools-revision-31-0-0-is-corrupted

 

Android Studio error "Installed Build Tools revision 31.0.0 is corrupted"

I'm on Android Studio 4.2.2. I created a new project and haven't added anything to the starter code and whenever I click build or run, I get this error: Installed Build Tools revision 31.0.0 is

stackoverflow.com

 

위 질문에 달린 답변.

요약하자면, 안드로이드 스튜디오 자체의 이슈라는 것.

파일을 직접찾아 변경하라고 한다.

댓글들도 난리가 나 있었다.

 

바로 이게 정답일 확률이 높다고 생각하고 바로 적용해본다.

빌드... 성공!

그래들에 적용한 sdk버전은 위와 같다.

 

결과적으로 인텔리제이 안드로이드 스튜디오 버전 자체의 문제였다고 보인다.

인텔리제이를 원망하지는 않는다.

다른 제품들은 대부분 만족하면서 사용하고 있으며, 안스는 무료툴이기도 하기 때문에.

다만 저런 세계적인 회사도 쉽지 않은 것이 디버깅과 테스트라는 점이 내 마음을 조금 무겁게 했을 뿐이다.

 

이상

 

 

See the Pen Untitled by jaybon (@jaybon1) on CodePen.

'Web > Html_Css' 카테고리의 다른 글

HTML로 리다이렉트 하기  (0) 2021.09.29
부트스트랩 태그 중앙정렬  (0) 2020.06.26
css 사이즈 원하는대로 조절하려면  (0) 2020.06.22
부트스트랩 사이트 모음  (0) 2020.06.22
그리드 grid 사용법  (0) 2020.06.19

 

자바스크립트를 사용하지 못하는 환경이거나 HTML만 사용할 수 있는 환경에서 주소 이동을 하고 싶은 경우 사용한다.

ex) aws 로드밸런서의 리 다이렉션 등 (https -> http로 리다이렉트도 가능)

보안적인 이슈가 있을 수 있으니 조심하여 사용할 것

text/html 타입으로 설정한 뒤 head 태그 안에 meta 태그를 넣어준다.

content 안의 0은 리다이렉션 대기 시간이고 세미콜론 이후에 주소를 넣어준다.

<html>
  <head>
    <meta http-equiv="refresh" content="0;url=http://www.google.com/">
  </head>
</html>

'Web > Html_Css' 카테고리의 다른 글

style display 옵션 테스트  (0) 2021.11.20
부트스트랩 태그 중앙정렬  (0) 2020.06.26
css 사이즈 원하는대로 조절하려면  (0) 2020.06.22
부트스트랩 사이트 모음  (0) 2020.06.22
그리드 grid 사용법  (0) 2020.06.19

+ Recent posts