AWS서비스를 시작하며..

개발자로 aws에 가입하고 무엇을 해야할지 모르는 분들이 있을 것이라고 생각합니다.

저도 프리티어라는 1년간의 많은 자원을 어떻게 사용할지 모르지만

같이 공부하고 실습하며 배워가보자 합니다.

첫 시작은 IAM입니다. 서비스를 사용하기전 사용자에 대해서 알아봅시다.

( 잘못된 내용에 대해서는 댓글로 알려주시면 수정하겠습니다..)


IAM (Identify and Access Management)

여기에서 사용할 수 있는 서비스입니다.

인증(Identify)접근(Access)를 관리하는 서비스인데요.

저처럼 개인 프로젝트를 사용하는 것이 아닌 회사, 팀별로 아이디를 사용하는 경우가 있습니다.

그렇다면 해당 직책과 파트에 맞게 리소스 또는 서비스를 관리해야하는 상황이 오게됩니다.

바로 그 순간 사용하는 서비스라고 생각합니다.

정리하자면 사용자에 맞게 서비스나 리소스에 대한 권한을 정리하는 서비스라는 것이죠.


IAM의 구성

IAM 대시보드

AWS의 서비스를 보면 대시보드에 중요 요소가 있는 것을 확인할 수 있습니다.

IAM의 대시보드를 보면 5가지의 구성이 있는데요.

사용자 그룹, 사용자, 역할, 정책, 자격 증명 공급자가 있고 뒤에서부터 하나씩 알아보도록 하겠습니다.

([자격 증명 공급자]에 대해서는 후에 추가하도록 하겠습니다.)


1. 정책

AWS서비스들은 서비스가 제공하는 범위에 따라 권한이 주어집니다.

대표적인 서비스 EC2, S3, EBS 등등에 접근, 수정과 같이 권한이 나누어져 있습니다.

예를 들면, 집이라는 서비스에서 TV를 보는 권한, 사진첩을 보는 권한 이라고 나눌 수 있겠네요.

정책은 이러한 권한을 묶어놓은 것이라고 생각하면 됩니다.

사용자가 특정 서비스에 접근만 가능하다고 할때 서비스안에 있는 모든 접근이라는 권한을 한개씩 추가하는 것은 비효율적이겠죠..

따라서 AWS에서는 (AmazonEC2ReadOnlyAccess) 와 같이 권한을 묶어놓은 정책을 제공해줍니다.

*AmazonEC2ReadOnlyAccess: 직관적으로 EC2를 읽을 수만 있는 권한의 묶음이라고 느껴지죠

AWS에서 제공했듯이 이름과 권한을 상황에 맞게 생성해서 쓰면 유용한 기능입니다.


2. 역할

역할은 정책 또는 권한을 사용할 수 있는 직업이라고 생각하시면 좋습니다.

직업에 맞는 이름과 적합한 정책 또는 권한들을 추가하여 만들어 준 것인데요.

예를 들면, 마피아게임에서 마피아 또는 경찰이 될 사람은 모르지만 마피아는 밤에 일어나 시민을 해하는 권한을 갖고있고 경찰은 밤에 일어나 시민과 마피아를 확인할 수 있는 권한이 정해져 있는 것과 같습니다.

이처럼 역할은 누군가에게 맞는 직업을 주어 정책과 권한을 관리한다고 생각하시면 됩니다.

중요한 점은 지정된 사용자가 아닌 누군가에게 주는 역할이기 때문에 임시적인 액세스 권한입니다.
일반 사용자와 다르게 임시적으로 보안 자격 증명(사용 접근 허가)을 제공한다고 생각하시면 됩니다.

* 정책과 권한이라고 했듯이 정책뿐만 아니라 권한 한개를 추가 가능합니다.

** 역할에 맞는 권한을 아예 만들어서 사용하는 방법도 있지만.. 추가 또는 삭제가 자주 일어날 것 같습니다.


3. 사용자

이제 사용자입니다. 이름에서 알 수 있듯이 사용하는 사람을 정의하는 기능인데요.

맨 처음에 회사 또는 팀에서 관리하는 계정이라고 말씀드렸듯이 계정 하나를 두고 여러 개의 사용자를 만들어서 사용할 수 있습니다. 바로 루트 사용자가 회사 또는 팀의 계정이고 사용자가 팀원들의 계정이 됩니다.

사용자를 생성시에는 AWS 자격 증명 유형이 두 가지가 있는데요.

액세스 키 : AWS API, CLI, SDK 및 기타 개발도구를 사용하는 액세스 키 ID와 비밀 액세스 키를 활성화
암호 : AWS 콘솔(웹 환경)을 로그인할 수 있도록 암호를 만들어 활성화

꼭 한가지는 선택해야 사용자의 자격이 증명이 되고 두개 모두 사용할 수 있습니다.

이후 사용자에게 맞는 정책을 연결해주시면 됩니다. (역할과는 다르게 권한을 직접 적용할 수 없습니다..)


4. 사용자 그룹

마지막으로 사용자 그룹입니다. 이것도 이름에서 알 수 있듯이 사용자를 모아놓은 그룹인데요.

부서에 맞는 정책들을 모아놓고 사용자를 추가하면, 사용자는 그룹에서 정의해놓은 정책을 사용할 수 있는 개념입니다.

예를 들면, 일반인이었던 제가 신발가게알바라는 그룹의 사용자가 되면 신발창고에 접근할 수 있다는 것과 비슷하네요.

회사와 팀에서는 각 부서 및 파트를 나누어 그룹으로 관리하고 해당하는 사람을 사용자로 넣어서 쉽게 관리할 수 있게 됩니다.


마무리

IAM에 대한 기능을 천천히 정리했습니다.

간단하게 개념을 이해한다면 콘솔(웹 환경)에서 생성, 제거와 같은 기능을 사용할 때

각 기능의 관계를 비교하면서 쉽게 사용할 수 있다고 생각합니다.

궁금하거나 잘못된 점을 댓글로 남겨주시면 열심히 답변 및 수정 하겠습니다.

 

문제

Docker에 대한 프로젝트를 실행중에 다음과 같은 에러가 떠있는 것을 확인했다...

(최근 VMWare, VirtualBox를 써서 발생한 문제인줄 알고 식겁했다.)


발생한 이유

결론으로는 색갈만 빨갛고 내용은 별게 없었다.

(-Xverify, -noverify 옵션을 JDK13 이후부터 사용안해서 제거될거야!)라는 뜻이다.

프로젝트에 문제가 되지는 않을 것 같지만, 경고문을 없애고 싶기 때문에 구글링을 해보았다.


해결책

현재 IntelliJ를 사용하고 있고 다음과 같은 순서로 해결하면 된다.

상단 Run 탭 -> Edit Configurations -> 현재 프로젝트 -> Modify options -> Disable launch optimiztation 추가

설정이 끝났다면 해당 경고문은 뜨지 않게 된다.


Launch Optimization?

어떤 작업을 하는 친구인지는 Jetbrain 홈페이지에서 찾을 수 있었다.

-XX 와 -noverify 옵션을 선택해서 Application의 실행 속도를 높여주는 것 같은데

JDK13 이상 버전에서는 사용하지 않는 옵션이라서 경고문이 뜬 것 같다.

새로운 LTS JAVA인 JDK17을 써서 이런 경고문이 떴던 것 같다!


해결에 도움을 준..

1. eclipse - Java HotSpot(TM) 64-Bit Server VM warning Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release - Stack Overflow

2. Run/Debug Configuration: Spring Boot | IntelliJ IDEA (jetbrains.com)

 

1)Stack Overflow 사이트의 같은 문제에 대한 질문이 있었다.

2)Jetbrain에서 찾은 Launch Optimization ..

시작

알고리즘을 처음 시작했을 때, 시간복잡도에 대한 단어를 얼핏 듣고 사용한 적이 있었다.

누군가 바로 잘알고 사용하라고 말해줬던 기억도 있었다.

현재에 와서야 입력값에 대해서 시간복잡도를 따져서 알고리즘을 생각하게 됐다고 생각한다.


시간복잡도

시간복잡도에 대해서 위키백과는 이렇게 말한다.

더보기

시간 복잡도는 문제를 해결하는데 걸리는 시간과 입력의 함수 관계를 가리킨다

시간 복잡도를 계산할때 세 가지의 표기법이 있지만 보통은 빅-오 표기법을 자주 사용한다.

또한, 약 1억이라는 연산량을 1초라고 생각할 수 있는 추정치이기 때문에 빅-오 표기법과 이를 활용하면

알고리즘 문제에서의 시간제한을 어느정도 생각할 수 있다.


입력 값

입력에 대해서는 문제를 잘읽다보면 알 수 있다.

입력의 제한을 고려하여 빅-오 표기법으로 최대연산량을 추정하고 시간을 생각해본다.

O(N) = (대충) 1억
O(NlogN) = (대충) 천만
O(N^2) = (대충) 1만
O(N^3) = (대충) 5백
O(2^N) = (대충) 20
O(N!) = (대충) 10

아마 시간초과가 나는 경우는 입력이 두개 주어지거나 연산이 길어지는 부분이 있을 수 있다.

초기화

알고리즘 문제를 풀다보면 배열의 값을 한번에 초기화를 해야하는 경우가 생긴다.

배열의 member 값들을 set 해주는 memset함수에 대해서 알아보자


memset 함수의 구조

memset 함수의 라이브러리 ( in vscode )
memset 함수의 구조 ( in vscode )

VScode에서 확인했을 때 memset함수의 라이브러리는 <string.h>에 속해 있다.

멤버변수로는 ( 메모리 시작 주소 , 값 , 사이즈 )를 가지고 있고 사이즈의 경우 sizeof(배열)을 사용하면 좋다.


memset 함수의 특징

memset함수를 활용하면 메모리의 시작 주소부터 사이즈만큼 값을 채워주는 역할을 한다.

이때, 값들을 byte 단위로 채워준다. ( int는 4byte 자료형이다. )

 

예시 ) int 1값을 memset의 값에 넣었다면 ( 00000000 00000000 00000000 00000001) == (int) 1

        뒤에 밑줄쳐진 값( 1byte 단위의 값 )으로 채워주기 때문에

        (00000001 00000001 00000001 00000001) = (int)16843009 이라는 값으로 메모리에 채워진다.

 

그러므로 memset 함수를 활용하여 메모리를 채울 때에는 이러한 점을 생각해서 값을 정해주면 된다.


사용 경험

보통 DP문제를 풀거나 방문체크를 할때 배열을 초기화 해주는 경우가 많다. 자주 쓰는 값은 0, -1이다.

(int) 0 = 00000000 00000000 00000000 00000000
(int) -1 = 11111111 11111111 11111111 11111111

두 숫자는 제일 우측 1byte단위의 값이 반복되는 형태이기 때문에 똑같이 값이 채워진다.

또는 가장 큰값을 적용하기 위해서는 1byte단위의 큰 값을 적용하면 4byte모두 채워진다는 점을 사용하면 된다.

(int) 0x7f = 00000000 00000000 00000000 01111111 = 127
=> memset() 적용 후의 값 = (int) 0x7f7f7f7f = 01111111 01111111 01111111 01111111 = 2,139,062,143

이처럼 16진수(0x7f) = 127 값을 활용하여 메모리를 int의 max값과 비슷하게 높은 값을 넣을 수 있다.

127을 활용하는 이유는 4byte모두 채워졌을 때, 가장 좌측 byte 단위의 첫값은 부호비트이기 때문이다.

따라서, 양수를 만들기 위해 01111111를 활용하는 것이다.

맥북 Air를 처음 사용하면서 개발자 환경을 설정하는 것이 많이 힘들었다.

오늘 처음으로 맥북을 교육에 사용하려고 하였고 Python에 대한 설정을 하였다.

설정을 하며 기억에 남았던 부분을 기록하려고 한다.


1. Python 버전

Terminal 또는 iTerm을 활용하여 현재 파이썬의 버전을 확인한다.

python --version

결과는 보통 현재 맥북에 설치되어있는 2.대 파이썬이 설정되어 있을 것이다.

나는 이것을 3.대 파이썬으로 변경하고 싶었다.

(보통 어떤 파일의 버전을 확인할 때 --version 또는 -V를 사용하면 알 수 있다.)


2. Python 3. 설치하기

homebrew가 있다는 가정하에 다음 코드를 활용하면 최신 파이썬을 받을 수 있다.

brew install python

최신 파이썬이 설치되는 것을 확인할 수 있다.

(homebrew는 맥에서 터미널에서 많은 것을 받을 수 있게 해준다고 한다.)


3.Python 3.로 변경하기

이제는 다운받은 python3.를 적용하는 단계이다.

적용하는 방법은 기존 파이썬 경로를 새로 다운받은 것과 연결시켜주는 것이다.

ln -s -f /usr/local/bin/python3.9 /usr/local/bin/python

ln (원본파일) (대체파일) 는 원본파일에 대한 link(그래서 ln인 것 같다.)를 한 대체파일을 만들겠다는 뜻이다.

링크에는 하드링크와 심볼릭링크가 있기 때문에 잘 알아보고 써야할 것이다.

-s 옵션 : 심볼릭링크 파일을 만들겠다는 뜻이다.

-f 옵션 : 이미 대체파일(링크파일)이 존재하면 삭제하고 새로 생성하겠다는 뜻이다.

(따라서, "python3.대 경로를 기본 python경로로 심볼릭 링크하는 파일이 있으면 삭제하고 새로 만들겠다."는 뜻)

터미널을 재시작하고 --version을 하면 Python3.을 만날 수 있다.


4. MiniConda 설치

AnaConda보다는 작다는 MiniConda를 활용하기 위해서 MiniConda 설치파일을 받았는데 새로운 형식이었다.

.sh 형식의 파일을 받아서 처음이었지만 검색을 통해 설치법을 배울 수 있었다.

터미널에서 실행시키는 방법이 리눅스 명령어를 사용하는 느낌이라 선택했다.

cd ./Downloads
ls
bash [다운받은파일.sh]

cd(change directory) 명령어를 통해서 ./(현재위치) 안에 있는 Downloads파일로 경로를 바꾼다

ls(list) 명령어를 통해서 다운받았던 파일의 이름과 확장자를 확인하고

bash 명령어는 bash문법으로 작성된 스크립트를 실행시키는 명령이기에 sh파일을 실행시켜주면

엄청난 설명과 함께 마지막에 'yes/No'를 작성하게 되어있다. 당연히, yes를 눌러서 다운 받으면 된다.

이후에는 conda 명령어와 함께 가상환경에서 python을 실행한다.


 

5. Python Conda 가상환경

각자 원하는 가상환경과 개발환경을 사용하겠지만 내 상황을 간단하게만 기록하려고 한다.

conda create -n test python=3.9
conda activate test
(test 환경 진입)
conda install jupyter
jupyter notebook
(jupyter 환경 진입)
(코딩)
(jupyter 환경 끝)
conda deactivate
(test 환경 끝)

이렇게 python3.를 miniconda와 jupyter notebook을 활용하여 사용하는 법을 알 수 있었다.

(기본 브라우저가 사파리면 사파리로 열리는데 크롬이나 엣지로 기본브라우저를 바꿔주면 편하게 사용이 가능하다.)

+ Recent posts