목록전체 글 (130)
csct3434
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/odchF/btsHTVo9sW3/ew3JN8FWSAhlz4sPWLAQbk/img.png)
if문대상응답 시간 (마이크로초)if 0개 * 1000회0.46if 10개 * 1000회5if 100개 * 1000회63경유하는 if문의 개수를 달리하여 동일한 작업을 처리하는데 소요되는 시간을 측정한 결과이다. if문 10,000회를 실행하는데 4.54 마이크로초가 소요되었고, 100,000회를 수행하는데 62.54 마이크로초가 소요되었다. if문을 1회 실행하는데 0.4 ~ 0.6 나노초가 소요된 것으로, 아주 큰 성능 저하가 발생한다고 보기는 어렵다.switch문switch문도 if문과 마찬가지로 빠른 응답 결과가 나온다.JDK 7부터 String 문자열을 switch문에 사용할 수 있는데, 이는 컴파일러가 문자열을 hashCode() 메서드의 반환값으로 처리하기 때문이다. 자바 컴파일러는 각 문자..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cXKWKP/btsHUFTpadF/TBxaDrVwaXtW4TWOuekApK/img.png)
Collection 및 Map 인터페이스 구성Set 인터페이스HashSet : 데이터를 해쉬 테이블에 담는 클래스로 순서 없이 저장된다.LinkedHashSet : 데이터를 해쉬 테이블에 담는 클래스로 저장된 순서에 따라서 순서가 결정된다.TreeSet : 데이터를 Red-Black 트리에 담는 클래스로 내부적으로 정렬이 수행된다.데이터 추가 성능 비교 : "data1", "data2", ... , "data1000" 순차 추가대상평균 응답 시간 (마이크로초)HashSet375LinkedHashSet378TreeSet1,249HashSet과 LinkdHashSet의 성능은 비슷하고, TreeSet은 내부적으로 정렬이 수행되어 상대적으로 느린 성능을 보인다.HashSet의 크기를 미리 지정한 경우대상평균 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/caYWyV/btsHSZshi9R/gKH6rkQ0WBMT4V7nvxWHA1/img.png)
StringBuilder 클래스와 StringBuffer 클래스StringBuilder와 StringBuffer가 제공하는 메서드는 동일StringBuffer는 ThreadSafe하게 설계되어 있으므로 여러 스레드에서 객체를 공유할 때 사용StringBuilder는 단일 스레드에서의 안정성만 보장하므로 여러 스레드에서 공유할 경우 동시성 문제가 발생String vs StringBuffer vs StringBuilder package org.example;public class Main { private static final String value = "abcde"; private void testString() { String a = new String(); for ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HOVXI/btsHTg8p0fU/55MQKbK7XNu5Yc3NQM9PHK/img.png)
APM 툴 VS 프로파일링 툴프로파일링 툴소스 레벨의 분석을 위한 툴애플리케이션의 세부 응답시간까지 분석 가능메모리 사용량을 객체, 클래스, 소스 라인 단위까지 분석 가능자바 기반의 클라이언트 프로그램 분석 가능개발자용 툴주로 느린 메서드 및 클래스를 찾는 것을 목적으로 사용APM 툴애플리케이션의 장애 상황에 대한 모니터링 및 문제점 진단이 주 목적서버의 사용자 수나 리소스에 대한 모니터링 가능실시간 모니터링을 위한 툴자바 기반의 클라이언트 프로그램 분석 불가능운영 환경용 툴목적에 따라 용도가 상이 (어떤 APM 툴은 문제점 진단에 강한 반면, 다른 APM 툴은 시스템 모니터링 및 운영에 강함)프로파일링 툴의 기능응답 시간 프로파일링 기능하나의 클래스 내에서 사용되는 메서드 단위의 응답 시간을 측정 (툴..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cQsy06/btsGNrITgjZ/2K9svtErNvXYXraASFDblk/img.png)
인트로지난 글에서는 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VwSmr/btsGNEurzOt/Y1mtPnBXkH2v4K37le5HK0/img.png)
인트로여느 때처럼 시즈닝 사이트를 둘러보던 중, 친구의 프로필 사진이 끊기면서 로딩되는 것이 눈에 띄었습니다.크롬 개발자 도구로 확인해 보니 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PKsXn/btsGfexCUpj/LL3xMWZSP8pnxG5JrU5qk1/img.png)
1. The Thread Pool 자바에서 쓰레드는 커널 쓰레드와 매핑된다 운영체제는 쓰레드를 대상으로 컨텍스트 스위칭을 수행한다 많은 쓰레드를 생성할수록 각 쓰레드의 작업 시간이 줄어들기 때문에, 자원(쓰레드)의 효율적인 관리가 필요하다 쓰레드 풀은 멀티 쓰레드 애플리케이션에서 자원을 절약하면서 병렬성을 유지하는데 도움이 된다 쓰레드 풀은 재사용 가능한 쓰레드를 제어하며 인자로 전달받은 Task를 실행하는 방식으로 동작한다. 2. Thread Pools in Java 2.1 Executor and ExecutorService Executor : Runnable 타입의 인스턴스를 인자로 받아 실행하는 submit 메서드를 제공하는 함수형 인터페이스 ExecutorService submit 메서드 뿐만 아..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/enn7WD/btsGedR7zp6/TiG6KQju3aGbu665FaIyZ0/img.jpg)
중앙 집중식 로깅의 필요성 AWS에서 오토 스케일링을 사용하는 경우, 다음과 같은 로그 관리의 어려움을 겪게 된다. Scale out : 다중 서버로 인한 로그 분산 Scale in : 인스턴스 삭제로 인한 로그 분실 분산된 로그를 단일화된 저장소에서 관리하는 중앙 집중식 로깅(Centralized Logging)을 활용하여 이러한 문제점을 해결할 수 있다. 이 글에서는 logback-awslogs-appender 라이브러리와 AWS CloudWatch 서비스를 활용한 중앙 집중식 로깅 구현 방법에 대해 알아본다. 1. CloudWatch Log Group 생성 스프링 애플리케이션에서 전송된 로그를 보관하는 저장소인 CloudWatch Log Group을 생성해준다. Log group name : 로그 ..
https://github.com/orgs/community/discussions/25651 Github secret truncated after "$" · community · Discussion #25651Hello, I found a bug in github secrets. If the secret contains “$”, for example “hello$world”. Then when used in github actions, we will only get “hello” and everything after and including the doll...github.comGithub Actions Workflow에서 '$'는 특수한 목적으로 사용되는 문자입니다.이로 인해 Github Actions..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bgrnY9/btsF2MOLAdR/AKwdFOZ1kKMXua6ZdKb0hK/img.jpg)
인트로작년 11월 구름에서 주최한 해커톤에 참가하여 24절기를 테마로 한 일기 서비스를 개발했습니다.해커톤 당시에는 데모 수준에 그쳤지만, 팀의 좋은 분위기로 인해 해커톤 이후로도 약 3개월 간 추가로 서비스를 개발하며 서비스를 정식으로 출시했습니다.장애 대응백엔드 개발자로서 서비스 출시를 앞두고 가장 우려되는 부분은 트래픽 증가로 인한 장애 발생이었습니다.오프라인 행사와 온라인 플랫폼(에브리타임, 인스타그램 광고)에서 홍보를 동시에 진행할 예정이었기에, 어느 정도로 부하가 발생할 지 예측하기 힘든 상황이었습니다. 이에, 비용이 많이 발생하더라도 최대한 안정적으로 서버를 운영할 수 있도록 인프라를 재구성했습니다.WASWAS의 경우 AWS ALB와 EC2 Auto Scaling을 활용하여 부하에 따라 수평..