일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 디자인패턴
- 인터셉터
- request
- aop
- response
- mybatis
- 스프링 시큐리티
- 트랜잭션
- Interceptor
- Redis
- Spring
- RestControllerAdvice
- Spring Security
- proxy pattern
- 관점지향프로그래밍
- SQL
- 자바
- MYSQL
- git
- aspect
- 스프링
- 스프링부트
- http
- OOP
- spring boot
- exception
- network
- java
- Filter
- 객체지향프로그래밍
- Today
- Total
목록분류 전체보기 (79)
장쫄깃 기술블로그

린 스타트업 (Lean Startup) 이란?린 스타트업(Lean Startup)은 에릭 리스(Eric Ries)가 제안한 스타트업 경영 방법론으로, "효율적으로 제품을 개발하고 시장에 빠르게 적응하는 방식"을 강조한다. Lean의 사전적 의미는 '여윈, 살이 빠진, 뾰족한, 불충분한, 메마른, 낭비 없는' 등이다. 여기서 린 스타트업의 Lean은 '불충분한, 낭비 없는' 에 가깝다. 린 스타트업의 핵심 개념MVP (Minimum Viable Product, 최소 기능 제품)완벽한 제품을 개발하기 전에, 최소한의 기능을 갖춘 제품을 빠르게 출시하여 시장의 반응을 확인한다.Build - Measure - Learn 사이클제품을 개발(Build) → 사용자 데이터를 측정(Measure) → 배운 것을 통해..

GraphQL이란?GraphQL은 API를 위한 쿼리 언어이자 이를 실행하기 위한 런타임으로, 클라이언트가 필요한 데이터만 명시적으로 요청하고 받을 수 있게 해 준다. REST API의 단점을 보완하고 유연한 데이터 요청 및 처리를 가능하게 한다. 주요 특징으로는 다음과 같다.1. 클라이언트 주도 데이터 요청클라이언트가 원하는 데이터의 구조를 지정하여 요청을 보내면, 서버는 정확히 그 구조에 맞는 데이터를 반환한다.query { user(id: 1) { id name email }} 2. 단일 엔드포인트REST API와 달리, GraphQL은 하나의 엔드포인트로 모든 데이터를 요청할 수 있습니다. (예: /grqphql) 3. Overfetching과 Un..

들어가며소프트웨어 개발이 복잡해질수록, 변화에 유연하게 대응할 수 있는 구조가 점점 더 중요해지고 있다. 육각형 아키텍처(Hexagonal Architecture)는 이런 요구에 부합하는 설계 패턴으로, 내부 비즈니스 로직과 외부 의존성을 명확히 분리하여 코드의 유지보수성과 확장성을 높이는 데 중점을 둔다. 이번 글에서는 다양한 아키텍처와 육각형 아키텍처의 개념, 구성 요소, 장점과 단점을 살펴보고, 실무에서 이를 어떻게 효과적으로 적용할 수 있는지 알아보겠다. 계층형 아키텍처 (Layered Architecture) 계층형 아키텍처는 애플리케이션을 기능별로 층(layer)으로 나누는 가장 전통적이고 널리 사용되는 아키텍처이다. 일반적으로 다음과 같은 3~4개의 계층으로 구성된다. 프레젠테이션 계..

printStackTrace()를 사용하면 안되는 이유1. 오류 출력 대상의 불확실성'System.err'는 'System.setErr()'를 통해 재설정될 수 있으므로, 오류 출력이 실제로 어디로 가는지 확실하지 않다. 이는 로그가 예상치 못한 위치로 출력되어 디버깅 및 문제 추적을 어렵게 만들 수 있다. 2. 높은 오버헤드printStackTrace는 내부적으로 동기화(synchronized)를 사용하며, 성능 저하를 유발할 수 있다. 3. 보존 정책 부재printStackTrace로 출력된 로그는 별도의 보존 정책을 설정할 수 없다. 기본적으로 로그는 응용 프로그램의 생명 주기와 함께 소멸하며, 파일 저장이나 전송, 필터링이 불가능하다. 이는 중요한 오류 로그가 손실될 가능성을 높인다. 4. 보안성..

SSE (Server Sent Event) 란? SSE(Server-Sent Events)는 웹 클라이언트(브라우저)와 서버 간에 단방향 실시간 통신을 가능하게 하는 표준 기술이다. 클라이언트가 서버에 연결을 설정하면, 서버는 이벤트를 지속적으로 보내고 클라이언트는 이를 수신할 수 있다. SSE는 HTML5 표준의 일부로 정의되었으며, 서버에서 클라이언트로 푸시(Push) 데이터를 보내는 데 사용된다. REST API와는 다르게 서버가 클라이언트 요청 없이도 필요한 데이터를 실시간으로 보낼 수 있다는 점이 주요 특징이다. SSE의 주요 특징단방향 통신서버에서 클라이언트로만 데이터가 전달 (단방향)기술 표준HTTP 프로토콜을 기반으로 동작'Content-Type' 헤더에 'text/event-stream..

Redis Sorted Set을 사용한 이유대기열 시스템을 만들 때 Redis Sorted Set을 사용한 이유는 다음과 같다.우선순위 기반 작업 처리각 항목에 점수를 부여해 우선순위를 지정할 수 있으며, 점수에 따라 자동 정렬우선순위가 높은 작업을 먼저 처리하는 대기열 구현이 가능효율적인 데이터 조회 및 삭제ZRANGE, ZPOPMIN과 같은 명령어를 통해 O(log(N)) 시간 복잡도로 정렬된 데이터를 조회하거나 삭제시간 기반 작업 처리점수로 타임스탬프를 사용할 수 있어 예약 작업이나 시간 순서에 따른 작업 처리가 가능중복 방지Sorted Set은 동일한 키를 허용하지 않으므로 중복된 작업 추가를 방지하고 점수 업데이트로 대체 가능빠른 성능Redis는 메모리 기반 데이터베이스로 매우 빠른 읽기/쓰기 ..

객체지향 생활 체조의 9가지 원칙1. 한 메서드에 오직 한 단계의 들여쓰기만 한다.한 메소드에 여러 들여쓰기가 존재하면, 해당 메소드는 여러 가지 일을 처리한다고 봐도 무방하다. 그리고 이는 곧 코드를 분리해야 할 때가 되었음을 의미한다. 해당 원칙을 지키기 위해 코드를 각각의 책임과 역할에 따라 분리하면 자연스럽게 가독성과 유지보수에 용이한 코드를 작성할 수 있다.AS-ISprivate void test() { testRepository.save( Test.builder() .name("test") .age(20) );}TO-BEprivate void test() { testRepository.save(createTest());}pri..

분산락(Distributed Lock)의 필요성분산락(Distributed Lock)은 분산 시스템에서 여러 노드 또는 프로세스가 동시에 공유 자원에 접근하려 할 때, 충돌을 방지하고 자원의 일관성을 유지하기 위해 사용하는 기술이다. 이를 통해 여러 컴퓨터 또는 서버가 동시에 동일한 자원에 접근할 때 발생할 수 있는 문제를 해결할 수 있다. Redis는 기본적으로 싱글 스레드로 동작하므로, 단일 Redis 노드를 사용해도 동시성 문제는 발생하지 않는다. 따라서 리소스에 값을 설정하여, 값이 설정된 경우에는 다른 클라이언트의 접근을 차단할 수 있다. 필자는 분산 환경에서 선착순 신청 기능을 개발하면서, 처음에는 DB에 직접 락을 거는 비관적 락을 사용했다. 그러나 Deadlock이 자주 발생하자, 분산락으..

멱등성(Idempotent)이란?첫 번째 수행을 한 뒤 여러 차례 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성 멱등한 작업이란, 한 번 수행하든 여러 번 수행하든 결과가 동일한 작업을 의미한다. 멱등성이 보장되면 메소드가 여러 번 실행되어도 결과가 동일하기 때문에 안전하게 사용할 수 있다. 반면, 멱등성이 보장되지 않으면 동일한 요청을 중복해서 실행할 위험이 있다. 예를 들어, 동일한 등록 요청을 중복해서 실행한다면 중복되는 여러 개의 데이터가 생성될 수 있다. HTTP 메소드의 멱등성HTTP 메소드에도 멱등성이 있다. 메소드멱등성GETOPOSTXPUTOPATCHXDELEETEOHEADOOPTIONSOTRACEOCONNECTX GET, PUT은 리소스를 조회하거나 대체하는 메소드이기 때문에..

들어가며Spring Security 6.1부터 기존에 사용하던 and()와 non-Lambda DSL Method가 Deprecated 되고, 필수적으로 Lambda DSL을 사용하도록 변경되었다. 변경된 내용으로 스프링 시큐리티 JWT 로그인을 구현해보려 한다. 다만, 본 게시글은 스프링 시큐리티 위주의 내용만 작성하려고 한다. 로그인, 회원가입 등의 별도 비즈니스 로직 코드는 게시글 하단의 깃허브를 참고하길 바란다. 기술스택- Spring Boot 3.3.1- Spring Security 6.3.1- JPA- JWT(Access Token, Refresh Token) 구현- Spring Security 6.1 이후 lambda 문법을 이용한 코드 적용 JWT에 대한 설명이나 이전에 작성한 내용에 대해..