728x90

전체 글 347

07. 03 TIL : @Configuration 클래스

@Contiguration 의 역할에 대해 조금 착각한 부분을 적어본다 해당 클래스는 스프링 빈 컨테이너에 다른 컴포넌트들과 마찬가지로 @Bean으로 등록된 클래스로, 스프링에 의해 의존성 관리 및 라이프 사이클 관리가 이루어지는 클래스 컴포넌트의 한 종류에 속한다 나는 유틸리티 클래스(흔히 ~Util.java로 네이밍하는 클래스)와 혼동해 설정 클래스에 의존성 주입이나 다른 라이프 사이클 등을 적용하면 안될 것으로 혼동했다 하지만 그럴 필요 없이, 유틸리티 클래스는정적 메서드의 집합으로, 어디서나 재사용이 가능하고 스프링의 관리를 받지 않는 클래스를 의미한다 이미 @Configuration을 붙임으로, 스프링의 관리를 받는 설정 클래스는 유틸리티 클래스가 아닌 것이다 그렇기 때문에설정 클래스에 의존성 ..

TIL, WIL/TIL📘 2025.07.03

Spring에서 브라우저의 정적 자원에 대한 메모리 캐시 최적화 전략

@ControllerAdvice 및 ResourceHandlerRegistry를 활용해 Resolver 버전을 자동 관리흔히 스프링으로 view까지 제공하는 경우(JSP, ThymeLeaf 등), 참조하는 js를 수정하는 경우 브라우저는 기존 js를 메모리에 캐싱해 둔 상태이기 때문에 클라이언트가 일일히 캐시를 지워줘야 하는 불편함이 있다 일반적인 대안으로 import 소스 명시할 때, 날짜나 ?version=123 등으로 관리하는 방법이 제시된다 다만, 날짜의 경우, 해당 날짜 또는 시간(버전에 시간까지 명시한 경우)가 경과하면브라우저는 바로 새로운 버전으로 캐싱하기때문에 네트워크에 요청을 시간이 경과할 때마다 계속 날린다 또한 버전의 경우, 수동으로 application.yml 등에서 관리를 해줘야하..

Spring🍃 2025.06.13

04. 29 TIL : SQL 쿼리에서 CASE 문의 중복 사용

쿼리문을 작성하다가, 공통 조건 A가 있고, 분기점이 2개 이상인 CASE 문을 작성할 떄 가독성 및 속도 향상을 위해 공통 조건을 하나로 사용하려고 한다 -> 기존SELECT CASE WHEN 공통조건 A AND 분기점 B THEN C, WHEN 공통조건 A AND 분기점 D THEN E END...-> 개선안 : CASE 문의 중복 사용SELECT CASE WHEN 공통조건 A THEN CASE WHEN 분기점 B THEN C, WHEN 분기점 D THEN E END END...이 방식으로 개선이 가능하다

TIL, WIL/TIL📘 2025.04.29

Spring messging, Stomp를 활용한 메세지 관리 + 다중 세션 관리 구현

0. 해결해야 하는(구현해야 하는) 문제(요구 사항)- 사이트에 실시간으로 접속한 사람의 목록과 해당 사용자들이 현재 어떤 페이지, 탭에 접속해있는지를 확인해보고자 했다 - http, rest API를 통한 구현도 가능하겠지만, 이는 진정한 "실시간"을 의미하는 것이 아니며, 조금이라도 연결이 끊어지기 때문에 웹소켓(WebSocket) 프로토콜을 통한 접근을 시작했다 - 현재 프로젝트 환경에서는 스프링을 사용하고 있고, 스프링에서 웹소켓 프로토콜을 활용할 때 순수 웹소켓을 사용해도 되지만, Stomp 프로토콜을 사용해 더욱 간편한 구현이 가능하므로, 이 개발을 진행했다-> 사용한 기슬 스펙1) stomp2) spring messing3) event Listener4) ConcurrentHashMap1. ..

Spring🍃 2025.04.20

04. 06 TIL : 인터넷/ 전송 계층(IP, TCP, UDP)

IP 프로토콜- 지정한 IP 주소에 데이터를 패킷 단위로 전달한다 IP 프로토콜의 단점- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송할 수 있다- 패킷이 중간에 사라져도 송신 클라이언트에서 그 손실 여부를 확인할 방법이 없다- 패킷을 보낸 순서를 보장하지 않는다(데이터의 순서가 보장되지 않는다)- 같은 IP를 사용하는 서버 내 애플리케이션에 대한 구분이 어렵다 IP 프로토콜의 단점을 보완한 프로토콜 : TCP/UDP*cf) TCP/IP 프로토콜 (OSI 7계층과 비교 가능)데이터를 주고받기 위한 규칙과 절차를 정의하며, TCP/IP 프로토콜을 중심으로 설계되었다.1) 응용 계층사용자와 직접 상호작용하는 계층으로 데이터 형식 변환, 암호화 사용자 인터페이스 등 제공 : HTTP, FTP, ..

TIL, WIL/TIL📘 2025.04.06

스프링 핵심 원리 - 스레드 로컬

스레드 로컬은 스레드 별로 할당되어 해당 스레드만 접근할 수 있는 저장소를 의미한다 싱글턴 인스턴스의 경우 스레드 별로 데이터를 구분하지 않아 다른 스레드가 접근할 경우 기존 스레드가 저장한 데이터를 덮어 쓰게 된다 이 경우에 스레드 로컬을 사용해 각 스레드 별 데이터를 유지할 수 있다 ** 스레드 로컬은 사용 후 꼭 remove() 메서드를 사용해 제거해주어야 한다

03. 14 TIL : 개념 이해로 시작하기 좋은 최고의 프롬프트 엔지니어링 강의

프롬프트 엔지니어링- 핵심 요소1) 답변을 위해 필요한 컨텍스트 제공2) 원하는 결과 추출을 위한 프롬프트 작성3) 결과물 형식 지정 - 프롬프트 엔지니어링 과정1) 프롬프트 결과 설정2) 프롬프트 평가 설계3) 그라운딩 설계 및 평가4) 프롬프트 디자인5) 모니터링 및 개선 프롬프트 프레임워크1) Role : 역할 설정2) Audiendce : 대상3) Knowledge/information :4) Task/Goal : 목표 :5) Policy/Rule, Style, Constaraint6) Format/Structure7) Examples

개발공부 2025.03.19

03. 07 TIL : 카프카 세팅 및 실행, 테스트

스프링 카프카 실행하기 1. 아파치 제공 카프카 다운로드 및 압축풀기 2. 압축 푼 폴더로 이동해 2-1) Zookeeper 실행 ~ 기본포트 : 2181bin>zookeeper-server-start.sh config/zookeeper.properties  2-2) Kafka 서버 실행 ~ 기본포트 : 9092bin>zookeeper-server-start.sh config/server.properties (config/server.properties에서 설정 변경 가능 (예: listeners=PLAINTEXT://localhost:9092) 3. 토픽(데이터 관리 단위) 생성 ex) 채팅시스템용 토픽 : bin/kafka-topics.sh --create --topic chat-messages --..

TIL, WIL/TIL📘 2025.03.07

02. 28 TIL : Statc 상태 값 선언(직접 참조) vs RDB 데이터 쿼리를 통한 조회

요즘 실무 중 해당 트레이드 오프에 대한 고민을 많이 하게 된다 Staic으로 설정하는 경우와 이를 DB에서 관리하는 경우의 트레이드 오프에 대한 간단한 정리 1) Static 장점- DB 호출을 줄일 수 있다- DB 접근 실패할 경우에도 로직에 문제가 생기지 않는다- 코드 직접 참조 방식이 아니기 때문에 개발 간 불편함 발생 가장 핵심이 직접 참조가 불가능하다는 점인 듯 하다.해당 참조 방식을 통해 상태 값에 대해 컴파일 시점에서 값의 타입을 점검할 수 있고,해당 데이터를 DB에서 관리하는 경우, 리팩토링 시 값 조회를 위해 IDE가 아닌 DB 프로그램(별도로 나눠서 실행하고 있는 경우)을 실행해서 조회해야 한다 2) DB 관리장점- 상태 값의 수정 발생 시 서버의 재기동 없이 바로 반영 가능- 개발 ..

TIL, WIL/TIL📘 2025.02.28

02. 26 TIL : Collectors.groupingBy() 외 ~ List<Object> list를 특정 요소로 mapping

list list 안의 요소를 분류할 때 일반적으로 stearm().fileter() 방법을 많이 사용한다 하지만 이 방법으론 필터에 해당하는 요소가 있는 리스트를 발라내는 것밖에 할 수 없다. 특정 요소의 값을 기준으로 전체 리스트를 분류하고 싶은 경우,strream().collect(Collectors.groupingBy(Object:getField)); 를 사용 가능하다 이 방식을 통해 하나의 Field로 분류된 Map> 타입인 map이 생성된다. 이제 리스트 별로 분류된 인스턴스에 서로 다른 작업이 가능해진다 일반적으로 이 방법을 많이 사용하며, GPT가 추천해주는 다른 방법으로는, 1) 리스트가 아닌 다른 자료구조에 분류 Map> groupedSetMap = stream() .collect..

TIL, WIL/TIL📘 2025.02.26
728x90