분류 전체보기 80

[Spring 스프링] Spring Core - Bean과 Configuration

Bean 빈은 IoC 컨테이너에 의해 관리되는 객체이다. 빈이 생성되려면 설정 메타데이터(configuration metadata)가 컨테이너에게 제공되어야 한다. 설정 메타데이터에는 다음과 같은 것들이 있다. 1. 클래스 이름: 빈의 실제 구현 클래스 2. 빈 동작 설정 요소: 빈이 컨테이너에서 어떻게 동작해야 하는지를 나타낸다. (scope, lifecycle callbacks 등) 3. 다른 빈에 대한 참조: 빈이 동작하는 데 다른 빈을 참조할 수 있다. 4. 새로 생성된 객체에 설정할 기타 설정 세팅들 (예를 들면 커넥션 풀을 관리하는 빈에서 생성할 연결의 수, 풀의 사이즈 등) 그리고 설정 메타데이터는 다음 속성들로 변환된다. [공식문서 바로가기] Configuration IoC 컨테이너에게 설..

[Spring 스프링] Spring Core - IoC(Inversion of Control), DI(Dependency Injection)

IoC(Inversion of Control, 제어의 역전) IoC는 말그대로 제어가 역전되었다, 제어의 흐름을 바꾼다는 뜻이다. 제어가 역전이 안된 상태부터 생각해보자. 처음 프로그래밍을 하던 시절을 생각해보면, 보통 프로그램은 main 메서드가 실행되고, 다음에 사용할 객체를 결정, 생성하고, 객체에 있는 메소드를 호출한다. 그리고 이 오브젝트 또한 자신이 사용할 객체를 스스로 생성하고 사용한다. 자신에 관련된 작업은 자신이 제어한다. 제어가 역전이 되었다는 것은 지금까지의 능동적인 과정이 수동적으로 바뀌는 것을 말한다. 객체가 자신이 사용할 오브젝트를 스스로 결정하지도 않고, 생성하지도 않는다. 다른 누군가가 외부에서 객체를 만들어서 자신에게 넘기면 그것을 사용한다. 스프링에서는 애플리케이션 컨텍스..

[Spring 스프링] Layered Architecture

관심사를 분리하기 위해선 계층형 아키텍처가 쓰일 수 있다. 비슷한 책임들을 가진 것들은 하나의 계층으로 묶이게 되고, 각 계층은 자신의 책임에만 집중하며, 다른 계층과 상호작용한다. 계층형 아키텍처는 프로그램의 규모에 따라 3계층이 될수도 있고, 4계층이 될 수도 있고, 더 많아질 수도 있다. 4계층 아키텍처를 한번 적용해보자. Presentation Layer 사용자와 시스템간의 인터페이스를 담당하며, 사용자로부터 요청을 받아서 처리하고 응답을 반환한다. controller가 해당한다. Business Layer 핵심 비즈니스 로직을 담당하는 계층이다. service가 해당한다. Persistence Layer 데이터베이스와 상호작용을 하며, 데이터에 대한 영속성을 유지하는 계층이다. repositor..

[Spring 스프링] POJO란?

우테코 레벨1때, 도메인에다가 DB를 연결하는 로직을 집어넣어서 다음과 같은 리뷰을 받았던 적이 있다. 이 때는 POJO를 외부 기술을 적용하지 않는 순수한 자바 오브젝트 라고 한문장으로만 이해하고 남어갔다. 이번에 스프링을 공부하면서 POJO라는 단어가 꽤 나오길래 이번에 토비의 스프링을 읽으면서 한번 정리해보았다. POJO POJO(Plain Old Java Object)란? 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트 매우 쉽게 말하면, 간단한 자바 오브젝트를 사용하는 것이다. 하지만 단지 자바의 문법을 지키고, 순수하게 Java API만을 사용했다고 해서 그 코드를 POJO라고 할 순 없다. 위의 정의에서 볼 수 있듯이 객체지..

[Spring 스프링] Spring MVC - ControllerAdvice(@ControllerAdvice와 @ExceptionHandler를 이용한 예외처리)

ControllerAdvice 예외처리를 하기 위한 @ExceptionHandler 어노테이션은 일반적으로 @Controller 또는 @RestController 어노테이션이 달린 클래스에 있는 메서드에 달 수 있다. 하지만 @ControllerAdvice, @RestControllerAdvice(@ControllerAdvice + @ResponseBody) 클래스 안에도 달 수 있다. 여기다가 달면 모든 컨트롤러에 적용된다. 이 점을 이용해서 예외처리 부분을 별도의 컨트롤러로 빼낼 수 있다. @RestControllerAdvice public class ExceptionController { @ExceptionHandler({IllegalArgumentException.class, NullPointer..

[Spring 스프링] Spring MVC - Annotated Controllers(@Controller와 @RestController)

Annotated Controllers 스프링 MVC에서 컨트롤러임을 나타내는 어노테이션으로는 @Controller 와 @RestContoller가 있다. @RestController는 @Controller와 @ResponseBody를 합친 것이다. @ResponseBody가 하는 일이 뭘까? @ResponseBody 어노테이션은 HTTP Response Body에 데이터를 넣어주는 일을 한다. 따라서 이 어노테이션이 달린 메서드는 HTTP Response Body에 데이터를 넣어 반환한다. @Controller 와 @RestController @Controller와 @RestController의 주요한 차이점은 메서드가 무엇을 반환할 수 있는가?이다. @RestController는 메서드가 객체를 반환..

[Spring 스프링] JdbcTemplate 써보기

스프링 공식문서를 참조해서 JdbcTemplate 사용법을 정리해보았다. JdbcTemplate 생성 스프링 공식문서에 따르면 JdbcTemplate을 생성하는 방법은 두가지가 있다. 1. DAO 구현체가 DataSource를 통해 JdbcTemplate를 직접 인스턴스화 2. 스프링 IoC 컨테이너에서 DAO에게 빈 참조로 제공 하지만 프로젝트의 의존성에 spring-boot-starter-jdbc 모듈을 추가한다면 스프링 부트가 DataSource와 JdbcTemplate 객체를 자동으로 IoC 컨테이너에 설정해준다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' } 그러니까 우리는 IoC 컨테이너에 ..

[Spring 스프링] JDBC, JDBC 드라이버, JDBCTemplate

용어들이 다 비슷하게 생겨서 헷갈렸는데, 이참에 한번 정리해보았다. JDBC JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 연결할 때 사용하는 API이다. 일반적으로 데이터베이스에서 데이터를 가져오는 과정은 다음과 같이 이루어진다. 1. 데이터베이스로 커넥션 연결 2. 데이터베이스에 SQL 전달 3. 데이터베이스가 결과를 응답 하지만 데이터베이스의 종류는 MySQL DB, Oracle DB 등 매우 많다. 큰 과정은 동일할지라도 각각 사용법이 다르다. 데이터베이스를 변경할 때마다 애플리케이션의 데이터베이스 접근 코드도 변경해야한다고 생각해보자. 너무 끔찍하다. 그래서 JDBC는 위 3가지 공통적인 기능을 표준 인터페이스로 정의해서 제공한다. java.sql.Conne..

[Spring 스프링] @Component, @Repository, @Service, @Controller 는 뭐가 다를까

프로그램을 짜면서 @Component를 달아보기도 하고, @Repository로 바꿔서 달아보기도 했다. 근데 둘 다 프로그램이 잘 돌아간다. 궁금해져서 차이점을 찾아봤다. 🐣 컴포넌트 스캐닝 @ComponentScan 어노테이션을 달고있는 어플리케이션이 위치하는 패키지 내에서 이루어진다. 컴포넌트 스캐닝을 통해 @Component 어노테이션이 달린 클래스들을 빈으로 만든다. 🐣 @Component 스프링에서는 @Component을 사용하여 빈을 선택하고 등록한다. 🐣 @Repository, @Service, @Controller 각각의 어노테이션을 까고 들어가보면 @Component라는 어노테이션을 달고 있음을 확인할 수 있다. @Component가 일반화된 어노테이션이라고 생각하면 된다. 대충 코드를..

[Spring 스프링] consumes와 produces의 차이

produces 컨트롤러가 생산해서 클라이언트에게 반환하는 메시지의 형식을 지정 요청 헤더에서 Accept 헤더와 produces가 일치해야 함 @GetMapping(path = "/users", produces = MediaType.APPLICATION_JSON_VALUE) 컨트롤러에서 위의 어노테이션을 달고 있는 메서드 왈: 내가 보내는 응답은 json 형식이란다^.^~ consumes 컨트롤러가 클라이언트로부터 받아서 소모하는 메시지의 형식을 지정 요청 헤더에서 Content-Type 헤더와 consumes가 일치해야 함 @PostMapping(path = "/users", consumes = MediaType.APPLICATION_JSON_VALUE) 컨트롤러에서 위의 어노테이션을 달고 있는 메서..

1 2 3 4 5 6 ··· 8