전체 글
양방향 연관관계 매핑을 위한 연관관계 편의 메소드
양방향 연관관계에서 양쪽 객체의 관계를 모두 채워주기 위한 편의 메소드 한쪽에서만 두 관계를 설정하도록 하는 것이 안전하다. 연관관계 편의 메소드가 위치할 곳은 비즈니스 로직에 따라 다름 김영한 강사 답변1 김영한 강사 답변2 다대일 양방향 관계 뿐만 아니라 일대일 양방향 관계에서도 적용 가능한 메소드 양방향 연관관계 관련 스터디 링크 https://kingpiggylab.tistory.com/340?category=908877 엔티티 매핑 2 (연관관계) 연관관계 매핑 기초 목표 🤔 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 객체가 지향하는 패러다임과 관계가 지향하는 패러다임의 차이를 이해하고 적절하 kingpiggylab.tistory.com 연관관계 편의 메소드가 ..
[AWS] EC2와 탄력적 IP
탄력적 IP란? EC2 인스턴에 고정 IP를 할당하지 않고 사용한다면, 인스턴스를 재시작할 때마다 새 IP가 할당되서 도메인 연결을 할 수 없습니다. 이러한 문제를 해결하기 위해 AWS는 탄력적 IP를 제공합니다. 탄력적 IP 설정 튜토리얼 https://jojoldu.tistory.com/259 4) 스프링부트로 웹 서비스 출시하기 - 4. AWS EC2 & RDS 구축하기 이번 시간엔 SpringBoot를 운영할 AWS 환경을 구축하겠습니다. (모든 코드는 Github에 있습니다.) Tip) 운영 서버는 크게 클라우드 서비스(AWS, Azure 등) 과 호스팅 서비스(Cafe24, 코리아호스팅 등)을 이용 jojoldu.tistory.com
도커 정리 (이론편) 🐳
도커란 무엇인가 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 다양한 이유로 계속 바뀌는 서버 환경과 개발 환경 문제를 해결하기 위해 등장했다. 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이 담긴다. 토큰에는 여러 개의 ..