삽질 주도 개발
article thumbnail
CheckedException, UncheckedException
Language(JVM) 2023. 2. 8. 02:30

오늘은 자바의 예외에 대해서 다뤄보려고 한다. 오라클에서는 예외를 다음과 같이 정의하고 있다. 예외는 프로그램 실행 중에 발생하여 프로그램 명령의 정상적인 흐름을 방해하는 이벤트입니다. 자바에서 예외는 Throwable을 상속한 모든 하위 객체들로 구성할 수 있다. 그리고 Throwable을 상속받은 Exception 객체와 Error 객체로 나눌 수 있다. 또 Exception 객체를 상속받은 RuntimeException(UncheckedException)과 그 외의 Exception(CheckedException) 객체들로 나눌 수 있다. 위의 구성을 각 섹션으로 나누어 알아보자. Error와 Excpetion Java에서는 예외와 오류는 모두 "Throwable" 클래스의 서브 클래스이며 프로그램..

article thumbnail
@MappedSuperclass
🧑🏻‍💻Dev 2023. 2. 7. 01:00

@MappedSuperclass는 자식 클래스의 공통 매핑 컬럼 정보를 제공하는 어노테이션이다. 예를 들어 여러 테이블에서 생성 일시와 수정 일시 컬럼을 사용하려고 할 때, 생성되는 클래스에 동일한 날짜 필드를 매번 추가해줘야 한다. 이러한 중복을 공통화하기 위해 @MappedSuperclass를 사용한다. 해당 어노테이션이 붙은 클래스를 상속받아서 컬럼을 사용할 수 있다. @MappedSuperclass abstract class BaseEntity { @Column(name = "created_at") private LocalDateTime createdAt; @Column(name = "modified_at") private LocalDadteTime modifiedAt; protected Base..

article thumbnail
Spring security Architecture 이해하기
Spring 2023. 1. 30. 01:12

공식 문서에서 설명하는 스프링 시큐리티 아키텍처를 보며 정리하는 글입니다. 스프링 시큐리티는 스프링 애플리케이션의 인증/인가 및 보안적 요소들을 손쉽게 관리할 수 있도록 해 주는 스프링 프로젝트 중 하나이다. 단일 요청의 서블릿 컨테이너 형식적 계층 클라이언트가 애플리케이션으로 요청을 보내면, 서블릿 컨테이너는 FilterChain을 생성하게 된다. FilterChain은 Filter 인스턴스들과 request URI 경로를 기반으로 한 HttpServletRequest를 처리하기 위한 Servlet을 포함한다. Spring application의 Servlet은 DispatcherServlet이 실구현체가 된다. 코드를 통해 확인해보자. 위에서 FilterChain에서는 filters과 servlet을..

article thumbnail
ObjectMapper 기본 생성자 없이 역직렬화하기
🧑🏻‍💻Dev 2023. 1. 23. 02:07

Spring boot에서 통합 테스트를 진행하다가 아래 코드에서 에러가 발생했다. Error while extracting response for type [class com.tistory.rjvv.learntest.exception.format.ErrorResponse] and content type [application/json] org.springframework.web.client.RestClientException: Error while extracting response for type [class com.tistory.rjvv.learntest.exception.format.ErrorResponse] and content type [application/json] 내가 만든 ErrorRes..

article thumbnail
Spring 프로필 환경별 빈 주입하기
Spring 2023. 1. 20. 02:02

오늘은 @Profile을 활용해서 환경별로 빈 주입을 다르게 하는 방법을 알아보도록 한다. 사내 서비스가 사외 서비스로 one-code로 오픈이 되는 경우가 있다. 그렇게 되면 상황별로 처리해야 하는 로직이 틀려질 수 있다. 이때 분기문으로 매번 처리를 하게 되면 코드가 지저분해질 뿐더러 테스트가 어려워지는 코드가 된다. 즉, 환경별로 담당하는 서로 다른 객체에 역할을 분리해주는 것이 더 나은 방법이다. 이때 다형성과 @Profile을 활용하면 보다 나은 방법으로 환경별 로직을 처리할 수 있다. 먼저 @Profile을 사용하지 않는 상황을 생각해보자. profile은 internal과 external이 있다고 가정한다. signIn()은 환경별로 로직이 달라지고, sendOtp()는 공통 로직으로 처리된..

article thumbnail
[리눅스 명령어] grep
🧑🏻‍💻Dev 2023. 1. 19. 22:31

grep의 종류 grep의 종류는 egrep, fgrep, grep 세 가지가 있습니다. egrep은 정규표현식을 활용해서 문자열들을 찾는 명령어입니다. fgrep은 문자열 그대로를 활용해서 문자열들을 찾는 명령어입니다. grep은 -E, -F 옵션으로 egrep과 fgrep을 대체할 수 있는 명령어입니다. grep 옵션들 옵션이 너무 많기 때문에 주로 사용되는 옵션을 추려서 작성했습니다. -A [n] : 일치하는 문자의 후행 컨텍스트를 n줄 출력합니다. -B [n] : 일치하는 문자의 전행 컨텍스트를 n줄 출력합니다. -C [n] : 일치하는 문자의 전후행 컨텍스트를 n줄 출력합니다. "-A n -B n"과 같습니다. -c : 일치하는 문자의 개수를 출력합니다. -E : 확장된 정규표현식을 사용할 수 ..

article thumbnail
[리눅스 명령어] 파일 찾기
🧑🏻‍💻Dev 2023. 1. 18. 20:33

파일 찾기 which description which는 명령어 이름 목록을 확인하고 경로를 출력해 줍니다. (환경 변수 Path에 등록된 실행 가능한 모든 명령어 파일들) synopsis which [-as] program ... option -a : 기본적으로 파일을 하나만 리턴하지만, 해당 옵션으로 모든 파일의 경로를 반환합니다. (all) -s : 명령어 파일을 찾으면 0, 찾지 못하면 1을 반환합니다. (s..?) whereis descripton whereis는 표준 바이너리와 매뉴얼 페이지 디렉터리를 확인하고 찾은 모든 경로를 출력합니다. 표준 바이너리는 환경 변수 PATH에 등록된 실행 가능한 모든 파일들을 기준으로 검색 메뉴얼 페이지는 $MANPATH에 등록된 모든 파일들을 기준으로 검색 ..

article thumbnail
AMI 만들기
Infra 2023. 1. 17. 23:59

AMI란 Amazon Machine Image의 약자로, 해당 컴퓨터가 가지고 있는 설정, 정보, 프로그램 등등을 그대로 스냅샷을 떠놓고, 이를 활용할 수 있게 만드는 것이다. 내가 실수로 인스턴스 키 페어를 만들자마자 삭제해서 서버 접속을 할 수 없다. 이때 AMI로 내 기존 ec2 인스턴스 정보들을 스냅샷을 떠놓고, 키페어(특정 서버와의 고유한 관계이므로)를 다시 설정하는 과정을 거치려고 한다. 위와 같이 진행하면 EC2 인스턴스 생성과 같은 페이지로 가지만, 이미지로 설정했던 EC2 스냅샷을 불러와 기존 설정을 불러올 수 있다.

article thumbnail
AWS RDB 연결하기
Infra 2023. 1. 14. 03:08

저는 프리티어로 선택했습니다. 자동 스토리지 조정은 프리 티어에서 비활성화하는 것이 정신 건강에 이로울 것 같습니다. 위를 과정을 진행하고 DB를 생성하면, DBSecurityGroup을 추가해서 EC2 VPC 보안 그룹으로 부터 오는 트래픽을 허용시켜줘야 한다.

article thumbnail
상속관계 매핑
🧑🏻‍💻Dev 2022. 12. 6. 02:08

오늘의 목표는 상속관계 매핑이 무엇이고, 어떤 테이블 전략이 있는지에 대해 이해하는 것을 목표로 한다. 상속 관계 매핑 관계형 데이터베이스에는 상속 관계라는 것이 없고, 슈퍼 타입과 서브 타입이라는 논리적 개념을 가지고 있다. 이러한 개념을 객체 지향 프로그래밍의 상속 관계에 매핑하는 것을 상속 관계 매핑이라고 한다. 슈퍼 타입과 서브 타입을 실제 물리적 모델로 구현하는 방법은 다음과 같다. 조인 전략 - 자식 테이블이 부모 테이블의 기본키를 받아서 pk+fk로 사용하는 전략 단일 테이블 전략 - 테이블 하나에 모든 데이터를 담는 전략 구현 클래스 별 테이블 전략 - 부모 테이블의 컬럼 모두 자식 테이블에 담아 각각의 테이블로 사용하는 전략 각각의 전략에 따라 어떻게 JPA를 활용할 수 있는지에 대해서 ..