썸네일 [Book] 달러구트 꿈 백화점 달러구트 꿈 백화점장르판타지저자이미예출판 팩토리나인발행2020.07.08.잠들어야만 입장 가능한 꿈 백화점에서 일어나는 비밀스럽고도 기묘하며 가슴 뭉클한 판타지 소설 회사에서 전자도서관을 지원해 준 덕분에 책 읽는 습관을 들이기로 마음먹었다. 우선 책에 흥미를 붙이기 위해 가볍게 읽을 수 있는 소설부터 시작하기로 했고, 그중에서도 달러구트 꿈 백화점을 선택했다. 이 책은 꾸준히 베스트셀러에 올라 있었고, 예전부터 읽고 싶었던 책 중 하나였다. 나는 평소 꿈을 자주 꾸는 편이다. 특히 반복적으로 등장하는 장소나 배경이 있어, 책을 읽으며 '어쩌면 우리 삶도 꿈을 사서 꾸는 건 아닐까?'라는 생각이 들었다. 나 역시 꿈은 무의식의 세계라고 여기지만, 이 책을 읽고 나니 ‘실제로 잠자는 동안 내가 원하는 ..
썸네일 [Java] 객체 생성 시 딱 한 번만 실행되는 코드, 어디에 둘까? (생성자 vs @PostConstruct) Spring에서는 클래스가 생성된 후 딱 한 번만 실행되는 초기화 코드를 작성할 때, 생성자와 @PostConstruct를 많이 사용합니다.하지만, 이 두 방식은 실행 시점과 목적이 다르기 때문에, 언제 어떤 것을 사용해야 하는지 이해하는 것이 중요합니다.생성자와 @PostConstruct의 차이와 사용 시점을 비교해보겠습니다.01. 기본 생성자에서 super() 호출@Servicepublic class MyService { public MyService() { super(); // 부모 클래스의 기본 생성자 호출 System.out.println("생성자 호출"); }}Java는 기본적으로 자식 클래스의 생성자에서 super()를 명시하지 않아도 자동으로 호출그래서 ..
썸네일 [Git] 커밋 시 사용자 이름과 이메일 바꾸는 방법 업무용 프로젝트에 커밋할 때,개인 Git 계정으로 로그인되어 있다면 커밋 이력이 내 개인 이름과 이메일로 남게 됩니다.하지만 회사나 팀 계정, 혹은 별도의 업무용 이름으로 커밋을 남기고 싶을 때가 있죠.이럴 때 사용하는 방법이 바로 .gitconfig 파일을 이용한 사용자 정보 설정입니다.01) .gitconfig 파일 생성[user] name = peazh email = peazh@tistory.com메모장에 다른 건 위와 같이 그대로 작성하고, name과 email은 원하는 커밋 작성자 이름과 이메일 주소로 변경해 주세요.작성 후 파일명을 '.gitconfig '로 저장합니다. ('모든 파일' 형식으로 변경한 뒤 이름을 변경해 주세요.) 02) 생성한 파일 저장 위치사용자 홈 디렉토리 위치에 저..
썸네일 [Java] @Resource vs @Autowired 의존성 주입 비교 Spring에서 의존성을 주입할 때, 둘을 혼동해서 사용하는데 그 차이에 대해 정확히 살펴보자. @Autowired- Spring 프레임워크 전용 DI(Dependency Injection)* 방식- 타입 기반 자동 주입으로, 스프링 컨테이너에서 타입이 일치하는 빈을 자동으로 주입.- @Qualifier 와 같이 사용하여 이름 지정 가능.- required=false 로 주입 실패 허용 가능.- 단, @Autowired(required = false)와 @Qualifier를 함께 쓰는 경우 해당 이름의 Bean이 없으면 조용히 null이 주입되므로 NPE를 피하려면 반드시 null 체크 로직을 함께 구현해야 함.@Autowiredprivate PersonService personService;@Auto..
썸네일 [ERROR] Content type 'application/json;charset=UTF-8' not supported AJAX 요청을 처리하는 도중, 다음과 같은 오류가 나왔다.org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported 이 오류는 @ResponseBody 로  Map 객체를 반환하려고 할 때 발생했다.이유는 Spring이 전달된 JSON 형식의 데이터를 올바르게 처리하지 못했기 때문이다.즉, 클라이언트에서 전송한 JSON 데이터가 서버에서 예상한 형식과 일치하지 않아서 발생한 문제로, 이를 해결하기 위해서는 서버가 JSON 데이터를 올바르게 파싱할 수 있도록 설정을 해줘야 한다.🐋 해결방안 01.• contentType을 명시적으로 설정하기 01) ..
SQLD 윈도우 함수1) 의미 : 서로 다른 행의 비교나 연산을 위해 만든 함수2) 특징 : group by를 쓰지 않고 연산 가능3) 종류 : LAG, LEAD, SUM, AVG, MIN, MAX, COUNT, RANK rank over는 대상이 안 나와도 됨문법1) partition by : 연산할 그룹을 묶는 것2) order by 정렬 순서3) rows, range, between 범위 설정에 따라 누적합의 결과가 달라짐연산 범위를 쓰려면 꼭 정렬인 ORDER BY 절을 사용해야 함순서를 꼭 맞춰야 함 예시)over절을 사용하여 윈도우 함수로 사용 가능 공통 범위 설정- 범위 설정을 한다면, ORDER BY 절 필수로 써야 함ROWS : 정렬을 할 때 값이 같더라도 각 행씩 연산RANGE : 같은 값의 경..
썸네일 [Java] Spring Boot 자동 빌드 설정: 리소스 파일 변경 반영하기 일반적으로 Java는 클래스 파일을 저장할 때 자동으로 빌드를 수행하지만,리소스 파일(예: HTML, CSS, JavaScript)은 저장해도 자동으로 빌드되지 않습니다.개발 중 리소스 파일을 자주 수정해야 할 경우, 매번 애플리케이션을 재시작하거나 수동으로 빌드를 해야 하는 번거로움이 발생합니다. 이 문제를 해결하기 위해 Spring Boot DevTools와 LiveReload를 설정하여, 리소스 파일을 저장할 때도 자동으로 빌드하고 변경 사항을 즉시 반영하도록 설정하는 방법입니다. STS4 설정 변경 01. Run Configurations 설정 열기- 상단 메뉴에서 Run → Run Configurations... 클릭 02. Spring Boot 애플리케이션 설정 선택- 좌측 리스트에서 Spr..
썸네일 [Thymeleaf] 컨트롤러에서 전달한 값을 JavaScript에서 사용하기 JavaScript에서 값 전달받기서버에서 전달된 데이터를 JavaScript 코드에서 사용하고 싶을 때, 타임리프를 통해 참조하는 방법입니다.01. 컨트롤러에서 값 전달@GetMapping("/")public String getChartData(Model model) { List sample = Arrays.asList(10, 20, 30, 40); model.addAttribute("sample", sample); return "index";}임시 데이터인 sample 을 model에 붙여서 'index.html' 화면에 전달 02. 타임리프 템플릿에서 값 출력 /*[[${sample}]]*/  타임리프의 표현식으로, 서버에서 전달된 데이터를 타임리프가 HTML로 변환해줌th:i..
썸네일 [Thymeleaf] 타임리프 기본 표현식과 속성 기능 기본 표현식 01.  ${...} : 변수 표현식 (Variable Expressions)서버에서 전달된 변수를 참조할 때 사용${cssStyle} 02.  *{...} : 선택 변수 표현식 (Selection Variable Expressions)선택된 객체의 속성 값을 참조할 때 사용선택된 객체의 속성에 바로 접근할 수 있음 Name:  03.  #{...} : 메시지 표현식 (Message  Expressions)메시지 파일(주로 messages.properties)에서 값을 참조할 때 사용다국어나 반복적으로 사용되는 텍스트 관리할 때 많이 사용# messages.properties 파일welcome.message=Welcome to our website!# html 파일# 렌더링 결과..
[Thymeleaf] Fragment 활용하여 레이아웃 설정 FragmentFragment는 레이아웃 작업 시, 공통적으로 사용하는 화면을 분리하여 재사용할 수 있게 하며, 필요시 파라미터 값을 전달할 수 있음 01. 화면 분리🔻예시 : 페이지 하단을 모든 페이지에서 공통으로 쓰고싶을 때의 fragment 사용법 ① 'footer.html'을 생성 Copyright © 2024 PEAZH All rights Reserved.  ② 사용하려는 페이지에 'insert', 'replace', 'include' 중 적합한 방식으로 코드 추가 'footer.html' 파일을 찾아 Frament 이름이 'copy'인 부분 호출한다는 의미'~{}'는 상대적 또는 절대적 경로를 참조할 수 있어 정확한 위치에 있는 Fragment를 가져옴  ③ 결과 ..
썸네일 [Java] Spring Boot 프로젝트 : 기본 설정과 화면 연결 01. Spring Boot에서 프로젝트 생성하기생성 시, Dependencies에서 Spring Boot DevTools, Lombok, Tymeleaf, Spring Web 선택 02. 프로젝트 생성 완료프로젝트를 생성하면 아래와 같은 기본 폴더 구조가 생성됨📂src/main/java └ 📂com.peazh └ 📄Application.java📂src/main/resources └ 📂templates (HTML 파일을 관리하는 폴더) └ 📂static (CSS, 이미지, JS 등 정적 파일을 저장하는 폴더) └ 🥬application.properties (설정 파일) 03. Controller 생성📂src/main/java 하위에 'com.peazh.controll..
썸네일 [JS] 이벤트 전파 / 이벤트 버블링 / 이벤트 캡처링 이벤트 전파 (Event Phase)브라우저에서 html 요소에 이벤트가 발생할 때, 이벤트가 전파되는 흐름에 따라 이벤트 버블링과 이벤트 캡처링이 발생함 body 영역 main 영역 div 영역 p 영역 span 영역  01) 이벤트 버블링 (Event Bubbling)이벤트 버블링은 이벤트 타깃 요소에서부터 최상위 요소인 html 문서까지 이벤트가 전파되는 것으로,addEventListener 이벤트는 기본적으로 버블링으로 동작함위의 script 코드를 추가해서 console 창을 확인하면, span 태그를 클릭했을 때 span에서부터 body 태그까지 이벤트가 전파되는 과정을 확인할 수 있..