목록분류 전체보기 (66)
개발 기록이
springboot, java, gradle, IntelliJ 환경에서 엑셀 다운로드하는 방법에 대해 알아보자. 1. 생성할 엑셀 형태 지정0행0열1 ~ 2열3 ~ 7열8 열9 열1행No도서상세정보도서대여자대여상태비고제목저자이름연락처회원등급회원가입일시관심도서유형 2. 병합되는 열 정리No, 대여상태, 비고는 2행이 병합되고 도서상세정보, 도서대여자는 각각 2열, 5열이 병합되어야 한다. 3. build.gradle에 엑셀 다운로드를 위한 POI 의존성 추가dependencies { implementation 'org.apache.poi:poi-ooxml:5.2.5'} 4. 엑셀 파일과 시트 생성(Workbook, Sheet)XSSFWorkbook workbook = new XSSFWorkbook();S..
1. springboot initializer 로 프로젝트 생성하기 https://start.spring.io/ 로 이동 2. 원하는 언어, 빌드 도구, 의존성 선택 Project : gradle - groovy 선택 Language : Java 선택 Spring Boot : 안정화된 버전으로 선택 (괄호 없는 버전 선택) Group, Artifact (Name) 입력 Packaging - Jar Configuration - YAML Java - 17 의존성 추가 Spring Web Lombok ... GENERATE 클릭 후 프로젝트 생성하기 3. 인텔리제이로 프로젝트 열기generate로 생성한 프로젝트 압축을 해제한 후 인텔리제이..
WITH RECURSIVE(재귀 쿼리) MySQL 8.0 버전부터 CTE(Common Table Expression)으로 재귀 쿼리를 사용할 수 있다. CTE (Common Table Expression) 란?SQL 문법에서 WITH 로 시작하는 구문.임시 테이블을 만들어서 그 쿼리 안에서 재사용할 수 있는 결과 집합을 만든다.ex)WITH 임시테이블명 AS ( // 사용할 SELECT 문) SELECT * FROM 임시테이블명; 재귀 CTE는 자기 자신을 참조하는 CTE를 의미하며 부모 - 자식 구조처럼 계층 구조 데이터를 한 번에 조회할 때 사용한다. ex) 기술팀 ㄴ 인프라팀 ㄴ네트워크 ㄴ 개발팀 .... WI..
오류 발생 ⚠️ 윈도우 환경에서 IntelliJ [File] > [New] > [Get from Version Control]에서 git clone으로 프로젝트 소스를 가져오려고 했더니 다음과 같은 에러가 발생했다.clone failed unable to read askpass reponse from C:\User\AppData\Local\JetBrains\IntelliJIdea2023.2\tmp\intellij-git-askpass-local.sh'bash line 1: \dev\tty : No such device or address ...이 에러는 IntelliJ에서 git clone을 수행할 때 인증 창(Git 자격 증명 입력창)을 띄우는 과정에서 실패하여 발생하는 에러라고 한다.unable to..
IntelliJ는 파일이나 폴더를 옮기면 import 하는 부분의 경로를 자동으로 바꿔준다. 하지만 JSP, JSX 내 이미지 경로나 CSS, 하드코딩된 정적 리소스 경로는 자동 추적이 안 되기 때문에 수동으로 변경해줘야 한다. 프로젝트 내 특정 문자열 경로 일괄 변경 방법 📍 단순 문자열 검색만으로는 원하는 부분만 정확히 찾기 어려운 경우가 있다.예를 들어, 큰따옴표("), 작은따옴표('), 괄호(()) 안에 포함된 경로만 바꾸거나, 특정 위치에 있는 문자열만 선택적으로 변경하고 싶을 때가 있는데 이러한 경우에는 정규식을 활용하면 원하는 부분만 골라내어 한꺼번에 변경할 수 있다. 1. 치환을 적용하려는 최상위 폴더에서 오른쪽 클릭 → [Replace in Files] 선택 2. 정규식(Regex..
1. AES 알고리즘대칭키 암호화 방식으로 암호화와 복호화에 동일한 키를 사용한다. 이 키는 비밀로 유지되어야 하며 암호화된 데이터는 키를 알고 있는 사람만 복호화할 수 있다. AES 알고리즘 중 AES-256을 사용하여 256비트(32바이트) 키로 더 강력한 보안 방법을 적용해보려고 한다. 2. 암복호화하기import java.util.Base64;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;public class CipherExample { public static void main(String[] args) throws Exception { // AES-256을 사용하려면 키 길이가 32바이트(256비트)여야 함. Stri..
1. public vs private public: 누구나(어디서든) 접근 가능private: private이 선언된 메서드나 변수가 속한 클래스 안에서만 접근 가능public class PrivateTest { public static void main(String[] args) { Cafe cafe = new Cafe(); cafe.orderCoffee(); // 커피 주문하기(호출 가능) // cafe.makeCoffee(); // private라서 호출 불가 } public static class Cafe { private void makeCoffee() { // 카페 관계자만 사용 가능(커피 만들기) Sy..
여러 사람에게 메일 발송을 하는 것처럼 반복적인 작업을 동기 방식으로 처리하면, 각 작업이 완료될 때까지 블로킹이 발생하여 전체 처리 시간이 늘어날 수 있다. ExecutorService를 활용한 비동기 처리에 대해 알아보자. 병렬 작업과 스레드풀병렬 작업(여러 작업을 동시에 처리) 증가 → 스레드 개수 증가 → CPU, 메모리 사용량↑ → 성능 저하병렬 작업 시 스레드풀을 사용하여 스레드 수 제어가 필요하다. 스레드풀(ThreadPool)의 동작제한된 개수의 스레드를 사용하여, 작업이 끝난 후에는 해당 스레드를 재사용하여 성능 저하를 막아준다. 자바에서 스레드풀 사용ExecutorService 인터페이스를 통해 스레드풀을 관리한다.Executors 클래스를 사용하여 다양한 유형의 스레드풀을 생성한다.*..
1. 테이블 복사1) 테이블 복사(테이블 구조 + 데이터) SELECT * INTO [새로 생성할 테이블명] FROM [원본 테이블명] SELECT * INTO [new_table] FROM [origin_table] 2) 테이블 복사(테이블 구조만 복사) SELECT * INTO [새로 생성할 테이블명] FROM [원본 테이블명] WHERE 1=2SELECT * INTO [new_table] FROM [origin_table] WHERE 1=2-- WHERE 1=2 는 항상 false -> 데이터는 복사가 안 됨 3) 테이블 복사(데이터만 복사) INSERT INTO [복사한 데이터를 넣을 테이블명] SELECT * FROM [원본 테이블명]INSERT INTO [new_table] SELECT *..
1. 클라이언트 사이드 렌더링(CSR, Client Side Rendering) - React, Vue.js, Angular1. 브라우저 -> 서버에 콘텐츠 요청사용자가 웹사이트에 접근하면 브라우저는 서버에 페이지 로딩을 위한 HTML, CSS, JS 등의 콘텐츠를 요청한다.2. 서버가 기본 HTML 파일을 보냄서버가 웹페이지의 기본 구조가 담긴 HTML 파일을 브라우저에 보낸다. (이 HTML 파일은 내용이 거의 비어 있고, 기본적인 틀만 가지고 있는 상태)3. 브라우저가 자바스크립트 파일 다운로드 및 실행브라우저는 HTML에 포함된 자바스크립트 파일 링크를 통해 서버에서 자바스크립트 파일을 추가로 다운로드한다. 자바스크립트가 실행되면서 필요한 데이터를 서버에 다시 요청한다.4. 자바스크립트가 동적으로..