본문 바로가기

반응형

전체 글

(226)
[NGINX] NGINX 란? 1. nginx 란? nginx 는 경량 웹서버로 정적파일을 serving 하는 web server 또는 요청을 다른 서버로 전달하는 reverse proxy server 로 활용되어 was 의 부하를 줄이는 로드 밸런서로 사용할수도 있다. nginx 와 많이 비교되는 것이 apache 의 웹서버이다. 이둘의 차이는 요청을 처리하는 방식이다. apache 웹서버의 경우 요청마다 새로운 쓰레드를 생성하여 요청을 처리한다. 그렇기 때문에 요청이 많으면 많을수록 자원이 많이 소모된다. 반면에 nginx 는 event-driven 구조로 동작하는데, 이때문에 하나 또는 고정된 개수의 프로세스만 생성되고, 요청들은 concurrency 하게 처리된다. 그렇기 때문에 보다 적은 자원으로도 효율적인 운용이 가능하다...
[MongoDB] Aggregation MongoDB 를 사용하여 쿼리를 하던 중에 쿼리 최적화를 위해서 관련있는 여러 컬렉션간의 조인에 대한 필요성이 발생했다. 그런데 MongoDB 는 NoSQL 데이터베이스이기 때문에 RDB 와 다르게 테이블 개념이 아니고 FK 등을 통해 테이블 간의 관계가 정의되어 있지 않아서 어떻게 조인을 하는지 검색해보았다. 검색 중에 MongoDB 문서에서 Aggregation 에 대한 정보를 찾았고 오늘은 이에 대해서 정리해보려 한다. 1. Aggregation Aggregation 은 여러 document 들을 연산하여 나온 결과물을 반환하는 연산이다. RDB 에서 조인을 통해 여러 테이블의 데이터를 합쳐서 반환하는 것처럼 aggregation 도 여러 document 의 값들을 조건에 맞게 묶어서 그룹화한 결..
[Web] JWT (JSON Web Token) 1. JWT (JSON Web Token) JWT 는 서로 다른 컴포넌트 간에 데이터를 전달하기 위해서 사용되는 토큰이다. JSON 형식의 객체를 암호화한 값들을 특정한 형식으로 구성한 문자열 형태를 띄고 있으며, 주로 웹서비스의 인증, 인가에서 세션과 쿠키의 대체제로 사용된다. JWT 의 JSON 객체는 name-value 쌍으로 구성되어 값을 저장한다. 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장된다. 이때문에 서버에서 메모리나 스토리지 등을 위해 세션을 관리했던 서버의 부담을 덜 수 있다. 그렇기 때문에 분산 시스템과 같이 여러 request / reply 가 발생하는 구조의 시스템에서 많이 사용한다. 2. JWT 구조 JWT 는 세가지 부분으로 구성되는데, header, payload 그리..
[Spring] JaCoCo 테스트 코드를 작성하다 보면 단순히 내가 작성한 테스트 코드의 성공 여부 외에도 얼마나 내가 테스트 코드를 잘 작성하고 있는지 확인할 필요가 있다. 이럴 때 사용하는 것이 코드 커버리지 툴인데, 이러한 툴들을 사용하면 내가 작성한 테스트 코드의 커버리지와 기준에 미치는지 여부 등을 리포트 형식으로 체계적으로 확인할 수 있다. 1. JaCoCo JaCoCo 는 Java 코드의 커버리지를 체크하는 라이브러리이다. 테스트 코드를 실행하고 그 결과로 html 이나 xml, csv 형식의 리포트를 생성한다. 이 리포트를 통해서 소스 코드 중에서 테스트 되어지는 라인과 분기들에 대해서 확인할 수 있다. 이 글에서는 spring 프로젝트에서 JaCoCo 를 사용하여 테스트 커버리지를 확인하는 방법을 설명할 것이다. ..
[git] git hooks / pre-commit 기존에 github-actions 를 사용하여 github 서버에서 테스트 코드가 실행되고 도커 이미지가 빌드 및 배포가 되는 ci/cd 를 구성해 본 경험이 있다. 그런데 개발을 진행하다 보니 로컬에서부터 ci 를 적용하여 자동으로 테스트 코드가 실행되고 코딩 컨벤션을 자동으로 적용할 수 있도록 하면 좋을 거 같다는 생각이 들었다. 로컬에서 작업을 하면서 자동으로 ci 를 적용해볼 수 있을 만한 도구들을 찾으면서 많이 사용하는 git hooks 와 pre-commit 모듈 등에 대해서 알아보았다. 1. git hooks Git hooks 는 특정 이벤트가 발생했을 때 자동으로 정해진 스크립트를 실행할 수 있도록 해주는 git 의 기능이다. Git hooks 는 이벤트에 따라서 client hook 과 ..
[Spring] lombok - @Builder 1. @Builder @Builder 는 객체에 Builder 패턴을 자동으로 적용해주는 lombok 의 어노테이션이다. Builder 패턴은 복잡한 객체를 간단하게 생성할 수 있도록하는 디자인 패턴 중 하나로 생성자를 통한 생성이 아닌 빌더의 필드별 함수를 통해서 객체를 생성한다. @Builder 는 클래스 레벨에 붙이거나 생성자 또는 메서드에 붙여서 파라미터를 활요한 Builder 패턴을 자동으로 생성해준다. 2. @Builder class 만약에 클래스가 @Builder 로 지정된다면 클래스의 모든 필드를 매개변수로 받는 private 생성자가 자동으로 생성된다. 이때 생성자는 컴파일러를 통해 자동으로 생성되기 때문에 사용자가 따로 생성자를 구현하거나 @XArgsConstructor 형식의 어노테이..
[Design Pattern] Abstract Factory pattern 1. Abstract Factory pattern 추상 팩토리는 관련 객체들의 구현 클래스들을 지정하지 않고도 관련된 객체들의 모음을 생성할 수 있도록 인터페이스를 제공하는 생성 패턴이다. 이름을 들으면 마치 팩토리 메서드 패턴과 유사하다고 느낄 수 있다. 이 두 방식은 실제 객체를 생성하는 로직을 팩토리에 위임한다는 점에서 유사함을 가지고 있지만 명확한 차이도 있다. 팩토리 메서드 패턴의 경우 조건에 따라서 다른 객체를 생성하는데, 이때 조건을 확인하고 알맞는 객체를 생성하는 로직이 팩토리 클래스에 위임된다. 반면에 추상 팩토리 패턴은 서로 관련이 있는 객체들을 묶어서 팩토리 클래스로 만들고 이러한 팩토리들을 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴이다. 항상 그런것은 아니지..
[Gradle] Gradle 사용법 - 설치, 초기화 및 지난 글에서는 Gradle 이 무엇인지 알아보았다. 이번에는 Gradle 을 설치하고 사용해보는 튜토리얼을 진행해보려 한다. 해당 내용은 Gradle 의 Getting Started 내용을 읽고 작성하였다. 1. Gradle 설치 & Gradle Wrapper Gradle 을 사용하기 위해서는 우선 설치를 진행해야 한다. 하지만 신규 Gradle 빌드를 생성하는 것이 아니라 이미 존재하는 Gradle 빌드를 실행하려 한다면 따로 Gradle 을 설치할 필요가 없다. Gradle 빌드는 기본적으로 gradlew 또는 gradlew.bat 파일을 가지고 있는데 이들은 Gradle Wrapper 라고 한다. - Gradle Wrapper Gradle Wrapper 는 미리 지정된 버전의 Gradle 을 호출하..

반응형