Readable Code 적용
·
Language/Java
인프런 워밍업 스터디에서 진행하는 readable code 강의를 수강 중이다. 출석 체크 이벤트 기능 개발 업무를 한 적이 있는데 단순 구현만 되어 있는 코드로, 읽기 좋은 코드는 절대 아니라 생각되어 배운 내용을 적용해보려 한다.구체적으로 표현되어 있는 코드 추상화 (저수준 -> 고수준)읽는 사람의 사고 depth 줄이기강의에서는 여러 가지 방법을 소개하지만 위 내용을 중점적으로 적용해보려 한다.아래는 이벤트 처리 프로세스이다. 출석 체크 이벤트 처리 프로세스 금일 출석 체크 여부 확인이벤트 참여 등록 처리이벤트 쿠폰 조회 및 쿠폰 타입별 분리정책에 따른 쿠폰 지급쿠폰은 연속 쿠폰과 일일 쿠폰이 있다.일일 쿠폰은 사용자가 출석하면 즉시 지급되는 쿠폰이고,연속 쿠폰은 관리자 페이지에서 지정한 연속 일수..
AspectJ & Java 호환성 이슈
·
Language/Java
출석체크 이벤트 기능을 구현 중이다.관리자페이지에서 해당 이벤트에 대한 지급 쿠폰을 등록할 수 있다.1. 출석체크 시 무조건 지급하는 일일 쿠폰2. 연속 출석 시 지급하는 연속 쿠폰 -> admin에서 연속 출석 일수를 설정할 수 있다. 각 쿠폰마다 여러 장 등록될 수 있다.ex) 일일 쿠폰 3장 / 연속 쿠폰 2장 사용자가 출석 체크 이벤트에 참여하면서버에서는 해당 이벤트로 등록된 쿠폰 목록을 모두 조회하고,사용자의 이벤트 참여 상태에 따라 어떤 쿠폰을 지급해야할 지 판단한다. 쿠폰 목록을 조회할 때, 일일/연속 구분 없이 해당 이벤트로 등록된 모든 쿠폰을 조회한다.쿠폰 조회 후, 쿠폰마다 가지고 있는 type으로 일일/연속 쿠폰으로 분리한다.일일 쿠폰 타입 : D연속 쿠폰 타입 : C// 출석체크 이..
[Oracle] 주소 검색 기능 개선
·
데이터베이스
주소 검색 기능을 개선하는 업무를 진행 중이다. '성수이로 10길'이라는 단어로 검색을 했을 때 기존 주소 검색 시간은 15초 ~ 17초이다.-- ORACLESELECT A.POST_NO, A.SIDO, A.SIGUGUN, ...FROM 주소_테이블 AWHERE A.SEARCH_ZIP LIKE '%'|| :키워드 ||'%' 이런 형식으로 쿼리가 작성되어 있고, SEARCH_ZIP 컬럼은 인덱스 설정이 되어있다.인덱스가 설정되어 있는데도 왜 이럴까. 1. 인덱스가 사용되지 않아서 Table Full Scan 되고 있는 걸까?2. 인덱스가 사용되고 있는지 확인할 수 있는 방법은 없나? 먼저 인덱스가 사용되고 있는지 확인해야 하는데Oracle에서는 실행할 쿼리 앞에 Explai..
[ch.15] 자바를 위한 함수형 접근 방식
·
함수형 프로그래밍
OOP & FP 원칙 비교OOP 원칙현실 세계의 문제를 모델링하기 위해 비유를 기반으로 문제 해결 방식을 제공한다.객체는 인터페이스와 같은 공공 계약을 통해 상호작용하고, 자신의 상태를 관리하며 특정 책임을 가진다.OOP는 현실 세계를 반영하고 지속적인 변화를 처리하기 위해 코드를 구조화하고 조직화하는 데 효과적이다. FP 원칙수학적 원리와 람다 계산법에 기반을 두고 데이터 변환에 중점을 둔다.선언형 코드 스타일을 사용하며, 비유를 사용하는 대신 함수와 데이터 구조로 직접 모델링한다.FP로 변경 가능한 상태를 동시성 환경에서 처리하거나 예상치 못한 사이트 이펙트를 줄일 수 있다. OOP vs FPOOP는 현실 세계의 비유를 사용하며 복잡성을 캡슐화하는 반면, FP는 수학적 원칙을 따르면서 단순화를 추구한..
[ch.14] 함수형 디자인 패턴
·
함수형 프로그래밍
디자인 패턴생성패턴객체의 생성 방식을 결정하는 패턴 구조 패턴객체를 조합해 더 큰 구조나 강화된 객체를 만드는 패턴 행동패턴객체 간의 책임과 통신을 다루는 패턴 자주 사용되는 패턴1. 팩토리 패턴객체를 생성하는 방법의 세부 사항을 드러내지 않고 객체의 인스턴스를 생성한다. 도형 생성 예제Shape: 도형의 모서리, 색상, 타입을 정의하는 공통 인터페이스ShapeType: 도형의 타입과 색상을 식별하는 열거형ShapeFactory: 타입과 색상을 기반으로 도형을 생성하는 Factory객체 지향 접근 방식public interface Shape { int corners(); Color color(); ShapeType type();}public enum ShapeType { CIRCLE..
[ch.13] 비동기 작업
·
함수형 프로그래밍
동기 & 비동기동기(Synchronous)작업을 순차적으로 수행하며, 하나의 작업이 완료된 후에 다음 작업을 시작할 수 있다.호출한 작업이 완료될 때까지 호출자는 대기 상태에 있다.작업의 결과를 즉시 반환받는다.비동기(Asynchronous)작업의 완료 여부와 관계없이 다음 작업을 시작하는 방식이다.작업의 완료를 콜백이나 이벤트를 통해 알림 받는다.동기와 비동기는 데이터의 순서와 결과 처리에 관점을 둔다. Blocking자신의 작업을 진행하다가 다른 주체의 작업이 시작되면, 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작한다. Non-Blocking다른 주체의 작업에 관련없이자신의 작업을 하는 것Blocking과 Non-Blocking은 작업 제어에 관점을 둔다. Sync-Blocking: 메인 ..