IT
패션 관련 프로젝트를 진행하며 ... 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 이 주요 내용이다. 하나의 클래스에 하나의 책임을 부여하는것이 좋을것 같다. 만약, 변경한다면 아래를 클래스로 ..
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으로 처리해버린다. 운영관점에서 여러 서버를 운영하는데 하나의 서버가 장애가 발생하면 나머지 서버도 사용하지 못할 정도로 리소스를..