일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 디자인패턴
- aop
- Interceptor
- RestControllerAdvice
- java
- SQL
- network
- git
- aspect
- mybatis
- Redis
- proxy pattern
- Spring Security
- MYSQL
- Spring
- 스프링 시큐리티
- 자바
- 관점지향프로그래밍
- response
- 인터셉터
- exception
- Filter
- spring boot
- 스프링부트
- 스프링
- OOP
- http
- 트랜잭션
- request
- 객체지향프로그래밍
- Today
- Total
목록전체 글 (76)
장쫄깃 기술블로그
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..
들어가며Add a private constructor to hide the implicit public one 유틸리티 클래스(UtilClass)를 만들다 보면 sonar에서 위와 같은 경고 문구를 보여주는 경우가 있다. 영문 그대로 해석해 보면 public 생성자를 숨기기 위해 private 생성자를 추가하라고 한다. 실제로 private 생성자를 추가하면 경고가 사라진다. 이 경고는 왜 발생하고, 어떻게 해결해야 하는지에 대해 알아보도록 하겠다. 유틸리티 클래스란? 유틸리티 클래스는 보통 객체 상태를 가지지 않고, 공용(static) 메소드를 제공하여 여러 곳에서 재사용할 수 있는 기능들을 모아놓은 클래스를 말한다. UtilityClasspublic class UtilityClass { pub..
Record란?record는 자바 14에서 처음 소개된 이후 16에서 정식으로 채용된 새로운 클래스 타입이다. 기존의 클래스와 비슷하지만, 더 간결하고 효율적으로 데이터 객체를 생성할 수 있도록 설계되었다. 특히, record는 보일러 플레이트 코드가 가지는 단점을 극복하기 위한 자바의 기능 중 하나이다.보일러 플레이트 코드 (Boiler Plate)여러 곳에서 재사용되며, 반복적으로 비슷한 형태를 띠는 코드ex) getter, setter, toString, equals, hashCode 등 보일러 플레이트 코드를 lombok이나 IDE의 도움을 받아 해결할 수 있지만, 근본적인 해결책은 되지 못한다. 이러한 한계를 극복하기 위해 자바가 추가한 기능 중 하나가 바로 record이다. Record의 특징..