일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 전체텍스트
- while
- Validations
- 자바 야구게임
- full text indexing
- Full text
- 단축키
- 가변인자
- IBatis procedure
- Random
- 전자정부
- 스프링
- 다형성
- jquery
- 자바
- angular2
- 업캐스팅
- Login with OAuth Authentication
- 전체
- 형변환
- 로또
- 상속예제
- 야구게임
- 이클립스
- 다운캐스팅
- 상속
- 25가지 효율적인 sql작성법
- 추상클래스
- 페이징
- Today
- Total
목록SPRING/SpringBoot Restfull api (15)
nalaolla
이번 장에서는 지금까지 개발한 api에 캐시를 적용해 보도록 하겠습니다. 캐시란 자주 사용되는 데이터를 메모리에 저장하고 반환하여 하드디스크의 원본데이터를 거치지 않게 함으로서 리소스 READ시 효율을 높이는 기술을 말합니다. 이번장에서는 api 결과에 캐시를 적용하여 DB에 요청을 최소화 함으로써 DB부하를 감소시키고, api의 결과 데이터 반환 속도를 향상시켜 보겠습니다. Redis 캐시 캐시종류에는 여러가지가 있으나, 근래에 가장 많이 사용되는 Redis를 캐시 Storage로 사용해보겠습니다. Spring에서는 이미 Redis를 이용하여 캐시를 손쉽게 구현할수 있도록 spring-data-redis 라이브러리를 제공하고 있습니다. Embedded Redis 테스트를 위해 Redis 서버를 직접 설..
이번 장에서는 지금까지 구축한 SpringBoot + Security 환경에 간단한 JPA 게시판을 추가해 보도록 하겠습니다. 관계 다이어그램은 다음과 같습니다. 하나의 게시판에는 여러 개의 게시물이 작성될 수 있으므로 BOARD와 POST는 1:N의 관계를 같습니다. 회원은 여러 개의 게시물을 작성할 수 있으므로 USER와 POST 역시 1:N의 관계를 같습니다. Entity 작성 Entity 공통으로 필요한 날짜정보를 담는 CommonDateEntity를 생성하여 Board, Post, User Entity가 상속 받도록 처리합니다. @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class..
Jenkins를 이용하면 배포에 필요한 여러가지 절차를 통합하여 편리하게 배포할수있는 시스템을 만들 수 있습니다. 이번장에서는 Jenkins로 배포시스템을 구축하고 배포후에 문제가 생겼을 경우 Git Tag를 이용하여 바로 소스를 롤백할 수 있도록 기능 추가까지 진행해 보겠습니다. Jenkins 설치 jenkins는 여러가지 설치방법을 제공합니다. Mac이나 Windows에는 자체 설치 파일을 제공하며 Linux에서는 yum이나 apt-get으로 설치할 수 있습니다. 최신 버전이 필요하다면 jar파일로도 제공하기 때문에 jar파일을 다운로드 받아 직접 실행해도 되고, 별도로 설치한 tomcat의 webapps 하위에 jar파일을 옮겨놓고 실행해도 됩니다. OS별 Jenkins 설치에 대한 자세한 내용은 ..
이번 장에서는 SpringBoot 프로젝트를 실제 AWS EC2 서버에 배포하고 Nginx와 연동하여 서버를 실행해 보는 실습을 하겠습니다. 이번 실습에서는 AWS에 EC2서버를 ssh로 접속할 준비가 되어있거나 Spring을 배포할 서버가 한대는 준비되어 있어야 합니다. AWS는 신규가입시 1년동안 무료로 서버를 제공하므로 이번 기회에 한번 가입해서 사용해 보는것도 좋습니다. EC2서버가 준비되었다면 톰켓과 연동할 Nginx를 설치합니다. 설치하는김에 Mysql(mariadb)도 같이 설치 합니다. >> AWS EC2에 nginx, mariadb 설치하기 SpringBoot는 실행가능한 jar파일을 생성하여 자체적으로 웹 컨테이너를 구동할 수 있습니다. 별다른 설정을 하지 않으면 Embeded Tomc..
이번장에서는 기존에 단일 파일로 관리되던 스프링 설정을 서버 환경에 따라 다르게 적용되도록 개선해보겠습니다. 환경별 application.yml의 분리 /resources 아래에 application.yml을 복사하여 application-alpha.yml, application-local.yml 두개를 더 만듭니다. 개발 환경에 따라 beta, service등이 더 있을수 있지만, 실습에서는 2개의 환경만 만들도록 하겠습니다. 스프링에서는 이렇게 파일을 분리하고 서버 실행 옵션에 profile을 설정하면 지정된 환경으로 서버를 시작할 수 있습니다. 기존의 application.yml에는 모든 환경에 공통으로 들어가는 설정을 넣습니다. 유심히 볼점은 spring.profiles.active: local ..
이번 장에서는 Rest api에 카카오 로그인 연동을 해보겠습니다. 카카오의 로그인은 Oauth2 방식을 따르고 있습니다. Oauth2에 대한 자세한 플로우는 다음 링크를 참고하시기 바랍니다. https://d2.naver.com/helloworld/24942 Facebook 및 Google의 로그인도 Oauth2 방식인데, 카카오에 비해 앱을 생성하는 게 쉽지 않습니다. public 하게 접근 가능한 개인정보 보호 방침 페이지를 요구할 뿐만 아니라. Redirect page 세팅 시 https주소가 아니면 세팅이 되지 않습니다. localhost 또한 https를 요구하므로 현재 테스트 상황에서는 연동방법이 적합하지 않다 생각하여 최종 kakao연동을 택하게 되었습니다. 카카오 로그인 연동 Flow 카..
이번 시간에는 지금까지 만든 api를 Unit Test 하여 검증해보는 시간을 갖겠습니다. 현재 개발한 api는 별다른 로직이 없어 Unit Test가 공수 대비 효용성이 없어 보입니다. 하지만 서버 프로세스의 요건이 복잡해지고 소스의 양이 늘어날수록 사람의 눈으로 찾아낼 수 있는 오류의 범위는 한정되어 있으므로 시간이 지날수록 코드의 안정성을 유지하기 힘들게 됩니다. 그래서 서비스가 작을 때부터 중요한 프로세스에 대하여 자동화된 테스트 환경을 구축해 놓는 것이 코드 품질 유지에 매우 효과적입니다. Spring에서는 자체적으로 유닛 테스트를 지원하는 라이브러리를 제공하고 있습니다. spring-boot-starter-test에는 JUnit, Mockito, Hamcrest 등을 이미 포함하고 있으므로 따..
이번 시간에는 SpringSecurity를 이용하여 api 서버의 사용 권한을 제한하는 방법에 대해 알아보도록 하겠습니다. 지금까지 개발한 api는 권한 부여 기능이 없어 누구나 회원 정보를 조회, 생성 및 수정, 삭제를 할 수 있었습니다. 이 상태로 api를 서비스에 내보낸다면 많은 문제가 발생할 것은 불을 보듯 뻔한 일입니다. 이러한 문제를 해결하기 위해 인증한 회원만 api를 사용할 수 있도록 개선해 보겠습니다. SpringSecurity 스프링에서는 인증 및 권한 부여를 통해 리소스의 사용을 쉽게 컨트롤할 수 있는 SpringSecurity framework를 제공하고 있습니다. Spring boot기반의 프로젝트에 SpringSecurity를 적용하면 보안 관련 처리를 자체적으로 구현할 필요 없..
이번 시간에는 Spring에서 메시지를 처리하는 방법에 대해 알아보고, MessageSource를 이용하여 Exception Message를 고도화해 보도록 하겠습니다. Spring에서는 다국어를 처리하기 위해 i18n 세팅을 지원하고 있습니다. i18n이 무엇인가 하면 국제화(Internationalization)의 약자입니다.(I+가운데 남은 글자 수+n). 해당 세팅을 통해 한국어로 “안녕하세요”를 영문권에서는 “Hello” 로 표시되도록 할 수가 있습니다. 이 방법을 이용하여 예외시 메시지 처리 방식을 변경시켜 보도록 하겠습니다. message properties를 yml로 작성하기 위한 라이브러리추가 Spring 기본 설정에서 실제 다국어 메시지가 저장되는 파일은 message_ko.proper..
이번 장에서는 api 처리 중 특정한 Exception이 발생할 경우 공통으로 처리하는 방법에 대해 알아보겠습니다. Spring에서는 이와같은 처리를 위해 ControllerAdvice annotation을 제공하고 있으며 이 annotation을 이용하면 Controller에서 발생하는 Exception을 한군데서 처리할 수 있습니다.@ControllerAdvice의 사용 ControllerAdvice는 Spring에서 제공하는 annotation으로 Controller에 전역에 적용되는 코드를 작성할 수 있게 해 줍니다. 또한 설정시 특정 패키지를 명시하면 적용되는 Controller의 범위도 제한할 수 있습니다. 이러한 특성을 이용하면 @ControllerAdvice와 @ExceptionHandle..