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

전체 글 61

[Spring] SpEL으로 더 강력하게 표현식 작성하기

SpEL이란? Spring Expression Language(SpEL)은, 객체 그래프를 조회하고 조작하는 데 사용되는 표현식 언어입니다. SpEL을 사용해 런타임에 객체의 속성에 접근하거나, 메서드를 호출하거나, 배열, 리스트 및 맵과 같은 컬렉션에 대한 조작을 수행할 수 있습니다. 또한, 논리적 및 산술 연산을 수행하는 데도 사용할 수 있습니다. SpEL의 기본 문법 1. 리터럴 표현식 - 문자열, 숫자, boolean 등 ExpressionParser expressionParser = new SpelExpressionParser(); String helloWorld = (String) expressionParser.parseExpression("'Hello World'").getValue(); i..

Framework/Spring 2024.03.13

[Spring] 애플리케이션의 초기 응답 속도 개선하기

들어가기 앞서 - 왜 Spring에서 초기 요청의 응답이 지연될까? Spring으로 개발을 하다 보면, 애플리케이션을 실행하고 초기 요청, 특히 첫 요청의 응답이 유난히 오래 걸린다는 점을 알 수 있습니다. 이러한 현상을 'Cold Start'라고 부르는데, 'Cold Start'의 주요 원인으로 추정할 수 있는 상황은 아래와 같습니다. 1. JIT 컴파일러의 작동 방식 Java는 'Write Once, Run Anywhere'를 지향하는 플랫폼 독립적인 언어입니다. 그래서, 일반적인 컴파일 언어와 동작 방식에서 약간의 차이가 있는데, Java 프로그램은 컴파일 시점에 바이트 코드로 변환되었다가, 실행 시점에 기계어로 변환되어 실행됩니다. 이러한 방식은 프로그램의 이식성을 높이는 대신, 바이트 코드를 실..

Framework/Spring 2024.03.07

[기술 면접 단골 질문] Spring

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

[Spring] Redisson으로 동시성 문제 해결하기

들어가기 앞서 - 동시성 문제란? 동시성 문제는 하나의 데이터에 여러 스레드가 동시에 접근할 때 발생할 수 있는 문제를 말합니다. 멀티스레딩 환경에서 특히 중요한 이슈로, 여러 스레드가 공유 자원에 동시에 액세스 할 때 정확성과 일관성에 문제가 생겨 데이터의 손상, 잘못된 실행 결과 등을 초래할 수 있습니다. 이를 방지하고, 공유 자원에 대한 안정적인 접근과 제어를 위해서는 한 번에 하나의 요청만을 처리할 수 있도록 하는 Lock이 필요합니다. 1. Synchronized 사용 다른 방법보다 비교적 간단하게, Java의 synchronized 키워드를 사용해 해당 메서드나, 코드 블럭을 동기화해 한 스레드에서 해당 자원에 접근 중이라면, 다른 스레드의 접근을 막아 해당 자원을 Thread-safe 하게 ..

Framework/Spring 2024.02.28

[기술 면접 단골 질문] 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..

[Spring] 스프링의 계층형 아키텍처

프레젠테이션 계층 (Presentation Layer): 이 계층은 사용자의 요청을 받아 처리하고, 그 결과를 사용자에게 돌려주는 역할을 합니다. 컨트롤러(@Controller 또는 @RestController)가 이 계층을 구성합니다. RESTful API를 구성하는 데 필요한 매핑 어노테이션(@GetMapping, @PostMapping 등)을 제공합니다. 서비스 계층 (Service Layer): 비즈니스 로직(애플리케이션의 핵심 기능과 요구 사항)을 수행하는 계층입니다. @Service 어노테이션을 사용하여 이 계층의 컴포넌트를 명시합니다. 서비스 계층은 다양한 도메인 모델과 상호작용하며, 필요한 경우 트랜잭션 관리도 수행합니다. 데이터 접근 계층 (Data Access Layer): DB나 다른..

Framework/Spring 2024.02.19

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

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

[Spring] @Transactinal 파헤치기

들어가기 앞서 - 트랜잭션(Transaction)이란? 트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키는 하나의 작업 단위를 의미합니다. 하나의 트랜잭션에 여러 작업(연산)이 포함될 수 있으며, 이 작업들은 모두 성공적으로 완료되거나, 하나라도 실패할 경우 전체가 취소(롤백)되어야 합니다(All or Nothing이라고도 합니다. 한국어로는 모 아니면 도?). 이러한 특성 때문에 트랜잭션은 데이터의 일관성과 무결성을 유지하는 데 핵심적인 역할을 합니다. '@Transactinal' 어노테이션 // try-catch를 통해 트랜잭션을 수동으로 관리하는 코드 public class Example { public static void main(String[] args) { Connection ..

Framework/Spring 2024.02.04

[Spring] Dispatcher-Servlet 알아보기

들어가기 앞서 - 서블릿(Servlet)이란? 동적 웹 페이지(Dynamic Web Page) 생성에 사용되는 서버 사이드 프로그램입니다. HTTP 프로토콜을 사용하며, 클라이언트의 요청에 대한 처리와 그 결과를 클라이언트에게 반하는 역할을 합니다. 서블릿은 일반적으로 HTML, JSON, XML 등의 형태로 데이터를 클라이언트에 전송하며, 이를 통해 동적인 웹 페이지나 웹 애플리케이션을 구현할 수 있습니다. 디스패처 서블릿(Dispatcher-Servlet)이란? 디스패처 서블릿은 웹 애플리케이션에서 들어오는 모든 요청을 가장 먼저 받아 각 요청을 알맞은 컨트롤러로 전달하는 역할을 하는데, 이는 프론트 컨트롤러 패턴을 구현한 것입니다. 💡프론트 컨트롤러 패턴? 프론트 컨트롤러 패턴은 웹 애플리케이션 아..

Framework/Spring 2024.02.02