티스토리

Go Gradually - Repository
검색하기

블로그 홈

Go Gradually - Repository

dev.go-gradually.me/m

나 자신에게, 나 스스로가 부끄럽지 않도록

구독자
0
방명록 방문하기
공지 GoGradually 의 Reposi⋯ 모두보기

주요 글 목록

  • 자바 패키지 네이밍 컨벤션 일반적으로 패키지 네이밍 시 사용되는 용어들의 종류와 그 의미이다.토큰보통 포함되는 위치의미/용도(관례)config최상위 또는 layer스프링 설정 클래스들 (Java Config, 빈 정의, 프로퍼티 등)domainBounded Context 안도메인 모델: 엔티티, 밸류, 애그리거트, 도메인 서비스entitydomain 하위 또는 별도JPA @ Entity 전용 클래스dto / modeldomain 옆계층 간 데이터 전달용 객체 (DTO/VO)repositoryinfrastructure 또는 domain영속성 인터페이스, Spring Data 리포지토리persistence / infra(structure)root layerDB·메시징·외부 API 등 인프라 어댑터serviceapplication la.. 공감수 1 댓글수 0 2025. 4. 28.
  • Spring Web MVC가 요청을 처리하는 과정 - DispatcherServlet의 동작구조 DispatcherServlet의 doDispatch() 동작구조DispatcherServlet 구조라이브러리 : org.springframework.web.servlet.DispatcherServletDispatcherServlet도 부모 클래스에서 HttpServlet을 상속받아서 사용하고, 서블릿으로 동작한다.DispatcherServlet → FrameworkServlet → HttpServletBean → HttpServlet스프링 부트는 DispatcherServlet 을 서블릿으로 자동으로 등록하면서 모든 경로( urlPatterns="/" )에 대해서 매핑한다.참고: 더 자세한 경로가 우선순위가 높다. 그래서 기존에 등록한 서블릿도 함께 동작한다요청 흐름서블릿이 호출되면 HttpServle.. 공감수 1 댓글수 0 2025. 4. 22.
  • 캐싱 전략의 선택 방법 캐싱 전략은 읽기/쓰기 정책과 캐시 인프라 구조에 따라 달라진다. 각 전략은 상황에 맞게 선택되어야 하며, 읽기/쓰기 정책 관점, 캐시 인프라 구조 관점으로 구분할 수 있다.1. 읽기/쓰기 정책 관점Cache Aside특징주로 읽기 작업에 적합하다.개발자가 직접 캐시 히트/미스 로직을 구현한다.캐시 장애에 대비한 구성이 가능하다.데이터 업데이트 시 정합성 문제가 발생할 수 있다.동일 쿼리를 반복 수행하는 서비스에 유리하다.Write Back특징쓰기 작업에 적합하다.Cache Store가 Data Store에 Write 부하를 줄이기 위해 Throttling Queue 역할을 수행한다.캐시 장애 시 데이터 유실 위험이 있다.캐시에 변경사항을 먼저 적용하므로 정합성이 확보된다.조회되지 않는 데이터가 불필요하.. 공감수 1 댓글수 0 2025. 4. 9.
  • 상속 관계 매핑 상속 관계 매핑은 엔티티 간의 상속 관계를 데이터베이스에 표현할 필요가 있을 때 사용하는 모델링 기법이다. 이는 객체지향의 상속 개념과 유사하게, 엔티티가 is-a 관계를 가지거나 부모 타입으로 일관되게 관리되어야 할 때 유용하다. RDBMS는 상속 개념을 직접 지원하지 않으므로 Super-Type Sub-Type Relationship이라는 기법으로 이를 대체한다.상속관계 매핑이란?필요성엔티티 간 상속 관계가 필요한 경우가 존재한다.is-a 관계: 특정 엔티티가 다른 엔티티의 특성을 물려받을 때부모 타입으로 일관된 관리: 여러 엔티티를 공통 부모 타입으로 관리해야 할 경우 - 부모 타입으로 다형적 쿼리(ex: 부모 타입으로 전부 조회)를 지원해야 할 경우대체 기법RDBMS는 상속 개념이 없으므로, 슈퍼.. 공감수 1 댓글수 0 2025. 3. 11.
  • Docker 개념과 기본 지식 1. Docker의 개념: 컨테이너 기반 가상화 vs. VMVM과 컨테이너의 구조를 비교하면, VM은 하이퍼바이저 위에서 각각 게스트 OS를 포함하는 반면, 컨테이너는 Docker와 같은 컨테이너 엔진 위에서 호스트 OS의 커널을 공유하며 애플리케이션과 라이브러리만 포함한다.컨테이너는 운영체제 수준에서 격리된 가상화 환경을 제공하며, 별도의 게스트 OS를 포함하지 않기 때문에 VM보다 훨씬 경량이고 빠르게 실행된다.또한, 컨테이너는 프로세스 격리를 통해 애플리케이션을 다른 환경과 분리함으로써 시스템 간 간섭을 최소화한다.Docker는 이러한 컨테이너 기술을 활용해 애플리케이션을 패키징하고 배포하는 플랫폼이다. Docker 컨테이너의 주요 이점은 다음과 같다.경량성 & 효율성: 시작 속도가 수 초 이내로 .. 공감수 0 댓글수 0 2025. 3. 10.
  • 백엔드 개발자를 위한 서버, 프록시 서버, 로드 밸런싱 면접 질답 웹 서버와 애플리케이션 서버의 차이점은 무엇인가요?Web Server정적 파일(HTML, CSS, JS, 이미지 등) 처리에 최적화된 서버요청을 받아 즉시 정적 자원을 반환하기 때문에 단순하고 빠른 처리를 제공클라이언트의 요청이 복잡하지 않을수록 웹 서버만으로도 충분히 대응 가능함WAS(Application Server)비즈니스 로직을 처리하고, 동적 콘텐츠를 생성하는 서버요청에 따라 데이터베이스 연동, 세션 관리 등 다양한 기능을 수행복잡하고 동적인 로직이 필요한 경우, WAS를 통해 효율적으로 구현 가능함서버 확장 방식인 수직적 확장(Scale-up)과 수평적 확장(Scale-out)의 차이점과 각각의 장단점은 무엇인가요?Scale-up(수직적 확장)서버 자체의 성능(CPU, 메모리 등)을 높여 처리.. 공감수 1 댓글수 0 2025. 3. 10.
  • CI/CD 와 무중단 배포 CI/CD지속적 통합 (CI)정의개발자들이 작업한 코드를 중앙 저장소에 자주 통합하는 과정이다. 이를 통해 각자의 코드가 서로 잘 어우러지는지 지속적으로 확인할 수 있다.주요 효과충돌 및 오류 조기 발견: 통합 시 발생할 수 있는 충돌이나 오류를 신속하게 파악하고 해결할 수 있다.코드 품질 향상: 서로의 코드를 검토하면서 품질을 유지하고 개선할 수 있다.지속적 배포 (CD)정의CI를 통해 통합된 코드를 자동화된 테스트와 빌드 과정을 거쳐 실제 운영 환경에 배포하는 과정이다.주요 효과신속한 사용자 전달: 사용자에게 새로운 기능과 개선 사항을 빠르게 제공할 수 있다.배포 프로세스 자동화: 수동 개입 없이 배포가 진행되어 인적 실수를 줄이고 안정성을 확보한다.두 가지 개념을 함께 활용하면 개발 프로세스 전반에.. 공감수 1 댓글수 0 2025. 3. 10.
  • 스레드 풀 생성 전략과 작업 거절 정책 스레드 풀은 시스템 자원을 효율적으로 사용하고, 안정적인 작업 처리를 위해 필수적인 요소다. 다양한 상황에 맞춰 적절한 풀 생성 전략과 작업 거절 정책을 설정하면, 트래픽 급증 시에도 시스템이 예측 가능한 성능을 유지할 수 있다.Executor 전략Executor 스레드 풀 관리스레드 관리 속성corePoolSize기본적으로 유지되는 스레드 수다. 이 수만큼의 스레드를 초기화해두고, 작업이 들어오면 먼저 활용한다.maximumPoolSize생성될 수 있는 스레드의 최대치다. corePoolSize 이상의 스레드는 필요한 경우에만 만들고, 더 이상 새 스레드를 만들 수 없으면 작업을 거절한다.keepAliveTime, timeUnitcorePoolSize를 초과해 생성된 스레드(초과 스레드)가 대기할 수 .. 공감수 2 댓글수 0 2025. 3. 9.
  • WAS 성능 최적화 전략 1. 자바 애플리케이션 성능 최적화자바 애플리케이션의 성능을 극대화하기 위해서는 아래와 같은 다양한 접근 방법을 동시에 고려해야 한다.JVM 상태 분석프로파일링 및 모니터링 도구(JVisualVM, YourKit 등)를 활용하여 애플리케이션의 런타임 상태를 분석한다. 이를 통해 병목 현상, 메모리 사용량, 스레드 동작 등을 파악할 수 있다.GC 튜닝가비지 컬렉션(GC) 로그를 분석하고, GC 옵션을 조정하여 불필요한 pause 시간을 줄인다. 상황에 따라 CMS, G1, ZGC 등 다양한 GC 방식을 테스트하여 최적의 성능을 도출한다.JVM 파라미터 조정힙 메모리 크기, 스택 크기, JIT 컴파일러 옵션 등 JVM의 다양한 파라미터를 상황에 맞게 조정하여 최적의 실행 환경을 구성한다.위와 같은 방법들을 .. 공감수 2 댓글수 0 2025. 3. 8.
  • 스프링이란? 스프링스프링은 자바 기반의 애플리케이션 개발을 위한 경량 프레임워크로, 모듈 간 결합도를 낮추고 유지보수를 용이하게 하는 다양한 기능을 제공한다. 스프링은 핵심 기능인 IoC(Inversion of Control)와 DI(Dependency Injection)를 중심으로 작동하며, AOP(Aspect Oriented Programming)를 비롯한 여러 부가기능을 지원한다.스프링 프레임워크의 주요 특징스프링은 다음과 같은 주요 특징을 갖고 있다:IoC와 DI를 통한 결합도 감소스프링 컨테이너는 객체의 생성, 관리, 라이프사이클을 담당함으로써 개발자가 직접 객체를 생성하고 의존성을 관리할 필요를 줄여준다. 이를 통해 컴포넌트 간의 결합도를 낮추고, 유지보수와 확장이 용이한 애플리케이션을 구현할 수 있다.I.. 공감수 1 댓글수 0 2025. 3. 8.
  • Java 에 대하여 자바의 기본 특징자바는 객체지향 프로그래밍(OOP)에 기반하여 설계되었으며, "Write Once, Run Anywhere"라는 플랫폼 독립성을 갖는다. 이는 한 번 작성된 코드가 어떠한 운영체제에서도 동일하게 실행될 수 있음을 의미한다.JDK 구조자바 개발 환경은 JDK(Java Development Kit), JRE(Java Runtime Environment), 그리고 JVM(Java Virtual Machine)으로 구성되며, 각 계층은 다음과 같이 역할을 분담한다.1. JDKJDK는 자바 개발에 필요한 모든 도구를 포함하는 패키지이다.JDK의 주요 구성 요소는 다음과 같다.JRE: 자바 애플리케이션을 실행하기 위한 환경을 제공한다.개발 도구: 자바 컴파일러(javac), 패키징 도구(jar), .. 공감수 1 댓글수 0 2025. 3. 7.
  • AMI와 EC2 1. AMI (Amazon Machine Image)1) AMI의 정의AMI는 EC2 인스턴스를 실행하기 위한 템플릿이다. 운영체제, 애플리케이션, 구성 정보가 포함되어 있어, 이를 바탕으로 동일한 환경을 필요로 하는 여러 인스턴스를 쉽게 생성할 수 있다.2) 유연성과 확장성 확보AMI를 활용하면 여러 인스턴스에 동일한 이미지를 적용하여 일관된 환경을 빠르게 구성할 수 있다. 예를 들어, 사용자가 직접 만든 AMI를 Auto Scaling에 적용하면 트래픽 증가 시점을 감지해 자동으로 동일 환경의 인스턴스를 스케일 아웃할 수 있다.3) AMI 선택 시 고려 요소운영체제: Linux, Windows 등 사용하려는 운영체제가 무엇인지 확인해야 한다.리전: AMI는 리전에 따라 사용 가능한 이미지가 다를 수 .. 공감수 0 댓글수 0 2025. 3. 6.
  • IAM 1. IAM을 배워야 하는 이유AWS 리소스 간 ‘관계’를 정의하는 방식IAM(Identity and Access Management)은 단순히 사용자 권한만을 제어하는 것이 아니라, AWS의 각종 리소스(EC2, S3 등) 간 권한 관계를 표현하고 제어한다. 이를 통해 서비스 간 안전하고 유연한 연동이 가능해진다.보안 및 권한 관리의 핵심AWS 인프라를 운영할 때, 자격 증명과 권한 설정이 명확해야 한다. 잘못된 권한 설정은 치명적인 보안 사고로 이어질 수 있으므로 IAM을 깊이 이해하고 적절히 활용해야 한다.2. Admin UserRoot 대신 Admin 계정 사용Root 계정은 결제 정보 수정이나 계정 전반의 보안 설정 같은 위험도가 높은 작업을 수행할 수 있다. 이로 인해 보안 사고가 발생할 가능.. 공감수 1 댓글수 0 2025. 3. 6.
  • 보안 그룹 설정 방법 (feat. Auto Scaling) 1. 데이터베이스 보안 설정DB 포트 개방 주의데이터베이스 포트를 불필요하게 열어두면 외부 공격에 노출되어 치명적인 보안 사고로 이어질 수 있다. 무분별하게 포트를 개방하지 말고, 반드시 보안 그룹을 활용해 접근을 엄격히 제한해야 한다.보안 그룹을 통한 포트 제어데이터베이스에 접근할 때는 특정 IP나 서브넷에 한정해 포트를 열도록 설정한다. 이를 통해 같은 VPC 내의 모든 인스턴스가 아니라, 신뢰할 수 있는 범위의 트래픽만이 데이터베이스에 접근할 수 있다.2. VPC 내부 통신과 보안 그룹VPC 내 통신같은 VPC에 있는 인스턴스는 기본적으로 네트워크 계층에서 통신이 가능하다. 그러나 “같은 VPC”와 “같은 보안 그룹”은 다른 의미를 가진다. 단순히 보안 그룹이 동일하다고 해서 자동으로 통신이 허용되.. 공감수 0 댓글수 0 2025. 3. 6.
  • VPC 1. AWS VPC 란?AWS VPC (Amazon Virtual Private Cloud)는 사용자가 AWS 클라우드 내에서 전용 가상 네트워크를 구성할 수 있게 하는 서비스이다. 이 네트워크는 타 사용자와 완전히 논리적으로 분리되며, EC2 인스턴스와 같은 여러 AWS 리소스를 안전하게 실행할 수 있는 환경을 제공한다. VPC 내에서는 네트워크를 보다 작은 범위의 서브넷으로 분할해 세밀하게 리소스와 트래픽을 관리할 수 있다.2. EC2 Classic과 Default VPCEC2 ClassicEC2 Classic은 VPC 도입 이전에 사용하던 단일 네트워크 환경이다. 2013년 12월 4일 이후 생성된 계정에서는 지원되지 않으며, 성능과 보안 측면에서 VPC에 비해 열위에 있다. 따라서 기존 EC2 C.. 공감수 0 댓글수 0 2025. 3. 6.
  • AWS 네트워크 구성 1. 기본 개념 및 용어라우팅 테이블라우팅 테이블은 패킷이 목적지로 전달되기 위해 거쳐야 할 경로 정보를 저장한 테이블이다. 이 테이블을 통해 네트워크 장비는 다음에 어떤 경로로 데이터를 전송할지 결정한다.서브넷 (Subnet)전통적인 네트워크에서 서브넷은 동일한 네트워크 상의 장비들이 라우터와 같은 중개 장치를 거치지 않고 직접 통신할 수 있도록 분리한 소규모 네트워크이다. 서브넷은 서브넷 마스크를 사용해 네트워크 범위를 구분하며, 이를 통해 내부와 외부 네트워크를 논리적으로 분리할 수 있다.CIDR (Classless Inter-Domain Routing)CIDR 표기법은 IP 주소와 서브넷 마스크를 결합해 네트워크 범위를 지정하는 방식이다. 이를 통해 private 또는 public IP 대역을 유.. 공감수 0 댓글수 0 2025. 3. 6.
  • Grafana 그라파나소개대시보드 확인 툴메트릭 DB를 한눈에 보게 해주기 위한 대시보드프로메테우스의 데이터를 조회해서 그래프로 표시초기 id, 비밀번호: admin그라파나 - 프로메테우스 연동connections -> data sources 찾기데이터 소스에 prometheus 추가그라파나 구조대시보드큰 틀패널대시보드 안에 모듈처럼 들어가는 컴포넌트visualization 정보를 보여준다.우측에 있는 설정으로 패널 정보 수정 가능standard options보여지는 정보의 타입 지정 가능보여지는 정보의 형식 지정 가능쿼리해당 패널에 띄울 데이터를 정하는 곳Builder클릭으로 사용가능한 쿼리 생성기code쿼리를 직접 입력해서 사용하는 방식하단의 add query로 여러 쿼리 추가 가능options해당 쿼리의 패널 내.. 공감수 0 댓글수 0 2025. 2. 20.
  • Prometheus 소개메트릭을 보관할 DB꾸준히 마이크로미터에서 메트릭을 받아와 저장함프로메테우스 아키텍처 pull metrics데이터를 당겨옴Prometheus server프로메테우스의 서버, 두뇌Node당겨온 데이터를 저장하는 저장소PromQL프로메테우스(DB)에 저장된 데이터를 조회하기 위한 쿼리그라파나와 같은 툴이 사용함Alertmanager프로메테우스가 제공하는 알림 툴프로메테우스는 그 자체로도 DB만큼 방대하다책으로 공부해야 할만큼 방대함추가적인 학습이 필요함따로 알아보면서 공부할 것보안 및 개인정보 보호에서 차단 해제해줘야 함기본 포트는 9090프로메테우스 설정 방법2가지 설정이 필요함애플리케이션 설정프로메테우스가 애플리케이션의 메트릭을 가져갈 수 있도록애플리케이션에서 프로메테우스 포멧에 맞추어 매트릭 만들기.. 공감수 1 댓글수 0 2025. 2. 20.
  • Micrometer 전투에 실패한 지휘관은 용서할 수 있지만, 경계에서 실패하는 지휘관은 용서할 수 없다개발 하고 끝내버리면, DevOps 경험, 좋은 품질, 유지보수가 사라진다.경계는 확실하게 해라개발도 하고, 모니터링도 구축해보고, 해야 한다.메트릭을 보는 이유정확한 값을 확인하기 위해?X값의 추세를 보기 위해?O큰 그림에서, 흐름이 어떻게 흘러가고 있는지 파악마이크로미터란?표준 측정 방식을 정한 인터페이스"애플리케이션 매트릭 파사드"애플리케이션의 매트릭(측정 지표)을 마이크로미터가 정한 표준 방법으로 모아서 제공스프링부트 액츄에이터는 마이크로미터를 기본으로 내장해서 사용개발자는 마이크로미터가 정한 표준 방법으로 매트릭을 전달하면 된다마이크로미터는 이미 지표 수집 기능을 이미 만들어서 제공오토컨픽으로 자동으로 등록마이크.. 공감수 0 댓글수 0 2025. 2. 20.
  • Java Thread Model 의 역사 Java 1.0~1.4: 초기 스레드 모델Thread 클래스와 Runnable 인터페이스 도입기본적인 스레드 생성 및 실행 메커니즘이 제공됨.synchronized, wait(), notify(), notifyAll() 메서드를 사용한 동기화가 가능.초기 문제점동기화 블록의 관리가 어려움.스레드 풀과 같은 고급 API 부재.비효율적인 스레드 관리.Java 5 (2004): java.util.concurrent 패키지 도입새로운 기능Executor Framework스레드 관리를 단순화하는 스레드 풀 및 작업 실행 프레임워크.ExecutorService executor = Executors.newFixedThreadPool(4);executor.execute(() -> System.out.println("T.. 공감수 1 댓글수 0 2025. 1. 6.
  • 스프링 시큐리티 stack overflow 느낀점진짜 단위테스트 통합테스트가 진짜 중요하구나버그 찾기 진짜 까다로워지네문제 분석java.lang.StackOverflowError: null at java.base/java.lang.Exception.(Exception.java:103) ~[na:na] at java.base/java.lang.ReflectiveOperationException.(ReflectiveOperationException.java:90) ~[na:na] at java.base/java.lang.reflect.InvocationTargetException.(InvocationTargetException.java:68) ~[na:na] --------무한루프 시작-------- at java.base.. 공감수 0 댓글수 0 2024. 9. 27.
  • 스프링 시큐리티 인증 아키텍처 전체 구조AuthenticationFilter : AuthenticationManager = N : 1AuthenticationManager : AuthenticationProvider = 1 : NSecurityContextHolder - Spring Security에서 인증된 사용자의 세부 정보를 저장하는 곳입니다. 이는 현재 애플리케이션의 보안 컨텍스트에 대한 중앙 저장소 역할을 합니다.SecurityContext - SecurityContextHolder에서 얻을 수 있으며, 현재 인증된 사용자의 Authentication 객체를 포함합니다. 이는 현재 실행 중인 스레드와 연관된 보안 정보를 담고 있습니다.Authentication - 두 가지 주요 목적으로 사용됩니다:AuthenticationM.. 공감수 0 댓글수 0 2024. 9. 27.
  • 스프링 시큐리티 아키텍처 Spring Security 아키텍처Spring Security는 서블릿 기반 애플리케이션에서 서블릿 필터를 사용합니다.HTTP 요청이 들어오면 컨테이너는 FilterChain을 생성합니다.FilterChain은 요청 URI 경로를 기반으로 처리할 Filter 인스턴스들과 Servlet을 포함합니다.여러 Filter가 요청을 가로채거나 수정할 수 있으며, 최종적으로 하나의 Servlet이 요청을 처리합니다.Filter의 순서가 매우 중요하며, 이는 보안 로직의 순서를 결정합니다.DelegatingFilterProxy서블릿 컨테이너의 생명주기와 Spring의 ApplicationContext를 연결하는 역할을 합니다.서블릿 컨테이너에 표준 방식으로 등록되지만, 실제 작업은 Spring Bean으로 등록된 .. 공감수 0 댓글수 0 2024. 9. 27.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.