728x90

분류 전체보기 331

(mongo)Exception authenticating MongoCreadential 오류

Repository단에서 MongoDB를 타는 API의 경우, 아무런 셋팅을 해놓지 않은 상황이었으면 다음과 같은 오류를 발생한다. 원인은 ID가 존재하지 않아서 발생하는 오류였고, application-local.properties에 있는 ID, PW를 바탕으로 유저를 생성하니 해결되었다. application-local.properties의 몽고 ID:PW가 있는 부분 (윈도우 기준) 도커 이미지 제거 후 다시 생성(docker-compose -f docker-compose-local.yml up -d) → cmd창 띄우기 → cmd에서 mongo 입력(mongo shell 접속) → mongo shell에서 Admin 유저 생성 -db.createUser({user: "lucabase", pwd: ..

MongoDB 2022.02.15

AWS SQS의 Lambda를 호출 예제

대략적인 SQS가 Lambda를 호출하는 구성도 이를 바탕으로 SQS에서 메시지를 읽어들이는 코드(Node.js 기반)를 작성 QueueUrl은 이전에 생성한 SQS의 url을 넣어줌 AWS의 Console에서 결과를 확인 const AWS = require("aws-sdk"); const sqs = new AWS.SQS(); const lambda = new AWS.Lambda(); exports.handler = (event, context, callback) => { const params = { QueueUrl: 'https://sqs.ap-northeast-2.amazonaws.com/XXXXXX/MyFirstQueue', MaxNumberOfMessages: 10, MessageAttribut..

AWS 2022.02.15

Spring 필드 주입 vs 생성자 주입(win)

스프링 필드 주입 대신에 생성자 주입을 권장 변경 불가능한 안전한 객체 생성 가능 final 키워드를 추가하면 컴파일 시점에 좀더 일찍 오류를 체크할 수 있음(보통 기본 생성자를 추가할 때 발견할 수 있는데 미리 발견) public class MemberService{ private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } } (참고) 롬복일때는 아래와 같은 형식(위와 내용은 같음) @RequiredArgsConstructor public class MemberService { private ..

Spring 2022.02.15

순수 Java에서 Spring으로의 첫 전환!

순수 Java에서 Spring 코드로 변환 저번에 AppConfig를 활용하여 DI를 구현했는데 이를 스프링 어노테이션으로 구현하면 아래와 같이 바꿀 수 있다. @Configuration //AppConfig에 설정을 구성한다는 뜻의 @Configuration 을 붙여준다. public class AppConfig { @Bean //각 메서드에 @Bean 을 붙여준다. 이렇게 하면 스프링 컨테이너에 스프링 빈으로 등록한다 public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImp..

Spring 2022.02.15

(Spring DI) Appconfig를 활용한 가격정책을 DI로 구현

DI(의존성 주입)를 활용한 할인정책 구현(Java) 할인 정책을 구현하기 위해 DiscountPolicy 인터페이스 밑에 정액할인 정책 구현체와 정률할인 정책 구현체를 두었다. - 할인 정책 인터페이스(DiscountPolicy.java) import hello.core.member.Member; public interface DiscountPolicy { /** * @return 할인 대상 금액 */ int discount(Member member, int price); } - 정액 할인 정책 구현체(FixDisCountPolicy.java) public class FixDiscountPolicy implements DiscountPolicy { private int discountFixAmount ..

Spring 2022.02.15

(스프링 데이터 JPA) 페이징과 정렬

스프링 데이터 JPA 페이징과 정렬 페이징과 정렬 파라미터 org.springframework.data.domain.Sort : 정렬 기능 org.springframework.data.domain.Pageable : 페이징 기능 (내부에 Sort 포함) 특별한 반환 타입 org.springframework.data.domain.Page : 추가 count 쿼리 결과를 포함하는 페이징 org.springframework.data.domain.Slice : 추가 count 쿼리 없이 다음 페이지만 확인 가능합니다(내부적으로 limit + 1조회함). Page 사용 예제 코드 검색 조건: 나이가 20살 정렬 조건: 이름으로 오름차순 페이징 조건: 첫 번째 페이지, 페이지당 보여줄 데이터는 3건 Page 사용 ..

JPA 2022.02.15

(Spring data JPA) 쿼리 메소드란?

스프링 데이터 JPA의 예 스프링 데이터 JPA는 메소드 이름을 분석해서 JPQL을 생성하고 실행(코드량이 줄어들어 효율성 증가) public interface MemberRepository extends JpaRepository { List findByUsernameAndAgeGreaterThan(String username, int age); } 위와 같이, 메소드 이름으로 쿼리를 생성하는 기능을 쿼리 메소드라고 하며 기능은 Spring 공식 홈페이지에 정리되어 있으며 간단히 정리하면 아래와 같습니다. 스프링 공식문서 참고 - https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ 조회: find…By ,read…By ,query…By..

JPA 2022.02.15

스프링 데이터 JPA 란?

스프링 데이터 JPA 란? Spring framework에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트입니다. CRUD 처리를 위한 공통 인터페이스가 제공됩니다. repository 개발 시, 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현체를 동적으로 생성해서 주입시켜 줍니다. 따라서, 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있습니다. 스프링 데이터 JPA 없이 Repository 개발한 예 @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Member member) { em.persist(member..

JPA 2022.02.15

QueryDSL 소개

QueryDSL 소개 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크입니다. 문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있습니다. IDE의 코드 자동 완성 기능 사용 가능 문법적으로 잘못된 쿼리를 허용하지 않음(오류 체크) 도메인 타입과 프로퍼티를 안전하게 참조할 수 있음 등 의 특징을 가집니다. //member, order 테이블에서 OrderStatus의 상태와 MemberName의 이름에 따라 값을 조회 public List findAll(OrderSearch orderSearch) { QOrder order = QOrder.order; QMember member = ..

JPA 2022.02.15
728x90