전체 글
-
Array.forEach()STUDY/프론트엔드 2021. 5. 6. 15:33
개발을 하면서 아래와 같이 객체의 invalid를 check할 때 Array.forEach()를 사용했는데, subject.Name에 값이 없어도 함수가 반환되지 않고 다음 동작을 실행하는 문제가 발생했다. isInvalid(grade) { if (this.$StringUtils.isBlank(grade.name)) { return true; } grade.subjectList.forEach(subject -> { if (this.$StringUtils.isBlank(subject.Name)) { return true; } }); if (this.$StringUtils.isBlank(grade.year)) { return true; } return false; } return true/false를 하면 ..
-
OptionalSTUDY/백엔드 2021. 5. 6. 14:23
java.util.Optional 클래스 Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해주는 래퍼 클래스(Wrapper class)이다. 따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있다. 이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다. 즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 된다. * Wrapper class(래퍼 클래스)란? 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스(Wrapper class)라고 한다. 래퍼 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해..
-
StreamSTUDY/백엔드 2021. 4. 28. 17:58
Stream '데이터의 흐름’이다. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있다. 병렬처리(multi-threading)가 가능하다. 스트림 인스턴스를 생성해서 필터링, 매핑, 정렬, 그룹핑 등의 중간처리와 합계, 평균, 카운팅, 최대값, 최소값 등의 최종 처리를 파이프라인(Pipelines)으로 해결한다. 생성하기 : 스트림 인스턴스 생성. 가공하기 : 필터링(filtering) 및 맵핑(mapping) 등 원하는 결과를 만들어가는 중간 작업(intermediate operations). 결과 만들기 : 최종적으로 결과를 만들어내..
-
SQL : INSERT+UPDATESTUDY/DB 2021. 4. 28. 16:15
보통 테이블에 값이 있으면 INSERT없으면 UPDATE를 할 때 쿼리를 세 번 실행한다. 값이 있는지 없는지 SELECT 값이 없으면 INSERT 값이 있으면 UPDATE 하지만 이걸 한 번에 해결해주는 쿼리문이 존재한다. 해당 쿼리문은 INSERT와 UPDATE를 같이 할 때 사용하는 것으로, 테이블에 값이 존재하지 않으면 INSERT하고, 존재하면 지정된 컬럼을 UPDATE한다. MySQL : ON DUPLICATE KEY UPDATE INSERT INTO [TABLE] - UPDATE 또는 INSERT할 테이블 혹은 뷰 ( [COLUMN1] , [COLUMN2] , [COLUMN3] ) VALUES ( [VALUE1] , [VALUE2] , [VALUE3] ) ON DUPLICATE KEY UPD..
-
Vue.jsSTUDY/프론트엔드 2021. 4. 28. 15:34
vue.js를 사용하면서 발생했던 문제 - 부모 component의 데이터 변화를 자식 component에서 감지하지 못함. 부모 component의 데이터를 자식 component에 props으로 전달. 자식 component에서는 전달받은 데이터를 기반으로 자신의 데이터를 set 부모 component에서 ajax로 새로운 데이터를 가져오지만, 자식 component의 데이터는 ajax로 가져오기 전 데이터를 계속 가지고 있는 문제 발생! 원인 : 부모 component의 데이터가 변경됐지만, 자식 component에서는 mounted()로 처음에만 데이터를 set하고 있기 때문에 변경된 것을 인식하지 못하고 계속 이전 데이터를 유지하고 있었다. 해결 : watch()를 통해 부모 component로..
-
Ajax CacheSTUDY/프론트엔드 2021. 4. 28. 14:01
Internet Explorer 11에서 데이터를 저장한 후 다시 조회할 때 새로 저장한 값을 가져오지 못하는 문제가 발생함. 데이터를 저장 또는 수정 변경된 데이터를 다시 조회해서 화면에 출력 변경된 데이터가 아닌 이전 데이터가 출력 => 검색해서 찾아보니 IE에서는 데이터를 조회할 때 브라우저의 캐시값을 사용하는 것이 원인이었다. * 해결 방법 쿼리스트링에 타임 스탬프를 전달하는 방법 POST 메소드를 사용하는 방법 캐시 컨트롤(Cache-Control) 헤더를 사용하는 방법 1. 쿼리스트링에 타임 스탬프를 전달하는 방법 jQuery.ajax({ cache : false }) cache (default: true, false for dataType 'script' and 'jsonp') Type: B..
-
Spring BatchSTUDY/백엔드 2021. 3. 3. 01:00
대용량의 데이터를 처리하는 어플리케이션을 배치 어플리케이션이라고 한다. 1. 배치 어플리케이션 조건 대용량 데이터 - 배치 어플리케이션은 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리를 할 수 있어야 한다. 자동화 - 배치 어플리케이션은 심각한 문제 해결을 제외하고는 사용자 개입 없이 실행되어야 한다. 견고성 - 배치 어플리케이션은 잘못된 데이터를 충돌/중단 없이 처리할 수 있어야 한다. 신뢰성 - 배치 어플리케이션은 무엇이 잘못되었는지를 추적할 수 있어야 한다. (로깅, 알림) 성능 - 배치 어플리케이션은 지정한 시간 안에 처리를 완료하거나 동시에 실행되는 다른 어플리케이션을 방해하지 않도록 수행되어야한다. 대용량 데이터를 실시간으로 처리하기에는 조회 시간이나 서버 부하가 심해지기 때..
-
메모리 영역STUDY/백엔드 2021. 2. 8. 17:57
static 영역 패키지나 클래스 정보가 올라갑니다. import된 패키지를 static 영역에 배치한다. 프로그램 상의 모든 클래스를 static 영역에 배치한다. 필드 부분에서 선언된 변수(전역 변수)와 정적 멤버변수(static이 붙은)는 static 영역에 데이터가 저장된다. static 영역의 데이터는 프로그램의 시작부터 JVM이 종료가 될 때까지 메모리에 남아있게 된다. 따라서, 전역변수를 무분별하게 많이 사용하면 메모리가 부족할 우려가 있어 필요한 변수만 사용해야 한다. 또한, 전역변수는 읽기 전용이 아닌 경우에는 누구나 접근해서 값을 수정하면 혼란을 가져올 수 있기 때문에 가능한 사용하지 말아야 합니다. class영역 혹은 method 영역 이라고도 불립니다. stack 영역 여는 중괄호 ..