[스프링부트] 하나의 인터페이스로 여러 구현체 선택 방법
·
Java
@ SpringBoot@ JDK 21 의존성 역전에서 인터페이스의 구현체가 여러 개인 경우가 종종 발생합니다. 예를 들어, DBMS로 MySQL과 PostgreSQL을 동시에 사용하는 상황에서 구현체를 선택하고 구별하여 로직을 처리하는 방법을 고민할 필요가 있습니다.아래에서 대표적인 접근 방법들을 정리했습니다. 1. 비권장 방식: instanceof 및 명시적 타입 변환if (orderWriter instanceof MySqlOrderAdapter mysql) { mysql.saveMySqlWay(...);}단점Open-Closed Principle(OCP) 위반인터페이스를 사용한 추상화가 무의미해짐확장 시 if 조건문이 늘어나 유지보수 어려움2. 권장 방식: 스프링 DI + Qualifier, P..
[Java] record는 뭐야?
·
Java
record 등장 ?!❓Java 14에 처음 등장❗️Java 16부터 정식✅ Java 21에서 거의 주력으로 자리잡은 record. record에서 간략하게 알아보자.setter ❌getter, 생성자, equals, hashCode, toString 자동생성final 필드로 수정 ❌ (불변객체)직렬화 가능Swagger 문서화 도구 사용 가능 ✅ 겉으로 보이는 차이점: 일반 객체(DTO)와 record 비교일반 객체(DTO)와 비교해보자.생성자명시적으로 작성해야 함자동 생성 (canonical constructor)getter직접 생성 or Lombok 필요자동 생성setter직접 생성 or Lombok 필요❌ 없음 (불변)equals/hashCode/toString수동 or Lombok 필요자동 생성필..
REST API에서 요청 DTO를 매번 만들어야 하나?
·
Java
@ SpringBoot@ JDK 21 REST API에서 요청 DTO를 매번 만들어야 하나?왜 요청 DTO를 쓰는가?REST API를 처음 설계할 때, 객체를 남발하는 느낌과 굳이 필요한가? 만약, 하나의 요청값만 있다면 너무 too much 아닌가? 라는 생각이 들었다. 다만, 결론만 생각해본다면 DTO는 많은게 맞고, 그만큼 얻는게 많다는 것이다.도메인을 외부 API에 노출하지 않는다.(API 안정성 증가)도메인과 분리되어 결합도를 낮춰 개발 영향도가 적다.    DTO 클래스에 검증 어노테이션 등을 사용해서 간결하게 처리 가능하다.위 내용을 토대로 유지 보수 관점에서도 좋다. 그래도 너무 많고 아무리 DTO를 권장해도 파일이 너무 많거나 정리를 못하여 복잡해진다면대안법으로 사용할 만한 방법이 몇가지..
REST API 설계, GET 방식과 보안이슈
·
Java
@ 스프링부트 기반@ JDK 21왜? GET은 JSON 처리가 된 않을까?처음 REST API를 접했을 때, 모든 입출력값은 `JSON`으로 처리할 줄 알았습니다.그러나, GET 방식에서는 JSON Body를 사용하지 않는게 표준입니다.GET 요청은 원칙적으로 웹 요청에 본문(body)를 사용하지 않습니다.GET 요청은 QueryString를 통해 데이터를 전달합니다.( ?value=1 )본문(body)은 거의 사용하지 않으며, 개부분 클라이언트나 프록시가 GET body를 무시하거나 막습니다.따라서 JSON 데이터를 통째로 전달하려면 POST/PUT/PATCH 같은 메서드를 사용하게 일반적입니다.보안? 표현력의 트레이드오프 조회인데 POST를 써야 하나?  처음 REST 설계를 할때 자주 부딪히는 보안..
Java 버전별 변천사 ( Java 6 ~ )
·
Java
Java는 오랜 시간 동안 발전을 거듭해 왔습니다. 처음에는 단순한 객체지향 언어였지만, 점점 더 강력한 기능을 갖추면서 다양한 환경에서 활용될 수 있도록 변화해 왔습니다. 특히 LTS(Long-Term Support) 버전은 기업에서 안정적으로 사용할 수 있도록 지원됩니다. 이 글에서는 Java 6부터 주요 변화를 실제 개발 과정에서 마주할 수 있는 이야기로 풀어보겠습니다.1. Java 6 ~  주요 변화 한눈에 보기버전출시주요변화추가된 이유이후 발전Java 6(2006)JVM 성능 개선웹 서비스 강화실행 속도 향상기업용 웹 서비스 지원RESTful API 발전Java EE → Jakarta EE 변경Java 7(2011)코드 가독성 향상병렬 처리 지원멀티코어 환경 증가예외 처리 개선Java 8의 St..
자바의 특징
·
Java
1. 플랫폼 독립성바이트코드 형태로 변환된 후 JVM(Java Virtual Machine)에서 실행되므로, OS와 상관 없이 동작할 수 있다.바이트코드는 xxx.java 파일을 컴파일한 xxx.class 형태의 클래스 파일이다. 이게 왜 특징이냐?라고 생각이 들텐데?! 자바 이전의 언어 소스들은 각 언어 체계에 따라 컴파일러가 있고 컴파일러를 통해 어셈블리어로 변환 한다.변환된 어셈블리어를 기계가 읽을 수 있게 어셈블러를 통해 기계어로 변환하여 하드웨어가 읽은 수 있게된다. 여기서 기존의 소스 코드 공유 방식에서 자바와 차이가 나타난다. 하드웨어, 제조사마다 기계어의 설계가 다르다는 것이다.예를 들어, A라는 장비에 B 운영체제에서 C언어로 개발한 소스(C)가 있다.이 소스를 A'라는 장비에 B' 운영..
클래스 초기화 순서
·
Java
문득, JVM구조를 공부하다가 초기화 순서가 정확히 어떻게 진행 될까? 생각해본적이 있다.언제 초기화 되는걸까?인스턴스를 생성할 때(new 객체 생성)클래스의 정적 메소드를 호출할 때 클래스가 초기화됨클래스의 정적 변수 값이 할당되거나 사용될 때초기화 순서는?정적 변수 초기화필드가 선언된 순서대로 초기화정적 블록 실행static {}간혹 정적 블록이 먼저 실행될 수도 있음인스턴스 변수 초기화인스턴스 변수가 선언된 순서대로 초기화됨인스턴스 블록 초기화{}생성자 실행예제class Example { static int staticVar = initializeStaticVar(); static { System.out.println("정적 블록 실행"); } int instanc..
덱(Deque) 보다 큐(Queue)와 스택(Stack)이 더 좋은 경우?
·
Java/자료구조
시리즈2025.03.11 - [Java/자료구조] - 스택? 큐?2025.03.11 - [Java/자료구조] - Deque?2025.03.11 - [Java/자료구조] - 덱(Deque) 보다 큐(Queue)와 스택(Stack)이 더 좋은 경우?자바 기반 설명이며 개념에 관한 내용을 다룹니다.📌 핵심내용
Deque?
·
Java/자료구조
시리즈2025.03.11 - [Java/자료구조] - 스택? 큐?2025.03.11 - [Java/자료구조] - Deque? 자바 기반 설명이며 개념에 관한 내용을 다룹니다.📌 핵심내용큐와 스택의 장점을 취하고 단점을 보완한 자료구조로더 유연하고 안정적인 데이터 관리가 가능합니다.다만, 성능은 상황에 따라 달라져 구조를 알고 효율적으로 사용해야 적절합니다.Deque(덱)가 등장한 배경과 필요성Deque(Double-ended Queue, 덱)는 큐와 스택의 단점을 보완한 자료구조로, 양쪽에서 삽입과 삭제가 가능한 형태입니다.1. Deque가 등장한 이유큐(Queue)와 스택(Stack)은 각각 단순한 선형 자료구조이지만, 다음과 같은 문제점이 존재합니다.큐(Queue)의 문제점FIFO 구조로 인해 한쪽..
스택? 큐?
·
Java/자료구조
시리즈2025.03.11 - [Java/자료구조] - 스택? 큐?2025.03.11 - [Java/자료구조] - Deque? 자바 기반 설명이며 개념에 관한 내용을 다룹니다.📌 핵심내용스택(Stack)과 큐(Queue)는 기본적인 자료구조로동기화(스레드 세이프), 시간 복잡도, 알고리즘 적용 방식에 따라 성능과 활용도가 크게 달라집니다. 본 글에서는 실무에서 발생하는 문제와 해결 방안을 중심으로 심화 내용을 다룹니다. 1. 스택(Stack)과 큐(Queue)의 차이점구분스택(Stack)큐(Queue)구분스택(Stack)큐(Queue)구조후입선출(LIFO)선입선출(FIFO)동기화Stack (Thread-safe X)ConcurrentLinkedDeque (Thread-safe O)LinkedList (T..