하루에 4개씩!
더보기
1. 데이터베이스의 특징에 대해 말해보자!
- 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 한다.
- 지속적인 변화(Continuous Evloution) : 데이터베이스의 상태는 동적입니다. 즉 새로운 데이터의 삽입(Insert), 삭제(Delete), 갱신(Update)으로 항상 최신의 데이터를 유지해야 한다!
- 동시 공용(Concurrent Sharing) : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다!
- 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾는다!
2. 데이터베이서 언어에 대해 설명해보자!
- DDL(정의어 : Data Definition Language) : 데이터베이스 구조를 정의, 수정, 삭제하는 언어(alter, create, drop ...)
- DML(조작어 : Data Manipulation Language) : 데이터베이스 내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어 (select, insert, update, delete)
- DCL(제어어 : Data Control Language) : 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어 (commit, rollback, greant, revoke)
3. SELECT 쿼리의 수행 순서를 알아보자!
FROM, ON, JOIN > WHERE, GROUP BY, HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
- FROM - 각 테이블을 확인한다.
- ON - JOIN 조건을 확인한다.
- JOIN - JOIN이 실행되어 데이터가 SET으로 모아지게 된다. 서브쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와준다.
- WHERE - 데이터셋을 형성하게 되면 WHERE의 조건이 개별 행에 적용된다. WHERE절의 제약 조건은 FROM절로 가져온 테이블에 적용될 수 있다.
- GROUP BY - WHERE의 조건 적용 후 나머지 행은 GROUP BY절에 지정된 열의 공통 값을 기준으로 그룹화된다. 쿼리에 집계 기능이 있는 경우에만 이 기능을 사용해야 한다.
- HAVING - GROUP BY절이 쿼리에 있을 경우 HAVING 절의 제약조건이 그룹화된 행에 적용된다.
- SELECT - SELECT에 표현된 식이 마지막으로 적용된다.
- DISTINCT - 표현된 행에서 중복된 행은 삭제
- ORDER BY - 지정된 데이터를 기준으로 오름차순, 내림차순 지정
- LIMIT - LIMIT에서 벗어나는 행들은 제외되어 출력된다.
4. 트리거 (Trigger)에 대해 설명해보자!
- 트리거는 특정 테이블에 대한 이벤트에 반응해 INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램이다! 사용자가 직접 호출하는 것이 아닌, 데이터베이스에서 자동적으로 호출한다는 것이 가장 큰 특징이다!
내가 보고싶어 만드는 Java / Spring Exception 모음
<자바 표준 예외 (Java Standard Exceptions)
종류 | 설명 | 사용 목적 |
NullPointerException | null 객체에 접근할 때 발생 | 객체가 제대로 초기화 되었는지 확인할 때 |
ArrayIndexOutOfBoundsException | 배열 인덱스가 범위를 벗어났을 때 발생 | 배열의 인덱스를 검사할 때 |
IllegalArgumentException | 메서드에 잘못된 인자가 전달되었을 때 발생 | 메서드 인자의 유효성을 검증할 때 |
ClassCastException | 잘못된 형변환 시도 시 발생 | 객체 형변환을 할 때 |
ArithmeticException | 0으로 나누는 등의 산술 오류 발생 시 | 수학 연산 오류를 처리할 때 |
NumberFormatException | 숫자로 변환할 수 없는 문자열을 변환하려 할 때 발생 |
문자열을 숫자로 변환할 때 발생 |
IllegalStateException | 객체 상태가 적절하지 않을 때 발생 | 메서드가 적절한 상태에서 호출되었는지 확인할 때 |
UnsupportedOperationException | 지원되지 않는 연산을 호출할 때 발생 | 구현되지 않은 기능을 처리할 때 |
IndexOutOfBoundsException | 인덱스가 리스트나 배열의 범위를 벗어났을 때 발생 |
컬렉션 또는 배열의 범위를 검사할 때 |
SecurityException | 보안 제약 조건을 위반할 때 발생 | 보안 문제를 처리할 때 |
FileNotFoundException | 파일을 찾을 수 없을 때 발생 | 파일 경로나 이름이 잘못되었는지 검사할 때 |
IOException | 입출력 작업에서 오류가 발생할 때 발생 | 파일, 네트워크 통신 등에서 입출력 오류를 처리할 때 |
ClassNotFoundException | 클래스 파일을 찾지 못했을 때 발생 | 동적으로 클래스를 로드할 때 발생하는 문제를 처리할 때 |
NoSuchMethodExeption | 메서드를 찾지 못했을 때 발생 | 리플렉션을 이용해 메서드를 호출할 때 문제를 처리할 때 |
InastantiationException | 추상 클래스나 인터페이스 인스턴스화 시도 시 발생 | 클래스 인스턴스를 생성할 때 문제가 발생했는지 확인할 때 |
InterruptedException | 스레드가 작업 중 인터럽트될 때 발생 | 멀티쓰레드 환경에서 스레드를 제어할 때 |
CloneNotSupportedException | 객체 복제가 지원되지 않을 때 발생 | 객체 복제가 필요한 경우에 대한 예외 처리할 때 |
NoClassDefFoundError | 클래스 파일이 없거나 로딩할 수 없을 때 발생 | 동적으로 클래스를 로드할 때 문제가 있는 경우 처리할 때 |
OutOfMemoryError | JVM의 메모리가 부족할 때 발생 | 메모리 자원을 관리할 때 발생하는 문제를 처리할 때 |
StackOverflowError | 재귀 호출이 너무 깊어질 때 발생 | 스택 메모리가 초과됐을 때 문제를 처리할 때 |
NoSuchFieldException | 필드를 찾을 수 없을 때 발생 | 리플렉션을 통해 필드에 접근할 때 문제를 처리할 때 |
EOFException | 파일 또는 스트림 끝에 도달했을 떄 발생 | 파일 또는 네트워크 스트림에서 데이터를 읽을 때 발생하는 문제를 처리할 때 |
MalformedURLException | 잘못된 URL형식을 사용할 때 발생 | URL형식을 검증할 때 |
SocketException | 소켓 연결 오류가 발생할 때 발생 | 네트워크 통신 중 소켓 문제를 처리할 때 |
BindException | 소켓이 이미 바인딩 되어 있을 때 발생 | 소켓을 다시 바인딩할 때 발생하는 문제를 처리할 때 |
ConnectException | 연결이 실패할 때 발생 | 네트워크 연결 문제를 처리할 때 |
UnknownHostException | 호스트 이름을 찾을 수 없을 때 발생 | 네트워크에서 호스트를 찾지 못할 때 문제를 처리할 때 |
SocketTimeoutException | 소켓 연결이 타임아웃 시 발생 | 소켓 통신 중 시간이 초과됐을 때 문제를 처리할 때 |
InterruptedIOException | 입출력 작업이 인터럽트되었을 때 발생 | 입출력 작업 중 인터럽트 문제를 처리할 때 |
IllegalMonitorStateException | 스레드가 모니터에 적절하게 접근하지 못할 때 발생 | 스레드 동기화 관련 문제를 처리할 때 |
IllegalAccessException | 클래스나 메서드 접근 권한이 없을 때 발생 | 클래스나 메서드에 대한 접근 권한이 잘못됐을 때 문제를 처리할 때 |
ReflectiveOperationException | 리플렉션 관련 오류 발생 시 | 리플렉션을 사용할 때 발생하는 문제를 처리할 때 |
InvaildClassException | 직렬화에 문제가 있는 클래스일 때 발생 | 직렬화된 클래스의 유효성을 확인할 때 |
StreamCurruptedException | 직렬화된 스트림이 손상되었을 때 발생 | 직렬화된 데이터를 읽을 때 문제를 처리할 때 |
OptionalDataException | ObjectInputStream에서 예상치 못한 기본 데이터를 발견했을 때 발생 | 직렬화된 스트림에서 데이터 형식이 잘못됐을 때 문제를 처리하기 위함 |
InvaildObjectException | 직렬화된 객체가 유효하지 않을 때 발생 | 직렬화된 객체의 무결성을 확인할 때 |
DataFormatException | 잘못된 데이터 형식이 있을 때 발생 | 데이터 형식을 검증할 때 발생하는 문제를 처리하기 위함 |
URISyntaxException | 잘못된 URI 문법을 사용할 때 발생 | URI 형식을 검증할 때 |
SyncFailedException | 파일 또는 디렉토리 동기화에 실패했을 때 발생 | 파일 시스템 동기화 문제를 처리할 때 |
AccessControlException | 보안 권한 부족 시 발생 | 보안 제약 조건을 위반할 때 문제를 처리하기 위함 |
AclNotFoundException | 접근 제어 목록을 찾을 수 없을 때 | 보안 관련 접근 권한 문제를 처리할 때 |
CertificateExceptionm | 인증서 관련 오류 발생 시 | 인증서 검증 문제를 처리할 때 |
KeyStoreException | 키스토어 관련 오류 발생 시 | 키스토어 문제를 처리할 때 |
UnrecoverableKeyException | 복구할 수 없는 키가 있을 때 발생 | 키 복수 실패 시 문제를 처리할 때 |
InvaildKeyException | 키가 유효하지 않을 때 발생 | 암호화 작업에서 키가 유효하지 않을 때 문제를 처리하기 위함 |
NoSuchAlgorithmException | 특정 암호화 알고리즘이 없을 때 발생 | 암호화 알고리즘을 사용할 때 문제를 처리하기 위함 |
SignatureException | 디지털 서명 오류 발생 시 | 디지털 서명 오류 검증 문제를 처리할 때 |
InvalidAlgorithmParameterException | 알고리즘 매개변수가 유효하지 않을 때 발생 | 암호화 알고리즘의 매개변수가 잘못됐을 때 문제를 처리하기 위함 |
GeneralSecurityException | 모든 보안 관련 예외의 일반 상위 클래스 | 보안 문제의 상위 예외로 사용 |
CertPathValidatorException | 인증 경로 검증 실패 시 발생 | 인증서 경로 검증 문제를 처리할 떄 |
CertStoreException | 인증서 저장소 관련 오류 발생 시 | 인증서 저장소 문제를 처리할 때 |
SSLException | SSL 프로토콜 오류 발생 시 | SSL 통신 중 발생하는 문제를 처리할 때 |
스프링 프레임워크 예외 (Spring Framwork Exception)
종류 | 설명 | 사용 목적 |
BeansException | 스프링 빈 관련 예외의 상위 클래스 | 빈 생성 관리 과정에서 발생하는 문제를 처리할 때 |
NoSuchBeanDefinitionException | 해당 빈을 찾을 수 없을 때 발생 | 의존성 주입 시 빈을 찾지 못할 때 문제를 처리할 때 |
BeanCreationException | 빈 생성 실패 시 발생 | 빈을 생성할 때 발생하는 문제를 처리할 때 |
BeanInitializationException | 빈 초기화 실패 시 발생 | 빈을 생성할 때 발생하는 문제를 처리할 때 |
UnsatisfiedDependencyException | 빈 의존성 주입 실패 시 발생 | 빈의 의존성을 주입할 때 발생하는 문제를 처리할 때 |
BeanNotOfRequiredTypeException | 빈이 요구된 타입과 일치하지 않을 때 발생 | 빈 타입이 맞지 않을 때 발생하는 문제를 처리할 때 |
TypeMismatchException | 요청한 빈과 실제 빈 타입이 일치하지 않을 때 발생 | 요청과 실제 빈 타입의 불일치 문제를 처리할 때 |
NoUniqueBeanDefinitionException | 하나의 빈만 기대했지만 여러 빈이 존재할 때 발생 | 중복된 빈 정의 문제를 처리할 때 |
MethodInvocationException | 메서드 호출 중 예외가 발생할 때 | 빈 메서드 호출 시 발생하는 문제를 처리할 때 |
ApplicationContextException | 애플리케이션 컨텍스트 설정 오류 발생 시 | 스프링 애플리케이션 컨텍스트 설정 과정에서 발생하는 문제를 처리할 때 |
ConversionNotSupportedException | 요청된 타입으로 변환할 수 없을 때 발생 | 데이터 변환이 실패할 때 발생하는 문제를 처리하기 위함 |
HttpMessageNotReadableException | HTTP 메시지를 읽을 수 없을 때 발생 | 클라이언트로부터 수신한 HTTP 요청을 처리할 때 발생하는 문제를 처리하기 위함 |
HttpMessageNotWritableException | HTTP 메시지를 쓸 수 없을 때 발생 | 서버에서 클라이언트로 응답을 보낼 대 발생하는 문제를 처리할 때 |
MissingServletRequestParameterException | 요청 파라미터가 없을 때 발생 | 요청에서 필수 파라미터가 빠졌을 때 문제를 처리하기 위함 |
HttpRequestMethodNotSupportedException | 지원하지 않는 HTTP 메서드를 요청했을 때 발생 | 클라이언트가 잘못된 HTTP 메서드를 사용했을 때 문제를 처리하기 위함 |
HttpMediaTypeNotSupportedException | 지원하지 않는 미디어 타입을 요청했을 때 발생 | 클라이언트가 서버에서 지원하지 않는 미디어 타입을 보냈을 대 문제를 처리하기 위함 |
HttpMediaTypeNotAcceptableException | 요청한 미디어 타입을 수용할 수 없을 때 발생 | 클라이언트가 수용할 수 없는 미디어 타입을 요청했을 때 문제를 처리하기 위함 |
MissingPathVariableException | 경로 변수 누락 시 발생 | 요청 경로에서 필요한 변수가 빠졌을 때 문제를 처리하기 위함 |
MissingServletRequestPartException | 요청 파트가 누락되었을 때 발생 | 서블릿 요청에서 일부 데이터가 누락됐을 때 문제를 처리하기 위함 |
ServletRequestBindingException | 서블릿 요청에 바인딩 실패 시 발생 | 서블릿 요청 파라미터를 객체에 바인딩할 때 발생하는 문제를 처리하기 위함 |
ConversionFailedException | 형 변환이 실패했을 때 발생 | 요청 데이터의 형 변환 문제를 처리할 때 |
DataAccessException | 데이터베이스 작업 실패 시 발생하는 일반 예외 | 데이터베이스에 접근하는 과정에서 발생하는 문제를 처리할 때 |
DuplicateKeyException | 데이터베이스에 중복된 키가 있을 때 발생 | 유니크 키 중복 시 발생하는 문제를 처리할 때 |
IncorrectResultSizeDataAccessException | 예상한 결과 크기가 다를 때 발생 | 쿼리 결과가 기대한 크기와 다를 때 문제를 처리하기 위함 |
DataIntegrityViolationException | 데이터 무결성 위반 시 발생 | 데이터 무결성을 위반했을 때 문제를 처리하기 위함 |
DataRetrievalFailureException | 데이터 검색 실패 시 발생 | 데이터베이스에서 데이터를 찾지 못할 때 문제를 처리하기 위함 |
DeadlockLoserDataAccessException | 데이터베이스 교착 상태가 발생할 때 발생 | 데이터베이스 교착 상태로 인해 문제가 발생해 처리하기 위함 |
EmptyResultDataAccessException | 쿼리 결과가 없을 때 발생 | 데[이터베이스에서 결과를 얻지 못했을 때 문제를 처리하기 위함 |
OptimisticLockingFailureException | 낙관적 락 실패 시 발생 | 동시성 제어 과정에서 낙관적 락을 사용할 때 발생하는 문제를 처리할 때 |
QueryTimeoutException | 쿼리 실행 시간이 초과되었을 때 발생 | 데이터베이스 쿼리 시간이 초과됐을 때 문제를 처리할 때 |
TransactionTimedOutException | 트랜잭션 시간이 초과되었을 때 발생 | 트랜잭션이 기한 내에 완료되지 않았을 때 문제를 처리하기 위함 |
TransactionSystemException | 트랜잭션 처리 중 시스템 오류가 발생할 때 던져지는 예외 | 트랜잭션 관련 시스템적 문제를 처리할 때 |
TransactionRequiredException | 트랜잭션이 필요하지만 조재하지 않을 때 발생 | 트랜잭션이 필요한 작업에서 트랜잭션이 없을 때 문제를 처리하기 위함 |
InvalidDataAccessApiUsageException | 데이터베이스 API 사용이 잘못되었을 때 발생 | 잘못된 API 호출로 발생하는 문제를 처리할 때 |
UncategorizedDataAccessException | 특정 범주에 속하지 않는 데이터 엑세스 오류 발생 시 | 데이터베이스 작업 중 분류되지 않은 문제를 처리할 때 |
JdbcUpdateAffectedIncorrectNumberOfRowsException | 업데이트된 행 수가 예상과 다를 때 발생 | 업데이트 작업이 예상한 행 수와 다를 때 문제를 처리하기 위함 |
CannotAcquireLockException | 데이터베이스 잠금을 획들할 수 없을 때 발생 | 데이터베이스 잠금을 얻지 못했을 때 문제를 처리하기 위함 |
ConcurrencyFailureException | 동시성 제어 실패 시 발생 | 동시성 문제를 처리할 때 |
HibernateOptimisticLockingFailureException | Hibernate의 낙관적 락 실패 시 발생 | Hibernate에서 동시성 제어 문제를 처리할 때 |
JpaObjectRetrievalFailureException | JPA 객체 검색 실패 시 발생 | JPA에서 객체를 검색할 때 문제를 처리할 때 |
EntityNotFoundException | JPA 엔티티를 찾을 수 없을 때 발생 | JPA 엔티티 검색 문제를 처리할 때 |
LazyInitializationException | Hibernate의 지연 로딩 초기화 실패 시 발생 | Hibernate의 지연 로딩 문제를 처리할 때 |
StaleObjectStateException | Hibernate에서 스테일 객체 상태가 있을 때 발생 | Hibernate에서 스테일 상태 문제를 처리할 때 |
InvalidDataAccessResourceUsageException | 데이터 자원 사용이 잘못되었을 때 발생 | 데이터 자우너 사용 문제를 처리할 때 |
DataSourceLookupFailureException | 데이터 소스 조회 실패 시 발생 | 데이터 소스를 찾지 못할 때 문제를 처리할 때 |
NonTransientDataAccessException | 일시적이지 않은 데이터 접근 실패 시 발생 | 데이터 접근 실패 문제를 처리할 때 |
TransientDataAccessException | 일시적인 데이터 접근 실패 시 발생 | 일시적인 데이터 접근 문제를 처리할 때 |
CannotCreateTransactionException | 트랜잭션 생성 실패 시 발생 | 트랜잭션 생성 과정에서 문제가 발생할 때 처리하기 위함 |
InvalidIsolationLevelException | 트랜잭션 격리 수준이 유효하지 않을 때 발생 | 잘못된 트랜잭션 격리 수준을 처리할 때 |
'정보' 카테고리의 다른 글
SQL 기초부터 가보자 (1) | 2024.10.04 |
---|---|
Kafka란 뭘까? (0) | 2024.09.29 |
MySQL? PostgerSQL 뭐가 다른거지? (2) | 2024.09.27 |
VO, BO, DAO, DTO (0) | 2024.09.12 |
시간복잡도 / 공간복잡도,, 복잡하다,, (4) | 2024.09.02 |