springboot 8

[스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술] 1. 타임리프(Thymeleaf) 기본 기능

1. 타임리프 소개핵심 개념서버 사이드 HTML 렌더링 (SSR): 백엔드 서버에서 HTML을 동적으로 생성하여 클라이언트에 전달합니다.네츄럴 템플릿 (Natural Templates): 타임리프 파일은 순수 HTML 구조를 유지하므로, 서버 없이 브라우저에서 직접 열어도 화면이 깨지지 않고 마크업 확인이 가능합니다.스프링 통합 지원: 스프링의 다양한 기능을 편리하게 사용할 수 있도록 강력하게 통합되어 있습니다.타임리프 사용 선언HTML 파일 상단 태그에 아래 속성을 추가해야 합니다.2. 텍스트 - text, utext개념 설명Escape: HTML에서 사용하는 특수 문자()를 HTML 엔티티(<, >)로 변경하는 것. 웹 브라우저는 이를 태그가 아닌 문자로 인식합니다.th:text: 기본 ..

INFLEARN 2026.05.02

[스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술] 3. Servlet

1. Hello 서블릿1.1 스프링 부트 서블릿 환경 구성스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponentScan을 지원합니다. 이 애노테이션은 현재 패키지와 하위 패키지를 모두 뒤져서 서블릿을 찾아 자동으로 등록해 줍니다.SpringMvcStudy1ServletApplicationpackage com.example.spring_mvc_study1_servlet;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComp..

INFLEARN 2026.04.07

[스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술] 2. HTML, HTTP API, CSR, SSR

🌐 웹 개발 핵심 개념 정리: HTML, HTTP API, CSR, SSR웹 개발에서 리소스를 전달하고 화면을 그리는 방식은 크게 4가지 관점에서 이해할 수 있습니다. 백엔드 개발자 입장에서 필수적인 내용을 중심으로 정리하였습니다.1. 리소스 제공 방식📁 정적 리소스 (Static Resources)특징: 서버에 미리 저장된 파일을 그대로 전달합니다.내용: 고정된 HTML, CSS, JS, 이미지, 영상 등.경로: 주로 웹 브라우저가 특정 경로(/hello.html)를 요청하면 웹 서버가 해당 파일을 찾아 응답합니다.📄 HTML 페이지 (Dynamic HTML)특징: 사용자의 요청에 따라 서버에서 HTML을 동적으로 생성하여 전달합니다.기술: JSP, 타임리프(Thymeleaf) 등.동작: WAS가..

INFLEARN 2026.04.01

[Spring Boot] Websocket + STOMP를 이용한 세션 기반 채팅

1. 전체 아키텍처Spring Boot채팅 시스템은 RESTful API와 WebSocket API를 조합한 하이브리드 아키텍처를 채택REST API는 채팅방 생성, 목록 조회, 이전 대화 내역 로딩과 같은 상태 관리를 담당WebSocket과 STOMP 프로토콜은 사용자들이 실시간으로 메시지를 주고받는 통신 채널의 역할을 수행2. WebSocket + STOMP 설정- 모든 실시간 통신의 기반이 되는 설정은 WebSocketConfig.java 파일에서 정의- 이 설정은 STOMP 메시지 프로토콜을 사용하여 WebSocket 통신을 구조화STOMP 엔드포인트: - /ws-stomp는 클라이언트가 최초로 WebSocket 연결을 맺는 진입점- SockJS 지원을 통해 브라우저 호환성을 확보메시지 브로커: ..

JAVA 2025.09.23

[SpringBoot] application.properties 환경 분리하기

지금까지 나의 프로젝트와 redis, DB 등의 연동과 관련된 설정들을 application.properties 파일에서 작성하였다. 그런데, 이번에 해당 프로젝트의 배포를 준비하면서 application.propertied 파일의 내용을 변경해야하 하는 일이 많아졌다.예를 들어, DB의 url, username, password 같은 경우, 로컬에서 개발을 할 때는, 내 PC에 설치된 mysql을 사용하여 localhost의 주소를 사용하였지만, 배포를 할 때는 외부나 내부의 DB와 연결해야 하기 때문에 이러한 설정 변경을 필수적이다. 배포를 할 때, 이러한 항목들을 변경하면 이후 내가 다시 개발을 할 때는 에러가 날 것이다!! 때문에 application.properties를 로컬 개발 환경(loca..

DOCKER 2025.04.12

[Docker] Docker를 사용해서 Spring boot + React 배포하기 ( 1 )

현재 진행 중인 동아리 게시물 웹 프로젝트가 어느덧 배포 단계까지 오게되었다. 구글에서 지원하는 GCP와 Docker를 사용해서 배포할 예정이다. 배포 흐름1. 내 인텔리제이 프로젝트에서 프론트엔드와 백엔드 프로젝트에 각각 DockerFile 및 .dockerignore 작성2. 백엔드(./gradlew build -x test), 프론트엔드(npm run build) 로 앱 빌드3. docker build -t 로 docker 이미지 파일로 빌드(Docker 설치 필요)4. 프론트엔드 백엔드 docker 이미지에 각각 GCP 주요용 이름(tag) 붙이기5. docker 이미지를 Artifact Registry로 푸쉬6. 이후에는 VM을 사용해서 배포할지, Cloud Run을 이용해서 할건지 선택7. 배..

DOCKER 2025.04.07

[SpingBoot] Api 호출시 Redis를 활용한 캐시 저장

백엔드에서는 controller에서 Api를 호출하면, service에서 이를 처리해서 반환함.자주 호출하는 Api의 경우, 결과를 미리 다른 곳에 저장해 놓으면, 이 후에 같은 Api를 호출했을 때, 데이터베이스를 조회하지 않고 저장소에서 가져다 쓰면 되지 않을까??이는 Redis를 사용하여 key와 value의 형식으로 값을 저장해 놓음으로서 가능만약, 동아리 목록을 호출하는 Api가 있다면 Redis를 사용하여 데이터베이스 조회 수를 줄일 수 있음.(Cacheable)하지만, 동아리가 삭제가 되거나, 추가될 경우에 기존에 Redis에 저장된 정보가 최신의 정보를 반영하지 못하므로 삭제가 필요( CacheEvict ) 1. Redis 캐시 설정캐시를 설정하기 위해 CacheConfig 클래스를 생성하..

JAVA 2025.04.04

[데이터베이스] MySql의 인덱스 설정 - BTREE INDEX

1. 인덱스란?**인덱스(Index)**는 데이터베이스에서 원하는 데이터를 빠르게 찾기 위해 사용하는 자료구조책의 "색인"처럼 작동하며, 검색 속도를 획기적으로 향상시킬 수 있음기본적으로 springboot에서 JPA로 자동으로 인덱스가 생성되는 것은 BTREE 인덱스를 따름✅ 인덱스의 장점빠른 검색 속도정렬/필터링 최적화조인 성능 향상❗️단점인덱스를 많이 만들수록 쓰기(INSERT/UPDATE) 성능 저하디스크 공간 추가 사용2. B-Tree 인덱스와 조회 방식 비교 📌 인덱스가 없는 경우 (Full Table Scan)데이터를 맨 앞부터 끝까지 하나씩 비교하며 검색시간 복잡도: O(n)📌 인덱스가 있는 경우 (B-Tree)MySQL은 기본적으로 B-Tree 인덱스를 사용이진 탐색 구조로 빠르게 원..

SQL 2025.04.03