전체 글

전체 글

    도커 정리 (이론편) 🐳

    도커란 무엇인가 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 다양한 이유로 계속 바뀌는 서버 환경과 개발 환경 문제를 해결하기 위해 등장했다. AWS, Azure, Google cloud 등 어떤 환경에서도 돌아간다. 컨테이너 관리 도구 중 가장 유명한 것 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있다. 컨테이너의 장점 하드웨어를 가상화하는 가상 머신과 달리 커널을 공유하는 방식이기 때문에 실행 속도가 빠르고, 성능 상의 손실이 거의 없음 하나의 운영체제 안에서 커널을 공유하며, CPU, 네트워크, 메모리와 같은 시스템 자원을 독자적으로 사용하도록 할당된 환경을 제공하는 격리된 공간 호스트 머신에게는 프로세스로 인식되지만, 컨테이너 관점에서는 독립적..

    고급 매핑(상속, Mapped Superclass)

    고급 매핑 목차 상속 관계 매핑 @MappedSuperClass 상속 관계 매핑 관계형 데이터베이스에 상속 관계를 표현하는 방법은 없으나 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사합니다. 각각 테이블로 변환 → 조인 전략 하위 테이블들이 상위 테이블의 키를 가짐으로 조인해서 하위 테이블의 값을 가져옴 통합 테이블로 변환 → 단일 테이블 전략 자식 클래스의 자료를 모두 하나의 테이블에서 갖도록 하고 어떤 타입인지 구분 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 공통되는 부분을 모두 각각 갖도록 함 상속 관계 매핑 시 사용하는 주요 어노테이션 @Inheritance(strategy = InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일..

    @ControllerAdvice를 이용한 예외처리

    RestController의 응답 @RestController 로 선언하여 API를 개발할 때, 컨트롤러는 Response(응답)을 반환하게 되는데, Response에 포함되는 것들 Status, Message, Headers, Content type, body 등이 있다. Service 로직을 구현하고 컨트롤러가 서비스를 호출할 때, 예외를 발생시켜 오류 결과 또는 정상적으로 처리 됐을 때 처리 결과를 body에 담아 전송할 수 있다. @ControllerAdvice란? 컨트롤러 마다 예외를 처리한다면, 다른 컨트롤러에서 같은 예외가 발생했을 때 똑같은 처리 방법을 위해 중복 코드를 작성하게 될 수 있다. 이때 Contoller에서 일어나는 Exception들을 관리하고, 공통적으로 처리 방법을 선언하..

    @Vaild를 이용한 Validation 검증

    @Valid 어노테이션이란? Validation이란 어떤 데이터가 조건에 충족하는 지 확인하는 작업을 말합니다. 유효성 검사는 Front-end와 Back-end 양쪽에서 하는 것이 좋습니다. @Valid 어노테이션은 값에 제약조건을 설정하고, 이에 맞지 않은 데이터가 들어왔을 때 예외를 발생하는 어노테이션으로, DTO에 적용하면 쉽게 Validation을 진행할 수 있습니다. 실행 환경 의존성 implementation 'org.springframework.boot:spring-boot-starter-validation' 패키지 import javax.validation.constraints.*; @Valid 적용 방법 @RequestMapping(value = "/api/sample") @RestCo..

    @Secured, @PreAuthorized를 이용한 메소드 수준의 권한 적용

    Spring Security의 메소드 수준의 API 권한 관리 API 경로에 권한을 적용하여 관리하다 보면, 같은 기능을 여러 권한에서 사용할 수 있게 중복으로 코드를 작성하는 문제가 발생합니다. 예를 들면 사용자가 주문정보를 조회하는 것과 어드민이 한 사용자의 게임을 조회하는 것 등이 있습니다. API 경로에 대해 권한을 관리하는 것이 아닌 메소드 수준에서 권한을 설정하는 방법을 알아봅니다. @Secured와 @PreAuthorize 어노테이션 두 어노테이션 모두 Spring Security의 어노테이션으로, 메소드 수준의 보안을 제공하는 데 사용됩니다. 동일한 기능을 제공하지만 약간의 차이가 있습니다. @PreAuthroize는 Spring EL(표현식)을 사용할 수 있고, AND나 OR 같은 표현식..

    Role Enum 클래스를 이용한 인가

    Role Enum이란 @Getter @RequiredArgsConstructor public enum Role { TYPE1("USER1"), TYPE2("USER2"), TYPE3("ADMIN") } Role이란 시스템을 사용하는 사용자의 역할을 말한다. 그 자체만으로 권한으로 사용할 수 있고 Depth를 한단계 더 두면 각 역할의 권한을 따로 설정할 수도 있다. (Ex : USER1, USER2는 읽기 권한, ADMIN은 읽기/쓰기 권한) Role Enum의 목적 시스템 사용자의 각각 역할에 대해서 어떤 권한을 사용할 지 관리하는 것을 용이하게 함 Spring Security에서 Role을 통해 인증하는 과정 @Override protected void configure(HttpSecurity htt..

    Spring Security란?

    Spring Security란? Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 Spring 하위 프레임워크 개발자가 보안 관련 로직을 작성하는 것을 대폭 줄여주는 장점을 갖고 있다. Spring Security 구성요소 1. HTTP 요청 수신, Authentication Filter 통과 Spring Security는 여러개의 연결된 필터(필터체인)를 갖고 있는데, Request는 인증, 인가를 허락받기 위해 이 필터체인을 통과하게 되고, 해당 요청과 관련된 인증 필터를 찾을 때까지 통과한다. ex) HTTP Basic 인증 요청은 BasicAuthenticationFilter에 도달할 때까지 필터 체인을 통과한다. ex) HTTP Digest 인증 요청은 DigestAut..

    JWT란?

    JWT(JSON Web Token)란? JWT란 JSON 포맷을 이용해 사용자에 대한 속성을 저장하는 Claim 기반의 웹 토큰이다. 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다. JWT의 구조 JWT는 헤더, 내용, 서명 순서대로 세 파트로 구성된다. 1. 헤더(Header) 헤더는 토큰의 타입, 해싱 알고리즘으로 구성된다. 토큰의 타입 : JWT 해싱 알고리즘 : HMAC SHA256 혹은 RSA (토큰을 검증할 때 Signature 부분에서 사용된다.) { "typ": "JWT", "alg": "HS256" } 2. 내용(Payload) 토큰에 사용자가 담고자 하는 정보를 담는 곳 토큰에서 사용할 정보의 조각들인 Claim이 담긴다. 토큰에는 여러 개의 ..

    인증 방식 비교(서버 기반 인증, 토큰 기반 인증)

    서버 기반 인증(Session, Cookie) 서버 측에서 사용자들의 정보를 기억하기 위해 세션을 유지해야 하고, 세션을 메모리, 디스크, 데이터베이스 등을 통해 관리한다. 클라이언트로부터 요청을 받으면 클라이언트의 상태 정보를 저장하여 유지해야 하므로 Stateful한 구조를 가진다. [ 인증 방식 ] 사용자가 로그인 시 올바른 사용자임을 확인하고, 고유한 세션 ID 값을 부여해 세션 저장소에 저장하고 클라이언트에게 발급해준다. 클라이언트는 서버에서 해당 세션 ID를 받아 쿠키에 저장하고, 인증이 필요한 요청을 할 때 마다 쿠키를 HTTP 헤더에 담아 전송한다. 서버에서는 세션 ID를 받아 세션 저장소와 비교해 올바른 요청인지 확인한다. 인증이 완료되고 서버는 요청에 응답한다. [ 장점 ] 중요한 정보..

    Filter, Interceptor, AOP (필터, 인터셉터, AOP)

    Filter, Interceptor, AOP Filter, Interceptor, AOP 모두 무슨 행동을 하기전에 먼저 실행하거나, 실행한 후에 추가적인 행동을 할 때 사용된다. 요청의 흐름에 따라 필터, 인터셉터, AOP의 차이점에 대해 알아봅니다. 전체 흐름, 차이점 요청이 들어왔을 때 진행되는 순서는 Filter → Interceptor → AOP → Interceptor → Filter의 순으로 거치게 됩니다. Filter의 역할 Filter는 J2EE표준 스펙 기능으로, Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. Web Application에 등록한다. 스프링 컨텍스트 외부에 존재하여 스프링과 ..