분류 전체보기
-
[Github] Branch protection rule 의미 분석DevOps 2023. 3. 29. 11:29
이번 포스팅은 사내에 PR을 통한 코드 리뷰 도입으로 git 브랜치에 직접적인 push 또는 merge를 제한하기 위한 옵션을 설정하던 중 branch protection rule의 의미를 나름대로 분석해보고 정리한 글입니다. 주관적인 의견이 들어갔을 수 있습니다. 틀린 부분에 대한 피드백은 환영합니다. Github docs https://docs.github.com/ko/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches Protect matching branches Require a pull request before ..
-
NGINX 6: 인증DevOps 2023. 3. 19. 02:23
엔진엑스는 클라이언트에 대한 요청을 인증함으로써 업스트림 서버에서 인증을 처리하며 발생하는 부하를 줄이고 동시에 인증받지 못한 요청이 애플리케이션 서버까지 도달하는 것을 막을 수 있습니다. 오픈소스 버전은 인증 모듈로 HTTP 기본 인증과 하위 요청을 통한 인증을 제공하며 엔진엑스 플러스는 JWT 검증 모듈과 표준 오픈 아이디 커넥트 인증을 제공하는 서드파티 인증 사업자들을 엔진엑스로 통합합니다. 1. HTTP 기본 인증 사용자 이름과 비밀번호를 이용한 HTTP 기본 인증을 통해서 애플리케이션과 콘텐츠를 안전하게 보호할 수 있습니다. 다음과 같이 conf.d 디렉터리에 passwd 파일을 생성합니다. name1:password1 name2:password2:comment name3:password3 각 ..
-
NGINX 5: 프로그래머빌리티 & 자동화DevOps 2023. 3. 18. 00:54
먼저 글의 제목인 프로그래머빌리티와 자동화가 Nginx와 어떤 관련이 있는지 설명합니다. 프로그래머빌리티(Programmability)란 프로그래밍을 통해 상호 작용하는 능력을 말합니다. Nginx Plus는 엔지니어가 Ningx의 설정과 상호작용 하고 동작을 제어할 수 있도록 API를 제공하는데 이것도 프로그래머빌리티의 맥락으로 볼 수 있습니다. 또한 현대의 대규모 웹 애플리케이션을 다루는 엔지니어는 직접 서버 설정을 만지지 않고 설정 관리 도구(Cheif, Ansible, Consul 등..)를 선택해 자동화할 수 있습니다. 도구를 통해 한 번 작성된 설정과 코드를 수많은 서버에 반복적으로 적용할 수 있으며 모듈화된 방식으로 배포할 수 있습니다. 1. Nginx Plus API Nginx Plus가 ..
-
NGINX 4: 콘텐츠 캐싱하기DevOps 2023. 3. 15. 21:33
이번 장은 Nginx를 이용해서 콘텐츠를 캐싱하는 방법과 다양한 옵션에 대해 알아보겠습니다. 콘텐츠에 대한 요청이 있을 때 미리 캐시 된 콘텐츠를 제공함으로써 서버의 부하를 줄이고 사용자에게 빠른 응답을 제공할 수 있습니다. 사용자에게 더 나은 경험을 제공하기 위해서 콘텐츠가 사용자 가까이에서 제공돼야 합니다. 이를 위해 사용자 가까이에 있는 서버에 콘텐츠를 캐싱하는 전략을 사용할 수 있는데 이를 CDN(Contents Delivery Network)라고 합니다. Nginx를 이용하면 Nginx 서버가 배치된 모든 곳에 콘텐츠를 캐시 할 수 있어 효과적으로 자신만의 CDN을 만들 수 있습니다. 1. 캐시 영역 proxy_cache_path 지시자를 이용해서 공유 메모리 캐시 영역과 콘텐츠 위치를 지정할 ..
-
NGINX 3: 트래픽 관리하기DevOps 2023. 3. 12. 10:23
NGINX는 웹 트래픽 컨트롤러로도 분류된다. 요청을 특정 비율로 분기하거나 사용자의 위치 정보를 활용해 흐름을 조절하고 요청 빈도, 연결 수, 대역폭 등을 제한해 트래픽을 제어하는 방법을 살펴본다. 1. A / B 테스트 A/B 테스트는 두 가지 이상의 버전을 비교하여 사용자의 반응을 비교하는 실험적인 마케팅 방법이다. NGINX는 사용자 요청을 다른 버전의 애플리케이션으로 분기할 수 있다. split_clients "${remote_addr}AAA" $variant { 20.0%"backendv2"; *"backendv1"; } split_clients 지시자는 첫 번째 매개변수에 지정된 문자열을 활용해 해시를 생성하고, 지정된 비율에 따라 두 번째 매개변수에 지정된 변수에 값을 할당한다. 세 번째 ..
-
NGINX 2: 고성능으로 부하 분산하기DevOps 2023. 3. 11. 23:51
인터넷 서비스의 사용자 경험은 높은 성능과 가용성이 필요하다. 이를 위해 일반적으로 같은 시스템을 여러 대 운영하고 부하를 각 시스템으로 분산한다. 그리고 부하가 지속적으로 증가할수록 동일한 시스템을 추가로 투입한다. 이러한 아키텍처 기술을 수평적인 확장(horizontal scailng)이라고 하는데 NGINX는 HTTP, TCP, UDP 프로토콜 레벨에서 각 시스템으로의 부하분산을 지원한다. 현대적인 웹 서비스 아키텍처는 상태 정보를 클라이언트나 서버에 저장하지 않고 공유 메모리나 공유 데이터베이스에 저장하는 stateless 애플리케이션 계층을 채택한다. 하지만 그 정보가 매우 방대한 경우 데이터를 공유 시스템과 매번 주고받으면 네트워크 부하를 일으켜 성능 저하가 발생할 수 있기 때문에 서버의 로컬..
-
디미터 법칙(Law of Demeter)을 위반한 코드 개선하기Java & Kotlin 2023. 3. 8. 18:51
최근 취업 준비로 여러 회사에 지원하였고, 사전 과제를 진행하였다. 나름 시간을 들여 잘 작성했다고 생각했지만 불합격 메일을 받았고 그에 대한 피드백으로 몇 가지 이유를 들어주셨다. 오늘은 그 중에 한 가지인 디미터 법칙에 대해서 알아보고 코드를 개선해 보고자 한다. 역시 좋은 코드를 유지하고 자신의 문제점을 파악하기 위해서 코드 리뷰를 통한 피드백은 중요하다는 걸 다시 한번 느꼈다. 먼저 문제의 코드를 살펴보자. 도메인 모델은 member(회원)와 post(게시물)가 있고, member는 여러 개의 post를 게시할 수 있기 때문에 둘은 1:N 관계를 가진다. 이번 과제에서 application과 DB의 데이터 매핑을 위해 ORM인 JPA를 사용하였고, post가 member_id를 foreign ke..
-
NGINX 1: 주요 설정 파일 및 명령어 알아보기DevOps 2023. 3. 7. 18:24
NGINX의 주요 설정 파일과 명령어를 알아보고 정적 콘텐츠 서비스를 해보자. 1. 주요 설정 파일 및 디렉터리 알아보기 /etc/nginx/ NGINX 서버가 사용하는 기본 설정이 저장된 루트 디렉터리이다. NGINX는 이곳에 저장된 설정 파일의 내용에 따라 동작한다. /etc/nginx/nginx.conf NGINX의 기본 설정 파일로 모든 설정에 대한 진입점이다. 워커 프로세스 개수, 튜닝, 동적 모듈 적재 등 글로벌 설정 항목을 포함한다. 다른 NGINX 세부 설정 파일에 대한 참조를 지정한다. 하위 디렉터리에 위치한 모든 설정 파일을 포함하는 최상위 http 블록을 가지고 있다. /etc/nginx/conf.d/ 기본 HTTP 서버 설정 파일을 포함한다. 디렉터리 내 파일 중 이름이 .conf로..