개발 일지/주간 개발 일지 18

[05월 1주차] 프론트엔드 에러 해결 및 querydsl -BooleanExpression을 활용한 리팩토링

Note BooleanBuilder => BooleanExpression 리팩토링 기존에는 쿼리 클래스 안에 projection()이라는 메서드 안에 변수 BooleanBuilder search를 선언했다. 그 다음 쿼리의 where절에 넣고 싶은 조건을 search.and(조건) 형태로 여러 개 나열하는 방식이었다. 하지만, BooleanBuilder를 사용하면 predicate() 메서드가 길어져서 가독성이 떨어졌다. 그리고 해당 조건에 대해 재사용이 불가능하다는 단점이 있었다. 그래서 김영한 강사님께서 알려주신 BooleanExpression을 적용하기로 했다. Ex) 검색 조건 쿼리 - BooleanBuilder 를 사용한 이전 코드 public BooleanBuilder predicate(Mem..

[04월 4주차] 프론트엔드 디버깅 방법, PostgreSQL 필드 변경 시 MySQL 과 문법상 차이점

ToDoList VS code 리팩토링 방법 알아보기 Note 미리 저장해둔 데이터를 for문으로 콤보 박스에 보여주기 데이터베이스에는 어떤 모델의 상태 코드가 있다. ex) 생성(COD_0000, "CREATED")과 같은 형태로 데이터가 저장되어 있는데 관리자 서버에서 데이터 가져오는 API를 만들어두고 필요할 때마다 Http 요청을 보내서 정보를 가져온다. SearchForm (자식 컴포넌트) 뷰 안에 있는 컴포넌트 emit: 자식 컴포넌트에서 부모 컴포넌트로 이벤트를 전달한다. 컴포넌트가 발생시킬 수 있는 이벤트를 명시적으로 선언해서 부모 컴포넌트에서 사용 가능한 이벤트를 결정한다. List (부모 컴포넌트) 앞에서 자식 컴포넌트(SearchForm)에서 만든 이벤트 searchPretreatme..

[04월 3주차] Vue.js 3 과 Spring

Note Vuex 란? Vuex: Vue.js 애플리케이션에서 상태 관리를 위한 라이브러리이다. Vue 개발에서 상태를 관리해주는 기능을 제공한다. 상태 관리 패턴이자 라이브러리이다. 상태 관리: 애플리케이션의 데이터를 중앙에서 관리하고 컴포넌트 간에 공유할 수 있도록하는 것을 말한다. Vue의 공식 툴이며 ES2015 문법을 기준으로 한다. Vuex가 없다면 컴포넌트 간의 데이터(상태)를 주고 받기 위해 부모는 자식에서 props를 통해 전달하고 자식은 부모에게 Emit event 방식을 사용해서 처리해야한다. 데이터를 Store를 통해 관리하고 프로젝트에 존재하는 모든 컴포넌트들이 이 store를 사용한다. Vuex의 구성 요소 State(데이터 객체, 상태): 애플리케이션 전역에서 공유되는 데이터 ..

[04월 2주차] JPA, Vue.js 3 기본 명령어

에러 해결 오류: 페이징 에러 원인: 메서드 실행 순서 오류 해결: 실행 순서를 바꾼다. cf) BeanUtils.copyProperties(A, B): 값이 같은 필드에 대해서만 A를 B에 복사한다. 문제 코드 페이징 인스턴스를 만들고 조건에 맞는 데이터가 몇 개인지 카운트한다. 결과값을 page에 세팅한 다음 model 정보를 paging 인스턴스에 카피해준다. 그런데, 이렇게 하고나서 검색 조회를 하면 페이지 개수가 totalPage 개수로 설정이 되서 조회하는 데이터를 보여줄 페이지가 2개인 경우에도 페이지가 (전체 목록를 보여줄 수 있는) 4까지 조회된다. (3, 4를 누르면 데이터가 없다고 나오기는 한다. ) 문제점: paging 인스턴스와 model 인스턴스 간에 searchedModelCo..

[04월 1주차] 페이징(Paging), QueryDSL, LocalDate와 String 변환 방법

Query DSL Ex) 여러 개의 검색 필드(모델 ID, 모델명, 등)를 입력 받아서 해당 조건을 만족하는 엔티티를 불러오려고 한다. 그런데 검색의 특성상 콤보 박스에서 선택(null) 상태로 두고 검색 버튼을 누르는 경우가 있다. 그런 경우에는 해당 조건에 상관없이 모든 데이터를 보여주려고 한다. 예를 들어, 검색 필드 중에서 "모델 유형" 필드가 있을 때, 여기를 비운 상태로 검색을 누르면 모든 모델 유형에 대한 데이터를 가져오려고한다. @Generated("com.querydsl.codegen.EntitySerializer") public class QModel extends EntityPathBase { private static final long serialVersionUID = 161222..

[03월 5주차] Thread API 전체적인 흐름 파악하기, 고정 소수점과 부동 소수점

Thread의 isAlive() 개발자가 커스텀스레드 생성하면 반드시 run()을 오버라이드해야한다. run() 메서드 안에서 실행 중이면 true를 반환한다. run() 메서드가 끝나거나 실행 전이면 false를 반환한다. Thread API 전체적인 흐름 회사에서 스레드를 컨트롤할 수 있는 API를 만들어서 이 내용을 되짚어보려고 한다. Listener 엔티티 카프카와 관련된 데이터(server IP 주소, port 번호, topic name, groupId 등등)가 들어가는 객체이다. 카프카 서버로부터 데이터를 받는 서버이면서 엔티티이기 때문에 Listener라는 이름이 붙은 걸로 예상 Kafka -> Listner server -> Executor server 이렇게 데이터를 전송한다. Liste..

[03월 4주차] OkHttp 예제, Thread와 ExecutorService

OkHttp 구현 방법 OkUtils 클래스 안에 개발자가 직접 정의한 GET 메서드를 활용해서 사용자가 굳이 url을 입력하지 않아도 개발자가 원하는 때에 수신 서버에 대한 특정 Http 요청이 실행되게끔 구현 가능하다. Ex) OkHttp POST 구현 OkHttpUtil Util 클래스의 post() 안에서 HTTP Request 를 보내고 상대방 서버에서 보낸 Response를 바로 받을 수 있다. 서버에서 WorkflowId를 @PathVariable로 받을 수 있도록 URL에 넣어서 보내준다. MediaType은 json 형태로 주고 받으니까 body에 다음과 같이 세팅한다. 아래 코드는 URL이 {POST 요청하는 서버 IP 주소} : port 번호/{workflowId} 인 경우에 POST..

[03월 3주차] JPA 연관 관계 매핑, 복합 키, 제네릭 클래스에 의존성 주입

에러 해결 제네릭 클래스에 의존성 주입이 가능한가? 오류: @Autowired - NullpointerException EaiEventListener (@Service) 에서 new MyThread 호출한다. MyThread (extends Thread)에서 ListenerService를 멤버 변수로 선언한다. 그런데 MyThread 클래스에 Service 생성자 주입이 되지 않는다. MyThread를 스프링 컨테이너에 등록해도 해결되지 않는다. (@Component, @NoArgsConstructor을 이용해도 오류가 난다.) @Autowired, @RequiredArgsConstroctor 둘다 적용이 되지 않는다. 원인 제네릭 클래스 MyThread는 생성자 주입이 불가능하므로 Nullpointer..