목록개발 (15)
csct3434

미리보기기획 배경 2024 관광데이터 활용 공모전에 참여하면서 야구장 카풀을 주제로 한 서비스를 개발했습니다.카풀이 이루어지기 위해서는 소통 수단이 필요했고, 사용자 편의성을 고려하여 자체적인 채팅 기능을 제공하기로 했습니다. 초기 시스템 설계 과정[ Why : WebSocket 도입 ] Polling, Long Polling, Server Sent Event, WebSocket 등 다양한 실시간 통신 방식을 검토한 결과, 채팅 시나리오에 WebSocket의 실시간성 및 양방향 통신이 잘 어울린다고 판단하여 구현 기술로 WebSocket을 선택했습니다. [ Why : 클러스터링 구성 ] 사용자가 약속 장소에 도착한 상황에서 채팅 기능이 중단된다면 대면 만남에 있어 큰 지장을 줄 수 있습니다.따라서 실시..

1. ECDSA 키 생성ssh-keygen -t ecdsa -b 256 -f config-repo-key 생성 파일'config-repo-key' : 개인키 -> Config 서버에 등록'config-repo-key.pub' : 공개키 -> GitHub Repository에 등록2. Github Repository에 공개키 등록[Repository Settings] > [Deploy keys] -> [Add deploy key] 선택공개키 파일 (config-server-key.pub) 내용 붙여넣기"Allow write access" 체크 해제 (읽기 전용)3. Spring Cloud Config Server 설정[build.gradle]tasks.named("bootJar") { enabled ..

도입플랫폼을 운영하며 액세스 로그를 분석하던 중, API 서버에서 제공하지 않는 엔드포인트로 다수의 요청이 들어오는 것을 발견했습니다. 해당 요청에 대해 검색해보니, 원격 코드 실행 혹은 Credential 탈취를 목적으로 한 공격이었습니다.요청이 들어오는 IP를 확인해보니, 글로벌 서비스가 아님에도 다양한 국가에서 요청이 발생하는 것으로 보아 봇에 의한 공격이 의심되었습니다.다행히 Nginx와 같은 웹서버를 사용하고 있지 않았기에 이러한 공격들은 WAS의 필터에서 전부 막히고 있었습니다.하지만 불필요한 요청으로 인해 서버의 부하가 증가하고 액세스 로그가 더럽혀지기에, 이러한 공격을 아예 차단하고자 AWS WAF를 통해 화이트리스트 방식의 ACL을 도입했습니다.AWS WAF 구성https://sessin..

1. EC2 권한 설정EC2 인스턴스와 연결된 IAM Role에 CloudWatchAgentServerPolicy 정책을 추가해 줍니다. 인스턴스와 연결된 IAM Role이 없는 경우 AWS Console에 접속하여 아래의 순서대로 진행해 주세요.[IAM] -> [액세스 관리 | 역할] -> [역할 생성][신뢰할 수 있는 엔티티 유형] : "AWS 서비스", [사용 사례] : "EC2" 선택 후 [다음][권한 정책] 검색 창에 "CloudWatchAgentServerPolicy" 입력하여 체크박스 선택 후 [다음]역할 이름 "ec2_role" 입력 후 [역할 생성][EC2] -> [인스턴스 | 인스턴스] -> 체크박스 선택[작업] 버튼 클릭 후 [보안 | IAM 역할 수정][IAM 역할] : "ec2_r..

application.propertiesserver: tomcat: basedir: /app accesslog: enabled: true directory: logs prefix: access_log suffix: .log rotate: true max-days: 2 pattern: "%h %l %u %t \"%r\" %s %b"로그 저장 위치 : ${basedir}/${directory}/${prefix}.{yyyy-MM-dd}${suffix}예시 : /app/logs/access_log.2024-05-25.logrotate : 로그 로테이션 활성화 (기본값 : true)max-days : 로그 로테이션 시 저장 기간 (기본값 ..

인트로지난 글에서는 Amazon S3 트리거와 Lambda를 활용하여 썸네일 이미지를 생성하는 방법에 대해 알아봤습니다. AWS S3와 Lambda를 활용한 썸네일 이미지 생성 (1)인트로 여느 때처럼 시즈닝 사이트를 둘러보던 중, 친구의 프로필 사진이 끊기면서 로딩되는 것이 눈에 띄었습니다. 크롬 개발자 도구로 확인해 보니 6.5Mb 크기의 3024 x 4032 이미지를 다운받아 40csct3434.tistory.com 이번 글에서는 생성된 썸네일을 실제 서비스에서 활용하는 방법에 대해 알아보겠습니다.코드 예시@Service@RequiredArgsConstructorpublic class S3Service { private final AmazonS3 amazonS3; public Uploa..

인트로여느 때처럼 시즈닝 사이트를 둘러보던 중, 친구의 프로필 사진이 끊기면서 로딩되는 것이 눈에 띄었습니다.크롬 개발자 도구로 확인해 보니 6.5Mb 크기의 3024 x 4032 이미지를 다운받아 40 x 40 크기로 렌더링하고 있었습니다.특히 모바일 환경에서는 이미지 로딩 지연이 크게 체감되어서, 이를 개선하기 위해 썸네일 이미지를 활용해 보기로 했습니다. ※ 이 글은 Amazon S3 트리거 및 Lambda를 활용하여 썸네일 이미지를 생성하는 솔루션을 다루고 있습니다.썸네일 이미지 생성https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/with-s3-tutorial.html 자습서: Amazon S3 트리거를 사용하여 썸네일 이미지 생성 - AWS Lambda..

중앙 집중식 로깅의 필요성 AWS에서 오토 스케일링을 사용하는 경우, 다음과 같은 로그 관리의 어려움을 겪게 된다. Scale out : 다중 서버로 인한 로그 분산 Scale in : 인스턴스 삭제로 인한 로그 분실 분산된 로그를 단일화된 저장소에서 관리하는 중앙 집중식 로깅(Centralized Logging)을 활용하여 이러한 문제점을 해결할 수 있다. 이 글에서는 logback-awslogs-appender 라이브러리와 AWS CloudWatch 서비스를 활용한 중앙 집중식 로깅 구현 방법에 대해 알아본다. 1. CloudWatch Log Group 생성 스프링 애플리케이션에서 전송된 로그를 보관하는 저장소인 CloudWatch Log Group을 생성해준다. Log group name : 로그 ..

인트로작년 11월 구름에서 주최한 해커톤에 참가하여 24절기를 테마로 한 일기 서비스를 개발했습니다.해커톤 당시에는 데모 수준에 그쳤지만, 팀의 좋은 분위기로 인해 해커톤 이후로도 약 3개월 간 추가로 서비스를 개발하며 서비스를 정식으로 출시했습니다.장애 대응백엔드 개발자로서 서비스 출시를 앞두고 가장 우려되는 부분은 트래픽 증가로 인한 장애 발생이었습니다.오프라인 행사와 온라인 플랫폼(에브리타임, 인스타그램 광고)에서 홍보를 동시에 진행할 예정이었기에, 어느 정도로 부하가 발생할 지 예측하기 힘든 상황이었습니다. 이에, 비용이 많이 발생하더라도 최대한 안정적으로 서버를 운영할 수 있도록 인프라를 재구성했습니다.WASWAS의 경우 AWS ALB와 EC2 Auto Scaling을 활용하여 부하에 따라 수평..

인트로 친구 게시글 조회 기능에서의 페이지네이션을 구현하기에 앞서, LIMIT-OFFSET과 NO-OFFSET 방식의 성능을 비교해 보았습니다. 게시글 테이블에 1억 건의 더미 데이터를 추가한 후, MySQL의 EXPLAIN 명령어와 Query Profiling을 활용하여 첫번째 페이지와 마지막 페이지에 대한 쿼리 실행 계획 및 쿼리 성능을 분석했습니다. LIMIT-OFFSET 방식 쿼리문 쿼리 실행 계획 첫번째 페이지에서는 클러스터드 인덱스를 사용하지만, 마지막 페이지에서는 Full Table Scan이 발생함을 확인할 수 있었습니다. 쿼리 실행 시간 첫번째 페이지 : [ 156.68s ] , 마지막 페이지 : [ 295.17s ] 첫번째 페이지와 마지막 페이지의 조회 시간은 약 2배 정도의 차이를 보..