All

    예외(Exception) 처리

    적절한 예외 핸들링은 애플리케이션에 필수적이지만 생각보다 중요성을 간과할 수 있는 부분이라 생각합니다.이 글에서는 예외를 다룰 때마다 고민했던 포인트들과 예외를 처리하고 생성하는 Best Practice에 대해 정리합니다.1) 예외 처리 (Handling Exceptions) 할 때메서드가 에러로 인해 완료되지 않았을 때 상태를 복구한다.메서드에서 예외가 발생했을 때, 호출자는 부작용이 없다고 가정할 수 있어야 합니다. 계좌 이체 코드 (한 계좌에서 출금하고 다른 계좌에 입금하는 코드)를 예로 들면,출금 로직은 정상적으로 성공했는데 입금 로직에서 예외가 발생하면, 출금이 그대로 완료되지 않도록 해야 합니다. 이를 위해 처리할 수 있는 방안은, 입금 거래 과정 중 한 곳이라도 예외가 발생하면 그전에 정상적..

    [SQL, 프로그래머스] 상품 별 오프라인 매출 구하기

    [SQL, 프로그래머스] 상품 별 오프라인 매출 구하기

    프로그래머스에 여러 문법들을 활용해서 SQL 쿼리문을 짜볼 수 있도록 다양한 문제들을 레벨 별로 제공하고 있습니다.Lv2 '상품 별 오프라인 매출 구하기' 문제를 풀어보았습니다.프로그래머스 문제 링크 참고 바라며, 문제는 간략히 설명합니다. 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 사용할 테이블 정보어느 의류 쇼핑몰에서 판매중인 상품들의 상품 정보를 담은 PRODUCT 테이블과오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블이 있으며,두 테이블 모두 product_id 칼럼을 가지고 있습니다.생각의 과정product 테이블과 offline_..

    [SQL, 프로그래머스] 조건에 맞는 도서와 저자 리스트 출력하기

    [SQL, 프로그래머스] 조건에 맞는 도서와 저자 리스트 출력하기

    프로그래머스에 여러 문법들을 활용해서 SQL 쿼리문을 짜볼 수 있도록 다양한 문제들을 레벨 별로 제공하고 있습니다.Lv2인'조건에 맞는 도서와 저자 리스트 출력하기' 문제를 풀어보았습니다.프로그래머스 문제 링크 참고 바라며, 문제는 간략히 설명합니다. 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 사용할 테이블 정보어느 한 서점에서 판매중인 도서 정보를 담고 있는 book 테이블과 저자 정보를 담고 있는 author 테이블이 있으며,두 테이블 모두 author_id 값을 갖고 있습니다.고민 과정book 테이블에 있는 정보와 author 테이블에 있는 정보를 ..

    [Spring Security] permitAll() 적용되지 않는 이슈 해결

    [Spring Security] permitAll() 적용되지 않는 이슈 해결

    서론다운로드 도메인의 애플리케이션에는 권한 있는 사용자만 접근 가능한 API 1개로만 존재했습니다.최근, 권한 체크 없이 접근 가능한 API를 한개 더 추가해야하면서 Spring Security의 설정을 수정해야 했습니다.구체적인 기능에 대한 설명1) 권한이 있는 사용자에 한해 다운로드할 수 있도록 하기 위해 애플리케이션 내 API에서 요청을 처리하도록 하였고,2) 권한 체크가 필요 없는, 누구나 다운로드할 수 있는 파일들의 경우 Nginx에서 파일들을 나르도록 처리하고 있습니다.(해당 서버는 NAS 서버와 마운트 되어있었기 때문에 파일을 매핑하여 전달하는 것이 가능했습니다.)기존에는 VM 환경에서 구동 중이었으나 컨테이너 환경으로 전환해야하면서 Nginx가 수행하던 역할을 애플리케이션 내에서 처리하기로..

    Test Double

    Test Double

    Stunt Double배우와 유사한 모습과 행위를 할 수 있어, 영화에서 위험하고 역동적인 액션을 대신 수행하는 사람. Stunt Man/Woman이라고도 함. Stund Double의 의미에서 파생된 Test Double.Test Double 의 5가지 종류Dummy아무것도 하지 않는 깡통 객체.실제 객체를 모방하기만 하여 동작이나 행위에 대해 정의되어 있지 않음.Fake동일한 기능을 수행하지만 단순한 형태로 구현되어 프로덕션에서 쓰기에는 기능이 부족한 객체.Ex) FakeRepsotiroy : 실제 프로덕션에서는 DB에 직접 액세스하여 저장/조회하지만 Fake Repository에서는 memory Map 을 선언하여 해당 객체에 저장/조회하는 방식으로 구현한다.Stub테스트 실행 시 원하는 결과를 제..

    [친절한 SQL 튜닝] 라이브러리 캐시 / 하드 파싱 / 바인드 변수와 SQL 공유

    [친절한 SQL 튜닝] 라이브러리 캐시 / 하드 파싱 / 바인드 변수와 SQL 공유

    라이브러리 캐시와 하드 파싱내부 프로시저를 반복 재사용할 수 있도록 캐싱해두는 메모리 공간이 있다. 라이브러리 캐시(Library Cache)이다.이 공간에 프로시저가 저장되면 SQL 최적화와 로우 소스 생성과 같은 SQL 최적화 과정을 매번 진행할 필요 없이SQL을 재사용할 수 있다.사용자가 SQL문을 전달하면 DBMS는 SQL을 파싱한 후에 이 SQL이 라이브러리 캐시에 존재하는지 먼저 확인하는데,존재하면 곧바로 '실행' 단계로 넘어간다.-> 소프트 파싱그런데 SQL이 라이브러리 캐시에 존재하지 않으면 SQL최적화와 로우 소스 생성 단계까지 모두 거친 후에 '실행' 단계를 수행한다.-> 하드 파싱 위 과정에 '하드 파싱'이라는 단어가 붙은 이유는 SQL 최적화 과정을 수행하는 것이 말 그대로 쉬운 과..