
여러 화면에 보이는 상품명, 가격, 수량 등의 단어를 변경하려면 HTML파일에 하드코딩 되어 있는 여러개의 화면들을 다 찾아가면서 모두 변경해야한다이러한 문제점을 해결하기 위해 다양한 메시지를 한 곳에 관리하는 기능을 메시지 기능 이라고 한다.예를 들어 messages

웹 애플리케이션에서 폼 입력 시 숫자를 문자로 작성하거나해서 검증 오류가 발생하면 오류 화면으로 이동한다. 이렇게 되면 사용자는 해당폼으로 다시 이동해서 입력을 해야된다. 사용자 입장에서는 매우 불편한 상황이므로 웹 서비스는 폼 입력 시 오류가 발생하면 고객이 입력한

검증 애노테이션과 여러 인터페이스를 모은 기술 표준으로, 여러 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고 표준화한 것 이다.Bean Validation을 사용하려면 bulid.gradle에 의존관계를 추가해주어야한다.@NotBlank : 빈값 + 공백만 있

@Component가 붙은 모든 Class들을 자동으로 스캔하여 Bean으로 등록해주는 역할을 해주는 어노테이션이다.이 때, 스프링 빈의 기본 이름은 클래스 명을 사용하되 맨 앞글자만 소문자를 사용한다.빈 이름을 직접 지정해주고 싶다면 @ComponentScan("me

@Autowired를 지정하면, 스프링 컨테이너가 해당 스프링 빈을 찾아서 의존관계를 자동으로 주입해준다.@Autowired는 ac.getBean(MemberRepository.class)와 같은 의미이다.생성자가 딱 한개 있으면 @Autowired는 생략가능대부분의

경로 변수를 표시하기 위해 메서드의 매개변수에 사용된다.경로 변수는 중괄호{}로 둘러싸인 값을 나타낸다.URL경로에서는 변수 값을 추출하여 매개변수에 할당한다.컨트롤러에 매핑된 @PathVariable은 redirect에서도 사용이 가능하다.기본적으로 경로변수는 반드시

가령, 쇼핑몰 사이트에서 상품을 등록했을 때, 상품을 저장하고 상품 상세화면으로 redirect를 한다고 치자.상품은 잘 저장되었지만 고객 입장에서는 저장이 잘 된 것인지 안 된 것인지 확신이 들지않는다.그래서 저장이 잘 되었으면 상품 상세 화면에 "저장완료"라는 메시

쿼리 파라미터를 계속 유지하면서 보내는 것은 매우 어렵고 번거로운 작업이다.서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달하자.그러면 브라우저는 앞으로 해당 쿠키를 지속해서 보내준다쿠키에는 영속 쿠키와 세션 쿠키가 있다.영속 쿠키 : 만료 날짜

💡로그인 처리 - 세션 > - 앞서 쿠키에 중요한 정보를 보관하는 방법은 여러가지 보안 이슈가 있었다. 이 문제를 해결하려면 결국 중요한 정보를 모두 서버에 저장해야 한다. 그리고 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결해야 한다. > -

DispatcherServlet은 javax.servlet.http.HttpServlet을 상속한 클래스로서, Spring MVC의 핵심 프론트 컨트롤러 역할을 수행하는 클래스이다. 클라이언트의 모든 요청을 중앙에서 받아 적절한 컨트롤러로 전달하고, 처리 결과를 Vie

Spring Framework의 주축이 되는 3가지 개념을 뜻한다.IoC(Inversion of Control, 제어의 역전)AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)PSA(Portable Service Abstraction, 서

웹 애플리케이션에서 클라이언트의 모든 요청을 하나의 진입 지점에서 받아 처리하는 디자인 패턴이다. 즉, 공통된 관심사를 모아주는 역할을 해서 요청 흐름의 중앙 집중화를 통해 구조를 단순화하고 공통 기능을 쉽게 관리할 수 있도록 도와준다.프론트 컨트롤러 도입 이전엔 각

Plain Old Java Object의 약자로, 특별한 규칙이나 프레임워크에 종속되지 않은 순수한 자바 객체를 의미한다.POJO에 대한 개념은 복잡한 EJB에 대한 반발로 시작되었고, Java 개발의 방향을 바꿨을 정도로 큰 영향을 미쳤다. 당시에는 비즈니스 로직을

객체지향 설계 원칙이란 소프트웨어 개발의 유지보수성과 확장성을 높이기 위해 도입된 일련의 설계 지침이다.이 원칙은 시간이 지나도 변화에 유연하게 대응할 수 있는 구조 즉, 변경에 강하고 확장에 유연한 코드를 만들기 위해 등장했다.초기 소프트웨어 개발에서는 아래와 같은

트랜잭션이란 > 트랜잭션이란 데이터베이스에서 하나의 작업 단위를 뜻한다. 트랜잭션에서는 여러 작업을 하나의 단위로 묶어서 전부 성공하거나, 전부 실패하게 처리한다. 트랜잭션의 도입 배경 1. 데이터 처리의 신뢰성 부족 과거의 프로그램이나 단순한 파일 처리 기반 시스템

암호화란?

개발 시, 공통적으로 처리해야 하는 로직들이 생길 때가 많다.이럴 때마다 공통 업무에 관련된 코드들을 페이지 마다 작성한다면 중복 코드가 많아지고, 서버에 부하를 줄 수도 있다.이런 문제를 처리하기 위해 Spring에서는 공통적으로 여러 작업을 처리함으로써 중복 코드를

💡 WebSocket WebSocket이란? WebSocket이란 클라이언트와 서버 간의 지속적인 연결을 유지하고 양방향 토인이 가능한 프로토콜을 뜻한다. 요청-응답 모델을 사용하는 기존 http와 달리 웹소켓은 새로운연결을 반복적으로 설정하지 않고도 지속적으로 양방

spring.datasource.url=jdbc:mysql://localhost:3307/backend?serverTimezone=Asia/Seoul&characterEncoding=UTF-8&rewriteBatchedStatements=truespring.dataso

1. [귓속말 + STOMP] 1. 프로젝트 하위에 stompwebsocket패키지 생성 및 파일 작성 1-1. 주의사항 purewebsocket.config.WebSocketConfig의 @EnableWebSocket, @Configu은 주석처리 →@EnableWe

이전 WebSocket + STOMP 실습 파일을 가지고 Docker에서 이미지와 컨테이너 생성 후 서버를 띄워보자.Gradle -> Tasks -> build -> bootJardockerFile이 있는 경로에서 실행할 것.docker-compose.yml 파일이 있

이전 포스트들과 이어집니다 [Spring/WebSocket] 순수 WebSocket으로 채팅방 만들기 [Spring/WebSocket] WebSocket + STOMP으로 귓속말 가능한 채팅방 만들기 [[Spring/WebSocket] WebSocket + STOMP

💡웹소켓을 활용한 GPT AI 챗봇 만들기 🔍챗봇 구조 > ❓브라우저와 GPT 사이에 웹소켓이 중간에 끼는 이유 브라우저에서 바로 GPT에 직접 보내게 되면 클라이언트에 API 키가 노출되며, 로깅과 제어가 불가하다. 중간에 웹소켓이 끼게 되면 API 키 노출을

🤔예외(Exception)란? > 예외란 프로그램 실행 중에 발생하는 비정상적인 상황을 의미하며, 정상적인 흐름을 방해하는 사건이다. 개발자가 예측하고 처리 할 수 있는 문제 상황으로, 예외와 에러와는 다르다! 에러는 JVM 자체 문제등 개발자가 처리 불가능한 문제를

이전 글에서는 단순히 GlobalExceptionHandler로 기존에 존재하던 표준 예외들을 처리하는 로직을 만들었는데, 직접 예외 클래스를 정리하고 그에 맞는 예외처리 로직도 구현할 수 있다. 이것을 커스텀 예외처리라고 한다.표준 예외만 사용하는 경우에는 Runti

AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는 공통 관심 사항(Cross-Cutting Concerns)을 모듈화하여 핵심 비즈니스 로직과 분리할 수 있게 해주는 프로그래밍 패러다임을 뜻한다.애플리케이션에서는 로깅, 트랜잭션 처리,