[스프링부트] 하나의 인터페이스로 여러 구현체 선택 방법
·
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..