반응형 개발공부/JAVA Spring37 [Spring Boot] JPQL, QueryDSL 쿼리 작성 JPQL (JPA Query Language) : JPA에서 사용할 수 있는 쿼리 SELECT p FROM 엔티티타입 p WHERE p.엔티티속성 = ?1; 쿼리 메서드 간단한 쿼리문을 작성하기 위해 사용되는 것 (주제 + 서술어) 쿼리 메서드 - 주제 키워드 findBy / readBy / getBy / queryBy / searchBy / streamBy / existsBy : 조회 existsBy : 특정 데이터가 존재하는지 확인 - 리턴타입 boolean countBy : 쿼리 결과 레코드 개수 리턴 deleteBy / removeBy : 삭제한 횟수 리턴 또는 리턴 안함 FirstBy / TopBy : 쿼리 조회 결과값 개수 제한 쿼리 메서드 - 조건자 메서드 Is / Equals : 값의 일치.. 2023. 3. 10. [Spring Boot] Redis config @Configuration public class RedisConfig { @Value("${spring.redis.host}") private String redisHost; @Value("${spring.redis.port}") private int redisPort; @Bean public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(redisHost, redisPort); } @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnecti.. 2023. 3. 10. shorten url shorten url 주로 모바일 등으로 URL을 공유할 때 줄여서 제공한다. 요청 URL에 대응하는 유니크한 식별자가 필요하다. 방법1. DB의 PrimaryKey를 사용하는 방법 ex) https://dev.com/dir/1022009 단점: url 이 점점 길어질 수 있다. 방법2. base62 사용 ex) https://dev.com/dir/raad21 base64는 "=" 이 포함되어 부적절하다. 영어와 숫자로만 이루어진 62가 적절하다. 2023. 3. 6. [Spring Boot] 테스트 코드 작성 관련 정리 테스트 코드를 작성하는 이유 개발 과정에서 문제를 미리 발견할 수 있다. 리팩토링의 리스크가 줄어든다. 애플리케이션을 가동해서 직접 테스트하는것보다 빠르게 진행할 수 있다. 하나의 명세 문서로서의 기능을 수행한다. 몇가지 프레임워크에 맞춰 테스트 코드를 작성하면 좋은 코드를 생산할 수 있다. 단위 테스트 개별 모듈을 독립적으로 테스트하는 방식 테스트 피드백을 빠르게 받을 수 있다. 통합 테스트 다양한 모듈을 결합해 전체적인 로직이 의도한 대로 동작하는지 테스트하는 방식 외부 요인들을 포함하여 애플리케이션이 온전히 동작하는지 테스트한다. 단점 : 테스트 비용이 커진다. Given-When-Then 패턴 Given 테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상황에 대한 행동을 정의 When.. 2023. 3. 3. MockMvc를 이용한 테스트코드 작성 스프링 MVC를 모킹하여 웹 어플리케이션을 테스트 할 수 있는 라이브러리 controller 레이어를 테스트 하기 위해 사용 -> 서블릿 컨테이너에서 controller를 실행하지 않고도 컨트롤러에 HTTP 요청을 할 수 있다. 매번 서버를 띄우고 브라우저를 통해 테스트 하지않고 테스트 코드를 통해 검증 가능 MockMvcBuilders 클래스 -> 1. standaloneSetup() : 유닛테스트와 유사하다. -> 2. webAppContextSetup() : 통합테스트를 할 수 있다. 테스트해야하는 것 요청 경로에 대해 적절한 handler method가 호출되는지? 입력 파라미터는 handler method에 잘 전달되는지? model에 설정한 값은 잘 참조 하는지? 요청 결과 페이지는 잘 연결되.. 2023. 3. 1. Lombok 롬복 - 반복적으로 사용하는 코드 작성을 생략하는 라이브러리 장점 어노테이션 기반으로 코드를 자동 생성하므로 생산성이 높아진다. 반복되는 코드를 생략할 수 있어 가독성이 좋아진다. 유지보수에 용이하다. 단점 자동 생성해주기 때문에 개발자의 의도대로 정확하게 구현하지 못하는 경우도 발생한다. @Getter, @Setter 데이터(모델) 클래스를 생성할 때 반복적으로 사용하는 getter/setter 메서드를 어노테이션으로 대체하는 기능을 제공한다. 생성자 자동 생성 어노테이션 @NoArgsConstructor : 매개변수가 없는 생성자 @AllArgsConstructor : 모든 필드를 매개변수로 갖는 생성자 @RequiredArgsConstructor : final 이나 @NotNull이 설정된 변수를 매개변수로 갖는 생성자 @ToString 필드의 값을 문자열로.. 2023. 2. 22. [Spring Boot] 엔티티 관련 어노테이션 @Entity 테이블과 일대일로 매칭되는 클래스 @Table 클래스 이름과 테이블 이름을 다르게 지정해야하는 경우 사용한다. @Table(name = 값) @Id 테이블의 기본 값 역할로 사용된다. 모든 엔티티는 @Id 어노테이션이 꼭 필요하다. @GeneratedValue @Id 어노테이션과 함께 사용된다. 해당 필드의 값을 어떤 방식으로 자동으로 생성할지 결정할 때 사용한다. AUTO IDENTITY SEQUENCE TABLE @Column 필드에 몇가지 설정을 더할 떄 사용한다. name nullable length unique @Transient 엔티티 클래스에는 선언돼 있는 필드지만 데이터베이스에서는 필요 없을 경우 2023. 2. 20. [Spring Boot] HTTP Request 어노테이션 - GetMapping, PostMapping, PutMapping, DeleteMapping API에 사용하는 HTTP 메서드 어노테이션 스프링 4.3 이후로는 @RequestMapping 메서드는 사용하지 않고 아래 어노테이션들을 사용한다. method 요소를 정의하지 않아도 된다. @GetMapping @PostMapping @PutMapping @DeleteMapping @RestController 어노테이션이 지정된 클래스는 @RequestBody를 생략할 수 있다. @RequestBody 어노테이션은 자동으로 JSON 형식의 값을 전달한다. GET 서버에서 값을 가져올 때 사용하는 API URL 경로나 파라미터에 변수를 넣어 요청한다. 1. @PathVariable을 이용한 GET 메서드 구현 ex) https://test.com/api/v1/get-api/variable1/{varia.. 2023. 2. 18. 제어 역전 IoC, 의존성 주입 DI, 관점 지향 프로그래밍 AOP 제어 역전 IoC (Inversion of Control) 보통의 자바 개발에서는 사용하려는 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용한다. => 객체의 관리를 개발자가 직접 제어한다. 하지만 제어 역전을 특징으로 하는 스프링은 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부(스프링 컨테이너 또는 IoC 컨테이너)에 위임한다. => 객체의 관리를 컨테이너에 맡긴다. 장점 제어 역전을 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등이 가능해진다. 개발자는 비지니스 로직을 작성하는데 집중할 수 있다. 의존성 주입 DI (Dependency Injection) 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식 .. 2023. 2. 11. 이전 1 2 3 4 5 다음 728x90 반응형