전체 글 960

cors 정책 (+ 쿠키)

이건 기본적으로, Cross Origin 정책 해서, Origin이 다른 곳 끼리도 통신이 가능하게끔 한다는 거임. 원래 보안상의 이유로 같은 도메인 루트만, 그러니가 aaa.com이 루트 도메인이면 api.aaa.com과 app.aaa.com 이 둘만 통신 가능하게끔 하고 싶었는데, 워낙 다른 도메인끼리 주고받는건 흔한 일이라 그걸 막을 순 없음. 그래서 어느정도 제약을 거는거임. 일단은, 이거 하려면 (쿠키만 이었나?) 프론트엔드 쪽에서도 Credentials 이거 true? include? 해 줘야 함. 저게 뭐 인증정보까지 가져온다는 그런거임. 같은 도메인 족보이면 그냥 서버에서 하고 말텐데, 이건 인증정보까지 가지고 와야 하나 봄. 그리고 서버에서, 일단 그래도 인증관련이라, ResponseCo..

카테고리 없음 2023.12.12

AWS 스프링

일단, 잘 모름. 먼저 ec2 만들고 이거는 그냥 따라하다 보면 쉽게 할 수 있음. https://velog.io/@jonghyun3668/SpringBoot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-EC2-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0 SpringBoot 프로젝트 EC2 배포하기 깃헙에 있는 프로젝트를 AWS EC2에 git clone을 통해 내려받아 jar 파일 빌드를 해보겠습니다.(EC2 인스턴스는 우분투로 진행합니다. 또한 따로 배포 시스템을 구축하지 않고 수동으로 배포하는것만 velog.io 인스턴스 생성하고, 빌드하는 것 까진 이거 따라하셈. 그 다음 https로 해야 하는데, 나는 도메인을 사게 됐음.

스프링 2023.12.11

redis

redis는 우선, 깔려 있어야 쓸 수 있다. 아마도 배포할 때 그 환경에도 깔아야 할 것이다. spring: data: redis: host: localhost port: 6379 설정은 이렇게 @Configuration public class RedisConfig { @Value("${spring.data.redis.host}") private String host; @Value("${spring.data.redis.port}") private int port; @Bean public RedisConnectionFactory redisConnectionFactory(){ return new LettuceConnectionFactory(host, port); } @Bean public RedisTemp..

스프링 2023.12.11

Supplier 콜백

뭐 정확히는 콜백이 아니라고 하는데, 콜백처럼 사용이 된다. .get()하면 실행된다. 이름처럼 뭔가 공급자, 직접적인 값이 아니라 값을 공급해주는 공급자. 콜백을 인자로 받을 수 있게 해 준다. Supplier private BooleanBuilder nullSafeBuilder(Supplier f){ try { return new BooleanBuilder(f.get()); }catch (IllegalArgumentException e){ return new BooleanBuilder(); } } 이렇게 콜백의 실행 타이밍을 늦출 수 있다! f.get()하면 실행 된다. private BooleanBuilder ageGoe(Integer ageGoe){ return nullSafeBuilder(()-..

자바 2023.12.04

37. Querydsl 리포지토리 지원

이거는, Querydsl을 사용한 리포지토리를 만들 때, 상속받아서 쓰면 약간 편리한? 그런 거다. @Repository public abstract class QuerydslRepositorySupport { private final PathBuilder builder; private @Nullable EntityManager entityManager; private @Nullable Querydsl querydsl; public QuerydslRepositorySupport(Class domainClass) { Assert.notNull(domainClass, "Domain class must not be null"); this.builder = new PathBuilderFactory().creat..

36. Querydsl Web 지원

스프링 데이터가 제공하는 QueryDSL이 컨트롤러에서 술어를 인자로 받을 수 있는 기능. 이거는 우선 단순한 조건만 가능 조건도 거의 eq정도만 됨. 컨트롤러가 Querydsl에 의존. join도 어려움 조건을 조금 복잡하게 하려면 오히려 바인딩 해 주는게 더 복잡함. 저 QuerydslBinderCustomizer 상속받은 다음, 저렇게 바인딩 해 줘야 함. 쓰지 마셈.. 지금은. 술어를 클라이언트 파라미터로 받을 수 있는 것은 좋으나, 그에 따라 컨트롤러가 QueryDSL 기능에 의존하게 되고, 쓸 수 있는 기능에 비해 번거로움

35. 스프링 데이터 JPA가 제동하는 QueryDSL 기능

사실 지금부터 이야기 하는 기능들은, 제약이 커서 실무에서는 잘 활용 안함. 테이블 하나일 땐 괜찮은 데 join 하면서 여러 개 하면 잘 동작을 안한다고 함. 우선 첫번째로는, QuerydslPredicateExecutor라고, 스프링 데이터 JPA에서 Querydsl과 함께 쓸 수 있도록 해주는 것 이다. 그러니까, 마치 우리가 스프링 데이터 JPA 만들었을 때 처럼, findAll 같은 것을 지원해 주는 것이다. 그런데, 거기 안에 술어를 쓸 수 있다. public interface MemberRepository extends JpaRepository, MemberRepositoryCustom, QuerydslPredicateExecutor { List findByUsername(String use..

34. QueryDSL 페이지 컨트롤러

@GetMapping("/v3/members") public Page searchMemberV3(MemberSearchCondition condition, Pageable pageable){ return memberRepository.searchPageComplex(condition,pageable); } 여기서 볼 점은, Pageable 인자 정도? 참고로, ArgumentsResolver에 의해서, 알아서 저 객체들에 다 바인딩 해 준다. 객체의 필드명과, 클라이언트가 요청할 때 보내는 파라미터명이 같아야 바인딩이 제대로 된다. Pageable의 인자로는 page : 몇번째 페이지 size : 한 페이지 당 사이즈 가 있다. 예를 들어 http://localhost:8080/v3/members?pag..