일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바
- IBatis procedure
- 전자정부
- 야구게임
- 업캐스팅
- angular2
- 가변인자
- 형변환
- 페이징
- 로또
- 이클립스
- Validations
- while
- 다형성
- Random
- 다운캐스팅
- jquery
- 스프링
- 추상클래스
- 상속
- Full text
- full text indexing
- 전체
- 단축키
- 전체텍스트
- 25가지 효율적인 sql작성법
- 자바 야구게임
- 상속예제
- Login with OAuth Authentication
- Today
- Total
목록SPRING (109)
nalaolla
이번장에서는 기존에 단일 파일로 관리되던 스프링 설정을 서버 환경에 따라 다르게 적용되도록 개선해보겠습니다. 환경별 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..
이번 시간엔 api 서버 개발을 본격적으로 진행해 보기 위해 현재 api 인터페이스 및 결과 데이터의 구조를 살펴보고 확장 가능한 형태로 설계해 보겠습니다. api는 제공 대상이 클라이언트 app이나 web 개발자입니다. 한번 배포되고 공유한 api는 구조를 쉽게 바꿀 수 없기 때문에, 처음부터 효율적이고 확장 가능한 형태로 모델을 설계하고 시작하는 것이 좋습니다. 그래서 다음과 같이 HttpMethod를 사용하고 Restful 한 api를 만들기 위해 몇 가지 규칙을 적용하도록 하겠습니다.1. 리소스의 사용목적에 따라 Http method를 구분해서 사용한다. Http 프로토콜은 여러 가지 사용목적에 따라 HttpMethod를 제공하고 있는데요. 여기서는 그중 아래의 4가지 HttpMethod를 상황에..
앞서 개발한 api는 테스트를 위해 Postman을 따로 설치해야 하는 불편함이 있었습니다. 요번에 설명하려는 Swagger라는 문서 자동화 툴은 간단한 설정만으로도 테스트 가능한 Web UI를 지원하여 api를 테스트를 위해 부가적으로 서드파티 프로그램을 깔 필요가 없습니다. 또한 최소한의 작업을 통해 자동으로 API Document를 만들어주므로 클라이언트 개발자에게 문서 내용을 전달하기 위해 추가 작업을 하지 않아도 됩니다.build.gradle에 swagger 라이브러리를 추가 현재 시점 기준 Swagger는 최신 버전이 2.9.2지만 2.6.1 이상의 버전은 세팅이 잘 안되거나 Web UI가 기존 버전에 비해 매우 불편해졌습니다. 그래서 2.6.1 버전 사용을 추천합니다. implementati..
H2 Database H2는 최소한의 리소스로 실행 가능한 경량 DB로서 테스트 용으로 사용하기 알맞은 DB입니다. 서버 요구사항도 낮고, Mysql처럼 번잡하게 깔아야 할 필요 없이 하나의 jar파일을 실행하기만 하면 DB를 사용할 수 있습니다. >> 최신버전 다운로드 링크>> 설치 메뉴얼Database Engine 요구사항 Windows XP or Vista, Mac OS X, or Linux Oracle Java 7 or newer Recommended Windows file system: NTFS (FAT32 only supports files up to 4 GB) 대부분의 플랫폼에서 실행가능하고 Java7이상만 깔려있으면 됩니다. 다운로드 및 실행 위의 링크에서 최신 버전 Platform-Ind..
이번 시간에는 앞 장에서 실습한 프로젝트를 기반으로 HelloWorld를 만들어 보겠습니다. java code 개발은 src/main/java 하위에 package를 생성하고 진행합니다.package란? java 라이브러리들 간의 충돌을 막기 위해 class들을 구분하기 위한 방법입니다. 예를 들면 com.rest.api.Xyz.java와 com.rest2.api.Xyz.java는 class 이름은 같지만 package명이 다르므로 다른 class로 구분됩니다. java는 수많은 라이브러리를 import 해서 쓰기 때문에 이름만으로는 class의 충돌을 피할 수 없고 이런 식으로 package를 계층적으로 구성하여 class 간 충돌을 방지하고 있습니다. @SpringBootApplication Spri..