Dev

·Dev/Spring boot
서론IoC 컨테이너는 설정에 따라 @Component, @Service 등의 어노테이션이 붙은 클래스를 컴포넌트 스캔을 통해 탐색하거나, 개발자가 명시적으로 등록한 빈 정보를 기반으로 빈을 생성하고 관리한다.탐색한 빈을 등록하고, 초기화하며, 요청에 따라 주입하고, 소멸까지 전 생명주기를 관리한다.이러한 일련의 과정을 통해 Spring IoC 컨테이너는 빈의 생명주기를 관리하게 되며, 이 생명주기는 빈의 스코프(scope)에 따라 달라질 수 있다. 그래서 이 빈의 스코프에 대해 알아보고자 한다.Bean Scope 종류스코프 (Scope) : 빈이 존재할 수 있는 범위싱글톤 (Singleton)기본적으로 빈이 생성될때의 스코프Spring 컨테이너당 빈(Bean) 인스턴스를 하나만 생성한다 ➡️ 하나만 생성..
·Dev/Book
[ 이번 챕터에서 중점으로 가져가야할 키워드 ]- 캡슐화, 다형성[ 이번 장에서 내 것으로 만들어야 할 질문 ] - 캡슐화란 무엇이고 왜 중요한가?- 다형성이란 무엇이며, 객체지향에서 어떻게 활용되는가?- 언제 추상클래스 또는 인터페이스를 사용하는가?- 메시지와 메서드의 차이는 무엇인가?- 객체가 협력한다는 것은 어떤 의미인가? 영화 예매 시스템요구사항할인 조건 : 가격의 할인 여부 결정 - 할인 조건 내 중복 가능순서 요건 ex) 매일 10번째 로 상영되는 영화 예매시 할인기간 조건 - 요일, 시작 시간, 종료 시간 ex) 매주 월요일 오전 10시 ~ 오전 11시할인 정책 - 하나의 할인 정책만 사용 가능금액 할인 정책예매 요금에서 일정 금액을 할인해주는 방식비율 할인 정책정가에서 일정 비율을 할인해주..
·Dev/Book
티켓 판매 애플리케이션 구현이벤트 당첨자에게 초대장(Invitation) 발송초대장을 받은 관객(Audience)은 티켓(Ticket)을 받고 관람 가능초대장이 없는 관객은 돈(amount)을 지불하고 관람 가능(구현시 내가 놓친 부분) 관객이 소지품(티켓, 돈, 초대장)을 보관할 용도인 가방(Bag) 필요✅ Bag 클래스에서 상태 조회 메서드(hasInvitation(), hasTicket())를 구현하면 더 객체지향적인 설계가 될 수 있음아래는 개선이 필요한 Theater 클래스의 코드 예시if (audience.getBag().getInvitation() == null){ ...} else {}if (audience.getBag().hasInvitation()) { ..
·Dev/Spring boot
📌 문제 상황 @Override @Transactional public MemberWithdrawHistoryDto cancel(Member loginMember, Long id) { MemberWithdrawHistory memberWithdrawHistory = memberWithdrawHistoryRepository.findById(id).orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_MEMBER_WITHDRAW_HISTORY)); if(!memberWithdrawHistory.getMember().equals(loginMember)){ // false (?) throw new CustomException(ErrorCode.INVALID_AU..
·Dev/Spring batch
“최소한의 자원으로 최대한의 효율을 내자 !” 배경 자바 기반의 표준 배치 기술의 부재 배치 처리에서 요구하는 재사용 가능한 자바 기반 배치 아키텍처 표준의 필요성이 대두 표준 : 표준 IO, JDBC, … JSR 일괄 처리를 위한 자바 표준이 없으니, Spring Batch 가 만들어지게됨 이상적인 배치를 위한 조건 배치 프로세스를 주기적으로 커밋 만약에, 대용량 데이터를 한번에 처리해야한다면??? 너무 큰 리소스가 필요하게된다. 주기적으로 커밋하기 위한 전략이 필요함 동시 다발적인 여러개의 Job의 배치 처리, 대용량 병렬 처리 Job끼리 독립적이고, 영향이 없어야하고, 다량의 Job, 용량이 큰 데이터는 병렬적(멀티 스레드)로 처리해야한다. 만약에 실패/중단이 된다면, 수동/스케쥴러에 의한 재시작이..
·Dev/Spring batch
일괄 처리 (Batch processing) 개별적으로 어떤 요청이 있을 때마다 실시간으로 통신하는 것이 아닌, 한꺼번에 일괄적으로 대량의 건을 처리 하는 것 배치 처리가 쓰이는 곳 주간, 월간 청구 / 급여 / 정산 특정한 조건의 사람들에게 무언갈 지급하는, 안내하는 행위 대량의 데이터를 주기적으로 받아와서, 가공해서 저장하는 등의 행위 배치 처리와 배치 프로그램을 사용 하는 이유 사람이 대용량의 데이터를 반복적인 태스킹을 한다면? 정말 비효율적 스케쥴러를 이용해서 만들어볼 수 있지 않을까? 만약에 중간에 중지하거나 실패하면…. 어디서부터 다시 해야하는지 찾아봐야됨 아니면.. 처음부터..? 😱 그럼 모든 프로젝트에서 배치처리를 구현하기 위해, 똑같은 지원 사양들(중지됐을 때 처리 방법, 어떻게 배치 처..
·Dev/Java
String 선언 방법 String s1 = new String("IT's your life"); String s2 = "Welcome ";// String만 허용됨 String s3 = s2 + s1; // Welcome IT's your life String은 덧셈을 허용하지만, String내부적으론 상수로 취급한다. 따라서 덧셈을 하게 되면 2개의 객체가 생성되고, 2개의 객체가 제거되는 작업이 필요로하게 된다. ⇒ String 연산은 편집이 많지 않은 문자열일 때 사용하자 💡 ⇒ 편집이 많아질때는? StringBuilder를 사용하자 String str1 = "Hello"; String str2 = str1 + 10; System.out.println(str2); // Hello10 System...
·Dev/JavaScript
단항평가 true고 false가 반환되는게 아니라 마지막에 끝나는 값 자체를 반환함 // 논리합 console.log(true || false) // true console.log(30 || 50) // 30 console.log(10 || 0) // 10 console.log(false || true) // true console.log('' || 100) // 100 console.log(false || false) // false (뒤에 false) console.log(undefined || 0) // 0 // 논리곱 console.log(true && true) // true (뒤에꺼) console.log(true && false) // false console.log(300 && 500) /..
·Dev/Python
# 함수 사용이유 : 반복적이고, 중복되는 일을 효율적으로 하기 위하여 # 함수 정의 방법 # def 함수명(parameter): # code # 함수 호출 # 함수명(parameter) # 함수 선언 위치 중요 - 함수 정의 후 선언 # 예제1 - return X def hello(world): print("Hello ", world) hello('Pytttthon !') hello(777777) # 예제2 - return O def hello_return(world): val = 'Hellllo '+ str(world) #숫자값이 들어오면 오류나기때문에 형변환 필수 return val str = hello_return('python!!!!!!!!!!!!!!!!!!!!!!!!!!') print(str)..
·Dev/Python
# 일반적인 방법 nums = [] for n in range(1,21): nums.append(n) print('일반적인 append :',nums) # list comprehension (리스트 컴프리헨션) nums2 = [ n for n in range(1,21,3)] print('리스트 컴프리헨션 :', nums2) print() # 1. 아래 딕셔너리에서 '가을'에 해당하는 과일을 출력하세요. q1 = {"봄": "딸기", "여름": "토마토", "가을": "사과"} for k in q1.keys(): if k == '가을' : print('q1 :', q1[k]) for k,v in q1.items(): if k == '가을' : print('q1 :', v) # print(''.join([q..