전체 글 31

[Coding] 의도를 분명하게 하라

좋지 못한 코드 public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) { if (x[0] == 4) { list1.add(x); } return list1; } } // theList에 무엇이 들었는가? // theList에서 0번째 index는 왜 중요하지? // 4는 무슨 의미야? // list1은 어떻게 사용이 될까? 좋은 코드 public List getFlaggedCells() { List flaggedCells = new ArrayList(); for (int[] cell : gameBoard) { if (cell[STATUS_VALUE == FLAGGED) { flaggedCells.add(cell); } ..

Etc. 2024.01.27

[AWS] NAT Gateway를 활용한 Private EC2 인스턴스 외부 통신 설정

1. VPC 메뉴 접속2. NAT Gateway 탭 클릭3. Name 입력4. Subnet 위치 선택5. Connectivity type에서 Public 선택6. Elastic IP allocation ID    - NAT Gateway도 IP를 기반으로 통신함    - Allocate Elastic IP 버튼을 눌러 NAT Gateway에 IP를 할당해줌    - NAT Gateway에 할당되는 IP는 Elastic IP이며, 기본 5개까지 제공이되므로 주의 필요7. NAT Gateway 생성 클릭(생성까지 3-5분 소요)8. Private Subnet의 Route Table -> Routes에 7에서 생성한 NAT Gateway를 타겟으로 설정    - Private Subnet에서 외부 통신이 필요..

Infra & Network 2023.06.07

[AWS] NACL 특징 및 설정 방법

- EC2 Security Group과 같이 방화벽 설정이 가능함- 서브넷 단위로 설정 가능하며, 인스턴스 단위로는 설정 불가능- 다수의 서브넷에 동시 적용 가능- 특정 Port 또는 특정 IP를 Deny 가능(EC2 Security Group은 불가능하지만 NACL은 가능함)- Stateless해서 Inbound, Outbound 관련 설정을 모두 신경써서해줘야함(EC2 Security Group은 Inbound만 설정하고 Outbound를 설정하지 않아도 응답을 반환할 수 있지만, NACL은 그렇지 않음)

Infra & Network 2023.06.06

[AWS] Session Manager를 활용한 Private Subnet EC2 접속 방법

Private Subnet에 위치한 EC2 인스턴스에 접근하기 위해선, Public Subnet에 위치한 EC2 인스턴스를 Bastion Host로 만드는 등의 번거로운 작업을 해왔다. 하지만 AWS Session Manager를 이용하면 Bastion Host 설정 같은 복잡한 작업 없이도 Private Subnet에 위치한 EC2에 손쉽게 접근이 가능하다. 참고로 PEM 파일과 같은 EC2 인스턴스의 키파일이 없어도 접속이 가능하다. 요구사항* EC2 인스턴스에 SSM Agent가 설치되어 있을 것(Amazon Linux2는 기본 설치)* EC2 AmazonEC2RoleforSSM Managed Policy 포함된 Role 설정 필요   - IAM에서 해당 Role 추가 후 EC2 우클릭 -> IAM..

Infra & Network 2023.06.06

[AWS] Public & Private 인프라 설정 - VPC & Subnet & Internet gateway & Route Table

AWS VPC 탭 접속 후 아래 순서대로 진행함 1. VPC 생성* 대역 : 10.1.0.0/16 정도로 설정 -> 10.1까지는 고정 이후 255.255에 속하는 IP로 설정하겠다는 의미 2. 생성된 VPC 우클릭 -> Edit DNS hostnames 클릭 -> DNS hostnames 체크 후 저장* VPC 내 인스턴스 등이 DNS를 생성할지말지를 정하는 설정으로 허용하고 진행 3. 서브넷 설정* 서브넷 탭 클릭* 서브넷 생성 클릭* 이전에 생성한 VPC 선택* 생성한 VPC의 CIDR 블록이 표시됨(서브넷은 VPC의 CIDR 블록을 나눠서 사용할 수 있도록하는 역할)* 각 서브넷을 영역별로 생성   * 서브넷명   * 가용영역   * 서브넷 CIDR 4. 외부 인터넷과 통신할 수 있는 인터넷 게이..

Infra & Network 2023.06.05

[DB] MySQL Index 설정을 통한 DB 성능 개선기

해당 글은 운영 중인 어플리케이션의 사용자단에서 자주 사용되는 product(상품) 테이블에 index 설정을 적용하여 관련 성능을 개선한 내용을 포함하고 있습니다.    1. show variables like '%profiling%'; 명령어를 통해 MySQL Profiling 설정 확인하기# MySQL Profiling 설정 확인하기show variables like '%profiling%';     2. Profiling 관련 설정 활성화 및 조회 개수 설정Profiling 기능을 활용하여 Query 성능 변화를 확인하기 위해 profiling 기능을 활성화하고 한번에 조회할 수 있는 profiling_history_size를 늘려줍니다.# profiling 기능 활성화set profiling =..

Performance 2023.06.04

[Spring Boot] Filter 예외, CORS 처리

Spring Boot에서 JWT를 활용한 access token, refresh token을 구현했고, 요청 헤더에 포함된 access token의 검증 기능을 Filter에 포함시켜뒀다. 기능 테스트 중, Filter에서 예외가 발생하면 공통으로 예외처리하기 위해 구현해둔 예외 핸들러로 빠지지 않는걸 확인했고, Filter는 Filter에서 따로 예외처리를 해줘야한다는걸 알았다. 추가로, Filter에서 발생한 예외를 응답 객체에 담아 전달 시, Spring에서 CORS 설정을 했는데도 CORS가 발생했다.CORS도 동일하게 Filter에서 처리해줘야했고, 응답 객체에 CORS 설정에 필요한 정보를 추가하니 정상적으로 통신이 이루어졌다.

Java & Spring Boot 2023.04.07

[Spring Boot] 스프링 버전 별 호환 가능한 디펜던시 버전 확인 방법

https://spring.io/projects/spring-boot#learn Spring BootCommercial support Business support from Spring experts during the OSS timeline, plus extended support after OSS End-Of-Life. Publicly available releases for critical bugfixes and security issues when requested by customers.spring.io 1. Spring Boot -> Projects -> Learn 페이지 접속2. 현재까지 릴리즈된 스프링 버전 중 선택하고자하는 버전 클릭3. Reference Docs. 클릭 시, 해당 스프링..

Java & Spring Boot 2023.01.08

[AWS] CloudFront + Lambda@Edge 이미지 리사이징

서론이커머스 어플리케이션에서 매끄러운 사용자 경험은 매출 증대와 직결됩니다. 특히 상품 이미지의 로드 속도는 사용자가 사이트에 머무르고 구매로 이어지게 하는 중요한 요소 중 하나입니다. 최근 제가 운영 중인 어플리케이션에서 상품 이미지 로드 시간이 2초를 넘어서는 문제를 발견했고, 이는 사용자 경험에 부정적인 영향을 미칠 수 있다는 우려로 이어졌습니다. 문제 인식실제로 일부 이미지의 로드 시간이 2초를 넘는 경우가 있었습니다. 이는 사용자가 페이지를 이탈할 가능성을 높이고, 최종적으로는 판매 감소로 이어질 수 있는 심각한 문제였습니다. 해결 방안관련 문제를 해결하기 위해 기존에 사용하고 있던 AWS S3 설정을 개선해야할 필요가 있었습니다. 저는 S3 + CloudFront 설정에 Lambda@Edge와..

Performance 2023.01.07