날짜
본사
담당
자
스프링 인 액션을 통한 스프링 학습
2022.02.22
데이터스
오정민
목차
1. 스프링 기본 정리
2. 스프링 웹 개발
3. 데이터로 작업하기
4. 스프링 시큐리티
5. 마무리
1. 스프링 기본 정리
1.1 스프링이란 뭘까?
- 스프링은 개발자에게 있어서 겨울이 가고 봄이 왔다는 의미로 이름 붙여진 프레임워크이다.
- 저에게 있어서 스프링은 막연히 이해하기 어려운 수수께끼 같은 존재였다.
- 스프링 인 액션을 통해서 스프링에 접근하면서 스프링에 대한 인상이 바뀐 것은 결국 스프링도 도구에 불과하다는 것이다.
스프링도 리모콘처럼 도구에 불과
1. 스프링 기본 정리
1.2 스프링의 핵심 개념
- 애플리케이션 컨텍스트라는 컨테이너를 통한 컴포넌트의 관리
- 컴포넌트는 애플리케이션을 이루는 구성요소로 컴포넌트들 간에서는 서로 관계를 이루면서 하나의 애플리케이션이 작동하게끔
한다.
- 하지만 이 관계를 맺을 때에 생길 수 있는 여러 까다로운 문제들을 매번 관리해주는 건 귀찮고도 반복적인 문제
- 이를 해결 시켜 줄 수 있는 개념이 애플리케이션 컨텍스트에서 각각의 컴포넌트의 생성하고 관리하며 필요한 객체를 주입시킨다
는 개념
- 특히 하나의 컴포넌트가 다른 컴포넌트의 기능을 필요로 할 때, 그 기능을 주입시켜주는 것을 의존성 주입(Dependency
Injection)이라고 한다.
- 초기 스프링 버전에서는 XML파일을 이용하여 애플리케이션 컨텍스트에게 컴포넌트의 관계를 관리했지만 후기에는 자바 기반으
로 구성도 가능하게 되었다.
- 스프링부트에서는 자동-구성 기능이 크게 향상되어 XML이나 자바로 이루어진 구성 코드 작성을 현격하게 줄여준다.
2. 스프링 웹 개발
2.1 스프링MVC
- 스프링 웹 개발은 일반적으로 스프링MVC라고 하는 구조에 따라 이루어진다.
- Controller가 웹 요청과 그에 따른 응답을 처리한다.
- Model은 데이터저장소와 연동하여 사용자가 입력한 데이터나 출력할 데이터를 다루는 일을 한다.
- View는 사용자에게 출력할 화면을 만드는 일을 한다.
웹 브라우
저
요청
타코
디자인
컨트롤러
식자재
요청
디자인
뷰
HTML
2. 스프링 웹 개발
2.2 GET 요청 처리하기
- /design 요청과 응답을 처리하는 컨트롤러클래스
- @Controller 애노테이션을 통해서 애플리케이션
컨텍스트에서 관리하도록 등록
- 데이터베이스와 연동하지 않았기에 리스트로 직접
관리되고 있는 데이터를 model 객체를 통해서 운반
- 논리적 뷰 이름인 design을 반환하여 해당 뷰를 출
력하게끔 한다.
- 모델에 담긴 정보가 선택지로 제시되는 페이지가 만
들어진다.
2. 스프링 웹 개발
2.2 Post 요청 처리하기
- 타코 디자인 페이지에서 선택하여 제출한 재료들과 이
름을 처리하기 위해서 /design을 처리하는 클래스에
@PostMapping 애노테이션이 달린 메서드를 작성
- 제출한 재료들을 데이터베이스에 담을 계획이지만 데
이터베이스와 연동하는 방법인 jdbc와 jpa를 아직 다
루지 않았기에 생략.
- redirect:를 통해 /orders/current 상대경로로 재접
속되어야 한다.
- /orders/current 요청을 처리할 수 있는 컨트롤러도
작성한다. 뷰의 논리적 이름인 orderForm으로 조회
할 수 있게한다.
- 도메인 클래스에서 Hibernate Validator의 애노테이
션으로 NotNull, Size 등 유효성 검사를 할 수 있다.
3. 데이터로 작업하기
3.1 개요
- 관계형 데이터베이스는 범용 데이터 저장소로서 광범위하게 활용되고 있다. 이를 활용하는데에 있어서 자바 개발자가 고려해볼
수 있는 두 가지 방법이 JDBC와 JPA이다. JDBC는 JDBC템플릿을 기반으로 두고 데이터베이스와 연결하는데 반복적으로 쓰이
는 부분을 템플릿화 해서 실질적으로 필요한 쿼리만 작성하게끔 할 수 있도록 도우며 JPA는 리포지터리 인터페이스를 기반으로
인터페이스를 구현하는 리포지터리를 자동 생성해준다.
3.2 JDBC를 사용한 데이터 읽고 쓰기
- JDBC를 사용하기 위해 빌드 명세에 jdbc를 추가한다.
- 리포지터리 인터페이스를 통해서 해야할 일을 정의한다.
- 인터페이스를 구현하면서 @Repository로 애플리케이션 컨텍스트에서 컴포넌트 검색을 할 수 있게 한다. 그렇게해서
JdbcTemplate를 주입 받는다.
3. 데이터로 작업하기
3.3 Jdbctemplate를 이용한 쿼리 작성
- JdbcTemplate를 이용하여 예외처리, DB연결객체 생성 등의 코드 없이 SQL을 작성하고 해당 데이터를 처리하는 과정에만 집
중할 수 있게 되었다.
- 컨트롤러에서 리포지터리를 주입받아 데이터베이스에 접근 가능하다.
3. 데이터로 작업하기
3.4 JPA를 이용하여 데이터 저장하고 사용하기
- JPA를 빌드 명세에 포함시킨다.
- 도메인 객체에 애노테이션을 추가한다.
- JPA개체로 선언하려면 @Entity 애노테이션을 추가해야한다
- JPA는 인자없는 생성자를 필요로 하기에 @NoArgsContructor 애노테이션을 추가한다.
- Id속성에는 @Id애노테이션으로 데이터베이스의 개체를 고유하게 식별함을 알려야 한다.
- 다른 도메인들도 마찬가지로 애노테이션을 덧붙인다.
- @GeneratedValue애노테이션은 Id값을 어떻게 생성할 것인가를 설정할 수 있게한다. AUTO로 설정하면 데이터베이스가 자동
으로 생성한다.
- @ManyToMany는 Ingredient들과의 관계를 나타내기 위해 사용된다.
- @PrePersist는 Taco객체가 저장되기 전에 일자를 저장하도록 설정한다.
3. 데이터로 작업하기
- JPA리퍼지터리를 선언한다.
- CrudRepository 인터페이스에는 연산을 위한 메서드가 선언되어 있다.
- 위의 인터페이스를 구현할 필요 없이 JPA가 각각의 인터페이스 구현을 자동으로 실행해준다.
- 만들어진 메서드를 JDBC를 활용하듯이 활용하는 것으로 동작하는 것을 확인할 수 있다.
- JPA는 메서드 이름 처리(동사, 생략 가능한 처리 대상, By 단어, 서술어)를 통해서 원하는 연산을 해낼 수 있다.
4. 스프링 시큐리티
4.1 스프링 시큐리티 활성화하기
- 웹을 통해서 데이터를 다루는데에 있어서 보안은 매우 중요하다. 스프링 시큐리티는 스프링 애플리케이션을 안전하게 하는데에
도움을 준다. 이를 활성화 하기 위해서는 pom.xml에 스프링 시큐리티 의존성을 추가한다.
- 의존성을 추가하는 것만으로 페이지에 접근하는데에 인증절차가 요구된다.
- 이는 하나의 사용자에 암호화된 비밀번호로 모든 요청 경로에 인증이 되게끔 요구하는 극히 제한적인 보안 구성으로서 제공된다
. 따라서 자동-구성을 대체하여 원하느대로 구성하는 작업을 해야한다.
4. 스프링 시큐리티
4.2 스프링 시큐리티 구성하기
- SecurityConfig 클래스를 만들어 이곳에서 보안 관련 처리를 원하는대로 조정한다.
- 자동-구성으로 제공되던 user 한 명의 사용자만이 아닌 여러 사용자를 관리하고자 하는 시스템을 만들고자 한다면 스프링 시큐
리티에서 제공하는 사용자 스토어 구성 방법을 알아야 한다.
- 인메모리 사용자 스토어, JDBC 기반 사용자 스토어, LDAP 기반 사용자 스토어, 커스텀 사용자 명세 서비스가 그 네 가지이다.
4.3 인메모리 사용자 스토어
메모리에서 사용자 정보를 유지 관리하는 것으로 사용자 변경이 필요없는 제한적인 상황에서만 쓰인다.
4. 스프링 시큐리티
4.4 JDBC 기반 구성
- 관계형 데이터베이스와 연동하여 유저명과 비밀번호 권한을 유지 관리한다. 데이터베이스에 평범한 비밀번호를 그대로 저장하는
것은 보안 상 허점이 될 수 있기에 passwordEncoder를 통해 암호화 한다.
4. 스프링 시큐리티
4.5 LDAP 기반 구성
- LDAP 기반 보안 구성은 사용자가 직접 LDAP 서버에서 인증 받도록 하는 것이다. 비밀번호를 인증하는 과정이나 비밀번호를 비
교하는 과정이 서버에서 이루어지기에 노출되지 않을 수 있다.
- 스프링 시큐리티에서 제공하는 LDAP 서버를 의존성에 추가함으로서 사용할 수 있다.

0222 사내세미나_오정민 스프링인액션

  • 1.
    날짜 본사 담당 자 스프링 인 액션을통한 스프링 학습 2022.02.22 데이터스 오정민
  • 2.
    목차 1. 스프링 기본정리 2. 스프링 웹 개발 3. 데이터로 작업하기 4. 스프링 시큐리티 5. 마무리
  • 3.
    1. 스프링 기본정리 1.1 스프링이란 뭘까? - 스프링은 개발자에게 있어서 겨울이 가고 봄이 왔다는 의미로 이름 붙여진 프레임워크이다. - 저에게 있어서 스프링은 막연히 이해하기 어려운 수수께끼 같은 존재였다. - 스프링 인 액션을 통해서 스프링에 접근하면서 스프링에 대한 인상이 바뀐 것은 결국 스프링도 도구에 불과하다는 것이다. 스프링도 리모콘처럼 도구에 불과
  • 4.
    1. 스프링 기본정리 1.2 스프링의 핵심 개념 - 애플리케이션 컨텍스트라는 컨테이너를 통한 컴포넌트의 관리 - 컴포넌트는 애플리케이션을 이루는 구성요소로 컴포넌트들 간에서는 서로 관계를 이루면서 하나의 애플리케이션이 작동하게끔 한다. - 하지만 이 관계를 맺을 때에 생길 수 있는 여러 까다로운 문제들을 매번 관리해주는 건 귀찮고도 반복적인 문제 - 이를 해결 시켜 줄 수 있는 개념이 애플리케이션 컨텍스트에서 각각의 컴포넌트의 생성하고 관리하며 필요한 객체를 주입시킨다 는 개념 - 특히 하나의 컴포넌트가 다른 컴포넌트의 기능을 필요로 할 때, 그 기능을 주입시켜주는 것을 의존성 주입(Dependency Injection)이라고 한다. - 초기 스프링 버전에서는 XML파일을 이용하여 애플리케이션 컨텍스트에게 컴포넌트의 관계를 관리했지만 후기에는 자바 기반으 로 구성도 가능하게 되었다. - 스프링부트에서는 자동-구성 기능이 크게 향상되어 XML이나 자바로 이루어진 구성 코드 작성을 현격하게 줄여준다.
  • 5.
    2. 스프링 웹개발 2.1 스프링MVC - 스프링 웹 개발은 일반적으로 스프링MVC라고 하는 구조에 따라 이루어진다. - Controller가 웹 요청과 그에 따른 응답을 처리한다. - Model은 데이터저장소와 연동하여 사용자가 입력한 데이터나 출력할 데이터를 다루는 일을 한다. - View는 사용자에게 출력할 화면을 만드는 일을 한다. 웹 브라우 저 요청 타코 디자인 컨트롤러 식자재 요청 디자인 뷰 HTML
  • 6.
    2. 스프링 웹개발 2.2 GET 요청 처리하기 - /design 요청과 응답을 처리하는 컨트롤러클래스 - @Controller 애노테이션을 통해서 애플리케이션 컨텍스트에서 관리하도록 등록 - 데이터베이스와 연동하지 않았기에 리스트로 직접 관리되고 있는 데이터를 model 객체를 통해서 운반 - 논리적 뷰 이름인 design을 반환하여 해당 뷰를 출 력하게끔 한다. - 모델에 담긴 정보가 선택지로 제시되는 페이지가 만 들어진다.
  • 7.
    2. 스프링 웹개발 2.2 Post 요청 처리하기 - 타코 디자인 페이지에서 선택하여 제출한 재료들과 이 름을 처리하기 위해서 /design을 처리하는 클래스에 @PostMapping 애노테이션이 달린 메서드를 작성 - 제출한 재료들을 데이터베이스에 담을 계획이지만 데 이터베이스와 연동하는 방법인 jdbc와 jpa를 아직 다 루지 않았기에 생략. - redirect:를 통해 /orders/current 상대경로로 재접 속되어야 한다. - /orders/current 요청을 처리할 수 있는 컨트롤러도 작성한다. 뷰의 논리적 이름인 orderForm으로 조회 할 수 있게한다. - 도메인 클래스에서 Hibernate Validator의 애노테이 션으로 NotNull, Size 등 유효성 검사를 할 수 있다.
  • 8.
    3. 데이터로 작업하기 3.1개요 - 관계형 데이터베이스는 범용 데이터 저장소로서 광범위하게 활용되고 있다. 이를 활용하는데에 있어서 자바 개발자가 고려해볼 수 있는 두 가지 방법이 JDBC와 JPA이다. JDBC는 JDBC템플릿을 기반으로 두고 데이터베이스와 연결하는데 반복적으로 쓰이 는 부분을 템플릿화 해서 실질적으로 필요한 쿼리만 작성하게끔 할 수 있도록 도우며 JPA는 리포지터리 인터페이스를 기반으로 인터페이스를 구현하는 리포지터리를 자동 생성해준다. 3.2 JDBC를 사용한 데이터 읽고 쓰기 - JDBC를 사용하기 위해 빌드 명세에 jdbc를 추가한다. - 리포지터리 인터페이스를 통해서 해야할 일을 정의한다. - 인터페이스를 구현하면서 @Repository로 애플리케이션 컨텍스트에서 컴포넌트 검색을 할 수 있게 한다. 그렇게해서 JdbcTemplate를 주입 받는다.
  • 9.
    3. 데이터로 작업하기 3.3Jdbctemplate를 이용한 쿼리 작성 - JdbcTemplate를 이용하여 예외처리, DB연결객체 생성 등의 코드 없이 SQL을 작성하고 해당 데이터를 처리하는 과정에만 집 중할 수 있게 되었다. - 컨트롤러에서 리포지터리를 주입받아 데이터베이스에 접근 가능하다.
  • 10.
    3. 데이터로 작업하기 3.4JPA를 이용하여 데이터 저장하고 사용하기 - JPA를 빌드 명세에 포함시킨다. - 도메인 객체에 애노테이션을 추가한다. - JPA개체로 선언하려면 @Entity 애노테이션을 추가해야한다 - JPA는 인자없는 생성자를 필요로 하기에 @NoArgsContructor 애노테이션을 추가한다. - Id속성에는 @Id애노테이션으로 데이터베이스의 개체를 고유하게 식별함을 알려야 한다. - 다른 도메인들도 마찬가지로 애노테이션을 덧붙인다. - @GeneratedValue애노테이션은 Id값을 어떻게 생성할 것인가를 설정할 수 있게한다. AUTO로 설정하면 데이터베이스가 자동 으로 생성한다. - @ManyToMany는 Ingredient들과의 관계를 나타내기 위해 사용된다. - @PrePersist는 Taco객체가 저장되기 전에 일자를 저장하도록 설정한다.
  • 11.
    3. 데이터로 작업하기 -JPA리퍼지터리를 선언한다. - CrudRepository 인터페이스에는 연산을 위한 메서드가 선언되어 있다. - 위의 인터페이스를 구현할 필요 없이 JPA가 각각의 인터페이스 구현을 자동으로 실행해준다. - 만들어진 메서드를 JDBC를 활용하듯이 활용하는 것으로 동작하는 것을 확인할 수 있다. - JPA는 메서드 이름 처리(동사, 생략 가능한 처리 대상, By 단어, 서술어)를 통해서 원하는 연산을 해낼 수 있다.
  • 12.
    4. 스프링 시큐리티 4.1스프링 시큐리티 활성화하기 - 웹을 통해서 데이터를 다루는데에 있어서 보안은 매우 중요하다. 스프링 시큐리티는 스프링 애플리케이션을 안전하게 하는데에 도움을 준다. 이를 활성화 하기 위해서는 pom.xml에 스프링 시큐리티 의존성을 추가한다. - 의존성을 추가하는 것만으로 페이지에 접근하는데에 인증절차가 요구된다. - 이는 하나의 사용자에 암호화된 비밀번호로 모든 요청 경로에 인증이 되게끔 요구하는 극히 제한적인 보안 구성으로서 제공된다 . 따라서 자동-구성을 대체하여 원하느대로 구성하는 작업을 해야한다.
  • 13.
    4. 스프링 시큐리티 4.2스프링 시큐리티 구성하기 - SecurityConfig 클래스를 만들어 이곳에서 보안 관련 처리를 원하는대로 조정한다. - 자동-구성으로 제공되던 user 한 명의 사용자만이 아닌 여러 사용자를 관리하고자 하는 시스템을 만들고자 한다면 스프링 시큐 리티에서 제공하는 사용자 스토어 구성 방법을 알아야 한다. - 인메모리 사용자 스토어, JDBC 기반 사용자 스토어, LDAP 기반 사용자 스토어, 커스텀 사용자 명세 서비스가 그 네 가지이다. 4.3 인메모리 사용자 스토어 메모리에서 사용자 정보를 유지 관리하는 것으로 사용자 변경이 필요없는 제한적인 상황에서만 쓰인다.
  • 14.
    4. 스프링 시큐리티 4.4JDBC 기반 구성 - 관계형 데이터베이스와 연동하여 유저명과 비밀번호 권한을 유지 관리한다. 데이터베이스에 평범한 비밀번호를 그대로 저장하는 것은 보안 상 허점이 될 수 있기에 passwordEncoder를 통해 암호화 한다.
  • 15.
    4. 스프링 시큐리티 4.5LDAP 기반 구성 - LDAP 기반 보안 구성은 사용자가 직접 LDAP 서버에서 인증 받도록 하는 것이다. 비밀번호를 인증하는 과정이나 비밀번호를 비 교하는 과정이 서버에서 이루어지기에 노출되지 않을 수 있다. - 스프링 시큐리티에서 제공하는 LDAP 서버를 의존성에 추가함으로서 사용할 수 있다.