분류 전체보기 555

AWS S3

만약 애플리케이션에서 파일 업로드와 다운로드를 구현할 때 한번쯤 고려해보는 시스템이 바로 S3입니다. S3란 세개의 S를 말하는데요 Simple Storage Service 이렇게 S3입니다 (갑자기 꽃보다 남자의 F4가 생각나네요). S3는 그냥 단순하게 클라우드 저장소라고 보면 되는데 구글 드라이브와 다르지 않습니다. 하지만 구글 드라이브와는 다르게 S3는 단순한 저장소 이상으로 다양하게 사용할 수 있습니다. 이번 포스팅에선 S3를 다양하게 사용할 수 있는 방법에 대해서 알아보고 직접 S3를 만들어보고 업로드까지 해보는 시간을 가져보겠습니다. 1. 단순하게 저장소로 사용하는 방법 그냥 단순하게 저장소로 사용하는 방법입니다. 아주 심플하고 간단하죠. 클라우드처럼 저장해놓고 꺼낼 때 꺼내는 방법입니다. ..

DevOps/AWS 2023.08.14

AWS IAM

프로젝트를 진행하면서 AWS에 접근하기 위해서 IAM이라는 것을 설정해본 기억이 한번쯤 있으실 것입니다. IAM은 별 내용이 없어서 지나치기 쉽지만 꽤 심오한 내용을 담고 있었습니다. 이번 포스팅에선 AWS의 권한 책임자 IAM에 대해서 알아보고 직접 만들어보기까지 해보도록 하겠습니다. IAM AWS IAM은 Identity and Access Management의 약자로 IAM은 AWS의 서비스나 자원을 안전하게 접근하도록 관리해주는 서비스입니다. IAM을 사용하면 AWS 유저나 그룹을 생성하고 관리할 수 있으며 AWS 자원에 접근하거나 제한하는 권한을 사용할 수 있습니다. 즉, 인가와 비슷하다고 볼 수 있는데요. 어떤 유저에게는 어떤 서비스는 이용할 수 있고, 어떤 서비스는 이용할 수 없도록 막는 인..

DevOps/AWS 2023.08.14

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전4 (MySQL 설치, DBeaver 연결)

우리는 앞서 private subnet에 접근하는데 성공했습니다. 이제 여기에 도커와 MySQL을 설치하고 외부 연결 서비스인 DBeaver에 연결해보도록 하겠습니다. 이전 포스팅과 이어지는 포스팅입니다. https://coding-review.tistory.com/454 데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전3 (EC2 연결) 앞선 포스팅에서 우리는 EC2 인스턴스를 생성했습니다. 이제 우리는 EC2 인스턴스에 접속해보도록 하겠습니다. 이전 포스팅과 연결되는 포스팅입니다. https://coding-review.tistory.com/453 데이터베이스 coding-review.tistory.com 도커로 MySQL 띄우기 우선 도커와 도커 컴포즈를 다운받습니다. $ sudo apt-..

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전3 (EC2 연결)

앞선 포스팅에서 우리는 EC2 인스턴스를 생성했습니다. 이제 우리는 EC2 인스턴스에 접속해보도록 하겠습니다. 이전 포스팅과 연결되는 포스팅입니다. https://coding-review.tistory.com/453 데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전2 (EC2 생성) 이전 포스팅에서 AWS 설정을 마무리지었습니다. 이번엔 public subnet에 애플리케이션 서버를 두고 private subnet에 데이터베이스 서버를 둬보겠습니다. 이전 포스팅과 이어지는 포스팅입니다. https://co coding-review.tistory.com 바로 시작해보죠 PuTTY를 키고 Host Name에는 application-server 인스턴스의 퍼블릭 IPv4 주소를 입력해줍니다. 그리고 ..

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전2 (EC2 생성)

이전 포스팅에서 AWS 설정을 마무리지었습니다. 이번엔 public subnet에 애플리케이션 서버를 두고 private subnet에 데이터베이스 서버를 둬보겠습니다. 이전 포스팅과 이어지는 포스팅입니다. https://coding-review.tistory.com/452 데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전1 (VPC와 서브넷) 앞선 포스팅에서 우리는 VPC와 서브넷, 라우터와 라우팅 테이블, 인터넷 게이트웨이, NAT 게이트웨이까지 알아봤습니다. 이번 포스팅에선 그 중 첫 번째 단계라고 볼 수 있는 VPC와 서브넷을 만들 coding-review.tistory.com EC2 연결 1. 보안 그룹 생성 EC2를 만들기 전에 EC2에 연결할 보안그룹을 먼저 생성해주도록 하겠습니다...

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전1 (VPC와 서브넷)

앞선 포스팅에서 우리는 VPC와 서브넷, 라우터와 라우팅 테이블, 인터넷 게이트웨이, NAT 게이트웨이까지 알아봤습니다. 이번 포스팅에선 그 중 첫 번째 단계라고 볼 수 있는 VPC와 서브넷을 만들어 볼 것입니다. 개념적인 부분에 대해서 아직 모르고 계시다면 앞선 포스팅을 참고해주세요! https://coding-review.tistory.com/451 데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 개념 저는 항상 의문점이 있었던 것이 애플리케이션 서버와 데이터베이스 서버를 나누게 되면 이 둘은 어떻게 통신을 하는가? 였습니다. 제가 기존에 배포하던 방식인 EC2 인스턴스에 애플리케이션과 coding-review.tistory.com VPC 생성과 서브넷 생성 1. VPC 생성 AWS 검색창에 V..

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 개념

저는 항상 의문점이 있었던 것이 애플리케이션 서버와 데이터베이스 서버를 나누게 되면 이 둘은 어떻게 통신을 하는가? 였습니다. 제가 기존에 배포하던 방식인 EC2 인스턴스에 애플리케이션과 데이터베이스를 동시에 두게 되면 보안상 좋지 않다는 말을 들었습니다. 그래서 이 부분에 대해서 GPT에게 물어봤더니 VPC를 사용하면 된다는 말만 끊임없이 하더군요. 그 당시에는 VPC가 뭔지 도 몰랐고 그냥 VPC를 쓰면 되는구나 하고 넘어갔습니다. 이번 포스팅에선 본격적으로 VPC를 이용해 애플리케이션 서버와 데이터베이스 서버를 분리시켜보도록 하겠습니다. 시작해보죠. VPC가 뭐야? VPC는 Virtual Private Cloud의 약자로 직역하면 가상의 클라우드 환경이라는 말입니다. 만약 VPC가 없다면 각각의 인..

AWS CLI로 로드밸런서 타겟그룹 바꾸기

블루 그린 배포를 하는 과정에서 한 가지 문제가 생겼습니다. AWS의 로드밸런서인 ALB의 타겟그룹을 수동으로 바꿔줘야 한다는 것이었죠. CLI로 타겟 그룹을 바꿀 수 있다는 사실을 몰랐던지라 이를 어떻게 자동화할지 몰랐고 덕분에 컨테이너와 이미지를 없애고 다시 블루 버전을 띄워서 블루 그린 배포인데 블루 버전만 사용하는 아이러니함이 생겼죠. 새로운 프로젝트를 진행하다가 챗 지피티한테 궁금해서 물어봤습니다. "AWS CLI로 타겟 그룹을 변경할 수 있어?" "그럼요~" 예제 코드까지 친절하게 알려줘서 덕분에 성공할 수 있었습니다 (GPT 최고!). 그럼 이제 본격적으로 AWS CLI로 타겟 그룹을 변경하는 포스팅을 진행해보도록 하겠습니다. AWS CLI가 뭐야? 우리는 AWS의 시스템을 이용할 때 AWS..

JWT 필터 리팩토링

이번 포스팅에선 제 프로젝트의 JWT 필터를 리팩토링 해보도록 하겠습니다. 우선 제 코드를 보여드릴텐데요. 정말 그지같지않을 수 없습니다. if else if else 몇번을 진행한건지 참... 한번 리팩토링 진행해보도록 하겠습니다. 클린 코드를 읽은 개념들을 바탕으로 리팩토링 해보겠습니다. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 1. Request Header 에서 JWT 토큰 추출 String token = resolveToken((HttpServletRequest) request); Authenticati..

리팩토링 2023.07.23

리팩토링 (2-1) : switch 문 인터페이스, 추상클래스로 리팩토링

이번 포스팅에선 책 클린코드에서 나온 예제인 switch문을 인터페이스, 추상클래스로 리팩토링 하는 방법에 대해서 포스팅해보도록 하겠습니다. 사실 책에서는 두루뭉실하게 얘기하기 때문에 조금 와닿지 않아서 개인적으로 토이프로젝트를 한번 만들어 봤습니다. 추상클래스와 인터페이스는 최근에서야 온전히 이해하기 시작해서 조금 미숙할 수 있습니다. public Money calculatePay(Employee e) throws InvalidEmployeeType { switch (e.type) { case COMMISSTION -> { return calculateCommisstionPay(e); } case HOURLY -> { return calculateHourlyPay(e); } case SALARIED -..

리팩토링 2023.07.23