🌏 WEB

πŸƒ‍♂️ κ³„μ†ν•΄μ„œ μ—…λ°μ΄νŠΈ ν•˜κΈ° πŸƒ‍♂️ λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ 2022/03/29 1. Querydsl 을 μ™œ μ‚¬μš©ν• κΉŒ? 2. μž‘λ™λ°©μ‹? 3. μ˜μ‘΄μ„± 4. Repository ꡬ쑰 5. Projection 의 λŒ€ν•œ κ³ μ°° ... 6. 동적쿼리 (BooleanBuilder) 7. ExpressionUtils 8. μ •λ ¬ νƒ€μž…μ— λ”°λ₯Έ μ •λ ¬ 처리 Querydsl 을 μ™œ μ‚¬μš©ν• κΉŒ? JPA λ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ (@Query 포함) 쑰회 κΈ°λŠ₯에 λŒ€ν•œ ν•œκ³„κ°€ μžˆλ‹€. 동적인 쿼리인 경우인데 예λ₯Ό λ“€μ–΄ μ£Όλ¬Έ νŽ˜μ΄μ§€λ₯Ό 검색 ν•œλ‹€κ³  ν–ˆμ„ λ•Œ μΉ΄ν…Œκ³ λ¦¬ or μƒν’ˆλͺ… or κΈ°μ—…λͺ… λ“±λ“±... 으둜 검색 쑰건이 λ‹¬λΌμ§€λŠ” 뢀뢄이닀. κ·Έλž˜μ„œ μ‚¬μš©ν•˜κ²Œ 된 것이 λ°”λ‘œ Querydsl ν”„λ ˆμž„μ›Œν¬ 이닀. - νƒ€μž… 체크가 λ°”λ‘œ κ°€λŠ₯ν•˜λ‹€ - μžλ°” μ½”λ“œλ₯Ό 기반으..
μ»΄νŒŒμΌκ³Όμ •μ—μ„œ 생성해 μ£ΌλŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ” javaλΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. @Value 기본적으둜 λΆˆλ³€κ°μ²΄λ‘œ λ§Œλ“€μ–΄μ€€λ‹€. class에 μ„ μ–Έν•˜λ©΄ μ•„λž˜μ˜ μ–΄λ…Έν…Œμ΄μ…˜μ΄ 기본적으둜 ν¬ν•¨λœλ‹€. @Getter @AllArgsConstructor @ToString @EqualsAndHashCode @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) ν•˜μ§€λ§Œ @Setter λŠ” ν¬ν•¨λ˜μ§€ μ•ŠλŠ”λ‹€. μ™œλƒν•˜λ©΄ 기본적으둜 λΆˆλ³€μ„±μ„ 보μž₯ν•˜κΈ° λ•Œλ¬Έμ— setterλ₯Ό μƒλž΅ν•˜λŠ” 것은 λ‹Ήμ—°ν•˜λ‹€ @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) λŠ” privateμ΄λ‚˜ final 을 μ‚¬μš©ν•  수 있게 ν•΄μ€€λ‹€. μ΅œμ’…μ μœΌλ‘œ @Value ..
μŠ€λ ˆλ“œν’€μ€ μž‘μ—… μ²˜λ¦¬μ— μ‚¬μš©λ˜λŠ” μŠ€λ ˆλ“œλ₯Ό μ œν•œλœ 개수만큼 μ •ν•΄ 놓고 μž‘μ—… 큐에 λ“€μ–΄μ˜€λŠ” μž‘μ—…λ“€μ„ ν•˜λ‚˜μ”© μŠ€λ ˆλ“œκ°€ 맑아 μ²˜λ¦¬ν•œλ‹€. 병렬 μž‘μ—… μ²˜λ¦¬κ°€ λ§Žμ•„μ§€λ©΄ μŠ€λ ˆλ“œ κ°œμˆ˜κ°€ μ¦κ°€λ˜λŠ”λ° 그에 λ”°λ₯Έ μŠ€λ ˆλ“œ 생성, μŠ€μΌ€μ€„λ§μœΌλ‘œ 인해 CPUκ°€ λ°”λΉ μ Έ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ λŠ˜μ–΄λ‚œλ‹€. λ”°λΌμ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯이 μ €ν™” λ˜λ―€λ‘œ μŠ€λ ˆλ“œ 풀을 μ‚¬μš©ν•˜μ—¬ μŠ€λ ˆλ“œ 전체 κ°œμˆ˜κ°€ λŠ˜μ–΄λ‚˜μ§€ μ•Šλ„λ‘ ν•΄μ•Όν•œλ‹€. μŠ€λ ˆλ“œν’€ 생성 public class ExecutorExample { public static void main(String[] args) { // 1개의 μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μŠ€λ ˆλ“œν’€ 생성 ExecutorService singleThread = Executors.newSingleThreadExecutor(); // μŠ€λ ˆλ“œλ₯Ό μ œν•œ 없이 사..
데λͺ¬ μŠ€λ ˆλ“œ μ£Ό μŠ€λ ˆλ“œμ˜ μž‘μ—…μ„ λ•λŠ” 보쑰적인 역할을 μˆ˜ν–‰ν•˜λŠ” μŠ€λ ˆλ“œμž…λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ£Ό μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ˜λ©΄ 데λͺ¬ μŠ€λ ˆλ“œλŠ” κ°•μ œμ μœΌλ‘œ μžλ™ μ’…λ£Œλ©λ‹ˆλ‹€. 적용 μ˜ˆλ‘œλŠ” μžλ™ μ €μž₯, 가비지 컬렉터 등이 μžˆλŠ”λ° 이 κΈ°λŠ₯듀은 μ£Ό μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ˜λ©΄ 같이 μ’…λ£Œλ©λ‹ˆλ‹€. 데λͺ¬ μŠ€λ ˆλ“œ λ‚΄μš©μ„ μž‘μ„±ν•΄μ€€ ν›„ public class DaemonThread extends Thread{ public void save(){ // μžλ™ μ €μž₯ } public void run(){ save(); } } 메인 μŠ€λ ˆλ“œμ—μ„œ setDaemon 을 ν•΄μ£Όλ©΄ λœλ‹€. public class mainThread(){ public static void main(String[] args){ DaemonThread daemonThread = new Dae..
μŠ€λ ˆλ“œλŠ” μ‹€ν–‰λŒ€κΈ° μƒνƒœμ™€ μ‹€ν–‰ μƒνƒœλ₯Ό λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μžμ‹ μ˜ run() λ©”μ„œλ“œλ₯Ό μ‘°κΈˆμ”© μ‹€ν–‰ν•©λ‹ˆλ‹€. κ·Έ ν›„ 더이상 μ‹€ν–‰ν•  μ½”λ“œκ°€ 없을 λ•Œ μ’…λ£Œ μƒνƒœκ°€ λ©λ‹ˆλ‹€. μŠ€λ ˆλ“œ 객체 생성 -> start() -> μ‹€ν–‰λŒ€κΈ°(μŠ€μΌ€μ€„λ§μœΌλ‘œ 인해) μ‹€ν–‰ -> μ’…λ£Œ - μŠ€λ ˆλ“œ μŠ€μΌ€μ€„λ§μœΌλ‘œ μ„ νƒλœ μŠ€λ ˆλ“œκ°€ cpuλ₯Ό μ μœ ν•˜κ³  run() λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•œλ‹€ (μ‹€ν–‰ μƒνƒœ) - μŠ€λ ˆλ“œ μŠ€μΌ€μ€„λ§μ— μ˜ν•΄ λ‹€μ‹œ μ‹€ν–‰λŒ€κΈ° μƒνƒœλ‘œ λŒμ•„κ°ˆ 수 μžˆλ‹€.(μ‹€ν–‰λŒ€κΈ° μƒνƒœ) μ–΄λ–»κ²Œ μ œμ–΄ν• κΉŒ? 1. 주어진 μ‹œκ°„λ™μ•ˆ μΌμ‹œ 정지 sleep() μ‹€ν–‰ 쀑인 μŠ€λ ˆλ“œλ₯Ό 일정 μ‹œκ°„ 멈좜 수 있게 ν•œλ‹€. Thread 클래슀의 정적 λ©”μ„œλ“œμΈ sleep() 을 μ‚¬μš©ν•œλ‹€. Thread.sleep(1000) // 1초 -> λ°€λ¦¬μ„Έμ»¨λ“œ (1/1000) λ‹¨μœ„ * 주어진 μ‹œκ°„μ΄ λ˜κΈ°μ „..
동기화 λ©”μ„œλ“œμ™€ 동기화 블둝 λ©€ν‹°μŠ€λ ˆλ“œ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” μŠ€λ ˆλ“œλ“€μ΄ 객체λ₯Ό κ³΅μœ ν•΄μ„œ μž‘μ—…ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€. μŠ€λ ˆλ“œaκ°€ μ‚¬μš©ν•˜λ˜ 객체λ₯Ό b에 μ˜ν•΄ μƒνƒœκ°€ λ³€κ²½ 될 수 μžˆμ–΄μ„œ aκ°€ μ˜λ„ν–ˆλ˜ 결과와 λ‹¬λΌμ§ˆ 수 있기 λ•Œλ¬Έμ— μ‚¬μš©μ€‘μΈ μŠ€λ ˆλ“œμ˜ μž‘μ—…μ΄ 끝날 λ•ŒκΉŒμ§€ 객체에 μž κΈˆμ„ κ±Έμ–΄ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ μ‚¬μš©ν•  수 없도둝 ν•΄μ•Ό ν•œλ‹€. 단 ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” μž„κ³„ μ˜μ—­μ„ λ§Œλ“€μ–΄μ£Όλ©΄ λœλ‹€. -> μŠ€λ ˆλ“œκ°€ 객채 λ‚΄λΆ€μ˜ 동기화 λ©”μ†Œλ“œ λ˜λŠ” 블둝에 λ“€μ–΄κ°€λ©΄ μ¦‰μ‹œ 객체에 μž κΈˆμ„ κ±Έμ–΄ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ μ˜μ—­μ— μžˆλŠ” μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ§€ λͺ»ν•˜λ„둝 ν•œλ‹€. λ©”μ„œλ“œ μ‹€ν–‰ μ’…λ£Œ 되면 잠금이 ν’€λ¦°λ‹€. μ‚¬μš©λ°©λ²•μ€ μ•„λž˜μ™€ κ°™λ‹€ public synchronized void method(){ // μž„κ³„ μ˜μ—­ } 일뢀 λ‚΄μš©λ§Œ λ§Œλ“€κ³  μ‹Άλ‹€λ©΄ μ•„λž˜μ™€ 같이 λΈ”..
λ©€ν‹° ν”„λ‘œμ„ΈμŠ€κ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‹¨μœ„μ˜ λ©€ν‹° νƒœμŠ€ν‚Ήμ΄λΌλ©΄ λ©€ν‹° μŠ€λ ˆλ“œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄λΆ€μ—μ„œμ˜ λ©€ν‹° νƒœμŠ€ν‚Ήμ΄λΌκ³  λ³Ό 수 μžˆλ‹€. λ©€ν‹° μŠ€λ ˆλ“œλŠ” λ‹€μ–‘ν•œ κ³³μ—μ„œ μ‚¬μš©λœλ‹€. 1. λŒ€μš©λŸ‰ λ°μ΄ν„°μ˜ 처리 μ‹œκ°„μ„ 쀄이기 μœ„ν•΄ 데이터λ₯Ό λΆ„ν• ν•΄μ„œ λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•˜λŠ” κ³³μ—μ„œ μ‚¬μš© 2. UIλ₯Ό 가지고 μžˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ„€νŠΈμ›Œν¬ 톡신을 ν•˜κΈ° μœ„ν•΄ μ‚¬μš© 3. λ‹€μˆ˜ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” μ„œλ²„λ₯Ό κ°œλ°œν•  λ•Œ - 메인 μŠ€λ ˆλ“œ 메인 μŠ€λ ˆλ“œκ°€ μž‘μ—… μŠ€λ ˆλ“œλ³΄λ‹€ λ¨Όμ € μ’…λ£Œλ˜λ”λΌλ„ μž‘μ—… μŠ€λ ˆλ“œκ°€ 계속 μ‹€ν–‰ 쀑이면 ν”„λ‘œμ„ΈμŠ€λŠ” μ’…λ£Œλ˜μ§€ μ•ŠλŠ”λ‹€. - μž‘μ—… μŠ€λ ˆλ“œ λͺ‡ 개의 μž‘μ—…μ„ λ³‘λ ¬λ‘œ 싀행할지 κ²°μ •ν•˜κ³  각 μž‘μ—…λ³„λ‘œ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•œλ‹€. (μž‘μ—…1) (μž‘μ—…2) (ν”„λ‘œκ·Έλž¨μ—μ„œ λ³‘λ ¬λ‘œ μ‹€ν–‰ν•  μž‘μ—…μ„ κ²°μ •) -> λ©”μΈμŠ€λ ˆλ“œ μŠ€λ ˆλ“œ1 μŠ€λ ˆλ“œ2 Thread클..
userState보닀 더 λ‹€μ–‘ν•œ μ»΄ν¬λ„ŒνŠΈ 상황에 따라 λ‹€μ–‘ν•œ μƒνƒœλ₯Ό λ‹€λ₯Έ κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈ ν•΄ μ£Όκ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” Hook λ¦¬λ“€μ„œλŠ” ν˜„μž¬ μƒνƒœ, 그리고 μ—…λ°μ΄νŠΈλ₯Ό μœ„ν•΄ ν•„μš”ν•œ 정보λ₯Ό 담은 μ•‘μ…˜ 값을 전달받아 μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.(μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€ λ•ŒλŠ” λ°˜λ“œμ‹œ λΆˆλ³€μ„±μ„ μ§€μΌœ μ£Όμ–΄μ•Ό ν•œλ‹€) 예제둜 μ—¬λŸ¬ μΈν’‹μ˜ μƒνƒœλ₯Ό μ €μž₯ν•΄λ΄…μ‹œλ‹€! import React,{useReducer} from 'react'; function reducer(state,action){ retunr{ ...state, [action.name] = action.value }; } μš°μ„  μœ„μ™€ 같이 reducer ν•¨μˆ˜λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. 1. ...stateλŠ” 기쑴에 μžˆλŠ” state 값듀을 볡사 μ‹œν‚€λŠ”κ²ƒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 2. actio..
import React, { Component } from 'react'; class LifeCycleSample extends Component{ state={ error:false, number:0, color:null, } myRef = null; // μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€ λ•Œ 처음으둜 μ‹€ν–‰λœλ‹€. // 초기 stateλ₯Ό μ •ν•œλ‹€. constructor(props){ super(props); console.log('constructor'); } // props둜 λ°›μ•„ 온 값을 state에 λ™κΈ°ν™”μ‹œν‚€λŠ” μš©λ„ // μ»΄ν¬λ„ŒνŠΈκ°€ 마운트될 λ•Œ, μ—…λ°μ΄νŠΈλ  λ•Œ 호좜 static getDerivedStateFromProps(nextProps,prevState){ console.log('getDerivedStateFrom..
ν”„λ‘μ‹œ Team에 μ†ν•΄μžˆλŠ” Member λ₯Ό μ‘°νšŒν•  μ‹œ TeamκΉŒμ§€ μ‘°νšŒν•  ν•„μš”κ°€ μžˆμ„κΉŒ? λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ—μ„œ ν•„μš”ν•˜μ§€ μ•Šμ„ λ•Œκ°€ μžˆλŠ”λ° 항상 Team을 ν•¨κ»˜ μ‘°νšŒν•œλ‹€λ©΄ λ‚­λΉ„κ°€ λ°œμƒλœλ‹€. 이 λ‚­λΉ„λ₯Ό ν•˜μ§€ μ•ŠκΈ° μœ„ν•΄ ν”„λ‘μ‹œλΌλŠ” 갠며으둜 ν•΄κ²°ν•œλ‹€. - μ‹€μ œ 클래슀λ₯Ό 상속 λ°›μ•„μ„œ λ§Œλ“€μ–΄μ§€κΈ° λ•Œλ¬Έμ— 겉 λͺ¨μ–‘이 κ°™λ‹€ - μ‚¬μš©ν•˜λŠ” μž…μž₯μ—μ„œλŠ” μ§„μ§œ, κ°€μ§œ 객체인지 κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•˜λ©΄ λœλ‹€. - ν”„λ‘μ‹œ κ°μ²΄λŠ” μ‹€μ œ 객체의 μ°Έμ‘°λ₯Ό 보관 -> ν”„λ‘μ‹œ 객체λ₯Ό ν˜ΈμΆœν•˜λ©΄ ν”„λ‘μ‹œ κ°μ²΄λŠ” μ‹€μ œ 객체의 λ©”μ†Œλ“œ 호좜 em.find() : λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό ν†΅ν•΄μ„œ μ‹€μ œ μ—”ν‹°ν‹° 객체 쑰회 em.getReference() : λ°μ΄ν„°λ² μ΄μŠ€ 쑰회λ₯Ό λ―Έλ£¨λŠ” κ°€μ§œ(ν”„λ‘μ‹œ) μ—”ν‹°ν‹° 객체 쑰회 // ν˜ΈμΆœν•œ μˆœκ°„ 쿼리 μ‹€ν–‰ Member findMember..
상속관계 맀핑 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” 상속 관계가 μ—†λ‹€.(μŠˆνΌνƒ€μž… μ„œλΈŒνƒ€μž… κ΄€κ³„λΌλŠ” λͺ¨λΈλ§ 기법이 객체 상속과 μœ μ‚¬ν•˜λ‹€) μŠˆνΌνƒ€μž… μ„œλΈŒνƒ€μž… 논리 λͺ¨λΈμ„ μ‹€μ œ 물리 λͺ¨λΈλ‘œ κ΅¬ν˜„ν•˜λŠ” 방법 1. 각각 ν…Œμ΄λΈ”λ‘œ λ³€ν™˜ -> 쑰인 μ „λž΅ (정석) - ν…Œμ΄λΈ” μ •κ·œν™” - μ™Έλž˜ ν‚€ μ°Έμ‘° 무결성 μ œμ•½μ‘°κ±΄ ν™œμš© κ°€λŠ₯ - μ €μž₯곡간 νš¨μœ¨ν™” - μ‘°νšŒμ‹œ 쑰인을 많이 μ‚¬μš© -> μ„±λŠ₯ μ €ν•˜, 쑰회 쿼리가 λ³΅μž‘ν•¨ - 데이터 μ €μž₯μ‹œ INSERT 쿼리가 2번 호좜 λœλ‹€. λΉ„μ§€λ‹ˆμŠ€μ μœΌλ‘œ μ€‘μš”ν•˜κ³  λ³΅μž‘ν•  λ•Œ 선택! λΆ€λͺ¨ 클래슀 μ„€μ • @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn μžμ‹ 클래슀 μ„€μ • -> dtype에 ν‘œμ‹œλ  이름을 μ •ν•΄ 쀄 경우 @DiscriminatorVa..
연관관계 λ§€ν•‘μ‹œ 고렀사항 3가지 1. 닀쀑성 2. 단방ν–₯, μ–‘λ°©ν–₯ 3. μ—°κ΄€κ΄€κ³„μ˜ 주인 - 객체 μ–‘λ°©ν–₯ κ΄€κ³„λŠ” μ°Έμ‘°κ°€ 2ꡰ데 있기 λ•Œλ¬Έμ— λ‘˜μ€‘ ν…Œμ΄λΈ”μ˜ μ™Έλž˜ ν‚€λ₯Ό 관리할 곳을 지정해야함 - μ™Έλž˜ ν‚€λ₯Ό κ΄€λ¦¬ν•˜λŠ” μ°Έμ‘° - 주인의 λ°˜λŒ€νŽΈ : μ™Έλž˜ 킀에 영ν–₯을 주지 μ•ŠμŒ, λ‹¨μˆœ 쑰회 λ‹€λŒ€μΌ[N:1] κ°€μž₯ 많이 μ‚¬μš©ν•¨ λ‹¨λ°˜ν–₯ μ•„λž˜μ™€ 같이 [N]μ—μ„œ μ™Έλž˜ ν‚€λ₯Ό κ΄€λ¦¬ν•˜κ³  Team을 쑰회 ν•˜κ³  μΆ”κ°€ν•  수 μžˆλ‹€. Team에 μ„œλŠ” μ‘°νšŒν•˜μ§€ λͺ»ν•¨ -> Teamμ—μ„œ Member을 μ‘°νšŒν•˜λŠ”μΌμ΄ λΉˆλ²ˆν•˜λ‹€κ³  ν•˜λ©΄ -> μ–‘λ°˜ν–₯ 으둜 λ§€ν•‘ν•΄μ£ΌλŠ”κ²Œ μ’‹μŒ. μ–‘λ°˜ν–₯ λ‹¨λ°˜ν–₯μ—μ„œ TEAM이 MEMBERλ₯Ό mapped by λ₯Ό μΆ”κ°€ν•˜μ—¬ MEMBERλ₯Ό μ‘°νšŒν•  수 μžˆλ‹€. (읽기 μ „μš©) μΌλŒ€λ‹€[1:N] 1이 μ—°κ΄€κ΄€κ³„μ˜ 주인이닀. 단방ν–₯ TEAM μ—μ„œ..
μ• μ •μ“°
'🌏 WEB' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (2 Page)