Project
TimeTidy 프로젝트 회고
1. 기획프로젝트 소개 및 제작 동기TimeTidy는 사용자에게 쉬운 일정 관리와 직관적인 일정 공유를 제공하는 일정 관리 사이트이다. 많은 일정 관리 사이트들을 사용해본 결과, 내 기준 직관적으로 와닿는 일정 관리 사이트들이 없었다. 물론 많은 사이트들에는 좋은 기능들이 많았지만, 특히 todoist는 유료로 기능들이 제한되어 있어 사용하기 어려웠다. 학생 신분이라 정기적으로 결제하여 서비스를 이용하는데는 부담이 있었고 기존 서비스를 운영하는 사이트들에 비해 기능은 제한적이고 많은 기능을 담을 수는 없었지만, 그래도 나름 내 기준에는 직관적이고 유료로 제한되었던 캘린더 기능을 간단하게나마 구현하고자 하였다. 일정 관리 어플리케이션 시장 분석 및 동향우선 일정 관리 어플리케이션을 만들기 위해서는 시장 분..
Java/Spring Boot
[Java / Spring Boot] ControllerAdvice
ControllerAdvice주로 전역적인 예외처리, 바인딩 설정, 모델 객체에 데이터를 추가하는데 사용AOP 개념이 적용된 도구컨트롤러를 대상으로 광범위하게 간섭이 가능예외처리, 파라미터 변조 등이 가능 바인딩 설정빈 문자열을 null로 바인딩//@ControllerAdvice(annotations = {Controller.class}) // Annotation으로 간섭@ControllerAdvice(basePackages = {"com.kh.spring09.controller"}) // package로 간섭public class EmptyStringControllerAdvice { @InitBinder // 컨트롤러 처리 전에 사전 밑작업을 할 수 있는 메서드 public void initBinde..
Oracle
[Oracle] Join과 View
Join여러 개의 테이블을 하나로 합쳐서 원하는 데이터를 조회할 때 사용하는 SQL 연산inner join두 테이블에서 일치하는 행만 반환`on` 조건을 만족하는 경우만 결과로 출력select A.*, B.*from employees Ainner join departments Bon A.department_id = B.department_id; left outer join왼쪽 테이블의 모든 행을 가져오고, 오른쪽 테이블에서 일치하는 행이 있으면 가져오며, 없으면 `null`을 반환select A.*, B.*from employees Aleft outer join departments Bon A.department_id = B.department_id; right outer join오른쪽 테이블의 모든 행..
Java/Spring Boot
[Java / Spring Boot] 파일 첨부
파일 업로드multipart configuration#multipart configurationspring.servlet.multipart.enabled=truespring.servlet.multipart.max-file-size=1MBspring.servlet.multipart.max-request-size=10MBenabled파일 업로드 기능 활성화 max-file-size업로드할 수 있는 파일 최대 크기 max-request-size`HTTP` 요청의 최대 크기 attachment 테이블 생성파일 번호, 이름, 타입, 크기 컬럼 생성create table attachment(attachment_no number primary key,attachment_name varchar2(255) not nul..
Java/Spring Boot
[Java / Spring Boot] Service
Service비즈니스 로직을 처리하는 컴포넌트컨트롤러와 리파지토리 사이에서 중재 역할을 함`@Service`로 서비스 등록@Servicepublic class AttachmentService { @Autowired private AttachmentDao attachmentDao; public int save(MultipartFile attach) throws IllegalStateException, IOException { if (attach.isEmpty()) return -1; File dir = new File("D:/upload"); dir.mkdirs(); int attachmentNo = attachmentDao.sequence(); File target = new File(d..
Oracle
[Oracle] hierarchy query
hierarchy query계층형 데이터를 조회하기 위한 쿼리부모-자식 관계를 가진 데이터를 처리할 때 사용주로 자기 참조(`Self-Refencing`) 테이블에서 사용트리 구조 정의 가능select * from board connect by prior board_no = board_target start with board_target is nullorder siblings byboard_group desc,board_no asc;connect by prior계층형 쿼리를 작성할 때 부모와 자식 관계 정의`prior` 키워드 바로 뒤에오는 항목은 부모를 의미, 그 뒤 항목은 자식을 의미 start with계층 구조의 시작점을 정의항목이 `null`인 계층에서 시작, 즉 루트 항목부터 시작 order ..
Oracle
[Oracle] rownum과 top n query
rownum쿼리 결과에서 각 행에 대해 고유한 순번을 할당하는 가상 컬럼행들이 선택되는 순서에 따라 할당데이터가 반환되는 순서대로 번호 매김페이지네이션이나 특정 순서대로 데이터를 추출할 때 사용 top n query일반적으로 특정 조건을 만족하는 상위 N개의 행을 선택하는 쿼리서브 쿼리를 사용하여 구문을 처리함select * from ( select rownum rn, TMP.* from ( select * from product order by price asc )TMP) where rn between 6 and 10;서브 쿼리구문을 겹치는 행위 top n query는 왜 한 개의 구문으로 처리되지 않을까?기본적으로 rownum은 정렬보다 먼저 번호가 매겨지기 때문에 정렬을 한 후에 rownum을 적..
Oracle
[Oracle] group query
group query데이터를 집계하고 요약하는 구문특정 컬럼을 기준으로 데이터 그룹화그룹화된 각 그룹에 대해 집계 함수 적용주로 데이터를 요약하거나 통계 정보를 얻을 때 사용 그룹화 방법 중복 제거select distinct pokemon_type from pokemon;distinct중복된 데이터를 제거하고, 고유한 값만 반환하는 키워드  그룹 구성중복 제거 방법보다 확장성 있음select pokemon_type from pokemon group by pokemon_type;group by그룹화할 기준이 되는 컬럼을 지정하는 절그룹으로 묶은 컬럼만 조회 가능`order by`, 즉 정렬 조건 앞에 옴 그룹 별 개체 수 출력`key`와 `value`로 별칭 지정select pokemon_type key,..
Java/Spring Boot
[Java / Spring Boot] DBCP
DBCP (Database Connection Pool)데이터베이스와 애플리케이션 간의 연결을 효율적으로 관리하기 위한 기술로, 데이터베이스 연결을 매번 새로 생성하는 대신, 미리 생성된 연결을 재사용하여 성능을 향상시키고 리소스를 절약할 수 있다.apache commons dbcp2데이터베이스 연결 풀링을 제공하는 Java 라이브러리https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2/2.13.0 dependency 추가 org.apache.commons commons-dbcp2 2.13.0 -->  dbcp configuration# dbcp configurationspring.datasource.dbcp2.ma..