Database(20)
-
프로그래머스: GROUP BY - 입양 시각 구하기(2)
문제 설명 ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE NAME VARCHAR(N) TRUE SEX_UPON_OUTCOME VARCHAR(N) FALSE 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생..
2022.10.29 -
프로그래머스: 이름에 el이 들어가는 동물 찾기
문제 설명 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE INTAKE_CONDITION VARCHAR(N) FALSE NAME VARCHAR(N) TRUE SEX_UPON_INTAKE VARCHAR(N) FALSE 보호소에 돌아가신 할머..
2022.10.29 -
[DB 접근 기술] 스프링과 문제 해결 - 예외 처리, 반복
체크 예외와 인터페이스 서비스 계층은 가급적이면 순수한 비즈니스 코드만 남겨놓는 것이 바람직하다. 하지만 DB 접근 기술이(예를 들면 JDBC의 SQLException) 리포지토리, 서비스, 컨트롤러에서 처리할 수 없는 체크예외를 던지는 경우라면 서비스, 컨트롤러는 해당 DB 접근 기술에 종속된다. 체크 예외는 메소드 선언에 throw가 필수로 선언되어야 하기 때문이다. 따라서 DB 접근 기술이 JPA로 변경되는 경우 throws SQLException을 다른 exception으로 변경해야 하는 수고가 있다. 우선 인터페이스를 도입해서 DB 접근 기술의 변경이 용이하도록 해보자. MemberRepository를 인터페이스로 지정하면, 서비스 계층은 MemberRepository 인터페이스에만 의존하면 된..
2022.07.05 -
[DB 접근 기술] 자바 예외 이해
스프링이 제공하는 예외 추상화를 알아보기 전에 자바의 기본 예외에 대해 간단히 설명한다. 예외 중 RuntimeException과 그 자손들을 언체크 예외(런타임 예외), 나머지 Exception의 자손들을 체크 예외라고 한다. 체크 예외는 컴파일러가 체크하는 예외이며, 언체크 예외는 컴파일러가 체크하지 않는 예외이다. 예외에 대해서는 2가지 기본 규칙이 존재한다. 1. 예외는 잡아서 처리하거나 던져야 한다. 2. 예외를 잡거나 던질때 지정한 예외뿐만 아니라 그 예외의 자손들도 함께 처리된다. - 예를 들어 Exception을 catch로 잡으면 그 하위 예외들도 모두 잡을 수 있다. 예외를 처리하지 못하고 계속 던지면, 자바의 main() 쓰레드는 예외 로그를 출력하면서 시스템이 종료된다. WAS는 해..
2022.05.29 -
[DB 접근 기술] 트랜잭션 (2)
트랜잭션 문제 해결 - 트랜잭션 템플릿 앞서 트랜잭션 매니저를 통해 트랜잭션 추상화, 리소스 동기화를 얻는데에는 성공했다. 그 덕에 서비스 코드는 이제 JDBC 기술에 의존하지 않으며 트랜잭션 동기화 매니저 덕분에 커넥션을 파라미터로 넘기지 않아도 된다. 하지만 트랜잭션을 사용하는 로직을 살펴보면 다음과 같은 패턴이 반복되는 것을 확인할 수 있다. 트랜잭션 사용 코드 //트랜잭션 시작 TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { //비즈니스 로직 bizLogic(fromId, toId, money); transactionManager.commit(status); /..
2022.05.28 -
[DB 접근 기술] 트랜잭션 (1)
애플리케이션 구조 여러가지 애플리케이션 구조가 있지만, 가장 단순하면서 많이 사용하는 방법은 역할에 따라 3가지 계층으로 나누는 것이다. 이 3개의 계층 중 핵심 비즈니스 로직이 들어있는 서비스 계층이 가장 중요하다고 가히 말 할 수 있다. 시간이 흘러서 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술을 다른 기술로 변경될 순 있어도, 비즈니스 로직은 최대한 변경없이 유지되어야 한다. 이렇게 하려면 서비스 계층을 특정 기술에 종속적이지 않게 개발해야 한다. --> 사실 계층을 나눈 이유도 서비스 계층을 순수하게 유지하기 위한 목적이 크다. 기술에 종속적인 부분은 프레젠테이션 계층, 데이터 접근 계층에서 가지고 간다. --> 예를 들어서 HTTP API 를 사용하다가 GRPC 같은 기술로 변경해도 프..
2022.05.28