분류 전체보기 126

[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

신규아이디 추천

카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게되었다. 주어진 임무는 새로 가입하는 유저들이 아이디 규칙이 맞지 않는 아이디를 입력했을 시, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램 개발 프로그램은 아래 7단계를 거쳐야 한다. new_id의 모든 대문자를 대응되는 소문자로 치환합니다. new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거 합니다. new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다. new_id의 길이가 16..

CT 2022.04.19

완주하지 못한 선수(해시)

코딩테스트 후 오답노트 식으로 작성해보려 한다. 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 난 처음에 일단 participant의 값 중 completion에 포함 되어 있지 않는 값을 뽑아 냈다. 이렇게 되면 1, 2번 예제와 같은 경우는 잘 통과 할수 있으나 3번과 같은 중복 되었을 경우 실패한다. 따라서 나는 for문으로 part와 comp안에서 미리 비교된 값은 comp배열에서 빈값으로 만들어..

CT 2022.04.14

[AWS] AWS 참고사항 및 설정

EC2 : 가상서버 RDS : 관계형 데이터베이스 (RDBMS) 클라우드가 서비스를 제공하는 범위에 따라 아래 네가지로 구분이 된다. on-site : 현재 회사 내에서 하고있는 방식이다. 가상서버를 직접 올리고 os 및 모든 부분을 사용자가 관리하는 방식 IaaS : 위에서 설명한 EC2 가 다음과 같은 방식이다. 가상 환경까지는 제공해주지만 o/s 부터는 우리가 관리해야함 AWS에서 업데이트 관련은 자동으로 해주는 기능이 있기는 할걸?? PaaS : 데이터와 애플리케이션만 사용자가 관리 및 사용하고 나머지는 클라우드가 제공해준다. 예시로 AWS의 Elastic Beanstalk 가 있다. SaaS : 모든것을 클라우드가 제공해줌 → 서비스로 제공된다. 예시로 AWS에서는 Lightsail , 네이버 ..

AWS 2022.04.07

[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

[TEST] 예외 발생 테스트

만약 예외가 발생하는 코드를 테스트 할때 회원가입 중복 확인 테스트 진행 시 IllegalStateException (이미 존재하는 회원) 을 처리해주지 않으면 테스트 코드 실행 시 실패로 뜸 Test 어노테이션 옆에 excepted를 지정해주면 해당 exception 발생시에는 그냥 넘어갈 수 있다 @Test(expected = IllegalStateException.class) public void 중복_회원_예외() throws Exception{ //given Member member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); //when memberService.joi..

JAVA 2022.03.08

[JAVA] Q-Type

Q-Type class는 Querydsl을 설정을 진행을 완료하면 @Entity가 붙은 클래스를 찾아 자동으로 생성된다. 예 ) @Entity가 붙은 User.java 의 QUser.java 클래스 파일이 자동으로 생성됨 이러한 Q-Type의 class들은 Querydsl을 사용할 때 우리가 만든 도메인 클래스의 구조를 설명해주는 역할을 한다. Q class 인스턴스를 사용하는 방법은 2가지가 있다. 1. 별칭 직접 지정 QMember qMember = new QMember("m"); 2. 기본 인스턴스 사용 QMember qMember = QMember.member; 이걸 더 줄여서 사용하기 위해 static import와 함께 사용한다. 아래 처럼 선언하면 굳이 선언을 해주지 않아도 사용 할 수 있다..

JAVA 2022.03.07

[TEST] 날짜 자동 생성 테스트

test code 작성 중 문제 발생 [문제] createdDate 자동 생성 테스트 코드 작성 중 문제가 발생 → 테스트를 위해 우선 데이터를 삽입 후 날짜를 비교해야 하는데 날짜가 null로 삽입됨 [해결] BaseTimeEntity에 @EntityListeners(AuditingEntityListener.class) 을 이용해 JPA 청취 기능을 하는데 main함수가 있는 클래스에서 JPA 청취 가능을 시켜주지 않으면 사용이 불가하다. 따라서 기능 구현을 할 클래스에 @EnableJpaAuditing 어노테이션을 붙여주면 생성됨 package movie.finder.Repository; import movie.finder.domain.Movie; import movie.finder.repositor..

JAVA 2022.03.03