정리노트 127

객체를 요소로 가지는 Array에서 Set 만들기

객체를 요소로 가지는 배열const exampleArray = [ { element_id: 1, name: "요소1" }, { element_id: 1, name: "요소1 중복" }, { element_id: 2, name: "요소2" }, { element_id: 3, name: "요소3" }]; element_id로 set 작성const exampleSet = new Set(exampleArray.map(element => element.element_id);  결과1. 중복 제거{1, 2, 3} 2. 검색 성능 향상array는 값을 찾을 때까지 처음부터 순차적으로 검색하지만, set은 해시 테이블을 사용하기 때문에 검색이 빠르다.1) array 검색(1) 1 확인 → 2 확인..

정리노트/메모 2025.03.11

MSA에서 여러 서비스에서 필요한 데이터를 관리하는 방법

관리 방법1. 데이터 복제1) 정의각 서비스가 필요한 데이터를 복제해서 관리 2) 장점- 각 서비스 독립적으로 동작 가능- 서비스간 네트워크 호출 최소화 3) 단점- 데이터 동기화 문제- 저장소 사용량 증가 4) 사용 예시정보가 자주 변경되지 않는 경우 2. 중앙 데이터 서비스1) 정의여러 서비스에서 필요한 데이터를 전담 관리하는 별도의 서비스를 구축하고 다른 서비스에서 이를 호출 2) 장점- 데이터 일관성 유지- 변경 사항 관리 쉬움 3) 단점- 의존성이 높아져 장애 발생시 다른 서비스에도 영향- 네트워크 호출로 인해 성능 저하 가능 4) 사용 예시- 정보가 자주 업데이트되거나 정확한 정보가 실시간으로 필요한 경우3. 이벤트 기반 데이터 동기화1) 정의정보 변경시 이벤트를 발생시켜 각 서비스가 필요한 ..

정리노트 2024.11.21

첫 코드 리팩토링

1. 기능이 비슷한 함수 작명 규칙 통일 ✅- 데이터 로드: load*- 데이터 저장: save*- 테이블 업데이트: update*Table- 모달 열기: open*Modal(mode)2. 기능이 비슷한 함수 실행 흐름 통일 ✅- 추가/수정 버튼 클릭 => open*Modal(mode)- DOMContentLoaded -> 추가/수정 버튼들에 open*Modal 이벤트 리스너 추가3. 기능이 비슷한 함수 객체로 관리- load- save✔️ 지금 테이블별로 함수를 모아놔서 굳이 load, save, update*Table끼리 모을 필요가 없을 것 같다.4. api 통신 함수로 관리 ✅  - 달라지는 부분(proc) 파라미터로 관리5. 행 클릭, 폼 제출 이벤트 핸들러 취합  4번 -> 3번 순서로 실행(..

정리노트/메모 2024.11.07

24.09.26. 디버깅을 꼼꼼히 하자...

커서가 DB에 접속할 때 계속 JPA를 사용해서 나도 얼떨결에 쓰게 됐다. 문제가 생기면 AI에 지나치게 의존하지 말고 어디가 문제인지 디버깅을 해야 한다...디버거나 System.out.println()을 적극적으로 쓰자... DB 관련 간단한 디버그(DB 접속 확인)컨트롤러 @PersistenceContext private EntityManager entityManager; try { Query query = entityManager.createNativeQuery("SELECT 1"); query.getSingleResult(); System.out.println("데이터베이스 연결 성공"); } catc..

정리노트/메모 2024.09.26

ArrayList.addAll()

0. add()요소를 하나씩 추가함반환값: boolean(요소가 성공적으로 추가됨) 1. addAll()리스트 끝에 지정된 컬렉션의 모든 요소를 추가함반환값: boolean(리스트가 변경됨) 1) 활용List> fruits, vegetable, snack에는 다음과 같은 형식으로 다양한 종류의 음식들이 담겨있다.[{FOOD_TYPE = "FRUIT", PRICE = 6000, FOOD_NM = "복숭아"}, {FOOD_TYPE = "FRUIT", PRICE = 5000, FOOD_NM = "오렌지"}][{FOOD_TYPE = "VEGETABLE", PRICE = 2000, FOOD_NM = "청경채"}, {FOOD_TYPE = "VEGETABLE", PRICE = 3000, FOOD_NM = "당근"},..

정리노트 2024.07.24

MyBatis

mybatis – 마이바티스 3 | 시작하기 mybatis – 마이바티스 3 | 시작하기 mybatis.org 1. mybatis.jar 파일 설치Releases · mybatis/mybatis-3 (github.com) Releases · mybatis/mybatis-3MyBatis SQL mapper framework for Java. Contribute to mybatis/mybatis-3 development by creating an account on GitHub.github.com프로젝트 우클릭 → [properties] → [Java Build Path] → class path에 추가  2. SqlSessionFactory 생성Java 애플리케이션 초기화 부분이나 DB 작업 전에 실행Str..

정리노트 2024.07.11

ClassNotFoundException 해결 방법(ContextLoaderListener)

1. Servers → Tomcat 우클릭 → Clean 2. Java Build Path프로젝트 우클릭 → Properties → Java Build Path → Order and Export Tab 라이브러리 모두 체크이후 Clean, Build 후 재실행  3. [Proejct] → [Build Automatically]체크되어있는지 확인  4. Deployment Assembly프로젝트 우클릭 → Properties → Deployment AssemblyMaven Dependency 있는지 확인없으면 [Add] → [Java Build Path] 들어가서 추가 위의 방법으로 안 될 경우 다른 방법도 추가작성

정리노트/메모 2024.06.17

24.06.11. 노트

자바스크립트1. Object.create(Object1)2. indexOf()가 -1을 반환하는 경우3. toFixed()4. mCustomScrollbar()5. jQuery를 사용하는 즉시 실행 함수 1. Object.create(Object1)새로운 객체를 생성하고 이 객체의 내부 [Prototype]을 매개변수로 받은 객체 Object1로 설정함-> Object.create(Object1)로 만드는 객체는 Object1 객체의 변수와 메서드에 접근할 수 있다. 2. indexOf()가 -1을 반환하는 경우indexOf()는 매개변수 안의 문자를 찾는 메서드인데, 찾고자 하는 문자가 없는 경우 -1을 반환한다.다음과 같이 사용하면 찾고자 하는 문자가 있는 경우와 없는 경우로 나누어 코드를 작성할 수..

정리노트/메모 2024.06.11