JAVA 81

testcode 작성 시 description

testcode 작성 시 메소드명만으로는 자세하게 구별할수가 없다. 따라서 설명 및 이름 같은 것을 붙여주어 구분하기 쉽게 한다. junit4 사용 시 : junit4는 설명을 달기 위해서 따로 annotation을 만들어야한다. package me.whiteship.restapi.common; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) // 붙일수 있는 target은 메소드!! @Retention(Retentio..

JAVA 2022.07.11

String vs StringBuffer vs StringBuilder

String : 문자열 연산이 적고 멀티쓰레드 환경일때 (문자의 변동이 적을때 - 불변성) String의 예시로 아래 코드를 살펴보자. (hello로 선언한 값을 hello world로 바꿔주는 예) 기존에 hello라는 값을 가지고 있던 memory영역이 있고 hello world는 새로운 영역에 할당된다. 그렇다면 처음에 할당된 hello가 담겨있는 메모리 영역은 Garbage로 남아있다가 GC(Garbage Collection)에 의해 사라지게된다. String 클래스는 불변하기 때문에 기존의 memory영역이 수정되지 않고 새로운 영역이 생성되는것 String str = new String("hello"); str = str + " world"; 만약 문자열 추가, 수정, 삭제 등의 연산이 많은 ..

JAVA 2022.07.05

spring boot 프로젝트 생성과 사용 이유

spring boot 프로젝트 생성 시 아래 url 주소에서 생성 이때 spring boot 버전을 고를수 있는데 버전 옆에 snapshot 이 붙은건 아직 만들고 있는 단계, m1 이런건 정식 릴리즈가 되지 않은 단계, 아무것도 안붙어있는게 정식 릴리즈 된것 웬만하면 정식 릴리즈된 버전을 선택하자! 여기서 사용되는 gradle은 버전 설정하고 라이브러리를 땡겨오는 역할이라는 정도만 이해하자! https://start.spring.io/ dependencies를 선택하고 generate 누르면 프로젝트 생성! ※ 참고사항 프로젝트 폴더 중 .idea는 intellij가 사용하는 설정파일 gradle/wrapper/는 gradle과 관련된 폴더라고만 알고 지나가기 build 시 더 빠르게 웹서버를 띄우고 ..

JAVA 2022.07.04

[JAVA] API 구현 시 테스트 개발

@WebMvcTest MockMvc 빈을 자동 설정 해준다. 그냥 가져와서 쓰면 됨. 웹 관련 빈만 등록해준다. @MockMvc 스프링 MVC 테스트 핵심 클래스 웹 서버를 띄우지 않고도 요청을 처리하는 과정을 확인가능 → 컨트롤러 테스트용으로 자주 쓰임 테스트 내용 1. 입력값들을 전달하면 JSON 응답으로 201 값이 나오는지 확인 - Location 헤더에 생성된 이벤트를 조회할 수 있는 URI 담겨있는지 확인 - id는 DB에 들어갈 때 자동 생성된 값으로 나오는지 확인 @RestController @ResponseBody를 모든 메소드에 적용한 것과 동일 ResponseEntity를 사용하는 이유 응답코드, 헤더, 본문, 모두 다루기 편한 API Locatio..

JAVA 2022.06.02

[JAVA] 지연로딩과 조회 성능 최적화

주문 + 배송정보 + 회원을 조회하는 API를 만들자 지연 로딩때문에 발생하는 성능 문제를 단계적으로 해결해보자. 1. 엔티티를 직접 노출 (실무에서는 엔티티를 노출하는 일은 없으니 가볍게 보고 넘기기로 하자.) @GetMapping("/api/v1/simple-orders") public List ordersV1(){ List all = orderRepository.findAll(); return all; } 위에 코드는 엔티티를 직접 노출하는 개발 방식 양방향 연관관계일때 문제가 생김 → 무한루프에 빠져버림 (잘못된 코드) 이러한 경우 양방향이 걸리는데를 다 @JsonIgnore 를 걸어줘야함 → 그렇다면 무한 루프가 생기는 일은 피할 수 있지만 지연로딩 관련한 문제는 해결되지 않는다. 지연로딩으로 ..

JAVA 2022.05.19

[JAVA] CRU API

회원등록 API를 만들때 controller에서 entity를 파라미터로 받아서 사용하지 말자. entity는 굉장히 여기저기서 사용되므로 이름이 바뀌거나 하기 쉽다. 근데 이때 이름이 바뀌면 API 스펙이 바뀌므로 API가 작동이 안될수 있다. 따라서 API 를 개발할 때는 controller 에서 DTO를 사용하자! @RestController // Controller + ResponseBody -> 데이터를 바로 json이나 xml로 보내자! @RequiredArgsConstructor public class MemberApiController { private final MemberService memberService; @PostMapping("/api/v1/members") public Cre..

JAVA 2022.05.17

[TEST] Memory DB 사용

Memory DB는 오로지 테스트만 하고 외부 DB를 사용하지 않고 끝내고 싶을때, 테스트를 완전히 격리 된 환경에서 테스트 하기 위해서 사용한다. → JVM 안에서 메모리 모드로 띄우는거다. 테스트 코드 작성 시 운영의 설정파일과 따로 사용 하는 것이 좋다. 테스트 디렉토리 안에 resource 파일 생성 후 설정 파일(application.yml)을 생성하면, 테스트 코드가 실행 시에 그 설정파일을 참조한다. H2 Database Engine Using H2 Documentation Reference: SQL grammar, functions, data types, tools, API Features: fulltext search, encryption, read-only (zip/jar), CSV, ..

JAVA 2022.03.16

[JAVA] 결과조회(fetch)

fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환 fetchOne() : 단 건 조회 결과가 없으면 : null 결과가 둘 이상이면 : com.querydsl.core.NonUniqueResultException fetchFirst() : limit(1).fetchOne() fetchResults() : 페이징 정보 포함, total count 쿼리 추가 실행 fetchCount() : count 쿼리로 변경해서 count 수 조회 @Test public void resultFetch() throws Exception{ //given List fetch = jpaQueryFactory .selectFrom(member) .fetch(); Member fetchOne = jpaQueryFact..

JAVA 2022.03.14