[Spring] 예외 처리에만 국한되지 않는 @ControllerAdvice
·
Programming/Spring,JPA
@ControllerAdvice란?Spring MVC에서 컨트롤러 전역 설정을 정의하기 위해 사용하는 어노테이션이다. 해당 어노테이션을 사용하면 특정 컨트롤러에 국한되지 않고, 애플리케이션의 모든 컨트롤러에 적용할 전역 설정을 정의할 수 있다. @ControllerAdvice 어노테이션을 통해, 컨트롤러는 좀 더 컨트롤러의 역할에 집중할 수 있고, 코드의 중복을 제거하며 관심사의 분리를 이뤄낼 수 있다.  "@ControllerAdvice는 예외 처리에만 국한된 게 아니다."주로 예외 처리를 위한 글로벌 핸들러를 제공하는데 사용되지만 이 외에도 다양한 용도로 사용할 수 있다. @ControllerAdvice 사용 용도1. 글로벌 데이터 바인딩 초기화@RestControllerAdvicepublic cla..
[Spring] 단일 행이 반환될때는 queryForObject가 항상 정답일까?
·
Programming/Spring,JPA
프로젝트를 진행하며 queryForObject에 대해 공부한것을 정리해보려 한다. List result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id); 처음에 구현한 코드로, Member 테이블에서 "ID"는 unique한 컬럼이다. 따라서, 최대 단일 행이 조회되는것인데, List 객체를 반환하는것이 사실상 의미가 없다. queryForObject 사용 이유1.단일 행 반환이기에 List 필요없음2.내 코드를 보는 누군가에게 단일 행을 조회하는 것을 명시 이러한 이유들로 queryForObject를 사용하는것이 좋다고 생각했다.   🚫 에러처리그런데, 하나 더 유의할게 있었다. 최대 단일 행 반환이지, ..
[Gradle] runtimeOnly, implementation, compileOnly, api 차이
·
Programming/Java,Back-end
classpath우선 가장 먼저 classpath의 개념과 종류를 알아보자.classpath는 클래스나 jar 파일이 존재하는 위치다. JVM이 프로그램을 실행할 때, 클래스 파일을 찾는데 기준이 되는 경로를 말한다. compileClassPath vs runtimeClassPathGradle 프로젝트의 의존성 관리를 위해 사용되는 두가지 속성이다. compileClassPath프로젝트의 소스 코드를 컴파일 하는 동안 필요한 모든 클래스 파일과 라이브러리를 포함한다. runtimeClassPath프로젝트를 실행할 때 필요한 모든 클래스 파일과 라이브러리를 포함한다. 초록색은 사용자가 의존성을 선언할 때 사용한다.분홍색은 구성요소가 라이브러리를 컴파일하거나 실행할 때 사용한다.파란색은 구성 요소 자체 사용..
[Java] 메인 메소드 존재 이유, 매개변수 String[] args에 대하여
·
Programming/Java,Back-end
✔️ 메인 메소드(main method)의 역할 자바 이외에도 C언어 등 프로그래밍 언어에는 메인 메소드/메인 함수가 존재한다. 과연 이 메인의 역할이라는게 뭘까? 왜 존재하는걸까?메인 메소드 및 함수는 프로그램 실행을 위한 시작 지점 역할을 한다.  프로그래밍이 시작되는 메모리 할당 시점부터 진입을 위한 함수가 필요하다.  그러나, 메인 메소드가 존재하지 않으면 프로그램은 도대체 어떤 코드부터 읽어서 어떻게 시작해야될지를 모른다. 그렇기에 이 메인 메소드가 존재해야 프로세스화 될 수 있고 실행이 될 수 있다.메인 메소드가 반드시 있어야 프로그램으로써 가치를 만들어갈 수 있다. ✔️ 매개변수 String[] args자바의 메인 메소드 코드를 살펴보자.public static void main(String..
[Spring] 스프링에서 사용되는 디자인 패턴들
·
Programming/Spring,JPA
디자인 패턴이란?반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션이다. 프로그램을 작성하다보면 프로그래머들은 비슷비슷한 상황에 직면하게 되는데, 그러한 상황에서 해결할 수 있는 솔루션이라고 생각하면 된다.어댑터 패턴✔️ 어댑터 패턴이란?호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 디자인 패턴으로, 호출 당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴.  ✔️실생활에서의 어댑터우린 이미 실생화에서 어댑터를 사용하고 있다. 나는 아이폰 충전기를 가지고 있는데, C타입의 기기를 충전하기 위해선 어탭터를 이용하여 충전할 수 있다.  ✔️ 구현 방법구현 방법은 위 그림과 같다. 어댑터는 한 객체의 인터페이스를 구현하고 다른 객체를..
[Spring] 스프링 삼각형(IoC/DI, AOP, PSA)
·
Programming/Spring,JPA
✔️ DI(Dependency Injection)*의존성 주입 의존성 주입에 대해 살펴보기 전에 의존성(Dependency)이란 무엇인지에 대한 정의가 필요하다. 프로그래밍에서 이 의존성이란 무엇일까?  의존성/의존 관계란?1. 코드 레벨(클래스 레벨)의 의존 관계 : Supplier가 변경되면, Client 코드가 영향을 받는다. 2. 사용 의존 관계/오브젝트 의존 관계 : A 오브젝트가 B 오브젝트를 사용하면 A가 B를 의존하고 있다고 표현한다.​ 이러한 의존 관계에서 A는 B없이 작동할 수 없다. 또한, B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다. 스프링의 핵심은 코드 레벨(클래스 레벨)의 의존관계와 런타임 레벨의 오브젝트 의존 관계가 다를 수 있다는 것이다.그리고 이를..