목록전체 글 (108)
어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨
[ 1. 배열에 넣어서 찾기 ] String str = "abcdefge"; int idx = -1; // 문자열 쪼개서 배열에 넣기 String[] arr = str.split(""); [ 1. for문으로 찾기 ] for(int i = 0; i < arr.length; i += 1){ if(arr[i].equals("e")){ idx = i; // 하나만 찾고 끝낼 경우 System.out.println(idx); break; // 모두 찾을 경우 // 1. if문 안에서 바로 인덱스 출력 : System.out.println(idx); // 2. 배열에 넣어서 출력 } } // 마지막 요소만 찾을 경우 // for문 밖에서 마지막 인덱스만 출력 : System.out.println(idx); [ 2..
[ 빌드 관리 도구 ] 소스코드에서 애플리케이션을 생성할 때 사용하는 외부 라이브러리를 사용자가 관리할 필요 없이 자동으로 관리해주는 도구 전처리 - 컴파일 - 패키징 - 테스트 - 배포 원래 기존의 자바에서는 jar 파일을 다운 받아서 라이브러리 추가해줬음(Maven과 Gradle 사용하면 pom.xml / build.gradle 통해서 간단하게 관리) [ Maven ] - Java로 작성된 프로젝트에서 사용 가능한 빌드 관리 도구 - XML 기반의 pom.xml 파일에 필요한 라이브러리를 정의한다. (Project Object Model) - 등 태그 형식 사용 org.springframework.boot spring-boot-starter org.springframework.boot spring-b..
Rest(Representational State Tranfer) - 클라이언트와 서버가 데이터를 주고 받을 때 제약조건들을 정의하는 소프트웨어 아키텍처 스타일 - Rest API : HTTP의 장점을 살리기 위한 통신 규약 - RESTful : 6개의 REST 기본원칙을 준수한 인터페이스 - HTTP URL 을 통해서 자원(Resource)을 명시해야 한다. - HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원(HTTP URL / Resource)에 대한 CRUD를 적용한다. [ REST 기본원칙 ] 1. 클라이언트 - 서버 구조 클라이언트와 서버는 서로 독립적이어야 한며, 의존성이 적어야 한다. 클라이언트는 오직 URIs 리소스만 알 수 있어야한다. 2. 일관된 인터페..
[ Arrays 클래스 ] - 배열을 다루기 위한 메서드가 선언되어 있는 클래스 import java.util.Arrays; - 클래스 내의 메서드는 모두 static으로 선언되어 있기 때문에 객체를 생성하지 않고 사용이 가능하다. // 기본타입 혹은 String 타입의 배열을 오름차순으로 정렬하는 메서드 // static으로 선언 된 메서드는 외부 클래스에서 객체 생성 없이 바로 사용 가능하다. (new 생성자) public static void sort(int[] a) { DualPivotQuicksort.sort(a, 0, 0, a.length); } [ 배열 오름차순 정렬 ] Arrays.sort(배열이름) Arrays.sort(배열이름, 시작 인덱스, 끝 '전' 인덱스) - 부분 정렬 int[..
[ Scanner VS BufferedReader] [ Scanner ] - 간단한 입력 처리에 사용 - next(), nextInt(), nextDouble() 등 다양한 데이터 타입을 입력 받을 수 있음 - 한 글자 씩 읽고 처리함 - 띄어쓰기와 개행을 통해 입력 값을 인식 - 큰 데이터에 대한 처리가 느림 [ BufferedReader ] - String 타입으로만 데이터를 입력 받을 수 있음 - 입력 값을 모아뒀다가 한 번에 처리함 - 개행만을 통해 입력 값을 인식 - 큰 데이터를 읽을 때 Scanner에 비해 처리가 빠름 - IOException을 통해 예외 처리 필요 [ System.out.print() VS BufferedWriter] [ System.out.print() ] - 간단한 출력..
[ Lombok - 롬복] 개발을 할 때 기계적으로 작성하는 코드들이 많다. 이런 코드들을 자동화해서 코드를 간략하게 만드는 Java 라이브러리다. DTO, Model, Entity의 Getter, Setter, toString, 의존성 주입 등을 대신하기 위해서 사용한다. 롬복은 코드를 작성할 때는 어노테이션을 사용해서 코드를 줄이고, 컴파일하는 과정에서 생략된 코드를 생성해 주는 방식으로 동작하는 라이브러리이기 때문에 코드의 가독성과 생선성은 높지만, 실제로 눈에 보이는 코드는 롬복과 관련된 어노테이션 뿐이기 때문에 코드에 대한 직관성이 떨어질 수 있다. [ 설치 방법 ] 1. File - Settings - Plugins - Lombok 검색해서 Install (IntelliJ 2020.03 이후 ..
[ DTO (Data Transfer Ojbect) ] DTO(Data Transfer Object) : 계층 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체( View Controller ) 도메인 모델 : 소프트웨어의 주요 비즈니스 로직과 관련된 데이터와 동작을 표현하는 객체나 개념들의 모음 오직 데이터를 저장하고, 데이터에 대한 getter, setter 용으로만 사용되어야 한다. 어떠한 비즈니스 로직을 가져서는 안된다. 비즈니스 로직(도메인 로직, 애플리케이션 로직) : 프로그램의 핵심 로직, 사용자의 눈에는 보이지 않지만 데이터가 생성, 저장, 수정되는 방법을 정의한 것 저장, 검색, 직렬화, 역직렬화와 관련된 로직만을 가져야 한다. 직렬화 : DTO를 Byte, Json, Xml 등의 ..
[ Google Java Style Guide ] 회사 혹은 팀 프로젝트를 진행할 때 다른 사람들과 함께 협업을 하게 된다. 이 때 각자 작업하되 통일된 코드 스타일을 적용할 필요가 있다. 자바스크립트를 사용했을 때는 Pritter라는 Code Formatter 플러그인을 사용했었다. 자바를 사용해서 코드를 작성하는 경우 빠르고 쉽게 통일된 코드 스타일을 적용하기 위해서 구글에서 정해둔 스타일 가이드를 활용할 수 있다. 구글 자바 스타일 가이드 링크 Google Java Style Guide 1 Introduction This document serves as the complete definition of Google's coding standards for source code in the Java™..
[ 조건 ] - 매일 자정 체크 - cup_return_limit_date 컬럼의 시간과 현재 날짜 비교 - return_status 컬럼의 값이 "N"인 행만 선택 (N = 반납하지 않은 상태 / Y = 반납 완료 / F = 연체) - 만약 컵 반납 예정일을 지났을 경우 return_status 컬럼의 값을 "F" 로 UPDATE 한다. // 이벤트 스케줄러 ON/OFF 상태 확인하기 SHOW VARIABLES LIKE 'event%'; // 이벤트 스케줄러 ON/OFF SET GLOBAL event_scheduler = ON; 이벤트 스케줄러를 ON/OFF 할 때 만약 이 에러가 발생한다면? ERROR 1227 (42000): Access denied; you need (at least one of)..
데이터 테이블은 부트스트랩에서 제공되는 테이블 중 하나이다. 이미 제이쿼리 파일 안에 데이터 정렬, 페이지네이션, 검색, 페이지개수 등 구현되어 있어서 잘 가져다 쓰기만 하면 된다. 나는 이걸 몰라서 프로젝트 내내 제이쿼리로 열심히 그리다가 거의 끝나갈 때 쯤 알게 됐다...! ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ 아무튼 데이터 테이블을 써서 구현하면서 사용한 정보들을 정리해봤다. [ 1. 데이터 테이블의 옵션 ] - 테이블의 가로 길이 자동 설정 autoWidth : true - 화면에 한 번에 나타나는 데이터 행 개수를 선택하는 select box / 나는 별로 안 쓰고 싶어서 false로 해놨다. lengthChange : false - 화면에 한 번에 나타나는 데이터 행 개수 - lengthChange 안 쓰고 그..
Uncaught TypeError: Cannot read properties of undefined (reading 'style') at bt (jquery.dataTables.min.js:1:29409) at ot (jquery.dataTables.min.js:1:22201) at t (jquery.dataTables.min.js:1:45564) at HTMLTableElement. (jquery.dataTables.min.js:1:45651) at Function.each (jquery.min.js:1:2967) at S.fn.init.each (jquery.min.js:1:1453) at S.fn.init.Qt [as dataTable] (jquery.dataTables.min.js:1:40646)..
[ 1. 구현 ] - 스크립트단에서 테이블 태그 생성 후 데이터 받아와 동적으로 넣어주는 코드 필요 - 테이블 태그에 들어갈 태그의 텍스트 노드에 데이터베이스의 컬럼명을 바로 넣어주고자 함 for(let list of pointStandardList){ for(let arr in list){ const addTh = $(`${arr}`); $('thead').find('tr').append(addTh); } } // 조회 결과를 담은 리스트 변수 = pointStandardList // 리스트 변수에서 자바스크립트 for of와 for in을 통해 컬럼명을 담은 변수 = arr - 컬럼과 데이터의 순서를 정해서 테이블에 넣어주고 싶었음 (유효기간코드 / 유효기간 / 사용유무 / 최초등록일 / 관리자ID ..
Multiple markers at this line - The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files - The type java.lang.String cannot be resolved. It is indirectly referenced from required .class files 프로젝트 파일을 실행하니 이런 에러가 발생하면서 실행이 되지 않았다. 다른 팀원들에게 실행해보라고 해보니 정상적으로 실행되는 것을 확인했다. 1. Project 마우스 오른쪽 버튼 - Properties - Java Build Path - Libraries - Add Library 2. J..
SELECT CASE WHEN COUNT(*) = 0 THEN 'g001' -- 만약 WHEN CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED) < 999 THEN CONCAT('g',LPAD(MAX(CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED))+1,3,'0')) ELSE CONCAT('g',MAX(CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED))+1) END AS newGoodsCode -- 첫번째 인수 : '문자열' 또는 컬럼 -- 두번째 인스 : '구분자' -- 세번째 인수 : 양수 : 구분자의 왼쪽 / 음수 : 구분자의 오른쪽(출력 순서는 그대로) --글자 하나하나의 ..
COUNT(*) : WHERE 조건에 맞는 행 모두 카운트 COUNT(컬럼) : WHERE 조건에 맞는 행 중 컬럼의 값이 NULL이 아는 행 모두 카운트 -- 총 2개의 행이 존재(pk : id001 / id002) -- u_id는 pk이기 때문에 null 값이 존재 하지 않는 상태 -- u_add는 모두 null 값인 상태 SELECT COUNT(u.u_add) FROM tb_user AS u WHERE u.u_id = 'id001'; -- u_id가 id001인 행의 u_add가 null이 아닌것 => 0 SELECT COUNT(u.u_id) FROM tb_user AS u WHERE u.u_id = 'id001'; -- u_id가 id001인 행의 u_id가 null이 아닌것 => 1 SELECT..