[INFRA] Nginx In Container?, host?
DevOps.2024. 4. 25. 15:48[INFRA] Nginx In Container?, host?

프로젝트 환경 위와 같은 프로젝트 환경이 구축되어있고, Nginx를 통한 https 리버스 프록시를 구축하려는 상황에서 재미있는 논의 주제가 나와 포스팅을 남기게 되었습니다. 논의 주제Nginx를 컨테이너로 구동해야할까? EC2 호스트 위에서 구동해야할까?라는 주제로 SSAFY 구미캠 인프라 자타공인 포조님과 토론을 하게 되었습니다. 최초의 고민하게 된 부분은 포트의 노출 및 외부로의 접근을 허용할 시 보안 측면에서 좋지 않다라는 부분에서 논의가 시작되었습니다.사실 보안적인 부분에 대해서는 어떤 공격이 있는지, 어떤 대처를 해야하는지에 대해 깊게 공부해보지 못한 부분이다보니 토론내용이 잘 못 되었을 가능성은 높습니다. 하지만 아는 선에서 서로의 의견을 맞대어 보니 어느정도 정리된 부분이 있는 것 같아 유..

DevOps./Monitoring2024. 4. 16. 17:18[모니터링] 실무 모니터링 개요

개요 실무 모니터링 환경을 구성을 하기 위해서는 다음과 같은 3단계를 구축해야합니다. 대시보드 애플리케이션 추적 로그 대시보드 전체를 한눈에 볼 수 있는 가장 높은 뷰라고 할 수 있습니다. 제품 마이크로미터, 프로메테우스, 그라파나 등등 모니터링 대상 시스템 메트릭(CPU, 메모리) 애플리케이션 메트릭(톰캣 쓰레드 풀, DB 커넥션 풀, 애플리케이션 호출 수) 비즈니스 메트릭(주문수, 취소수) 애플리케이션 추적 주로 각각의 HTTP 요청을 추적, 일부는 마이크로서비스 환경에서 분산 추적할 수 있습니다. 제품 핀포인트(오픈소스), 스카우트(오픈소스), 와탭(상용), 제니퍼(상용) https://github.com/pinpoint-apm/pinpoint GitHub - pinpoint-apm/pinpoint..

[Springboot] 액추에이터(Actuator)
Framework/SpringBoot2024. 4. 16. 17:16[Springboot] 액추에이터(Actuator)

실무 모니터링 환경을 구축하기 위한 첫 번째 단계로 스프링부트에서 제공되는 액추에이터에 대해 학습한 내용을 정리하였습니다. 개요 운영 환경에서 서비스할 때 필요한 기능들을 프로덕션 준비 기능이라 합니다. 간단하게 알아보면 애플리케이션이 현재 살아있는지, 로그 정보는 정상 설정 되었는지, 커넥션 풀은 얼마나 사용되고 있는지 등을 확인할 수 있어야 합니다. 스프링부트에서 제공하는 액추에이터는 위와 같은 기능을 매우 편리하게 사용할 수 있는 다양한 편의 기능들을 제공합니다. 액추에이터 build.gradle 추가 //actuator 추가 implementation 'org.springframework.boot:spring-boot-starter-actuator' 의존성을 추가 후 아래 url로 접속해보면 몇 ..

[JPA] 인스타그램 유저 검색 N+1 문제
Framework/SpringBoot2024. 4. 2. 02:18[JPA] 인스타그램 유저 검색 N+1 문제

이번 포스팅으로는 프로젝트 개발 도중 직면한 N+1문제에 대한 해결과정에 대해 나열해보려 합니다. 테스트는 포스트맨을 활용하였고, 추후 JMETER를 활용하여 API 성능 테스트까지 진행해보려 합니다. 기본적으로 현재 프로젝트는 팔로우 서비스를 제공하고 있습니다. 유저 검색 API 스펙으로는 인스타그램의 검색기능과 비슷합니다. 다음은 이번 문제의 주춧돌 API에 대한 요구사항입니다. 위 이미지는 인스타그램에서 h라는 키워드로 검색을 했을 때의 결과입니다. h에 해당하는 유저를 검색함과 동시에 현재 로그인 한 유저의 팔로우들 중 얼마나 해당 유저를 팔로우하고 있는지 한명의 유저 이름과 함께 totalCount를 응답으로 주고 있습니다. 다음은 이번 서비스에 적용시킬 API 로직 요구사항입니다. 유저의 이름..

[PS] 백준2003 : 수들의 합 2(JAVA) - 투 포인터 활용편
CS/알고리즘2024. 3. 23. 14:45[PS] 백준2003 : 수들의 합 2(JAVA) - 투 포인터 활용편

문제 https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 풀이 투 포인터를 활용 Solving 문제에서 주어지는 수열에서 구간합이 M이 되는 조합의 경우의 수를 구하는 문제입니다. 그리디하게 접근하여 풀이를 하게되면 2중 for문으로 시간복잡도가 O(N^2)이 됩니다. 그리디한 풀이는 다음과 같습니다. 각 수열의 i번째 원소에서부터 i+1번 이후의 수열을 누적 누적합이 M이 되면 카운트 본격적으로 투 포인터..

[Java] ArrayList.java (add 메서드 내부 동작)
Language/Java2024. 3. 19. 23:23[Java] ArrayList.java (add 메서드 내부 동작)

ArrayList가 가변배열이라는 건 알겠는데 한 번 늘 때 얼마나 늘어날까? 궁금해서 알아보았습니다. ArrayList 평소 알고리즘을 풀거나 비즈니스 로직을 개발하다보면 List 인터페이스를 구현한 ArrayList 혹은 LinkedList 클래스를 사용할 때가 많았습니다. 오늘은 문득 ArrayList.add() 라는 메서드를 수행하면 내부적으로 어떤 일들이 일어나는지, 배열 길이를 넘는 데이터를 저장할 때 어떤식으로 가변 동작이 일어나는지 궁금해서 클래스 내부를 한번 들여다보았고 한번 정리해보았습니다. ArrayList Concept 순서가 있는 데이터의 집합으로 ArrayList는 내부적으로 배열을 사용하여 데이터를 연속적으로 저장합니다. 또한 내부가 배열로 이루어져있다보니 길이를 넘어서는 데이..

[JWT] 동작 원리 (Feat. Refresh Token)
Framework/SpringBoot2024. 3. 11. 17:35[JWT] 동작 원리 (Feat. Refresh Token)

JWT 정리 Intro 로그인 서비스를 구현하게 된다면 세션방식, 쿠키방식, JWT방식 세 가지를 고려하게 됩니다. 이번에는 JWT방식을 활용하여 로그인 서비스를 구현을 하기 위한 필요한 개념들에 대해 정리를 해보았습니다. 또한 로그인 서비스를 구현하려하면 인증과 인가라는 개념에 대해서도 알고 있어야 하기에 먼저 정의를 해보았습니다. 인증과 인가 각각을 알아보기 이전에 인증과 인가를 되게 비슷하다고 생각을 할 수 있는데 둘은 엄연히 다른 개념이라는 걸 알아야합니다. 둘은 사용자의 정보를 효율적으로 식별하고 전달하는 과정에서 필수적인 일들입니다. 인증 인증은 쉽게 말하면, 로그인입니다. 클라이언트가 주장하는 신원을 확인하는 과정으로 다음과 같은 인증방식이 있습니다. 사용자 ID 및 비밀번호 OAuth SA..

[JWT] JSON Web Token - With JWT.io
Framework/SpringBoot2024. 3. 11. 12:45[JWT] JSON Web Token - With JWT.io

JWT 인증 인가 서비스에 대한 정리가 필요하다 생각하여 작성한 포스팅입니다. 공식문서를 기반으로 한 정리 내용입니다. 부족한 점에 대한 지적은 언제든지 환영합니다! Intro https://jwt.io/introduction JWT.IO JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt.io 공식문서에 의하면 JWT란 JSON Web Token의 줄임말로써, 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표준( RFC 7519 )입니다. 또한 해당 토큰 정보는 디지털 서명이 되어있으므로..

image