IT
캐시방법
캐시방법
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 이 주요 내용이다. 하나의 클래스에 하나의 책임을 부여하는것이 좋을것 같다. 만약, 변경한다면 아래를 클래스로 ..
git cherry-pick으로 rebase 완성하기
git cherry-pick으로 rebase 완성하기
2022.01.28문제의 시작은 Merge가 되기도 전에 다른 branch에서 작업을 하다가 Merge가 된 후에 기본 branch의 작업을 가져와야 했었다. 이것을 rebase로 해결한 사례이다. 우선 Merge와 Rebase의 차이는 아래와 같다. Rebase와 Merge의 차이점 Merge로 통합하기 이 두 브랜치를 합치는 가장 쉬운 방법은 merge 명령을 이용해 3-way Merge로 새로운 커밋을 만들어내는 것이다. 이 때 내부적으로 공통조상인 C2를 이용하게 된다. Rebase로 통합하기 두 브랜치가 나뉘어 있는 아까와 같은 상황에서 시작한다. 대강 여기서 rebase를 이용할 예정이다. 왜냐하면 커밋이 깔끔하기 때문에. 전체 흐름을 파악했다면 문제인 요소에 대해 디테일하게 접근해보자. 문제는 다음과 같다. ..
centOS mirror
centOS mirror
2021.12.16mirror site = 네트워크 트래픽을 줄이기 위해 다른 컴퓨터 서버로 복사해놓은 웹사이트, 컴퓨터 파일 서버 mirror list = 위 mirror site 를 모아 놓은 list centOS에서 제공하는 미러리스트 서버는 http://mirror.centos.org/ 에서 확인할 수 있다. centOS를 사용하면 yum repository를 사용할 텐데 여러 구성요소가 존재하지만 baseURL의 기본 패키지 경로 설정 항목이 존재한다. 초기 설치시 레포지터리 설정은 mirrorlist를 참조하게 되므로, mirrorlist 구문 주석처리 후 Baseurl 란에 사용할 국내 Mirror서버 URL을 등록할 수 있다. mirror site 변경 하거나 사용하는 목적은 패키지 혹은 유틸리티를 받아오기..
Netflix OSS 이야기
Netflix OSS 이야기
2021.12.10Hystrix Hystrix는 마이크로서비스의 전류차단기(Circuit Breaker) 역할을 하는 오픈소스 문제가 있는 마이크로서비스로의 트래픽을 차단하여 전체서비스가 느려지거나 중단되는것을 미리 방지 Hystrix Command 호출할 때 발생하는 일 Exception 한 경우 Fallback 처리 한다. 메소드 종료가 되지 않으면 504 Timeout Gateway 발생 Hystrix - Circuit Breaker 일정 비율로 에러가 발생하면 Circuit Open 한다. Circuit Open은 메소드 호출함에도 메서지 바디 내용을 누군가 인터셉터해서 Exception으로 처리해버린다. 운영관점에서 여러 서버를 운영하는데 하나의 서버가 장애가 발생하면 나머지 서버도 사용하지 못할 정도로 리소스를..
AWS 게임대회 후기
AWS 게임대회 후기
2021.10.07오늘 AWS에서 개최하는 게임데이 참가했다. 여전히 코로나로 인하여 온라인으로 진행했지만, Virtual 환경에서 주어진 문제를 해결하고 동료들과 협력하여 문제를 해결하는 과정을 평가 한듯 하다. 실제로 문제를 풀어야 점수가 오른다. 한국, 호주, 일본의 AWS 파트너들이 참여하는 이 대회는 총 24팀이 진행한다. 잘 보니까.. 아시아를 대상으로 한듯 하다. 매년 열리는 AWS 게임대회는 Unicon이 상징인듯 하다. 티셔츠도 받았는데 아래처럼 생겼다. ㅎ-ㅎ.. Korea가 붙어있어서 무슨 프로게이머로 착각할지도..? ㅋㅋㅋ 일정은 아래랑 같다. 빡집중은 언제나 힘들다.. 게임 프로세스는 아래랑 같다. 매우 복잡한게 문제를 해결하고 얻은 코인을 바탕으로 Gym을 열어야 하고 Gym을 unlock하게 되..
CORS 해결하기
CORS 해결하기
2021.09.01개요 https://github.com/lllilllilllilili/video-intelligence-demo-app GitHub - lllilllilllilili/video-intelligence-demo-app: 영상 데이터 분석을 합니다. 영상 데이터 분석을 합니다. Contribute to lllilllilllilili/video-intelligence-demo-app development by creating an account on GitHub. github.com 이 프로젝트를 Clone받아서 API 테스트 중 자동화 되지 않고 있어서(영상 업로드 > 전처리 > 결과 파일 Web에 렌더링) 자동화를 시키는것을 목표로 프로젝트를 진행했습니다. 문제발생 자동화를 위해 처음 생각한 아키텍처는 동..
[네트워크] gRPC
[네트워크] gRPC
2021.08.06세미나에서 했던 내용을 정리해보고자 합니다. 어쨋든 공부를 했으면 정리를 해야 하니 간단히 필요한 내용만 정리해보겠습니다. gRPC 란? RPC는 어디서 많이 들어본 얘긴데, g가 붙었습니다. 그렇습니다. google에서 만든 RPC 프레임워크 입니다. 그럼 왜 google에서 RPC 프레임 워크를 만들었을 까요? 이건 이제 프로세스 통신으로 거슬러 올라갑니다. 생각해보면, 프로세스는 서로 통신하기 위해서 IPC 통신을 합니다. 그 중 소켓을 이용한 방법이 있는데 Session Layer에 위치한 이 소켓은 L7에서 L4로 이동하며 TCP/UDP를 이용해 일종에 창구 역할을 수행하며 네트워크 통신을 하도록 도와주게 됩니다. 즉, 목적이와 통신이 로컬 호스트가 아니라 온라인 범위에서 이루어지기 때문에 네트..