일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Interceptor
- request
- Spring
- 관점지향프로그래밍
- 인터셉터
- aop
- 스프링부트
- git
- java
- proxy pattern
- SQL
- network
- 자바
- http
- mybatis
- MYSQL
- 스프링
- 스프링 시큐리티
- 객체지향프로그래밍
- Spring Security
- exception
- response
- RestControllerAdvice
- aspect
- 트랜잭션
- Filter
- Redis
- OOP
- spring boot
- 디자인패턴
- Today
- Total
목록전체 글 (78)
장쫄깃 기술블로그
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에 대한 설명이나 이전에 작성한 내용에 대해..
들어가며Spring Security 6.1부터 기존에 사용하던 and()와 non-Lambda DSL Method가 Deprecated 되고, 필수적으로 Lambda DSL을 사용하도록 변경되었다. 변경된 내용으로 스프링 시큐리티 세션 로그인을 구현해보려 한다. 다만, 본 게시글은 스프링 시큐리티 위주의 내용만 작성하려고 한다. 로그인, 회원가입 등의 별도 비즈니스 로직 코드는 게시글 하단의 깃허브를 참고하길 바란다. 기술스택- Spring Boot 3.3.1- Spring Security 6.3.1- JPA- Session, Form Login 구현- Spring Security 6.1 이후 lambda 문법을 이용한 코드 적용 스프링 시큐리티에 대한 설명은 해당 글을 참고하면 된다.링크 : https..