분류 전체보기

    G1 GC에 대해

    현재 진행중인 굿즈 포유 프로젝트는 JDK 17 버젼을 사용하고 있습니다. 문득 프로젝트를 진행하던 중, 현재 사용하는 GC는 무엇이며 어떤 장점과 단점이 있고 내부적으로 어떻게 동작할까에 대해 의문이 들어 이 글을 작성하게 되었습니다. ➕ JDK 17버전을 기준으로 사용중인 CPU가 1개면 Serial GC가 실행되고, CPU가 2개 이상이라면 G1 Gc가 실행됩니다. 위 두가지 GC중 G1 GC에 집중해서 알아보도록 하겠습니다. Garbage Collection에 대해 알아보기전에 중요한 키워드는 stop-the-world 입니다. stop-the-world란, GC를 실행하기 위해 JVM이 애플리케이션 실행을 잠시 멈추는 것 입니다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제..

    테스트 커버리지를 70% 이상 유지하면서 느낀점

    굿즈 포유 프로젝트를 진행하면서, Jacoco와 Github Action을 통해 테스트 커버리지가 70%를 넘기지 못하면 빌드를 실패하게 설정했습니다. 이 과정에서 70% 이상의 테스트 커버리지를 유지하면서 느낀 점에 대해 본 포스팅을 통해 얘기해 보겠습니다.(작성한 테스트 코드는 https://github.com/f-lab-edu/Goods-For-You 를 통해 보실 수 있습니다😊) 처음 테스트 코드를 작성할 때는 커버리지를 70% 이상 유지하기 위해, 모든 클래스의 테스트 코드를 작성했습니다. 위 사진과 같이 모든 클래스에 대해 테스트 코드를 작성하면서, 느낀 점은 다음과 같습니다. 첫 번째. 테스트 코드도 프로덕션 코드와 동일한 수준으로 주의를 기울여 작성해야 한다는 것이었습니다. 명확하고 간결한..

    도커 컴포즈 사용 시 DB 초기화 문제 해결 과정

    문제 상황 Github Action을 통해 CD(자동화 배포)과정을 구축하는 상황 - name: Deploy to Prod uses: appleboy/ssh-action@master id: deploy-prod with: host: ${{ secrets.NCP_PROD_SERVER_IP }} username: ${{ secrets.NCP_PROD_SERVER_USER }} password: ${{ secrets.NCP_PROD_SERVER_PASSWORD }} port: ${{ secrets.NCP_PROD_SERVER_SSH_PORT }} script: | sudo docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD..

    캐싱은 언제 적용하는게 좋을까?

    개요 현재 진행중인 Goods-For-You 프로젝트에서, Redis를 도입해 서버가 여러 대로 구성된 분산 시스템 환경에서 사용자의 로그인 정보를 저장하는 세션 저장소로 사용하고 있습니다. 하지만 Redis는 세션 저장소로 사용할 수도 있지만, 캐싱을 통해 성능 향상을 도모할 수 있는 장점도 있습니다. 따라서 현재 프로젝트에서는 어떤 부분에 캐싱을 적용하면 좋을지에 대해 고민해보고 그에 앞서 관련 개념들을 알아보도록 하겠습니다 캐시란? 캐시는 사용 빈도가 높은 데이터또는 값 비싼 연산 결과를 빠른 속도로 접근할 수 있는 위치에 두는 것을 의미합니다. CPU의 1차 캐시나, 2차 캐시, 저장소 캐시, OS 페이지 캐시, 데이터베이스 버퍼 캐시, KVS(데이터를 메모리에 캐시하는 것)등 광범위하게 캐시 기..

    CAP 이론을 바탕으로 NoSQL 을 적용 할 만한 포인트 고려

    서비스가 대용량 트래픽을 처리해야 할 때, 관계형 데이터베이스 시스템은 수평적으로 확장하기가 어려울 수 있습니다. 이는 높은 읽기 및 쓰기 부하를 처리해야 하는 서비스에서 성능 저하를 초래할 수 있습니다. 이러한 문제를 해결하기 위해, NoSQL 데이터베이스가 생겨났습니다. NoSQL 데이터베이스는 관계형 데이터베이스와 달리 구조화되지 않은 데이터를 저장하는 데 특화되어 있습니다. 이러한 데이터베이스는 수평적으로 확장하기가 쉬우며, 높은 처리량과 응답 시간을 보장할 수 있습니다. 이러한 이유로, 대용량 트래픽을 처리해야 하는 서비스에서 NoSQL을 사용할 수 있습니다. 그러나 NoSQL을 사용할 때에도 몇 가지 고려해야 할 사항이 있습니다. 이를 위해 CAP 이론을 살펴보면, 일관성(Consistency..

    GoodsForYou 패키지 구조에 대한 고민(포트와 어댑터)

    현재 패키지 구조 현재 진행 중인 GoodsForYou 중고 거래 애플리케이션에서는 패키지 구조의 큰 틀을, 기능 단위의 패키지 구조 하위에 패키지구조를 구성하는 방식으로 진행하였습니다. 이러한 구조를 유지함으로써 해당 기능 패키지 별로 응집도를 높일 수 있었습니다. 또한 한 기능 패키지에서 레이어드 아키텍처를 적용함에 따라, Presentation은 Presentation 끼리, Application은 Application 끼리 묶는 방식으로, 레이어드 아키텍처를 도입해, 각각의 레이어 별로 관심사를 분리하고, 패키지 간의 의존성의 방향을 단방향으로 제한하였습니다. 각 계층별 설명 Presentation : 사용자와 상호작용을 하고, 브라우저 통신 로직을 처리하는 레이어입니다. Application :..

    CAP 이론?

    개요 현재 진행 중인 프로젝트에서, 데이터베이스를 선택할 때 큰 틀인 RDBMS(관계형 데이터베이스)와 NoSQL(Not Only SQL) 데이터베이스 중 어떤 것을 선택해야 할지, 도움을 줄 수 있는 이론인 CAP 이론에 대해 알아보고, 각각의 RDBMS에서는 CAP 이론의 어떤 점을 만족하는지, NoSQL에서는 CAP 이론의 어떤 점을 만족하는지에 대해 알아보겠습니다. CAP 이론 CAP 이론은 일관성(consistency), 가용성(availability), 그리고 분산 시스템의 파티션 허용 오차 차이(partition tolerance in distributed system)간의 절충점(trade-off)을 설명하는 컴퓨터 과학의 개념입니다. 먼저 일관성(Consistenct)이란 다음과 같은 시..

    트랜잭션에 대해

    데이터베이스, RDBMS는 트랜잭션이라는 기능을 제공합니다. INSERT나 UPDATE 명령으로 데이터를 추가, 갱신할 때 이미 트랜잭션 명령을 사용하고 있었습니다, 하지만 우리는 사용하면서 지금까지 특별히 의식할 필요가 없었습니다. 그 이유는 자동 커밋(auto commit)이라 불리는 기능이 동작했기 때문입니다. 이런 트랜잭션으로 어떤것을 할 수 있는지 트랜잭션은 무엇인지 알아보도록 하겠습니다. 트랜잭션 트랜잭션에 대해 알아보기에 앞서 정규화에 의해 분할된 주문 테이블과 주문 상품 테이블의 관계를 생각해 보겠습니다. 주문 주문 상품 주문 테이블과 주문 상품 테이블 사이에는 의존관계가 존재합니다. 주문 테이블에 행이 존재한다면 주문 상품 테이블에는 적어도 하나의 행이 존재해야 합니다. 그렇지 않다면 주..