IT
대규모 시스템 설계 기초 - 4장
대규모 시스템 설계 기초 - 4장
2024.01.30오랜만에 책을 펼쳐보았는데 4장 부터 시작한다 1-3장은 내용은 좀 노멀한거 같아서 스킾.. 4장은 처리율 제한 장치의 설계이다. 처리율 시스템, 네트워크에서 얼만큼 처리할지 그 양을 의미한다. 그러니까 얼만큼 성능 좋은 시스템을 만들껏이냐의 얘기가 되겠다.. 책에서는 클라이언트가 보내는 트래픽의 처리율 (rate) 제어하기 위한 장치로 소개되어 있다. 예시를 하나 들어주는데 사용자는 초당 2회 이상 새 글을 올릴 수 없다. 같은 ip주소로 하루에 10개 이상 계정 생성 금지 같은 디바이스로 주 5회 이상 리워드 요청 금지 이런 제한으롤 처리율 제한 장치를 설계한다. 처리율 제한 장치를 설계할 때 이렇게 제한을 두는 까닭은 몇 가지 장점이 있는듯 하다. Dos 방지 - limit이 없다면 API Call..
1/21 개발일기 (clustered index, non-clusted index)
1/21 개발일기 (clustered index, non-clusted index)
2024.01.21non - clustered index 음... 어제는 clustered index에 대해서 봤는데 인덱스 키 값에 따라 배열하는것으로 물리적인 데이터 값을 정렬하는것으로 이해하고 넘어갔다. 오늘은 non - clustered index에 대해 보자. 이 내용은 테이블의 물리적 정렬 순서와는 별도의 구조를 갖는다. clustered index 처럼 인덱스 키값에 따라 정렬되지만, 테이블의 실제 데이터는 그 순서에 영향을 받지 않는다. 정렬된 인덱스 키에 대한 쿼리가 수행할 때 non - clustered index는 정렬된 키와 각 키에 해당하는 데이터 행의 위치에 가리키는 포인터를 이용해 결과를 찾아간다. non - clustered index 의 구조에 대해 살펴보자. 좋은 참고 지표가 있어서 가..
1/20 개발일기(thread-poo, resource관리, clustered index)
1/20 개발일기(thread-poo, resource관리, clustered index)
2024.01.20오늘 주말이여서 그간 못했던 내용들을 정리해보고자 한다. 사실 이전에 해야할것도 좀 밀려있는데 우선순위 높은것으로 추려냈다. 그래도 개발 일기 쓰자고 마음먹었는데 90일은 가야할거 같은 기분이다.. 스프링 큐 (스레드 대기풀) Thread Pool을 사용하면 Spring 내부에서 Queue 를 사용하는데 이거 어떻게 구현되어있는지 궁금해졌다. 한번 정리를 해볼 시간.. java.util.concurrnet.Executors 패키지는 스레드 풀과 관련된 유틸리티 메소드를 제공하고 이 클래스는 다양한 종류의 스레드 풀을 생성하고 관리하기 위한 편리한 방법을 제공하는 정적 메소드들로 구성되어 있다. 예를 들어 이 패키지를 뜯어보면 newFixedThreadPool은 고정된 수의 스레드를 가진 스레드 풀을 생성..
패션 관련 프로젝트를 진행하며 ... 1 (feat. 500 maker)
패션 관련 프로젝트를 진행하며 ... 1 (feat. 500 maker)
2024.01.14요즘 패션 열풍이 불다보니 회사에서도 관련 프로젝트 업무를 담당하게 되었다. 여기서 내가 맡은 업무는 패션 스토어 조회, 최근본상품 조회, 찜하기 상품 조회 & 저장에 대한 API 생성 및 수정이었다. 근데 이것도 레거시, 최근 프로젝트 거의 n개 프로젝트를 왔다갔다 수정하다 보니 헷갈려.. 여러 논의가 있었지만 거기서도 가장 중요하게 고려되어야 할점은 성능 문제였다. 이 페이지에서 얼만큼의 tps가 나올지 모르는 상황에서 위 API를 여러번 찌르게 되면 문제가 발생할 수 밖에 없었기 때문에 ... 그러다 500 떨어질랴... 24년이 시작된 후부터 한주간은 계속 회의를 진행한듯 싶다. 특히, 협업하는 부서가 있어서 데이터는 얼만큼 내릴건지 이런거에 대한 협의가 필요했다. 대략적인 협의가 끝난 후에는 A..
Java 버전업 (11->17) 후기 켁;
Java 버전업 (11->17) 후기 켁;
2024.01.07팀내 admin 프로젝트에 Java 버전업을 담당하였다. 비교적 다른 프로젝트에 비해 규모가 작은터라 부담은 없었지만 ... 개인적으로 타팀에서 많이 조회되는 api를 가지고 있는지라 한편으로는 장애 날때마다 dev, alp 든 봐야한다는 부담감이 있어서 조심스러웠다. 자바 버전업 얘기가 나온것은 팀에서도 소개를 하긴 했지만 아래와 같은 이유에서 도입을 하게 되었다. 자바 버전업 도입 목적 Java 17은 2021.10 공개한 LTS 버전으로 2029년 9월까지 지원을 하게 됩니다. Java 11과 비교해서 70가지 이상의 JEP 가 추가되었습니다. (*JEP - JDK 개선 제안) Java Support 기간이 길다. LTS 버전의 장점은 기업과 개발자들이 안정적인 플랫폼에서 장기적인 개발 계획을 세울..
테스트 방법
테스트 방법
2023.03.18JUnit 이란? JUnit은 자바 언어용 단위 테스트 프레임워크입니다. 단위 테스트는 개발자가 자동화된 단위 테스트를 작성하게 도와줍니다. 이를 통해서 코드 품질을 향상시킬 수 있습니다. JUnit은 코드를 리팩토링 하거나 기능을 추가하거나 할때 이전에 작성된 테스트 코드가 작동하는지 확인함으로써 코드 일관성에도 도움을 주게 됩니다. JUnit 특징 사용이 쉽습니다. 개발자가 테스트 케이스를 작성하기 용이합니다. 자동화된 테스트가 가능합니다. 코드 커버리지를 보장할 수 있습니다. 테스트 코드 재사용성이 가능합니다. JUnit은 단위 테스트이기 때문에 독립적으로 실행할 수 있습니다. 그래서 코드를 재사용하기 용이합니다. 테스트 코드 가독성 : JUnit 테스트 결과 쉽게 이해하는데 도움이 됩니다. JUn..
캐시방법
캐시방법
2023.03.11ConcurrentHashMap ConcurrentHashMap은 Thread-Safe 합니다. 동시성 작업에 최적화된 Map 클래스이고, 이 자료구조를 이용해서 캐시를 구현할 수 있습니다. 캐시에서 값을 가져오는 경우 ConcurrentHashMap 에서 해당 키를 사용하여 값을 가져올 수 있습니다. 또, 각 항목에 만료 시간 필드를 추가하여 만료 시간을 추적할 수 있습니다. 만료시간이 5분이라면 아래와 같이 코드를 작성할 수 있습니다. ConcurrentHashMap map = new ConcurrentHashMap(); long expiryTime = System.currentTimeMillis() + (5 * 60 * 1000); // 5분 후 map.put("key1", new MyObject(..
Spring Bean
Spring Bean
2023.02.04Spring Bean 이란? Spring IoC 컨테이너가 관리하는 자바 객체를 Bean 이라고 한다. 즉, Spring에 의해서 생성되고 관리되는 자바 객체라고 한다. Spring Container Spring Container를 구성하는 ApplicationContext 다형성으로 구현된다. 여기에서 ApplicationContext가 인터페이스이고 AnnotationConfigApplicationContext 구현체가 된다. 만약에, 빈에 대한 설정정보를 AppConfig.class 에 등록해두면 이 정보를 보고 객체 생성을 하게 된다. 스프링 컨테이너는 (빈 이름 | 빈 객체)로 등록된다. 이러한 동적인 의존관계를 스프링이 설정해준다. ApplicationContext applicationCont..
카프카 스터디를 시작하며
카프카 스터디를 시작하며
2022.12.03카프카 스터디를 시작하게 되었습니다. 데이터가 많이 들어오다 보니 자연스럽게 카프카로 애플리케이션간 데이터를 스트리밍형 ETL을 처리하게 되는것 같습니다. 그래서 시작하게된 스터디... 위 책 내용으로 정리해보면서 잘 몰랐던 개념들을 기록해두려고 합니다. 카프카의 모습 카프카는 어떤 모델인지 알아보면 기존에 시스템들은 Target 애플리케이션과 Source 애플리케이션 사이에 파이프라인이 많이 생기게 되면서 한쪽이 장애가 발생하게 되면 다른 한쪽의 애플리케이션에도 영향을 미칠 수 있게 되었습니다. 그래서 아파치 카프카를 도입하게 됩니다. 아파치 카프카가 일종에 중앙에서 데이터를 처리해주는 역할을 하는것 같습니다. 자료구조의 큐를 살펴보면 First In First Out 자료구조로 동작하게 됩니다. 데이..
넥스트스텝 - 레이싱 카 2단계
넥스트스텝 - 레이싱 카 2단계
2022.01.30개요 기존 1단계에서 MVC 패턴으로 구조화하는 작업을 진행한다. 데이터를 전달할 때는 DTO를 이용한다. 프로젝트 구조 객체 InputDTO 입력과 파싱에 대한 필드를 저장한다. OutputDTO 출력과 관련된 필드 및 메소드가 작성되어 있다. CarMoveBehavior 전략 패턴을 사용한다. 여기에는 몇 가지 이유가 존재하는데 테스트 코드 작성 시 랜덤 넘버를 받기 때문에 테스트 코드 작성 시 어려움을 갖는다. 코드의 유지보수가 좋아진다. Cars Cars 객체의 목적은 Car 객체를 Wrapping 하기 때문에 일급컬렉션으로서 역할이 충분하다고 생각한다. 그 외 기능은 필요하지 않다. FixNumberBehavior 무조건 갈 수 있다. RandomNumberBehavior 랜덤 넘버 제너레이트 ..
넥스트스텝 - 레이싱 카 1단계
넥스트스텝 - 레이싱 카 1단계
2022.01.29개요 계산기 미션 다음에는 레이싱카 미션이다. 총 2단계로 구성되어 있으며, 1단계에서는 페어 프로그래밍을 2단계에서 MVC로 구조 전환을 수행하는것이다. 프로그램은 다음 플로우로 흘러간다. 1. 자동차, 횟수 입력한다. 2. 랜덤 넘버를 받아와서 4이상이면 전진할 수 있다. 단, 전진하는 경우 상태값을 콘솔에 출력한다. 3. 가장 많이 전진한 자동차를 우승자로 선정한다. 우승자는 복수가 될 수 있다. 프로젝트 구조 프로젝트 구조에서도 조금 아쉬운것은 domain package에 많은 객체가 포함되어 있다. 굳이 쪼갠다면 entity pacakge 정도 하나 더 둘 수 있을것 같다. Helper 클래스는 Racing 클래스 쪽으로 합칠 수 있을것 같다. 관련 비즈니스 로직이 명확하게 domain pack..
넥스트스텝 - 계산기 리뷰
넥스트스텝 - 계산기 리뷰
2022.01.29프로젝트 구조 제출한 프로젝트 구조이다. 2주차인 지금 회고해 보니 common package 대신 utils package 를 쓰는것 그리고 view package 에서 InputView, OutputView 를 만들어서 관리해주는것이 좋지 않았을까 생각이 든다. 추가로 Validation 패키지를 관리하면 좋지 않을까 생각했다. 객체 ErrorMessage 상수 메시지에 대한 책임을 가지고 있다. 일관된 [ERROR] 표시가 맘에든다. UserInput 대충 보아도 UserInput에 부여되는 책임이 너무 많다. Parsing, Validation, SplitString, UserInput 이 주요 내용이다. 하나의 클래스에 하나의 책임을 부여하는것이 좋을것 같다. 만약, 변경한다면 아래를 클래스로 ..