2024/08 12

Design Pattern | 브리지 패턴(Bridge Pattern)

브리지 패턴(Bridge Pattern)은 GoF 디자인 패턴 중 하나로, 기능과 구현을 분리하게 독립적으로 확장할 수 있도록 돕는 구조적 디자인 패턴입니다. 이 패턴은 객체지향 설계에서 클래스 폭발 문제를 해결하기 위해 사용되며, 두 개 이상의 독립적인 자원을 클래스 계층 구조로 분리해 각각의 계층을 따로 개발하고 확장할 수 있게 합니다.  1. 브리지 패턴의 정의와 의도브리지 패턴은 두 계층(추상화와 구현)을 연결하는 다리와 같습니다. 즉, 클라이언트는 상위 계층인 추상화와 작업하고, 추상화는 하위 계층인 구현에 작업을 위임합니다. 이 패턴의 목적은 하위 계층(구현부)과 상위 계층(추상화)을 분리하여 독립적인 확장을 가능하게 만드는 것입니다. 2. 브리지 패턴을 사용하는 의도이 패턴을 사용함으로써 기..

Design Pattern 2024.08.29

CT | 백준 - 11286번 절대값 힙

https://www.acmicpc.net/problem/11286문제 설명이 문제는 정수들을 입력받아 다음과 같은 두 가지 작업을 수행하는 프로그램을 작성하는 것입니다.정수 입력: 정수 x를 입력받았을 때, x가 0이 아닌 경우 해당 숫자를 우선순위 큐에 추가합니다.0 입력: 만약 0이 입력되면, 현재 큐에 있는 수 중에서 절대값이 가장 작은 수를 출력하고 해당 수를 큐에서 제거합니다. 만약 절대값이 동일한 수가 여러 개 있다면, 그 중에서 가장 작은 수를 출력합니다. 큐가 비어있을 경우에는 0을 출력합니다.public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextI..

Coding Test 2024.08.27

CT | Java에서 효율적으로 ArrayList에서 최대값을 찾고 제거하기(백준 - 11279)

서론Java에서 ArrayList를 사용해 데이터를 처리할 때, 종종 가장 큰 값을 찾고 이를 제거하는 작업을 해야 할 때가 있습니다.간단하게 ArrayList와 Collections를 사용하여 구현할 수 있지만, 큰 데이터셋을 다룰 때 성능 문제가 발생할 수 있습니다.이 글에서는 ArrayList를 사용한 기본 접근 방식과 성능을 개선할 수 있는 방법을 비교해보겠습니다.문제 정의우리는 정수 리스트에서 사용자가 0을 입력할 때마다 현재 리스트에서 가장 큰 값을 출력하고, 그 값을 리스트에서 제거하는 프로그램을 작성하려고 합니다. 사용자가 0이 아닌 값을 입력하면, 리스트에 그 값을 추가합니다. 이 작업을 효율적으로 처리하는 방법을 탐구해보겠습니다. 백준 : 최대 힙 문제 | 11279https://www..

Coding Test 2024.08.27

Spring | MultipartFIle에서 파일 이름 가져오기 문제 해결, Normalize 유니코드

1. 문제 발견최근 파일 업로드 기능을 구현하던 중, 특정 파일명을 검색할 때 예상치 못한 문제가 발생했습니다. MultipartFile의 getOriginalFilename() 메서드를 사용하여 파일 이름을 받아 저장하던 중 파일 이름에 한글이 포함된 경우, 데이터베이스에서 LIKE 연산자를 사용한 부분 검색이 정상적으로 작동하지 않는 현상이 발생했습니다. 예를 들어, "스크린샷"이라는 단어가 포함된 파일명을 검색하려고 했으나, 결과가 제대로 반환되지 않았습니다.2. 문제 원인문제를 분석한 결과, 이 현상은 운영체제(OS) 간의 유니코드 처리 방식 차이로 인해 발생한 것으로 밝혀졌습니다. 특히, MacOS와 Windows에서 한글을 처리하는 방식이 달랐습니다:MacOS는 한글을 NFD(Normaliza..

개발Log 2024.08.26

[HTML] 브라우저 자동완성 문제 해결: autocomplete="off" + 뒤로가기 잔상?

ADMIN 개발을 진행하다, 뒤로가기 액션에서 select박스의 잔상이 남아있는 현상이 있었습니다!분명 소스는 option 1이 selected 되었지만, 잔상은 이전 타입 그대로라 왜 캐시가 남아있지 하고 고민하던 중 자동완성 기능이라는 것을 깨달았습니다 :) 웹 개발 중 자주 마주치는 문제 중 하나는 브라우저의 자동 완성 기능으로 인한 불편함입니다.특히, 사용자가 폼 필드를 작성할 때 브라우저가 이전 입력 값을 자동으로 제안하거나 채워 넣는 기능이 원하지 않는 동작을 초래할 수 있습니다. 이 문제를 해결하기 위해 autocomplete="off" 속성을 사용하는 방법에 대해 소개하겠습니다.문제 발생자동 완성 기능은 일반적으로 사용자 경험을 향상시키기 위해 설계되었지만, 특정 상황에서는 문제가 될 수 ..

Frontend 2024.08.23

[CS] SSL과 TLS란?

1. SSL/TLS 개요SSL의 등장 배경 인터넷이 보편화되면서 웹 브라우저와 서버 간의 정보 교환이 증가하게 되었고, 이러한 통신의 보안 문제가 중요하게 대두되었습니다. 처음에는 모든 데이터가 평문(Plain Text)로 전송되었기 때문에 중간에서 누군가가 데이터를 가로채면 쉽게 읽을 수 있었습니다.이를 해결하기 위해 Netscape가 SSL을 개발하게 되었습니다. TLS로의 진화SSL 3.0 이후에 발생한 여러 가지 취약점으로 인해 SSL 프로토콜의 한계가 드러나기 시작했습니다. 이를 해결하기 위해 SSL의 후속 버전인 TLS가 등장했습니다. TLS는 SSL의 개선된 버전으로, 더 강력한 보안 기능과 다양한 개선사항을 포함하고 있습니다. 2. SSL/TLS의 필요성데이터 보안 : SSL/TLS는 데이..

Computer Science 2024.08.22

JAVA | JVM(Java Virtual Machine)이란? JVM의 작동원리

JVM이란 무엇인가?JVM은 Java 애플리케이션을 실행하기 위한 가상 기계입니다. 직역하면 '자바를 실행하기 위한 가상 컴퓨터'라고 할 수 있습니다.이 가상 컴퓨터는 Java 프로그램이 운영체제(OS)와 독립적으로 실행될 수 있도록 도와줍니다. Java의 플랫폼 독립성과 JVMJava의 가장 큰 특징 중 하나는 OS에 종속되지 않는다는 점입니다. 이는 Java 프로그램이 다양한 운영체제에서 동일하게 동작할 수 있다는 의미입니다. 하지만, 이를 실현하기 위해서는 운영체제와 Java 프로그램 사이에서 중개 역할을 하는 무언가가 필요합니다. 이 역할을 수행하는 것이 바로 JVM입니다.  JVM은 CPU가 JAVA 프로그램을 인식하고 실행할 수 있도록 하는 가상 컴퓨터입니다. 실제 컴퓨터처럼 Java 애플리케..

Java 2024.08.21

[CS(OS)] Heap과 Stack메모리에 대하여

Stack과 Heap은 컴퓨터 프로그램이 실행될 때 메모리를 관리하는 두 가지 주요 메모리 영역입니다. Stack 메모리Stack은 함수 호출, 지역 변수, 매개변수, 그리고 함수의 반환 주소 등을 저장하는 데 사용되는 메모리 영역입니다. 이 영역은 고정된 크기로 할당되며, 함수 호출이 일어날 때마다 새로운 메모리 블록(스택 프레임)이 생성됩니다. 스택의 작동원리와 특징LIFO(Last In, First Out)Stack은 후입선출 방식으로 동작합니다. 마지막에 들어간 데이터가 가장 먼저 나옵니다. 함수가 호출되면 해당 함수의 매개변수, 지역 변수, 반환 주소 등이 스택에 푸시(push)되고, 함수가 종료되면 이 정보들이 팝(pop)되며 스택에서 제거됩니다. 스택 프레임각 함수 호출은 스택에 스택 프레임..

Computer Science 2024.08.16

CS | 메모리(Memory) 관리의 중요성

메모리 관리의 중요성 메모리 관리는 소프트웨어 개발과 시스템 운영에서 매우 중요한 역할을 합니다.  1. 프로그램의 안정성과 성능 향상안정성올바른 메모리 관리 없이는 프로그램이 불안정해지기 쉽습니다.메모리 누수(memory leak)가 발생하면, 사용하지 않는 메모리가 해제되지 않아 프로그램이 점점 더 많은 메모리를 차지하게 됩니다. 이는 결국 시스템 리소스 부족으로 이어져 프로그램이 비정상적으로 종료되거나, 전체 시스템의 성능에 악영향을 미칠 수 있습니다. 성능효율적인 메모리 관리는 프로그램의 성능을 크게 향상시킵니다. 메모리를 불필요하게 많이 사용하면, 캐시 미스(cache miss)와 같은 현상이 증가하여 프로그램이 느려질 수 있습니다. 반대로, 메모리를 효율적으로 사용하면 데이터 접근 속도가 빨라..

개발지식공간 2024.08.16

Network | TCP/IP 통신이란?

TCP/IP(Transmission Control Protocol / Internet Protocol)란 무엇인가? TCP/IP는 오늘날 인터넷과 거의 모든 네트워크 통신의 기반을 이루는 핵심 프로토콜 스택입니다. TCP/IP는 두 가지 주요 프로토콜인 '전송 제어 프로토콜(TCP)과 인터넷 프로토콜(IP)로 구성되어 있으며,이를 통해 컴퓨터 간의 데이터 전송이 가능합니다. 이 시스템은 하드웨어나 운영체제와 관계 없이 서로 다른 네트워크 기기들이 원활하게 통신할 수 있도록 해줍니다.  TCP/IP의 기본 개념 프로토콜이란?프로토콜은 컴퓨터들이 서로 통신하기 위해 따르는 규칙과 절차의 집합입니다. TCP/IP는 이러한 규칙들을 정의하여, 데이터를 전송하고 수신하는 과정에서 발생할 수 있는 문제들을 해결합니..

Network 2024.08.13