Java
-
Amazon SQS 에 대해 알아보자AWS 2024. 4. 12. 11:16
이번에는 SQS의 내용에 대해 자세히 다뤄보도록 하겠습니다. SQS 큐의 종류 1. Standard Queue 스탠다드 큐는 메시지 순서가 중요하지 않고, 높은 처리량을 필요로 하는 애플리케이션에 적합합니다. 예를 들어, 대량의 이벤트 데이터를 처리하거나, 로깅 시스템에서 다수의 메시지를 신속하게 처리해야 할 때 사용됩니다. 성능 고처리량: 스탠다드 큐는 초당 수십만 개의 메시지를 처리할 수 있습니다. 비순차적 배달: 메시지가 전송된 순서와 다를 수 있습니다. 즉, 가끔씩 메시지 순서가 바뀔 수 있습니다. 비용 SQS는 전송된 메시지 수에 따라 요금을 부과합니다. 스탠다드 큐는 FIFO 큐에 비해 단가가 낮습니다. 2. FIFO Queue FIFO 큐는 순서를 유지하면서 메시지를 처리해야 하는 애플리케이..
-
엔티티의 생성 및 수정 시간 자동화하기Spring 2024. 4. 9. 17:47
Spring Data JPA의 Auditing 기능을 사용하여 엔티티의 생성 시간과 수정 시간을 자동으로 기록하는 방법은 개발자로 하여금 반복적인 작업에서 벗어나게 하고, 코드의 간결성을 유지할 수 있게 합니다. 코드 예시 @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public class BaseTimeEntity { @CreatedDate private LocalDateTime dateCreated; @LastModifiedDate private LocalDateTime dateUpdated; } Annotation 설명 @Getter Lombok 라이브러리의 어노테이션으로, 이 클래스의 모든 필드에 대한 gette..
-
프로젝트 회고 - 수업 스케줄 일괄 변경 배치 처리Spring 2024. 4. 8. 08:30
프로젝트 개요 각 센터마다 스케줄을 생성할 수 있습니다. 이에 대한 일괄 변경 기능을 제공하는 것인데요. 성능최적화를 통해 빠른 응답시간을 제공하는 것이 목표입니다. 해당 프로젝트에서 다른 주제는 다음과 같습니다. - 적정 ThreadPool Size 조정 - 적정 BatchSize 조정 - JMeter 성능 테스트 요구사항 - 자동공개 설정의 일괄 변경 기능 제공 - ASIS와 같이 실시간 처리 기능 제공 분석 - 기존 일괄변경 기능 UI에 들어가게 되는데, 저장 건수에 대한 LIMIT이 존재하지 않음 - 3만건 정도 조회하면 UI가 뻗는 현상 구현 제목이 일괄변경 배치 처리라고 해서, SpringBatch를 사용한 것은 아닙니다. Legacy 이다 보니, SpringBoot가 아닌 SpringFram..
-
프로젝트 회고 - 스케줄 자동 공개 성능 최적화Spring 2024. 4. 4. 00:44
이번 프로젝트는, 모든 센터의 수업스케줄을 자동으로 특정 시간에 공개해주는 기능 개선 작업이 있었습니다. 제가 맡은 부분은, 수업 스케줄에 대한 자동공개 설정을 그룹핑해서 연결해주는 알고리즘을 개발하는 부분이었습니다. 그런데..!! 배포 후에 다른 개발자가 개발한 부분에 문제가 발생했고, 해당 개발자가 갑작스레 부재중이 되어서 제가 넘겨 받아 빠르게 문제를 해결하게 되는 상황이 발생했습니다. 장애 상황 문제는, 사용자가 자동공개로 지정한 시간, 예를들어 다음과 같이 자동공개 시간을 설정한 경우 - 자동공개 시간 : 10시 30분 - 실제 자동공개 시간 : 10시 30분 위 처럼 되어야 하는데, - 자동공개 시간 : 10시 30분 - 실제 자동공개 시간 : 10시 33분 위와 같이 제시간에 공개되지 않고 ..
-
Java volatile 키워드JAVA 2023. 1. 5. 09:40
Java에서 volatile에 대해 알아보겠습니다. volatile을 번역하면 휘발성이라는 단어가 많이 나옵니다. Java동시성에 대한 이야기에 자주 따라붙곤 합니다. 그러면, volatile이란 언제 사용하는 것이고, volatile 키워드를 사용하면 어떤일이 벌어질까요? synchronized 키워드는 변수와 클래스에 붙일 수 없고, 메서드와 블럭에만 사용할 수 있습니다. 단순한 Counter 예제를 통해서 확인해 보겠습니다. 예제 목록 instance 변수 volatile 변수 AtomicInteger synchronized block main 메서드 클래스 모든 코드는 다음코드로 실행해 보겠습니다. public class CounterApp { public static void main(Strin..
-
Memory leak - Thread dump 활용JAVA 2022. 7. 10. 02:22
서버 접속 장애 발생 터널링해서 top 명령을 실행했을 때 java 프로세스가 100% 이상 튀는 문제 발생 서버 로그를 통해서는 확인이 되지 않는 상황 이 때, 쓰레드 덤프, 힙 덤프를 뜨면 확인할 수 있을 것으로 판단함 우선 java 프로세스를 확인 $ ps -efc | grep java 그리고 gc를 확인할 수 있는 명령어 몇 개 실행 $ jstat -gc $ jstat -gc 10985 $ jstat -gcutil $ jstat -gcutil 11479 $ jstat -gcutil -h5 1000 10 $ jstat -gcutil -h5 11479 1000 10 위 명령으로는 정확한 확인이 어려워서 ThreadDump 생성 $ jstack > threadDump.txt $ jstack 10895 ..
-
primitive type vs wrapper classJAVA 2021. 10. 31. 00:49
Java 에서는 8가지 Primitive Data type 을 제공 합니다. 그리고 Primitive Type에 대한 Wrapper Class 를 제공하는데요. 여기에 대한 차이에 대해서 한번 알아봅시다! 그리고 어떤 경우에 primitive Type을 써야 하고 Wrapper Class 를 사용해야 하는지 알아봐요! 😀 Primitive Type과 Wrapper Class에 대한 Default Value 확인 (Sample Code) public class Main { byte primitiveTypeByte; short primitiveTypeShort; int primitiveTypeInt; long primitiveTypeLong; float primitiveTypeFloat; double pri..
-
메서드 추출(Extract Method)JAVA 2021. 5. 18. 13:08
장황한 메서드에는 너무 많은 정보와 복잡한 로직으로 얽혀 있습니다. 어떤 코드를 그룹으로 묶어도 되겠다고 판단될 땐 그 코드를 빼내어 목적을 잘 나타내는 직관적 이름의 메서드로 만들자 메서드 추출을 해야할 때 메서드가 너무 길때 코드에 주석을 달아야만 의도를 이해할 수 있을때 한 클래스의 두메서드 안에 같은 코드가 들어 있는 경우 한 클래스의 두 하위클래스에 같은 코드가 들어 있는 경우 메서드 추출에서 가장 힘든 작업 지역변수를 처리하는 것 방법 기능을 나타내는 이름의 새 메서드 생성 기존 메서드에서 빼낸 코드를 새로 생성한 메서드로 복사 빼낸 코드에서 기존 메서드의 모든 지역변수 참조를 찾는다. 그것들을 새로 생성한 메서드의 지역변수나 매개변수로 사용하게 된다. 빼낸 코드 안에서만 사용되는 임시변수가 ..