전체 글

Java

Java Interface

인터페이스 인터페이스의 모든 메서드는 public abstract 메서드이다. (public abstract는 생략 가능) 인터페이스의 모든 멤버 변수는 public static abstract 멤버 변수이다. (public static abstract는 생략 가능) 생략한 제한자는 컴파일러가 자동으로 추가함 default method JDK 1.8부터 인터페이스에 구현부가 있는 default method 또는 static method를 넣어 줄 수 있다. 왜 default method가 추가되었을까? 기존의 인터페이스에 기능의 확장을 위해 메서드를 추가할 때가 있다. 이때 abstract 메서드로 추가한다면 해당 인터페이스를 구현한 모든 구현체에서 추가한 abstract 메서드를 반드시 구현해야 된다는..

Java

java Enum

enum (열거형) 열거형이란 상수를 정의한 타입이다. 예를 들어 계절이라는 열거형 타입은 SPRING, SUMMER, FALL, WINTER라는 4개의 상수와 그 상수에 해당하는 값을 정의한다. 계절 외에도 성별, 트럼프 카드, 결제 수단 등 제한된 범위의 상수를 표현할 데이터 타입을 찾고 있다면 enum을 사용하도록 하자. 열거형의 장점으로 다음 2가지가 있다. 상수의 의미가 바로 와닿는다. 코드 상의 Gender.MALE, Gender.FEMALE이라는 상수는 각각 성별의 남자와 여자를 나타낸다는 것을 쉽게 알 수 있다. 상수 값을 쉽게 바꿀 수 있다. 열거형의 정의만 바꿔주면 되어 코드는 변하지 않는다. enum 정의와 사용 아래는 열거형을 정의하는 기본 코드다. enum Direction { E..

Java/Basic

자바 예외 처리

자바의 에러 프로그램 실행 중 어떤 원인으로 프로그램이 오작동하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 에러 또는 오류라고 한다. 에러의 종류는 두 가지로 나눌 수 있다. 컴파일 에러 : 컴파일 시 발생하는 에러. (잘못된 구문, 오타, 자료형 문제 등) 런타임 에러 : 실행 시 발생할 수 있는 에러. 예외 계층 자바의 런타임 에러. 즉 예외의 계층은 아래와 같다. Object : 모든 객체의 부모는 Object이다. 예외도 객체이므로 Object를 상속한다. Throwable : 최상위 예외이다. Error, Exception : 자바는 예외를 크게 Error와 Exception 객체로 구분한다. Error 타입 예외가 발생하면 매우 심각한 오류이므로 프로그램의 비정상 종..

Spring/Spring DB

스프링 트랜잭션

트랜잭션 도입 시 문제점 애플리케이션 구조에는 여러 가지가 있지만 가장 단순하고 많이 사용되는 방법은 아래와 같이 3개의 계층으로 나누는 것이다. 프레젠테이션 계층 : UI 관련 처리 담당, UI 관련 기술에 종속적 서비스 계층 : 비즈니스 로직 담당, 특정 기술에 종속적이지 않고 가급적 자바 순수 코드로 작성 데이터 접근 계층 : DB 접근 담당, DB 기술에 종속적 이렇게 3개의 계층으로 나누는 이유는 애플리케이션에서 가장 중요한, 핵심 비즈니스 로직을 담고 있는 서비스 계층이 특정 기술에 종속되지 않도록, 순수 자바 코드로 구성된 비즈니스 로직만 들어가도록 하기 위함이다. 이럼으로써 시간이 지나 기술이 변해도 서비스 계층은 변경 없이 유지될 수 있으며 순수 비즈니스 로직만 있기에 유지보수도 쉬워지고..

Computer Science/OS

[OS - 7] 프로세스 동기화

프로세스 동기화 프로세스(또는 스레드)는 동시에 그리고 병렬로 실행된다. CPU 코어는 각 프로세스를 빠르게 전환해 실행함으로써 프로세스는 동시에 실행된다. 또한 각 CPU 코어는 하나의 프로세스를 실행함으로써 프로세스는 병렬로 실행된다. 이 같은 동작 방식은 CPU 사용률을 높이지만 한 가지 문제가 있다. 두 개 이상의 프로세스가 공유 데이터에 동시 접근할경우 데이터의 일관성이 깨질 수 있다. 이와 같은 상황은 매우 빈번하게 발생한다. 아래는 예시 상황이다. 두 개 이상의 스레드가 힙 영역, 데이터 영역의 데이터에 동시 접근 두 개 이상의 프로세스가 파일, 메모리, 소켓, 외부 장치 등 컴퓨터 자원 또는 OS의 자원에 동시 접근 두 개 이상의 커널 모드 프로세스가 커널 자료구조(열린 파일 목록 리스트,..

Spring/Spring DB

트랜잭션

트랜잭션 트랜잭션은 DB가 수행하는 작업의 최소 단위이다. 즉 DB는 트랜잭션 단위로 작업을 수행한다. 트랜잭션에 대한 자세한 내용은 아래 글을 참고하자. https://gunjoon.tistory.com/96 [데이터베이스 - 7] 트랜잭션 회복과 동시성 제어 DBMS는 데이터베이스가 항상 정확하고 일관된 상태를 유지할 수 있도록 장애 발생 시 회복 기능과 동시성 제어 기능을 제공한다. 장애 발생 시 회복 기능을 통해, 여러 사용자 gunjoon.tistory.com DB 세션 클라이언트가 DB 서버와 커넥션을 맺게 되면 DB 서버는 세션을 만들고 커넥션을 통한 모든 요청은 생성된 세션을 통해 실행한다. 세션은 트랜잭션을 시작하고, 커밋 또는 롤백을 통해 트랜잭션을 종료한다. 그 후 새로운 트랜잭션을 ..

Spring/Spring DB

커넥션 풀

커넥션 풀의 필요성 JDBC로 DB에 접근하려면 먼저 커넥션(JDBC의 커넥션)을 획득해야한다. 커넥션을 새로 생성하는 과정은 아래와 같이 여러 작업이 수행되기에 많은 시간이 소모된다. DB에 접근할때마다 커넥션을 새로 생성한다면 아래의 두 가지 문제에 직면한다. 커넥션 생성에 시간이 소모되기에 요청에 대한 서버 응답 속도가 느려진다. 커넥션은 서버의 자원이다. 커넥션을 무한정 생성하면 서버의 자원이 고갈될 수 있다. 따라서 커넥션의 생성 개수를 제한해야 한다. 커넥션 풀을 사용한다면 위 두 가지 문제를 해결할 수 있다. 커넥션 풀 풀은 리소스를 보관하고 관리하는 공간이다. 풀에는 미리 생성된 리소스가 보관되어 있다. 애플리케이션은 풀에서 리소스를 가져와 사용하고 사용이 끝나면 풀에 반납한다. 즉 리소스..

Spring/Spring DB

JDBC

JDBC 애플리케이션에서 DB에 접근하기 위해 아래의 과정을 거친다. 첫 번째로 TCP/IP로 연결을 확립하고 두 번째로 DB 서버에 SQL을 전달한다. 마지막으로 DB 서버는 SQL 수행 결과를 응답한다. 이 과정을 위해 DB 사에서 전용 라이브러리를 제공하며 프로그래머는 해당 라이브러리로 위 과정을 구현한다. 하지만 DB의 종류는 무수히 많으며 DB에 따라 DB 접근 코드도 달라진다. DB 접근 코드를 바꾸지 않고도 DB를 바꿀 수 있는 방법이 없을까? 이를 위해 DB 접근 과정을 표준화한 JDBC가 등장했다. JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. 즉 DB 접근 과정을 표준화한 인터페이스이다. 자바 개발자는 JDB..

gunjoon98
하루한방울