전체 글

아무거나 넣는 하드디스크
실무

[DB] 성능이 아쉬웠던 쿼리, 수정 내용 | 민민의 하드디스크 - 티스토리

개발을 하면서 중요한 부분은 도메인 지식, 개발 지식이라고 생각했다. 나 자체도 아쉬운 부분이 너무 많지만 배우는 입장에서, 쿼리 짤 때 배웠던 내용을 위주로 적어보려고 한다.틀린 내용이 있을 수도 있고, 업무마다 스타일도 다를 것이며 100프로 "A가 아쉽고 B가 정답이다."라는 것은 없다.그래서 내가 '배운 내용'을 바탕으로 작성하려고 한다. (보시다가 잘못된 내용이 있으면 고쳐주세요!)서브쿼리 짤 때, 가능한 필터 걸기서브쿼리는 업무가 복잡해질수록 많이 사용될 것이다.이유는, 테이블에서 가공한 데이터를 서브쿼리/뷰와 같은 형식으로 꺼내서 조인하여 사용한다.필터를 가급적 많이 걸어야 하는 이유는 풀스캔 방지이다. (비싸짐 -> 성능이 떨어짐)아쉬운 예-- SALES(1억건), PRODUCTS(10만건..

카테고리 없음

[Spring] 외부 API URL 호출 구현(RestTemplate / WebClient) | 민민의 하드디스크 - 티스토리

배치와 온라인 시스템이 분리되어 있어서, 스프링 배치에서 온라인 API를 호출해야 되는 상황이 있었다.타 시스템을 호출하기 위해 사용했던 방법을 적어보려고 한다.API 호출하기에 많은 방법들이 있지만, Spring에서 제공하는 http 클라이언트를 사용하여 API를 호출하려고 한다.대표적으로, RestTemplate와 WebClient가 있다.POST MAN으로 테스트하듯 API 호출할 수 있으며, ui없이 java로만 요청/응답 파싱 후 처리하는 느낌이었다.1. 실무에서 외부 API URL 호출 구현 방법 - 대표적인 방법들(Java 기준, 백엔드에서 외부 API 호출)1) HttpURLConnection (JDK 기본)장점: 라이브러리 추가 필요 없음.단점: 코드가 장황하고 불편함. 커넥션/스트림 관..

실무

[Spring] @Transactional과 Exception 처리 | 민민의 하드디스크 - 티스토리

1. @Transactional이란?스프링에서 데이터베이스의 트랜잭션 처리를 위해 사용하는 어노테이션이다.트랜잭션이란 한 번에 수행되어야 할 작업의 단위를 의미하고, 모두 성공하면 커밋, 하나라도 실패하면 롤백된다.트랜잭셔널 어노테이션은 보통 http 요청에서 CRUD 기능에 따라 옵션을 설정하여 사용한다.예를 들어, GET 요청은 조회 시 대부분 사용되기에 @Transactional(readOnly = true)를 사용한다.데이터는 소중하기 때문에, 삭제되거나 잘못된 작업에 의해 롤백되지 않으면 심각한 오류를 초래할 수도 있다. 2. 롤백 조건 – 왜 런타임 익셉션만 롤백할까?스프링의 기본 정책은 Unchecked Exception(즉, RuntimeException과 그 하위) 발생 시 자동 롤백하고..

실무

[FE] jQuery 반복문($.each) 사용 시 주의점 | 민민의 하드디스크 - 티스토리

jQuery 라이브러리 사용 중, 아래와 같은 에러가 발생했다.SyntaxError: Illegal continue statement: no surrounding iteration statementcontinue가 문제라는 것 같았다. 사실 continue문을 사용하는 것을 지양하라고 듣긴 했는데 위 에러는 처음 보는 에러여서 검색해보니, jQuery $.each 또는 foreach 문에서는 continue, break, yield 문을 사용하지 못 한다고 한다. jQuery $.each() 반복문에서 continue 사용 불가 이유JavaScript에서 continue는 전통적인 반복문(for, while, do...while) 내에서만 작동하는 제어문임.for(let i=0; i 그런데 jQuery ..

실무

[Spring] 스프링배치 흐름 및 @Schedueld 어노테이션 사용 시 유의사항 | 민민의 하드디스크 - 티스토리

배치(스프링배치)란?스프링 배치는 대용량 데이터 처리에 특화된 프레임워크이다. 배치작업은 데이터를 실시간으로 처리하는게 아니라, 일괄적으로 모아서 한번에 처리하는 작업이다. 예를 들어, 쇼핑몰(온라인 웹서비스)에서 매일 매출액에 대한 금액을 조회하는 배치가 있다고 가정해보자.온라인에서 일어나는 데이터변화에 따라 배치주기(ex, 매일 오전 6시)에 의해 배치가 돌게 된다. 온라인에서 사용자나 개발자가 직접 실행하는게 아닌, 통계/SMS전송/대용량CUD 처리 등을 위해 특화된 작업이다. 스프링 배치 흐름 설명기본 구성 요소Job: 배치 단위 작업. 여러 Step을 포함할 수 있음.Step: 실제 처리 단위. 일반적으로 Reader → Processor → Writer 구조로 구성됨.JobLauncher:..

실무

[DB] CONNECT BY와 WITH RECURSIVE 계층형 데이터 조회 | 민민의 하드디스크 - 티스토리

내용신청 마스터테이블이 있을 때, 키값은 순번(신청순번 시퀀스)SN이 계속 쌓인다. UP_SN컬럼도 있다. 해당 컬럼은 상위 이력을 보기 위해 존재하는 컬럼이다. 신청순번/상위신청순번이 있다고 가정.신청되고 반려되어도 재신청이 가능하고, 신청 건에 대한 모든 이력을(반려포함) 보고싶을 때 사용하려고 설계되었다. - 처음 신청 시에는 상위 순번이 없음 (UP_SN : NULL)- 신청 건에서 반려처리되면 재신청이 가능 (재신청 시 새로운 순번으로 신청내용 INSERT 됨)- 반려된 건에서 재신청 시 SN이 새로운 신청 건의 UP_SN 값으로 들어감. 예제 데이터디테일테이블에는 신청 내역이 있고,반려되면 새로운 신청(up_sn이 이전 sn을 참조)승인되면 더 이상 재신청이 없음snup_sn상태신청자신청일..

실무

[Spring] 데이터 전달하기: Model, Map, DTO 비교와 최적 활용 | 민민의 하드디스크 - 티스토리

몇개에 실무 프로젝트를 진행하면서 많이 배우고 느낀 것 중 하나는 데이터 전달 방식이다.실무에서는 데이터를 주고받을 때 여러 방식이 사용되는데, 주요 방식으로는 Model 클래스 사용, Map 사용, DTO(Entity) 사용 등이 있다. 각각의 방식이 효율적인 경우와 장단점에 대해 생각해봤다. 1. Model 클래스 사용Model은 Spring MVC에서 View와 데이터를 공유하는 용도로 사용주로 컨트롤러에서 화면(View)으로 데이터를 넘길 때 사용됨.Thymeleaf, JSP 같은 템플릿 엔진에서 활용됨.예시@Controllerpublic class UserController { @GetMapping("/user") public String getUser(Model model) { ..

실무

[DB] 트랜잭션과 데이터베이스 락(Transction & DB Lock) | 민민의 하드디스크 - 티스토리

서론 (개인적인 생각)대부분 웹프로그래밍 업무는 CRUD가 기본 프로세스, 그 외에 전자결재 API, 외부 연계(인터페이스), 내부 연계, 기관 연계 등등 개발의 중점보다는(기본은 되는 정도) 업무(도메인)의 중점(중요도)이 더 크다고 생각한다.예시로,신청과 관리- 내부에서도 승인(결재 프로세스)와 같은 구분이 있어야 visible 되는 기능 또는 화면도 있고,  어떤 흐름에 따라 변경이 잦은 프로세스도 있을 것이다. 신청페이지와 관리자페이지의 상호작용이 중요하다고 생각이 들었다..업무를 잘못 이해하면 개발을 아무리 잘해도 고객의 만족도를 높이지 못한다는 것.그래서 더 많은 테스트를 해보고, JUnit과 같이 코드로 진행하는 테스트로 먼저 검증하고 사용자 테스트를 거치거나 하는 식이다. (공공SI는 대부..

민민2
민민의 하드디스크