일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바
- 네트워크
- null
- gatway
- buildSrc
- DB
- Kotlin
- 정규화
- 자료구조
- 갱신 이상
- AWS
- HTTP
- 3-way handshaking
- java
- JPA
- 낙관적 락
- Dirty Checking
- 페이지네이션
- MSA
- well-know port
- ocp
- Spring
- 캐시 오염
- 삭제 이상
- 삽입 이상
- 비관적 락
- 데이터베이스
- Redis
- 스레드 풀
- Kafka
- Today
- Total
728x90
목록
728x90
분류 전체보기 (70)
어 나 갱수.
Java의 Exception 예외처리에 대해 알아보기 이전에 Error(에러)와 Exceptin(예외)에 대해 정리해보겠습니다. Error(에러)와 Exception(예외)Error는 시스템에서 문제가 생겼을 때 발생하는 것을 말합니다. 이는 시스템 레벨에서 발생하는 것을 뜻하며 심각한 오류로 판단합니다.개발자가 미리 에러를 예측해서 처리하는 것이 쉽지 않기 때문에, 개발자가 에러에 대해 미리 처리에 대해 신경 쓸 필요는 없습니다. Exception은 개발자가 짠 비즈니스 로직에서 문제가 생겼을 때 발생하는 것을 말합니다. 시스템 레벨에서 발생하는 것이 아니기 때문에 개발자가 로직을 짜면서 미리 예외를 예측하여 처리할 수 있습니다. 개발자가 처리할 수 있기 때문에 구분하고 그에 따른 처리 로직을 잘 구현..
프로그램을 실행시켜 보면 다양한 레벨에서 오류가 발생하게 됩니다. 개발자가 의도하지 않은 방향으로 프로그램이 실행되거나 메모리에 공간이 부족해서 시스템이 오작동할 수 있습니다. 심각한 경우에는 실행 중인 프로그램이 강제로 종료될 수 있습니다.프로그램에 오류가 발생하는데에는 다양한 이유가 있습니다. 비즈니스 로직의 논리적인 문제 때문에 오류가 발생할 수 있고, 로직과 연결된 하드웨어에 문제가 생겨 프로그램이 작동 안 할 수 있습니다. 프로그램을 다루다 보면 크게 3가지의 오류를 볼 수 있습니다. 컴파일 에러논리 에러런타임 에러컴파일타임 런타임이란런타임과 컴파일타임은 프로그램 개발을 하면서 나눈 두 계층입니다. 프로그램을 만들기 위해서는 코드를 작성해야하고 그 코드를 기계어 코드로 변환해야 합니다. 개발자가..
Spring으로 개발을 하다 보면 다양한 Exception을 처리하게 됩니다. 에러를 처리하는 방법은 매우 다양합니다. 저는 그 방법들 중에 반복적인 작업을 줄이고 전역에서 공통적으로 Exception을 처리할 수 있는 @ExceptionHandler와 @ControllerAdvice를 사용하여 에러를 처리해 보겠습니다. @ExceptionHandler 예외 처리컨트롤러 코드에서 @ExceptionHandler 어노테이션을 선언하고, 해당 컨트롤러에서 캐시 하고 싶은 예외를 지정하면 됩니다.해당 컨트롤러에서 지정한 예외가 발생하면 예외에 일치하는 메서드가 실행됩니다.아래 코드로 예시를 들어보겠습니다. 아래 코드에서는 회원가입 API에 대한 컨트롤러 코드가 있습니다. 회원가입 API를 요청하는 도중에 Me..
데이터베이스에 접근해서 데이터를 수정할 때 동시에 수정이 일어나게 되면 충돌이 발생하게 됩니다. 충돌이 발생 안 하려면 어떻게 해야 할까요? 저희는 데이터베이스의 락(Lock)을 사용해서 충돌을 방지할 수 있습니다.이러한 동시성 문제는 데이터의 일관성과 무결성을 위협할 수 있습니다. 따라서 동시에 데이터에 접근하려는 다양한 요청들을 잘 제어하는 것은 필수적인 작업입니다. 동시성 제어를 위한 두 가지 핵심적인 방법에 대해 알아보겠습니다.발생할 수 있는 동시성 문제상품 재고 수량이 맞지 않는 경우 사용자 A가 재고가 5개인 상품을 조회하고 재고를 하나 차감하는 트랜잭션을 실행사용자 B가 전체 상품을 조회, 사용자 A가 실행시킨 트랜잭션이 커밋되지 않았기 때문에 5개가 조회사용자 A가 실행한 트랜잭션이 커밋됨..
Pagination이란Pagination이란 검색 결과를 조회할 때 데이터를 한 번에 다 가져오는 것이 아니라 나눠서 일부만 조회하는 방법입니다. Pagination은 게시판이나 상품 목록 조회등을 요청할 때 결과값이 총 1억 개가 있다고 가정하면, 사용자는 이 데이터 1억 개를 모두 보지도 않는데 1억 개의 데이터를 조회해야 합니다. 그렇게 매번 전체의 리스트를 조회하게 되면 조회 속도도 느려지고 성능도 안 좋아지게 될 수 있습니다. 하지만 데이터를 일정한 크기로 나눠서 규칙적으로 조회한다면 조회 속도도 빠르고 성능적으로도 좋은 애플리케이션이 될 수 있습니다.Pagination을 구현하는 방법은 크게 2가지가 있습니다.offset-based pagination말 그대로 페이지를 기반으로 데이터를 나눠서..
JPA를 사용하다 보면 더티 체킹이라는 말을 많이 듣게 됩니다. 대부분의 ORM에서는 기본적으로 CRUD 기능을 제공합니다. JPA에서는 find(조회), persist(저장), remove(삭제)가 있습니다.그러나 변경에 대한 메서드는 제공하지 않습니다. JPA에서 수정에 대한 기능을 제공하기 위해서 더티 체킹이라는 것을 제공해 줍니다. 더티 체킹을 간단하게 말하면 하나의 Transaction안에서 엔티티에 변경사항이 생기면 변경사항을 자동으로 데이터베이스에 반영해 주는 기능입니다. @Transactionaloverride fun execute(updatePasswordRequest: UpdatePasswordRequest) { val accountIdx = accountUtil.getCurre..
H2 Console이 Spring Security 필터를 통과할 때, 아래 사진과 같이 localhost에서 연결을 거부한다는 에러가 발생합니다. H2 콘솔은 iframe을 통해 화면을 구성합니다. 브라우저에서 iframe에 대한 모든 요청을 허용하면 디도스 공격, 클릭재킹 공격에 취약해질 수 있습니다. 따라서 브라우저는 요청 응답에 있는 X-Frame-Options 헤더의 내용에 따라 iframe에서의 요청을 허용할 것인지 허용하지 않을 것인지 판단합니다.Spring Security는 기본적으로 X-Frame-Options 응답헤더를 DENY 로 설정하고 있습니다. 따라서 모든 브라우저는 이나 태그로 페이지를 표시하는 부분을 볼 수 없다는 것입니다. 아래와 같이 SecurityConfig에 head..
OCP를 통해 기능 확장에 강하고, 외부 변경에 강건한 소프트웨어를 만들고자 로버트 마틴이 명명한 객체지향 5대 원칙 중 하나입니다. OCP는 소프트웨어를 설계하면서, 기능이나 모듈의 확장에 대해서는 개방(OPEN) 되어야 하고, 기존의 것의 변경에 대해서는 폐쇄(CLOSE) 되어야 한다는 원칙입니다.간단하게 말하면, 새로운 기능이 추가되더라도 기존의 코드를 변경하지 않고도 확장이 가능해야 한다는 점입니다. 아래의 코드는 OCP를 적용시키지 못한 코드라고 말할 수 있습니다. JavaMailSendPort는 제대로 추상화된 인터페이스라고 불릴 수 없습니다. 추상화된 인터페이스에서 구현 라이브러리인 JavaMail의 이름을 사용해 버렸기 때문에 1:1로 밖에 구현클래스를 사용할 수밖에 없기 때문입니다. 다양..