본문 바로가기

TIL

(50)
[TIL] @Secured, @PreAuthorize 비교 Spring Security WebSecurityConfigurerAdapter을 상속받는 클래스를 통해 다양한 설정이 이루어진다. 그 중 하나로 User의 권한에 따라 접근 URI를 제한해 줄 수 있다. 이때 클래스에 @EnableGlobalMethodSecurity 어노테이션을 통해 컨트롤러의 메소드 레벨에서 접근 권한 제한을 설정해 줄 수 있다. 이와 같이 적용하면 어노테이션의 옵션에 따라 여러 방법 중 선택하여 손쉽게 접근 권한을 설정해 줄 수 있다. @Secured 가장 간단한 방법으로 @EnableGlobalMethodSecurity(securedEnabled = true) 와 같이 securedEnabled 속성을 true로 해주면 사용할 수 있다. 사용하고자 컨트롤러 메소드에 아래와 같이 ..
[TIL] 영속성 전이 CASCADE 인프런 JPA 강의를 들은지 오래된 상태에서 개인 플젝에서 활용하려고 하다보니 까먹어서 해매는 상황이 많이 생겼다. 그렇게 해맸던 부분들이 나올 때마다 다시 공부하고 정리해보려고 한다. CASECADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티 또한 영속상태로 만들고 싶다면 영속성 전이를 사용하면 된다. 쉽게 말해 부모 엔티티를 저장, 삭제할 때 자식 엔티티 또한 함께 적용시킬 수 있다. CASCADE 옵션이 없으면 연관관계를 맺고 있는 모든 Entity를 하나씩 영속화하거나 제거해야 할 것이다. 아래는 Recruitment 엔티티는 Question의 자식 엔티티이다. 두 엔티티는 1:N 의 양방향 연관관계를 맺고있다. 이와 같은 상태에서 Recruitment에 Questioin 객체를 추가하고 ..
[TIL] @DataJpaTest @DataJpaTest 오직 JPA 컴포넌트들에 초점을 맞춘 JPA 테스트를 위한 어노테이션이다. @DataJpaTest를 사용하는 것은 full auto-configuration을 비활성화하고 대신 JPA 테스트와 관련된 configuration만 적용한다. 기본적으로 @DataJpaTest가 지정된 테스트들은 트랜잭션이고 각 테스트 마지막에 롤백된다. 또한 내장된 메모리 내 데이터베이스를 사용한다.(명시적이거나 보통 auto-configured DataSource를 대체하여) @AutoConfigureTestDatabase 어노테이션은 이 세팅을 오버라이드 하는데 사용될 수 있다.(내장 메모리 데이터베이스말고 다른 DB를 선택할 수 있다는 뜻인듯) SQL 쿼리들은 기본적으로 spring.jpa.sho..
TDD의 장점 개발의 방향을 잃지 않게 유지해준다. 현재 자신이 어떤 기능을 개발하고, 어디까지 와 있는지를 항상 살펴볼 수 있고, 남은 단계와 목표를 잊지 않게 도와준다. 품질 높은 소프트웨어 모듈 보유 TDD를 통해 만들어진 애플리케이션은 필요한 만큼 테스트를 거친 '품질이 검증된 부품'을 갖게 되는 것이다. 자동화된 단위 테스트 케이스를 갖게 된다. TDD의 부산물로 나오는 자동화된 단위 테스트 케이스들은, 개발자가 필요한 시점에 언제든지 수행해볼 수 있다. 그리고 즉시 현재까지 작성된 시스템에 대한 이상 유무를 바로 확인할 수 있다. 또한 기능 추가와 수정에 수행해야 하는 회귀 테스트에 대한 부담도 줄어든다. 사용설명서 & 의사소통 수단 TDD로 작성된 각 모듈에는 테스트 케이스라고 하는 테스트 코드가 개발 종..
[TIL 2022-3-7] JPQL, BOJ10830 행렬 제곱 JPA JPQL JPA는 SQL을 추상화한 객체지향 쿼리언어 JPQL을 제공한다. JPQL을 통해 검색 조건을 포함한 SQL을 테이블이아닌 객체를 대상으로 검색할 수 있다. 기본적으로 select, from, where, group by, having, join을 지원하기 때문에 거의 유사한 형태로 쿼리작성이 가능하다.(count, sum, av, max, min 등 사용 가능) JPQL은 SQL을 추상화해서 사용하는 것 이므로 특정 데이터베이스에 의존하지 않는다. 즉 데이터베이스가 바뀌더라도 JPQL은 수정할 필요 없다. 결국 JPQL은 하이버네이트에 의해 설정된 SQL언어에 맞게 SQL로 변환되어 실행된다. 기본문법 JPQL 쿼리를 사용해서 나이가 19세 이상인 멤버리스트를 데이터베이스에서 가져와 이..
[TIL 2022-3-6] 평범한 배낭 다이나믹 프로그래밍 - 0/1 Knapsack 문제 https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 다이나믹 프로그래밍(dp)으로 해결해야하는 문제였다. 실버 정도의 디비 문제는 몇개 풀어봤는데 이문제는 도저히 풀이방법이 떠오르지 않아서 검색을 해보았다. 찾아보니 0/1 Knapsack 이라는 유형의 문제이고 dp를 통해 해결하는 문제라는데 아직 dp 문제를 한두문제 풀어본 나에..
[TIL 2022-2-28]스프링 부트와 AWS로 혼자 구현하는 웹 서비스 http://www.yes24.com/Product/Goods/83849117 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - YES24 가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다. 경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현한다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링 www.yes24.com 그동안 스프링과 JPA를 공부하면서 빨리 하나의 어플리케이션을 개발해 보고싶다는 갈증이 있었던 상황에서 이 책을 만나고 바로 시작하지 않을 수가 없었다. 운좋게 학교 도서관에 해당 책이 있어서 빌리자 마자 어제 오늘 계속 파면서 공부하고 있다. 어플리케이션 부터 AWS에 배포하는 것 까지 가장 한 흐름에 가는게 중요한 것 같아서 모르는 부분..
[TIL 2022-2-25] JPA 값 타입, PriorityQueue JPA 값 타입은 불변객체여야한다. 임베디드 타입을 포함한 모든 값 타입은 불변객체여야 한다.(값을 변경할 수 없는 객체, 생성자 또는 정적팩터리 메서드를 만들어 인스턴스를 생성한 이후에 setter 등으로 값을 변경할 수 없어야함) 값타입은 참조가 달라도 그 안에 값이 같으면 같은 것으로 봐야하므로 equals()를 재정의 해줘야한다. 값 타입 컬렉션 @ElementCollection, @CollectionTable 을 통해 지정해준다. 값 타입 컬렌션읜 영속성 전이(Cascade) 와 고아 객체 제거 기능을 필수로 가진다.(라이프사이클을 주인 객체에 의존). 기본적으로 지연 로딩으로 설정되어있다. 다 정리하면 엔티티 타입 객체는 스스로 라이프사이클을 관리하지만 값 타입은 모든 것을 주인 객체에 의존한..