본문 바로가기

항해 99/Spring

(49)
Spring AOP AOP(Aspect-Oriented Programming) AOP는 관점(Aspect) 지향 프로그래밍으로, 관점을 기준으로 다양한 기능을 분리하여 보는 프로그래밍. 관점(Aspect)이란, 부가 기능과 그 적용처를 정의하고 합쳐서 모듈로 만든 것 AOP의 목적 관점지향 프로그래밍은 객체지향 프로그래밍을 보완하기 위해 쓰임, 기존 객체(Object) 지향은 목적에 따라 클래스를 만들고 객체를 만들었다. 따라서 핵심 비즈니스 로직이든, 부가 기능의 로직이든 하나의 객체로 분리하는데 그치고, 이 기능들을 어떻게 바라보고 나눠 쓸지에 대한 정의가 부족하다는 단점이 있음 보통 비즈니스 웹 애플리케이션이라면 사업에 핵심적인 핵심 비즈니스 로직이 있고, 애플리케이션 전체를 관통하는 부가 기능 로직이 있으며 이를 횡..
Override, Overload / JPA 더티체킹 / JVM Overloading(오버로딩) 같은 이름의 메서드를 여러 개 가지며 매개변수의 유형과 개수가 달라도 되는 기술 두 메서드가 같은 이름을 가지고 있으나 인자의 수나 자료 타입이 다른 경우를 뜻함(리턴 값만 다르게 갖는 오버로드는 작성할 수 없음) 오버로딩 예시 public double computeArea(Circle c) { ... } public double computeArea(Circle c1, Circle c2) { ... } public double computeArea(Square c) { ... } Overriding(오버라이딩) 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 사용 상위 클래스의 메서드와 이름, signature가 같은 함수를 하위 클래스에 재정의하는 것(상속..
Call by Reference 자바의 Call by Value / Call by Reference 함수의 매개변수에서 값을 복사하느냐 주소값을 참조하느냐에 따라 반환 결과가 달라지기 때문에 대부분의 프로그래밍 교육 과정에서는 중요시 하게 여김 자바의 데이터 타입은 크게 두 가지로 나뉨 기본형(primitive type) : Boolean Type(boolean), Numerice Type(short, int, long, float, double, char) 참조형 (reference type) : Class Type, Interface Type, Array Type, Enum Type, 기본형을 제외한 모든 타입 메서드에 입력값(파라미터)에 원시값(primitive type)을 전달하는 것과 객체(reference type)를 전달하..
WebSocket 활용 웹 게임 구현 요구 조건 WebSocket 통신을 이용한 유저간 1:1 인디언 포커 게임을 실행할 수 있어야 한다 게임은 1판에 총 3개의 라운드가 진행되야 한다 각 라운드는 규칙에 맞게 동작할 수 있어야 한다 게임 종료 후 유저의 선택에 따라 게임을 다시 시작하거나 게임방 또는 로비로 나가도록 구현되야 한다 게임 규칙 숫자 1~10까지의 숫자 카드 덱 2개를 사용한다 라운드 종료 시 더 높은 숫자 카드를 가진 유저가 라운드에서 승리하고 베팅된 포인트를 모두 가져간다 라운드 시작 시 플레이어는 각각 카드를 1장 받는다(자신의 카드는 라운드 종료 시까지 확인할 수 없음) 베팅은 다음 3가지 중 하나를 선택할 수 있음 CHECK 선턴인 유저 : 게임에 참가한 유저 중 포인트가 더 적은 유저의 10% 값 만큼 베팅한다 후턴..
WebSocket - 실제 코드 분석 웹 게임 프로젝트 관련 코드 분석 - with GPT4 분석 프로젝트 : https://github.com/namoldak/Backend/tree/dev/src/main/java/com/example/namoldak Config WebSocketConfig package com.example.namoldak.config; import com.example.namoldak.util.webSocket.SignalHandler; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context..
WebSocket - STOMP 2 Annotated Controllers 애플리케이션은 클라이언트로부터 받은 메시지를 처리하기 위해 @Controller 클래스를 사용할 수 있음 이러한 컨트롤러는 @MessageMapping, @SubscirbeMapping, @ExceptionHandler 메서드를 선언할 수 있음 @MessageMapping @MessageMapping 메서드는 지정한 경로를 기반으로 메시지를 라우팅할 수 있음, 메서드뿐만 아니라 타입 레벨, 클래스에도 설정할 수 있는데, 이는 컨트롤러 안에서 공통된 경로를 제공하기 위해서 사용된다 기본적으로 매핑은 Any-Style Path 패턴으로 구성하고, Template 변수도 지원한다(ex, /something*, /somethig/{id}) Template 변수는 @Dest..
WebSocket - STOMP 1 STOMP ? STOMP는 Simple Text Oriented Messaging Protocol의 약자로 TCP 또는 WebSocket 같은 양방향 네트워크 프로토콜 기반으로 동작한다 STOMP는 텍스트 지향 프로토콜이지만 Message Payload에는 Text 또는 Binary 데이터를 포함할 수 있음 COMMAND header1:value1 header2:value2 Body^@ STOMP Protocol Specification, Version 1.2 클라이언트는 Message 전송을 위해 SEND, SUBSCRIBE, COMMAND를 사용할 수 있음 또, SEND, SUBSCRIBE, COMMAND 요청 Frame에는 메시지가 무엇기고 누가 받아서 처리할지에 대한 Header 정보를 함께 포함..
WebSocket - SockJS SockJS 란? SockJS의 목표는 애플리케이션이 우선적으로 WebSocket API를 사용하도록 하지만, 사용할 수 없는 경우에는 런타임 시점에 코드 변경없이 WebSocket 이외의 대안으로 대체하도록 하는 것 특징 SockJS는 브라우저에서 사용하도록 설계가 되었기 때문에, 다양한 브라우저와 버전을 지원하고 있음 SockJS는 WebSocket, HTTP Streaming, HTTP Long Polling 등의 크게 세 가지 전송 방법(Transports)을 지원하고 있는데, 이 외에도 다양한 방식을 제공함 WebSocket Emulation 과정 SockJS는 서버로부터 기본 정보를 획득하기 위해서 GET / info 요청을 보내며 시작함 클라이언트가 서버에게 GET / info 요청을 보냄으..