반응형 Spring12 Spring security (접근권한 변경) 만약 프로젝트가 실행되고있는 중간에 접근권한을 변경하려면 어떻게 해야할까? 많은 방식을 찾아봤지만 딱히 원하는 방법은 없었다.. spring 버전 2.7미만이었을 때는 이 블로그에서와 같이 Checker를 만들어서 적용하는 방법이 가능했는데, 이 방법은 사용자들이 api에 접근을 할 때마다 DB에서 관련 정보를 불러와 체크해야하는 단점이 있었고, 2.7 이상에서는 해당 방법이 적용되지 않는것 같았다. (내가 멍청해서 안된걸지도..^^) 어찌어찌 머리를 굴려서 생각해보니, 아예 필터쪽에서 관련 데이터들을 바꿔주면 되는거 아닌가? 라는 생각이 들었고, 몇번의 삽질끝에 해당 기능을 만들 수 있었다. 본 포스팅의 코드는 여기서 확인 가능합니다😉 기본적인 Security 설정은 이 포스팅을 기초로 하였고, Sec.. 2022. 9. 6. Spring Security 설정 (기본) 시큐리티 설정은 맨날 해도 맨날 모르겠는 설정 중 하나인 것 같다. 포스팅을 하면서 다시 기본을 익히는 시간을 갖도록 해야겠다. 0. 참고 및 코드 spring.io 블로그 해당 코드는 여기에서 확인 가능합니다. 😉 1. 환경 JAVA 8 Spring Boot 2.7.3 Spring Security 2.7.3 2. 기본 설정 1. build.gradle implementation 'org.springframework.boot:spring-boot-starter-security' 2. SecurityConfig spring security 5.7 이상 버전부터 WebSecurityConfigurerAdapter가 Deprecated되었다. spring boot 2.7.3은 spring-security 5... 2022. 8. 31. Spring 에러 발생 시, Slack 알람 만들기 지금 진행하고 있는 프로젝트 중 환자의 유전자 데이터를 분석하여 관련 데이터를 제공하는 기능이 있다. 사용자 요청이 들어오면, 분석 서버로 분석을 요청하고, 그 후 작업은 비동기로 처리하고 있는데, 서버로 올렸을 경우 에러가 언제 발생했는지 모르고 그냥 지나치는 경우가 종종 있었다! 이것 말고도, 사용자가 사용했을 때, 예상하지 못했던 에러가 발생했어도 모르고 지나가는 일도 있었고.. 무튼, 여러모로 에러가 발생하면 알림오면 좋겠다고 생각을 했었다. 2가지 방법으로 테스트를 했었고, 이에대한 기록을 남기고자한다! 1. logback-slack-appender Spring에 관련 기능이 있을까 하여 검색해보니 가장 대표적으로 사용하는 것이 logback-slack-appender 라이브러리 였다. log.. 2022. 8. 11. 특정 API만 Swagger에 노출 현재 프로젝트에 개발 서버가 2대가 있는데, 이 중 한 서버에서는 특정 API 만 swagger에 노출 해야 하는 문제가 발생하였다. swagger를 설정 할 때, basepackage를 지정해서 사용하는 방법도 있지만, 그럼 컨트롤러에 있는 모든 API가 노출되기도 하고...별로인 부분이 있어 그보다 좀더 커스텀하게..? 사용 할 수 있는 방법을 찾아 적용해 보았다. Profile 설정 아래와 같이 profile을 만들고 각 서버에 맞는 profile에 include 시켜주었다. (파일을 만들지 않고 바로 넣는것도 가능한...!) 특정 API만 노출해야하는 서버라면 true, 전체 노출 하는 서버라면 false로 지정해준다. application-dev-open.yml swagger: is-open: .. 2022. 8. 11. Spring-Elasticsearch 연동 2 - Query Builder 유용한 참고자료 Java High Level Rest Client 사용 정리 guide 1. 기본 사용법 Spring Elasticsearch 연동 1과 같이 설정을 완료하였다면, 바로 호출해서 사용가능하다. @Service @RequiredArgsConstructor public class ElasticsearchService { private final RestHighLevelClient client; private static final String INDEX = "my_index"; public SearchResponse sampleQuery() throws IOException { SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilde.. 2022. 8. 11. Spring-Elasticsearch 연동 1- Spring 설정 유용한 참고자료 elasticsearch java builder 모음 spring-data-elasitcsearch VS rest-high-level-client 기본 설정 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.15.0' compile 'org.elasticsearch.client:elasticsearch-rest-client:7.15.0' compile 'org.elasticsearch:elasticsearch:7.15.0' elasticsearch버전에 .. 2022. 8. 11. Spring Batch Insert 어떻게 해결했을까 대용량의 데이터를 DB에 넣어야 하는 일이 발생했다. 한 파일당 약 3만줄의 데이터를 파싱해서 20개의 테이블에 나눠 저장을 하였다. 파일은 모두 90개였던 것으로 기억한다. (전체 저장 데이터가 5G정도 나왔었다.) 다 저장해보니 용량이 어마무시했던 기억이 있는데, 지금은 사용하지 않아 없어졌다. 하지만 Spring Batch Insert를 도전했던 좋은 추억이라 (^^) 기록을 해보려 한다. JdbcTemplate Bulk Insert 활용기 기본 사용 방법 bulk insert를 위해 batchUpdate() 함수를 사용하였다. 기본 사용 방법은 아래와 같다. @RequiredArgsConstructor public class SampleJdbcTemplateRepository { private f.. 2022. 8. 11. Spring에서 외부 API 호출하기 3 (WebClient 활용) 활용 그.래.서 대-충 webClient를 사용하는 방법은 알았고, 그 후엔 어떻게 하면 효율적으로 사용할 수 있는지 계속 고민을 하였었다. *(효율적이라 쓰고 귀찮아서 어떻게 하면 한번에 처리할 수 있을까 머리 굴린거라고 읽는.. )* 대략적인 상황은 이랬었다. 약 20개의 각기 다른 api를 호출. 각 Response는 당연히 다르다. (같은 것도 있긴 했다.) 외부 api에서 서버에러가 발생하는 경우(http status가 40x, 50x로 오는 경우) response가 정해진 형식으로 도착한다. 그 외 예상하지 못한 오류가 발생하면 그냥 에러로 넘어온다. 어떤 api는 상태를 기다렸다가 다시 재 조회를 하여 로직을 처리해야한다. 처음에는 무작정 20개의 api들을 다 따로 처리하였었다. (원래 프.. 2022. 8. 11. Spring에서 외부 API 호출하기 2 (Webclient) spring 5 이상에서는 webclient를 지향한다 하여 프로젝트에서는 webclient를 주로 사용하였다. 원래는 전체적으로 다 쓰고 싶었지만 안되는걸 어떡하나요 webclient를 사용하면서 약간 힘든점이 있었다면 webclient는 webFlux를 사용한다는 것이었다. reactive programming은 너무 미지의 세계였고.. 공부할 것도 많고.. 여러모로 장벽이 느껴졌지만 천천히 공부해 가면서 프로젝트를 진행해보았다. (천천히 해도 됐을지는 모르겠다..^^.. ) WebClient WebClient에 관한 설명이다. Simply put, WebClient is an interface representing the main entry point for performing web reques.. 2022. 8. 11. Spring에서 외부 API 호출하기 1 (RestTemplate) 프로젝트에서 외부 api를 이용하여 로직을 짜는 부분을 맡게 되었다. Spring에서 외부 api를 호출하기 위해서는 RestTemplate이나 Webclient를 사용한다고 하여 관련 자료를 찾아보고 적용해 보았다. 사실 처음에는 webClient만을 사용하다가, 안되는 기능이 있어 restTemplate도 같이 사용하게 되었다... 프로젝트를 진행하면서 새롭게 알게 된 사실이나 정리할 부분이 많아 이를 한번 정리해 보았다. RestTemplate restTemplate은 Spring 3부터 지원된 api로, api를 호출한 후 응답을 받을 때 까지 기다리는 동기 방식이다. spring5 버전부터는 restTemplate보다 webClient를 사용하라고 권고 하고 있다. NOTE: As of 5.0 .. 2022. 8. 11. 이전 1 2 다음 반응형