Java 24

실시간 데이터 전송 방식 1) SSE(Server-Sent Events)를 Java와 Javascript로 구현하기

[목차]0. SSE를 도입하게 된 이유 1. SSE 기본 개념 2. 장점/단점 3. 전체 흐름 요약 (지금 작성한 부분) 4. SSE Q&A 0. SSE로 구현하게 된 이유 대시보드에 실시간으로 데이터를 표시해야 하는 기능을 구현할 필요가 있었다.처음에는 REST API polling 방식(주기적으로 HTTP 요청 보내서 데이터 받아오기)을 고려했지만,데이터 전송 주기에 따라 딜레이가 발생하고, 서버와 클라이언트 모두에 불필요한 부하가 생길 수 있었다. "완전히 실시간에 가깝게 데이터를 보여주고 싶다.""그렇지만 복잡한 양방향 소켓 통신까지는 필요 없다." 이런 요구를 충족시킬 수 있는 다른 방식을 찾게 되었다. 이 조건을 충족하는 기술로 SSE(Server-Sent Events)를 선택했다. ..

Java/Java 2025.04.21

모듈간 예외 처리 전략

모듈화 된 시스템은 각 모듈이 독립적으로 기능을 수행할 수 있도록 만들어 준다. 그리고 각 모듈에서 발생하는 예외는 어떻게 관리하고 전달할지에 대한 고민이 필요하다.    평소에 예외 처리 전략을 공통으로 발생하는 예외와 모듈에서 발생할 수 있는 예외 이렇게 구분해서 사용하고 있었다. 아래 영상을 보면서  "모듈로 구성할 때, 해당 모듈에서 발행하는 예외는 그 모듈 내에 두어야 한다." 를 알게 되었다.  https://www.youtube.com/watch?v=bjaiaEEllMI     모듈화 된 시스템의 원칙 중 하나는 모듈은 스스로 독립적일 수 있어야 한다.    즉, 모듈은 다른 시스템에 의존하지 않고, 독립적으로 기능을 수행할 수 있어야 한다.      그래서 예외 처리할 때는 모듈에서 발생하..

Java/Java 2025.02.09

추상 클래스와 인터페이스 언제 쓸까?

새로운 프로젝트가 시작되고, 프로젝트 구성에 따라 추상 클래스나 인터페이스를 적용하려 한다. 어떻게 사용하면 좋을지 정리하려고 한다.  1. 추상 클래스 (Abstract Class) 추상 클래스는 일반 메서드(구현이 있는 메서드)와 추상 메서드(구현이 없는 메서드) 둘 다 가질 수 있다.추상 클래스는 다른 클래스가 상속받아 사용할 수 있다. 단, 추상 클래스는 객체화 할 수 는 없다.추상 클래스는 그 추상 클래스를 상속받아서 기능을 이용하거나 확장시키는데 있다.다중 상속의 모호성 때문에 추상 클래스 하나만 상속 받을 수 있다. (extends 예약어 사용)추상 클래스는 필드를 가질 수 있다. abstract class Animal { // 추상 메서드 (구현이 없음) abstract void..

Java/Java 2024.09.05

[캐시] 자바 애플리케이션에서의 캐싱

본 포스팅은 아래 영상을 보고 정리한 글입니다.   1. 캐싱이란? 캐시란? 데이터나 값을 미리 복사해 놓는 임시 장소     캐시가 왜 필요할까?   예전에 MP3를 사용을 했을 때 노래를 다운로드를 하여야 들을 수 있었습니다. 그런데 만약 음악을 들으려 할 때마다 다운로드하였던 노래도 다시 다운로드를 하아야 한다면 귀찮고, 시간이 오래 걸려서 아무도 사용하지 않을 것입니다.  다운로드하였던 노래를 MP3에 저장을 하고 즉 캐시 했다가 같은 노래를 들으려고 할 때 캐시해둔 노래를 사용하면 효율적입니다.  캐시에 데이터를 미리 복사해 놓으면 더 빠른 속도로 데이터에 접근할 수 있기 때문에 캐시를 사용합니다.     캐시 작동 방식   뽀로로가 어느 교육 분야의 크루인지 조회를 하기 위해서 바로 서버에 데..

Java/Java 2024.07.31

[백준-11659] 구간 합 구하기

[문제]https://www.acmicpc.net/problem/11659   [풀이]1. 시간 복잡도를 고려해 가장 큰 데이터가 들어온다고 가정하고 문제 푼다.N = 100,000M = 100,000  2. int array에서 0번은 사용하지 않는다.보통 1부터 시작하기 때문에   3. 배열이 변하지 않고 질의의  개수가 많을 때는 합 배열을 만든다. 합 배열을 만드는 공식 S[i] = S[i-1] + A[i] 구간 합을 구하는 공식(i에서 j까지의 구간 합)S[j] + S[i-1]  4. Scanner 대신 BufferedReader을 이용하자.갯수가 많아서 BufferedReader을 사용하면 더 빠르다. (현재 문제는 Scanner로 해도 통과가 된다.)   Scanner 코드 속도(2632ms..

평균 구하기

[문제]백준 온라인 저지 - 1546번https://www.acmicpc.net/problem/1546   [풀이]1. 일일이 변환 점수를 구할 필요 없이 한번에 변환한 점수의 평균 점수를 구하자.(A/M*100 + B/M*100 + C/M*100) / 3 = (A + B + C)* 100 /M / 3   2. 오차범위를 고려하자.(오차범위에 걸려서 여러번 재시도를 했었다..ㅠ) "실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다. " 소숫점까지 구해야 통과가 된다. 따라서,  100을 곱해주는 대신 100.0을 곱해서 소수로 계산하였다.   [통과 코드]import java.util.*;public class Main{ public static void main(String..

숫자의 합 구하기

백준 온라인 저지 11720번https://www.acmicpc.net/problem/11720   문제N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.입력첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.출력입력으로 주어진 숫자 N개의 합을 출력한다.예제 입력 1 11예제 출력 1 1예제 입력 2 554321예제 출력 2 15예제 입력 3 257000000000000000000000000예제 출력 3 7예제 입력 4 1110987654321예제 출력 4 46      [실패 코드]package org.example;import java.util.Scanner;public class Main { publ..

[TDD] 문자열 계산기 && 2차 리팩토링

1.  리팩토링 반영 List1) 객체 지향 관점에서 최대한 클래스로 묶을 수 있는 부분은 묶자.문자열 split Class(Formula Class), 사칙연산 Class(Operator Class), 연산 실행 Class(Calculator)  2) 다양한 Test 코드 만들기(예외 처리)분리한 Class 별로 Test인수가 null이거나 공백일 경우 (예 - "2 +  + 3 * 4")사칙연산 기호가 아닐 경우 (예 - "2 & 3 * 2")0으로 나눌 경우 (예 - "3 / 0 + 2")     2.  3차 실습 코드(caclulator_v2) package calculator_v3;import java.util.regex.Pattern;public class Calculator { priv..

Java/TDD 2024.06.17

[Java] 함수형 인터페이스 Funtion, BiFunction, TriFunction

함수형 인터페이스란?추상 메서드를 단 하나만 가지고 있고@FunctionInterface 어노테이션을 지닌 인터페이스이다.자바에서 기본으로 제공하는 함수형 인터페이스는 java.util.function 패키지 에 명시되어 있다.    Function1개의 인자를 받고 1개의 객체를 리턴하는 기본 함수형 인터페이스이다.//T 타입을 받아서 R 타입을 리턴@FunctionalInterfacepublic interface Function{ R apply(T t)}  예시1)Function function = (str) -> str + " !!!";String str = function.apply("Hello"); // str = Hello !!!assertThat(str).isEqualTo("Hello !!!..

Java/Java 2024.06.11