Spring & Boot 12

예외처리 Exception Handling

Spring에서의 예외처리(Exception Handling) 메커니즘 > 프로그램의 비정상적 종료를 막기위해, 예외가 발생한 시점부터 예외처리기가 호출되고 처리되는 과정 예외처리는 3가지 부분으로 나뉜다.1.예외를 발생시키는 과정(throwing) / 2.예외 전파(propagation)  / 3.예외를 처리하는 과정(handling) 1.예외 발생 (Throwing Exception)- 일반적으로 코드 실행 중 예기치 않은 상황이 발생 했을 때 throw 키워드를 사용하여 예외를 발생시킴- 자바에서는 예외를 나타내는 클래스들이 있으며, 예외가 발생한 상황에 따라 적절한 예외 클래스를 선택하여 예외를 발생시킴- 프로그램 실행중 예외가 발생하면 JVM은 해당 예외를 발생시킨 메서드의 호출스택정보를 스택추..

Spring & Boot 2024.11.25

DispatcherServlet 디스패처서블릿

DispatcherServlet 이란?Spring MVC의 핵심 구성요소로, 프론트 컨트롤러(Front Controller) 역할을 한다. 이 Servlet은 모든 HTTP 요청을 중앙에서 제어하고, 요청에 따라 알맞은 핸들러(Controller)를 호출하여 응답하는, Spring MVC에서 Front부분과의 통신에서 핵심적인 역할을 한다. 쉽게 말하면 서버로 들어온 요청을 핸들러매핑에 가져다줘서 어떤 컨트롤러가 처리할지 찾아주게하고, 어떤 응답들을 내보내야하는지?에 대하여 응답을 생성하는 프론트부분쪽의 일을 통제하는 역할을 한다고 볼 수 있다.   DispatcherServlet은 역할의 분리와, 유연성을 위해 2개의 계층구조로 작동한다.아래의 그림에서,1.Servlet WebApplicationCon..

Spring & Boot 2024.11.20

스프링 배치 필요한 메타데이터 테이블 설정

스프링 배치를 실행하는데 있어서 기본적으로 메타데이터 테이블이 필요하다. 다음은 스프링배치 5.1.1 기준 필요한 메타데이터 테이블이다.없을 경우 다음과 같은 오류가 난다.`PreparedStatementCallback; bad SQL grammar [~이하생략~]; nested exception is java.sql.SQLSyntaxErrorException: Table `프로젝트나 테이블이름.BATCH_JOB_INSTANCE' doesn't exist   테이블을 생성하는 방식은 크게 자동/수동 2가지의 방법이 있다.1.자동으로 테이블을 생성하는 경우 application.properties파일에 다음과 같이 설정해주면 되는데 이러면 메타데이터 테이블을 스프링부트가 시작할 때 자동으로 생성한다. 하지..

Spring & Boot 2024.05.20

@PathVariable, @RequestParam

공통적으로 @PathVariable, @RequestParam 어노테이션은 각각 주소의 값을 직접 변수로 받아 처리한다. @PathVariable영어 그대로다. Path(경로) + Variable(변수)URL경로에 포함된 변수 값을 추출하는 데 사용된다.RESTful API에서 동적인 URL을 처리할 때 사용된다. @GetMapping("/users/{userId}") public User getUserById(@PathVariable Long userId) {     // userId를 사용하여 사용자 정보를 조회하고 반환 } 위의 코드에서 '{userId}'는 경로 변수이고 @PathVariable 어노테이션을 사용하여 해당 변수의 값을 추출한다./users/asd123 이라는 요청이 오면 userI..

Spring & Boot 2024.04.20

@Configuration @Bean 수동등록

다음의 요소들을 각각 수동으로 빈객체를 등록하고, 의존성을 주입해보자. 이때는 @Configuraton, @Bean을 사용할 수 있다. 다음은 코드의 예시이다. 위의 코드를 수행하여 다음과 같은 형태가 완성 될 것이다. 그렇다면 자동으로 등록하는 방법이 있음에도 이렇게 수동으로 등록하는 방법을 사용하는 이유가 무엇일까? 바로 이렇게 수동으로 @Bean을 등록하고 의존성을 설정하게 되면, 객체간의 의존성 주입을 바꿔야 할 때(구현클래스가 변경되는 등의 상황) 최소한의 코드 수정으로 교체가 가능하다. 반대로 의존성 관계를 바꿔야 할 필요가 없다면 컴포넌트 스캔을 이용한 @Autowired를 사용하는게 바람직 할 것이다. @Component @Autowired 를 이용한 자동 의존성 주입 포스팅 https:/..

Spring & Boot 2024.03.31

컴포넌트스캔 @Autowired

이 글에서는 자동으로 스프링에 빈 객체를 등록하고 의존성을 주입하는 방법을 알아보자. 스프링부트의 일반적 MVC 패턴에 따르면 다음과 같은 구성이 일반적이다. 각 컨트롤러와 서비스, 레포지토리를 서로 연결 해줘야 하는데 이때 사용할 수 있는 방법중에 하나가 컴포넌트 스캔과 @Autowired 이다. 자바 스프링이 기동할 때를 보면 다음과 같다 1.@Component 어노테이션이 붙어있거나 들어가 있는(@Service, @Controller 등) 것들을 모두 찾는다. 2.해당 클래스의 객체를 생성한다. 3.생성된 객체(스프링에서는 Bean이라고 한다.)들을 스프링컨테이너에 등록한다. 4.등록된 객체들에서 @Autowired 들을 찾아서 의존성을 주입해준다. 스프링이 각각의 로직의 @Autowired가 붙어..

Spring & Boot 2024.03.30

스프링 부트 큰 그림

백엔드의 역할은 웹브라우저 혹은 프론트에서 요청하는 것을 반환해주는 것이 역할이다. 여기서 반환해 줄 수 있는 자료의 형태는 어떤 화면이 될 수 있고 혹은 데이터 값이 될 수 있다. 이것을 생각하며 스프링부트의 작동을, 반환하는 자료형에 따라 크게 3가지로 나눠서 생각해보자. 1.정적인 HTML파일을 그대로 반환(화면 혹은 뷰 반환) 2.동적으로 템플릿엔진이 HTML파일의 내용 등을 변경하여 반환(화면 혹은 뷰 반환) 3.API방식으로 문자열이나 객체를 반환(문자열이나 JSON객체등의 데이터값 반환)

Spring & Boot 2024.03.21

ORM 그리고 객체지향

ORM (Object Relation Mapping) : 객체와 DB의 테이블을 매핑시켜 테이블을 객체 지향적으로 사용하게 해주는 기술이다. 자바에서는 대표적으로 사용하는 ORM은 JPA(Java Persistence API)가 있다. 그리고 JPA의 구현체가 바로 Hibernate 이다. MyBatis는 Hibernate 이전의 객체맵핑 기술로 SQL코드를 직접 작성해야했다. 하지만 이런 강한 결합은 DB를 바꾸거나 데이터 모델이 바뀌거나 할 때 수정이 힘들 수 있다. 반면 Hibernate구현체는 SQL코드를 직접 작성하지 않고 DB에 접근가능하며, DB와의 약한 결합으로 DB가 바뀐다고 해도 유연한 대응이 가능하다. 내가 생각하는 최고 장점 SQL언어 대신 Method를 통해 DB를 조작 할 수 있..

Spring & Boot 2023.09.10

의존성 주입 방법 3가지 - 필드 주입, 메소드 주입, 생성자 주입

제어역전의 설계 원칙을 위한 의존성 주입 방법에는 3가지가 있다. 필드 주입, 메소드 주입, 생성자 주입이다. 필드를 통한 주입 public class Consumer { Food food; void eat() { this.food.eat(); } public static void main(String[] args) { Consumer consumer = new Consumer(); consumer.food = new Pizza(); consumer.eat(); } } interface Food{ void eat(); } class Pizza implements Food{ @Override public void eat(){ System.out.println("피자를 먹어요"); } } Consumer 의..

Spring & Boot 2023.09.02