분류 전체보기 45

2019 회고

1. 올해 첫 직장에 입사하며 다룰 수 있었던 기술 1-1. AWS 기존의 알던 온프레미스 환경에서 벗어나 클라우드를 접하였다. 쓴만큼 지불한다는 개념이 존재하였기 때문에 각 클라우드 제품을 사용하는 것에 대한 최적화, 기반 기술, 한계점, 단위 비용에 대해 명확히 알고 있어야만 설계가 가능했다. 그러므로, 일반 개발자보다 훨씬 더 많은 학습을 통해 deep하게 공부를 할 필요성을 인지하였다. 중점적으로 사용한 서비스로는 Lambda, EC2, S3, API Gateway, EKS이다. 2020에는 EKS, MSK, Elastic Search 등 더욱 많은 서비스를 경험하여 내 것으로 만들 것이며 기반 기술에 대해 심도 있는 공부를 할 예정이다. 1-2. Kubernetes & Docker 입사 후 AW..

회고 2020.02.01

[DynamoDB] Partition Key 설계 원칙 및 고려사항

Table of content 1. DynamoDB Partitioning 원리 2. Partition Key 설계시 고려사항 2-1. 분산된 워크로드 2-2. Partition Key에 난수 추가 (Sharding) 2-3. Partition Key를 이용한 효율적인 쓰기 작업 분산 3. 참고문헌 1. DynamoDB Partitioning 원리 DynamoDB는 자체 내부 Hash Function이 있다. Partition Key값을 파라미터로 계산된 Hash Value를 기준으로 DynamoDB Table 내부의 파티션이 결정되어 데이터는 적재된다. Primary Key가 복합키인 경우에도 단일 Partition Key로 이루어진 경우와 같은 방식으로 partition key hash값을 계산하여 ..

IT/NOSQL 2020.01.23

[Linux] user not in the sudoers file.

금일 개발환경 구축을 위해 개발 팀원들에게 Amazon Linux에서 새로운 계정을 발급하여 배포하였다. 팀원이 사용하는 계정에서는 문제가 없었지만, 패키지를 설치하고 관리하는 admin역할을 담당하는 팀장님의 계정에 문제가 있었다. 그 문제는 다음과 같다. 다음과 같이 sudo 권한 획득을 요구한 유저가 sudoer 파일에 없다는 에러 메시지가 출력이 되었다. 위와 같은 에러메시지를 해석하기 위해 sudoer라는 파일에 대해 찾아보았다. Path : /etc/sudoers (Amazon Linux2 기준) Role : Sudoers allows particular users to run various commands as the root user, without needing the root passw..

IT/Security 2020.01.06

[Github] git reset 작업 취소 방법

오늘 파이썬 코드 작업 도중 git에 올려야 하는 코드를 제외하고 commit메시지를 작성하였다. commit을 취소 하기 위해 git reset --hard HEAD^ 를 입력하여 commit을 취소하고 다시 git add 를 실행하는데 Nothing to Commit이라고 출력이 되었다. 다시 깃허브 명령어를 보니 --soft 옵션이 아니고 --hard옵션으로 실행되어 commit이 취소되는 동시에 해당 파일들은 예전 코드로 변경이 되어 있었다. 흘려본적 없는 식은땀이 났고, 고객사에 제출해야하는데 코드가 모두 날아가서 매우 당황스러웠다. git-scm을 찾아서 되돌릴 방법을 찾아 본 결과 획기적인(그 당시의 나에게만) 명령어가 있었다. 그 명령어는 다음과 같다. SYNOPSIS git reflog ..

IT/Git 2019.11.26

20191126 회고 - 프로그래밍 패턴

1. 예외 처리 def S3ObjectDownload(bucket, key): # S3에 자원에 접근 할 access key와 secret key를 입력합니다. s3 = boto3.resource('s3', aws_access_key_id='', aws_secret_access_key='YOUR_SECRET_KEY') # 추출 된 key에서 경로 값을 제외한 순수 파일 명을 얻기 위한 작업 preOutPutName = key.split('/') outPutName = preOutPutName[-1] # 파라미터로 받은 값을 이용하여 가장 최근에 올린 파일을 EC2로 다운로드 s3.Bucket(bucket).download_file(key, outPutName) print("Download successf..

회고 2019.11.26

[Spring] Servlet의 동작 과정과 메모리 적재

어제 학습한 servlet에 대해 의문점이 생겼다. Chrome에서 servlet을 1회 최초 호출하고, Safari에서 servlet을 1회 호출한 결과는 위 사진과 같이 나왔다. 2번 호출 했으니, init 매서드가 2번 호출 될 것이라고 생각했었는데 아니었다. 그 이유는 다음과 같다. 서블릿의 동작과정을 한눈에 보기 쉽게 다이어그램으로 정리해보았다. Servlet는 최초 호출이 되면 해당 selvlet은 메모리에 적재됩니다. 그 이후로 다른곳에서도 중복 호출 하게 되면, 똑같이 Servlet를 불러오는 것이 아니라, 메모리에 적재된 Servlet을 재사용해서 사용자와의 인터페이스를 제공한다고 한다. Servlet는 메모리에 이미 init()이 실행된 채로 메모리에 적재되어 있기 때문에 또 다시 같은..

IT/Java Spring 2019.11.19

NoSQL vs RDS

1. why we use noSQL 유연성 : rdb와 비교하여, 유연한 스키마를 제공하고 있기 때문에 데이터베이스를 반정형 또는 비정형적인 데이터를 취급하는데 유리하다. 이러한 스키마는 빠르고 반복적인 개발을 유도하게 된다. 확장성 : noSQL 데이터베이스는 고가의 스펙이 뛰어난 서버 대신, 분산형 클러스터를 이용하기 때문에, 서버 운영에 대한 부담 절감과 더 적은 스트리지를 기반으로 운영 할 수 있게 됨에 따라 더 많은 데이터를 담을 수 있게 되었다. 고성능 : 특정 비정형 데이터(document, key-value, graph … ) 및 엑세스 패턴에 대해 특화시킬 수 있기 때문에 특정 워크로드를 유사하게 받아들이는 것이 아닌 그대로 받아들일 수 있게 된다. 이에 따라 유사한 환경을 제공하는 rd..

IT/NOSQL 2019.11.19

[DynamoDB] Amazon DynamoDB 구성 요소

Table of content 1. 테이블 2. 항목(Item) 3. 속성(Attribute) 4.Primary Key 4.1. Partition Key 4.2. Sort Key (Range Key) 5. Secondary Index 6. WCU, RCU 6.1.RCU (Read Capacity Unit) 6.2.WCU (Write Capacity Unit) 6.3. 참고 - 일관성 7. 참고문헌 1. 테이블 데이터 레코드의 집합 2. 항목(Item) 테이블에 있는 하나의 레코드 자체를 의미 3. 속성(Attribute) 기본적인 데이터 요소로 더 이상 나뉠 수 없는 것, 항목의 조각 속성에 대한 내포 속성은 32 깊이 까지 허용 대부분의 속성은 스칼라(하나의 값만 가질 수 있음)다. 4. primary..

IT/NOSQL 2019.11.19

[Spring] Servlet과 web.xml의 관계

기본적인 프로젝트를 생성하면 다음과 같은 web.xml이 생성되어 있을 것이다. 기본적으로 "/"경로를 호출할 때, 쓰일 수 있는 페이지의 형식을 로 정의해 놓았다. servlettest index.html index.htm index.jsp default.html default.htm default.jsp 앱을 외부로 디플로이 하기 위해 자신의 프로젝트를 톰캣에 추가 하였을 것이다. web.xml에 매핑을 하지 않았을 경우, Servlet을 호출 할 때 http://// 과 같이 매우 긴 주소로 호출 할 것이다. 하지만 이러한 형식은 클래스 이름이 그대로 노출되기 때문에 보안상 좋지 않습니다. 따라서 이런 방식으로 사용하지 않고, 서블릿 클래스에 대해 대응하는 매핑된 이름으로 실제 서블릿을 요청한다. ..

IT/Java Spring 2019.11.18

[AWS-CLI] aws: command not found 해결법

일반적인 리눅스 터미널에서 awscli를 설치하였을 때, 보통은 제대로 작동하지만, git bash는 윈도우 상에서 리눅스 시스템을 사용하도록 에뮬레이터로 “흉내” 낸 것이기 때문에 경로가 잘 매칭 되지 않는 문제가 빈번히 일어난다. 그 결과로 다음과 같이 제대로 명령어가 작동하지 않는 경우가 종종 일어난다. 리눅스 환경에서도 경로 해석이 잘못 될 경우, 일어나는 에러이다. 위 문제를 해결하기 위하여 가장 먼저 awscli가 어떤 언어 기반으로 실행되는지 찾아보았다. 공식 aws github를 찾아본 결과, python을 사용하는 것을 알 수 있었다. Python기반으로 실행되는 스크립트 임을 알게 되었으니, 이제 실행파일이 어디 있는지 확인해보았다. 일반적으로 pip uninstall 명령어를 사용하면..

IT/Cloud 2019.11.14