SlideShare a Scribd company logo
날짜
본사
담당
자
스프링 인 액션을 통한 스프링 학습
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 서버를 의존성에 추가함으로서 사용할 수 있다.

More Related Content

What's hot

AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
Amazon Web Services Korea
 
SQL Azure 실무 도입하기
SQL Azure 실무 도입하기SQL Azure 실무 도입하기
SQL Azure 실무 도입하기정현 남
 
[온라인교육시리즈] 베어메탈서비스 소개 및 활용 - 현영환 클라우드 솔루션 아키텍트
[온라인교육시리즈] 베어메탈서비스 소개 및 활용 - 현영환 클라우드 솔루션 아키텍트[온라인교육시리즈] 베어메탈서비스 소개 및 활용 - 현영환 클라우드 솔루션 아키텍트
[온라인교육시리즈] 베어메탈서비스 소개 및 활용 - 현영환 클라우드 솔루션 아키텍트
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
Azure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDBAzure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDB
rockplace
 
Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기
Amazon Web Services Korea
 
Webservice cache strategy
Webservice cache strategyWebservice cache strategy
Webservice cache strategyDaeMyung Kang
 
Cloudera Impala 1.0
Cloudera Impala 1.0Cloudera Impala 1.0
Cloudera Impala 1.0
Minwoo Kim
 
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
SANG WON PARK
 
Migration to Azure Database for MySQL
Migration to Azure Database for MySQLMigration to Azure Database for MySQL
Migration to Azure Database for MySQL
rockplace
 
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
Amazon Web Services Korea
 
AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기
I Goo Lee
 
2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개
2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개
2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개
Steve Kim
 
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
Windows Azure 개요
Windows Azure 개요Windows Azure 개요
Windows Azure 개요Keon Lee
 
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
Amazon Web Services Korea
 
Scalable web architecture
Scalable web architectureScalable web architecture
Scalable web architecture
Steve Min
 
20130716 AWS Meister re:Generate - Amazon Redshift (Korean)
20130716 AWS Meister re:Generate - Amazon Redshift (Korean)20130716 AWS Meister re:Generate - Amazon Redshift (Korean)
20130716 AWS Meister re:Generate - Amazon Redshift (Korean)
Amazon Web Services Korea
 
AWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep DiveAWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep Dive
Amazon Web Services Korea
 
AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론
I Goo Lee
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
Brian Hong
 

What's hot (20)

AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
SQL Azure 실무 도입하기
SQL Azure 실무 도입하기SQL Azure 실무 도입하기
SQL Azure 실무 도입하기
 
[온라인교육시리즈] 베어메탈서비스 소개 및 활용 - 현영환 클라우드 솔루션 아키텍트
[온라인교육시리즈] 베어메탈서비스 소개 및 활용 - 현영환 클라우드 솔루션 아키텍트[온라인교육시리즈] 베어메탈서비스 소개 및 활용 - 현영환 클라우드 솔루션 아키텍트
[온라인교육시리즈] 베어메탈서비스 소개 및 활용 - 현영환 클라우드 솔루션 아키텍트
 
Azure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDBAzure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDB
 
Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기
 
Webservice cache strategy
Webservice cache strategyWebservice cache strategy
Webservice cache strategy
 
Cloudera Impala 1.0
Cloudera Impala 1.0Cloudera Impala 1.0
Cloudera Impala 1.0
 
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )
 
Migration to Azure Database for MySQL
Migration to Azure Database for MySQLMigration to Azure Database for MySQL
Migration to Azure Database for MySQL
 
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
 
AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기
 
2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개
2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개
2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개
 
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
 
Windows Azure 개요
Windows Azure 개요Windows Azure 개요
Windows Azure 개요
 
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
 
Scalable web architecture
Scalable web architectureScalable web architecture
Scalable web architecture
 
20130716 AWS Meister re:Generate - Amazon Redshift (Korean)
20130716 AWS Meister re:Generate - Amazon Redshift (Korean)20130716 AWS Meister re:Generate - Amazon Redshift (Korean)
20130716 AWS Meister re:Generate - Amazon Redshift (Korean)
 
AWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep DiveAWS 9월 웨비나 | Amazon Aurora Deep Dive
AWS 9월 웨비나 | Amazon Aurora Deep Dive
 
AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 

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

서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
수보 김
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
중선 곽
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Android
taeinkim6
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
HYUN-JOO LEE
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
Hyosang Hong
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
Hyosang Hong
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
SangIn Choung
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
EunChul Shin
 
All about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apmAll about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apm
엑셈
 
spark database Service
spark database Servicespark database Service
spark database Service
창언 정
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XpressEngine
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
Ji-Woong Choi
 
피니엔진
피니엔진피니엔진
피니엔진
승우 백
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
sung yong jung
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
Hankyo
 
Java (spring) vs javascript (node.js)
Java (spring) vs javascript (node.js)Java (spring) vs javascript (node.js)
Java (spring) vs javascript (node.js)
류 영수
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
KwangSeob Jeong
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
흥배 최
 
Portfolio
PortfolioPortfolio
Portfolio
ByungHak Jang
 
1.스프링프레임워크 개요
1.스프링프레임워크 개요1.스프링프레임워크 개요

Similar to 0222 사내세미나_오정민 스프링인액션 (20)

서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Android
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
 
All about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apmAll about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apm
 
spark database Service
spark database Servicespark database Service
spark database Service
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
피니엔진
피니엔진피니엔진
피니엔진
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
Java (spring) vs javascript (node.js)
Java (spring) vs javascript (node.js)Java (spring) vs javascript (node.js)
Java (spring) vs javascript (node.js)
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
Portfolio
PortfolioPortfolio
Portfolio
 
1.스프링프레임워크 개요
1.스프링프레임워크 개요1.스프링프레임워크 개요
1.스프링프레임워크 개요
 

More from DataUs

220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링
DataUs
 
0222 사내세미나 이연권_추천시스템
0222 사내세미나 이연권_추천시스템0222 사내세미나 이연권_추천시스템
0222 사내세미나 이연권_추천시스템
DataUs
 
모듈시스템과 webpack
모듈시스템과 webpack모듈시스템과 webpack
모듈시스템과 webpack
DataUs
 
Chrome Devtools
Chrome DevtoolsChrome Devtools
Chrome Devtools
DataUs
 
Spring Security
Spring SecuritySpring Security
Spring Security
DataUs
 
프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음
DataUs
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링
DataUs
 
Vue guide v0.1
Vue guide v0.1Vue guide v0.1
Vue guide v0.1
DataUs
 
Vue guide예제(vue todo-list)-v0.1
Vue guide예제(vue todo-list)-v0.1Vue guide예제(vue todo-list)-v0.1
Vue guide예제(vue todo-list)-v0.1
DataUs
 
GitHub 활용하기
GitHub 활용하기GitHub 활용하기
GitHub 활용하기
DataUs
 
해커 그들은 누구인가?
해커 그들은 누구인가?해커 그들은 누구인가?
해커 그들은 누구인가?
DataUs
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review
DataUs
 
데이터 모델이론 개념모델링
데이터 모델이론 개념모델링데이터 모델이론 개념모델링
데이터 모델이론 개념모델링
DataUs
 
[DataUs]클라우드 입문자를 위한 보안 가이드
[DataUs]클라우드 입문자를 위한 보안 가이드[DataUs]클라우드 입문자를 위한 보안 가이드
[DataUs]클라우드 입문자를 위한 보안 가이드
DataUs
 
NHN Cloud 1차 교육자료
NHN Cloud 1차 교육자료NHN Cloud 1차 교육자료
NHN Cloud 1차 교육자료
DataUs
 
html / css
html / csshtml / css
html / css
DataUs
 
네트워킹과 웹 성능 최적화
네트워킹과 웹 성능 최적화네트워킹과 웹 성능 최적화
네트워킹과 웹 성능 최적화
DataUs
 
Systemd
SystemdSystemd
Systemd
DataUs
 

More from DataUs (18)

220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링
 
0222 사내세미나 이연권_추천시스템
0222 사내세미나 이연권_추천시스템0222 사내세미나 이연권_추천시스템
0222 사내세미나 이연권_추천시스템
 
모듈시스템과 webpack
모듈시스템과 webpack모듈시스템과 webpack
모듈시스템과 webpack
 
Chrome Devtools
Chrome DevtoolsChrome Devtools
Chrome Devtools
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링
 
Vue guide v0.1
Vue guide v0.1Vue guide v0.1
Vue guide v0.1
 
Vue guide예제(vue todo-list)-v0.1
Vue guide예제(vue todo-list)-v0.1Vue guide예제(vue todo-list)-v0.1
Vue guide예제(vue todo-list)-v0.1
 
GitHub 활용하기
GitHub 활용하기GitHub 활용하기
GitHub 활용하기
 
해커 그들은 누구인가?
해커 그들은 누구인가?해커 그들은 누구인가?
해커 그들은 누구인가?
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review
 
데이터 모델이론 개념모델링
데이터 모델이론 개념모델링데이터 모델이론 개념모델링
데이터 모델이론 개념모델링
 
[DataUs]클라우드 입문자를 위한 보안 가이드
[DataUs]클라우드 입문자를 위한 보안 가이드[DataUs]클라우드 입문자를 위한 보안 가이드
[DataUs]클라우드 입문자를 위한 보안 가이드
 
NHN Cloud 1차 교육자료
NHN Cloud 1차 교육자료NHN Cloud 1차 교육자료
NHN Cloud 1차 교육자료
 
html / css
html / csshtml / css
html / css
 
네트워킹과 웹 성능 최적화
네트워킹과 웹 성능 최적화네트워킹과 웹 성능 최적화
네트워킹과 웹 성능 최적화
 
Systemd
SystemdSystemd
Systemd
 

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.3 Jdbctemplate를 이용한 쿼리 작성 - JdbcTemplate를 이용하여 예외처리, DB연결객체 생성 등의 코드 없이 SQL을 작성하고 해당 데이터를 처리하는 과정에만 집 중할 수 있게 되었다. - 컨트롤러에서 리포지터리를 주입받아 데이터베이스에 접근 가능하다.
  • 10. 3. 데이터로 작업하기 3.4 JPA를 이용하여 데이터 저장하고 사용하기 - 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.4 JDBC 기반 구성 - 관계형 데이터베이스와 연동하여 유저명과 비밀번호 권한을 유지 관리한다. 데이터베이스에 평범한 비밀번호를 그대로 저장하는 것은 보안 상 허점이 될 수 있기에 passwordEncoder를 통해 암호화 한다.
  • 15. 4. 스프링 시큐리티 4.5 LDAP 기반 구성 - LDAP 기반 보안 구성은 사용자가 직접 LDAP 서버에서 인증 받도록 하는 것이다. 비밀번호를 인증하는 과정이나 비밀번호를 비 교하는 과정이 서버에서 이루어지기에 노출되지 않을 수 있다. - 스프링 시큐리티에서 제공하는 LDAP 서버를 의존성에 추가함으로서 사용할 수 있다.