이끌든지 따르든지 비키든지

Software Development 26

URI와 URL의 차이

URI정의: URI는 인터넷에서 자원을 식별하는 방법을 말하며, 특정 자원을 고유하게 지칭할 수 있는 표기법범위: URL: 자원의 위치URN (Uniform Resource Name): 자원의 이름을 나타낸다.2. URL정의: URL은 URI의 하위 개념으로, 자원의 위치와 접근 방법(프로토콜)을 포함해 자원이 어디에 있는지 구체적으로 알려주는 정보입니다.구성 요소:프로토콜: 자원에 접근하는 방법을 정의합니다. 예: http, https, ftp 등.도메인 이름/IP 주소: 자원이 호스팅된 서버의 주소를 나타냅니다.경로: 서버 내에서 자원의 위치를 지정합니다.쿼리 문자열 및 프래그먼트: 자원에 대한 추가적인 정보를 제공할 수 있습니다.

[Web] HTTP의 버전별 특징

HTTP/0.9개요도입 연도: 1991년주요 특징:단순히 HTML 파일만 전송 가능한 단일 요청-응답 모델GET 요청만 지원헤더(Header)와 상태 코드(Status Code) 미지원장점/한계:프로토콜이 매우 단순하여 구현이 쉬웠으나, 기능 확장이 어려웠고 다양한 콘텐츠 전송이 불가능HTTP의 시작점이 된 버전으로, 텍스트 기반의 HTML 문서를 가져오기 위해 만들어졌다.당시 웹의 규모가 크지 않아 이 정도로도 충분HTTP/1.0개요도입 연도: 1996년주요 특징:상태 코드(Status Code)와 헤더(Header)의 도입다양한 콘텐츠 타입 전송 가능 (이미지, 텍스트, 기타 파일 등)클라이언트-서버 간 상태 정보 교환 가능 (Cookie, Session 등)장점/한계:이전 버전 대비 확장성과 활용도..

[Spotless] 클릭 한 번으로 코드 정리하기

Spotless란?코드 스타일 규칙을 자동으로 적용하여 코드베이스의 일관성 유지를 도와주는 오픈 소스 도구입니다.Gradle 플러그인으로 쉽게 통합할 수 있으며, Java, Kotlin, Groovy, Scala, Python, C, C++, Markdown, JSON, XML 등을 지원합니다.  Spotless를 의존성에 추가하기// build.gradleplugins { id 'java' id 'com.diffplug.spotless' version '6.25.0'}repositories { mavenCentral() gradlePluginPortal()}  Spotless를 사용하려면, Gradle 플러그인 포털에 대한 정보를 추가해주어야 합니다.gradlePluginPorta..

[PostgreSQL] PostGIS로 쉽고 빠르게 지리적 거리 계산하기

웹 애플리케이션에서는 사용자 경험을 향상하기 위해 지리적 위치 데이터를 활용하는 경우가 많습니다.예를 들어, 지도 및 내비게이션 서비스에서 두 지점 간의 경로를 안내하거나, 주변 장소를 검색하는 기능이 필요합니다. 오픈 소스 DBMS인 PostgreSQL과 이를 확장하여 공간 데이터를 처리할 수 있게 해주는 PostGIS는 공간 참조 시스템, 공간 데이터 타입, 공간 인덱스 등을 제공하여 복잡한 공간 데이터를 효율적으로 처리할 수 있도록 지원합니다. 이를 활용해 두 지점 간의 거리 계산, 주변 반경 검색, 경로 최적화 등 다양한 공간 연산을 수행할 수 있는데, 이 중 두 지점 간의 거리 계산에 대해 알아보도록 하겠습니다. PostgreSQL & PostGIS 설치하기 저는 Docker Compose 환경..

[Linux] 프로세스에게 시그널 보내기

들어가기 앞서 - 시그널(Signal)이란?시그널은 운영 체제가 프로세스 간 통신을 위해 사용하는 중요한 메커니즘 중 하나입니다. 시그널은 프로세스에게 특정 이벤트가 발생했음을 알리고, 프로세스가 그에 맞게 행동하도록 합니다.    SIGNAL의 특징비신뢰성리눅스 시그널은 비신뢰성을 가지고 있습니다. 이는 시그널이 도착하는 순서가 보장되지 않으며, 시그널이 손실될 수 있다는 것을 의미합니다. 여러 시그널이 동시에 발생하면 일부 시그널은 무시될 수 있습니다.  대기하지 않음시그널은 비동기적으로 처리됩니다. 이는 시그널이 발생하면 즉시 프로세스에 전달되며, 프로세스는 시그널을 기다리지 않고 자신의 작업을 계속 수행할 수 있습니다. 시그널이 도착했을 때만 프로세스는 이를 처리합니다.  대표적인 SIGNAL S..

[Java] Java 21의 새로운 기능 톺아보기

Java 17에 이은 다음 LTS 버전인 Java 21에 추가된 기능에 대해 알아보도록 하겠습니다. 💡LTS?LTS란, 'Long-Term-Support'의 약자로, LTS 버전은 다른 버전보다 장기적인 지원과 보안 업데이트를 포함하여 상대적으로 긴 기간 동안 지원됩니다.Java의 LTS 버전은 약 3년 주기로 출시되고 있습니다.  Java 21에 추가된 기능 총 15개의 기능이 추가되었고, 이를 4가지 카테고리로 분류할 수 있습니다. Core Java LibraryJEP 431: Sequenced CollectionsJEP 442: Foreign Function & Memory API (Third Preview)JEP 444: Virtual ThreadsJEP 446: Scoped Values (Pr..

[기술 면접 단골 질문] Spring

Spring DI / IoC 란?  의존성 주입(DI): 객체의 생성과 사용에 필요한 의존성을 객체 스스로 생성하지 않고, 외부(스프링의 경우 IoC 컨테이너)에서 주입하도록 합니다. 제어의 역전(IoC): 객체 생성, 의존성 연결, 메서드 호출 등 프로그램의 흐름을 개발자가 직접 제어하지 않고, 프레임워크에 맡기는 것을 말합니다.  IoC 컨테이너의 역할은 무엇이 있을까요? 빈의 생명주기 관리: 생성, 초기화, 소멸 과정을 관리빈의 의존성 관리: 빈 간의 의존성을 주입하고 관리빈의 설정 관리: XML, 어노테이션 등을 통해 빈의 구성 정보를 관리빈의 이름 해석: 이름이나 ID를 통해 특정 빈을 참조할 수 있게 관리   DI 종류는 어떤것이 있고, 이들의 차이는 무엇인가요? 생성자 주입: 의존성을 가진 ..

[기술 면접 단골 질문] Java

Java는? Java의 장 · 단점 Java는 플랫폼 독립적인 언어로, 자바 가상 머신(JVM) 위에서 동작하는 객체 지향 프로그래밍 언어입니다. 장점JVM 위에서 동작하기 때문에 운영체제에 독립적이다.가비지 컬렉터가 메모리를 관리해주기 때문에 편리하다.단점JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다.다중 상속이나 타입에 업격하는 등 제약이 있는 것이 많다.꼬리질문: Java가 다중 상속을 지원하지 않는 이유다중 상속을 지원하면, 다이아몬드 문제가 발생할 수 있기 때문입니다.Java가 다중 상속을 지원하지 않는 이유는 '다이아몬드 문제'를 방지하기 위해서입니다. 다중 상속을 허용하면 두 개 이상의 상위 클래스에서 상속받은 하위 클래스에서 같은 메서드를 가지게 될 경우, 하위 클래스에서는 ..

[Web] RESTful한 API란?

RESTful API란? RESTful API는 REST 원칙을 따르는 API입니다. REST(Representational State Transfer)는 인터넷 상의 시스템 간 상호작용을 위한 아키텍처 스타일입니다. RESTful API는 자원(Resource)의 표현(Representation)을 통해 상태 정보(State)를 주고 받는 구조로, 웹의 기본 프로토콜인 HTTP를 이용하여 구현됩니다.  💡RESTful API의 핵심 구성 요소자원(Resource): REST 아키텍처에서 모든 것은 자원으로 표현됩니다. 자원은 서버에 저장된 데이터나 서비스 같은 웹의 구성 요소를 의미하며, 고유한 URI(Uniform Resource Identifier)를 통해 접근할 수 있습니다.표현(Represen..

[Design Pattern] SRP(단일 책임 원칙)

객체지향적인 프로그램 설계 시 가장 중요하게 여겨지며 반드시 지켜야 하는 5가지 원칙이 있습니다. 이들 원칙의 첫 글자를 따서 SOLID 원칙이라고 부릅니다. 오늘은 그중 첫 번째인 단일 책임 원칙(Single Responsibility Principle, SRP)에 대해 알아보겠습니다. 단일 책임 원칙(Single Responsibility Principle, SRP) 단일 책임 원칙은 객체가 오직 하나의 책임만을 가져야 한다는 원칙을 의미합니다. 즉, 객체는 오직 하나의 변경 이유만을 가져야 합니다. 이는 하나의 클래스가 하나의 책임(기능)만을 담당하여 그 책임을 수행해야 한다는 의미로 해석될 수 있습니다. 현실 세계에서 맥가이버칼과 같은 다기능 도구는 여러 작업을 한 번에 해결할 수 있는 편리함을 ..