일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- springboot
- java
- docker
- php
- IntelliJ
- Gradle
- laravel
- Spring Boot
- Spring
- Design Patterns
- jenkins
- jsp
- 맛집
- it
- Oracle
- db
- ReactJS
- tool
- devops
- linux
- ubuntu
- AWS
- 요리
- elasticsearch
- JPA
- redis
- MySQL
- javascript
- Web Server
- Git
- Today
- Total
목록Spring Boot (29)
아무거나
Spring Boot + Gradle 을 활용한 정적 코드 분석 도구 Spotbugs 적용 해당 내용은 Spotbugs 4.7.3 기준으로 작성하였고, Spotbugs Gradle Plugin 5.0.14 를 활용하였다. 예제소스: https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase 정적 코드 분석 도구란 정적 분석 도구 는 코드를 검사하여 메모리 누수 또는 버퍼 오버플로우 등 일반적으로 알려진 오류 및 취약점을 파악하고 코딩 표준 적용이 가능하다. 즉, 코드의 정확도, 스타일, 성능 등 코드 품질에 관련된 패턴을 분석해서 알려준다. 또한 GNU Lesser General Public License 조건에..
SpringBoot + Zipkin 을 활용한 트레이스 환경 구성 샘플코드는 하기 링크로 확인 샘플코드 MSA 환경과 OpenTracing 모놀리식 아키텍쳐의 경우 하나의 서버가 서비스의 전반적이 기능을 모두 제공하므로 클라이언트의 요청을 받으면 하나의 스레드에서 모든 요청을 실행하여 로그를 확인하기 쉽다. 반면에 MSA 는 여러개의 마이크로 서비스 간에 통신이 발생하기 때문에 로그를 확인하기 어렵다. 이와 같은 문제를 해결하기 위한 방법으로는 OpenTracing 이 알려져 있다. OpenTracing 는 애플리케이션 간 분산 추적을 위한 표준이라고 정의할 수 있으며, 이 표준의 대표적인 구현체로 Jaeger 와 Zipin 이 있다. (다른 방법으로는 APM (Ex: Jennifer, Pinpoint ..
Feign 이란 Feign 이란 Netflix 에서 개발된 오픈소스이며 선언적 방식으로 REST 기반 호출을 추상화해서 제공한다. 즉, interface 와 annotaion 만으로 간편하게 HTTP API Client 를 구현할 수 있으며 RestTemplate 을 만들 필요없이 사용할 수 있어 코드의 복잡성이 낮아진다. 샘플코드는 하기 링크로 확인 샘플코드 사용법 Dependency [build.gradle] ... // https://spring.io/projects/spring-cloud 에서 Spring Boot 버전에 맞게 세팅한다. (해당 포스팅은 Spring Boot 2.2.2.RELEASE 로 진행) ext { set('springCloudVersion', "Hoxton.SR3") } d..
Setter 사용을 지양하자. 값을 변경한 의도를 파악하기 힘듬 // 어떤 의도로 데이터를 변경하는지 명확히 알 수 없다. public Member updateMember(long id) { final Member member = findById(id); member.setFistName("value"); member.setLastName("value"); member.setAge("value"); return member; } 객체의 일관성을 유지하기 어려움 public 으로 언제든 변경할 수 있는 상태가 되므로 모든 곳에서 변경이 할 수 있는 상태가 되므로 객체의 일관성을 유지하기 어렵다. Setter 대신 다른 것을 사용 필요 생성자를 오버로딩 (멤버변수가 많고 다양한 생성자를 가져야 한다면 코드가..
MDC(Mapped Diagnostic Context)는 현재 실행중인 쓰레드에 메타 정보를 넣고 관리하는 공간이다. MDC는 내부적으로 Map을 관리하고 있어 (Key, Value) 형태로 값을 저장할 수 있다. Application 에서 로그를 남길시에 Request 관련 값들을 좀 더 상세하게 다루고 싶어 해당 포스팅을 작성하게 되었다. (Ex: url, parameter 등) 하기 코드만 그대로 사용하면 되므로 활용해보자. https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase/base-api 의존성 추가 [build.gradle] ... // LoggingFilter (Spring Version 에 ..
Java + Spring Boot 개발시에 빈번하게 작성되는 try ~ catch 또는 예외처리등을 간소화하며 에러를 공통으로 핸들링하기 위해 전역으로 사용되는 Exception Handler 객체를 만들어보자. @ControllerAdvice 사용한 방법으로 진행하자. 자세한 코드는 https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase 를 참고하면 된다. Global Exception Handler 처리 에러 객체 생성 [ErrorResponse.java] import java.util.ArrayList; import java.util.List; import java.util.stream.Collector..
Gradle Multi Project (Gradle 7.1.1 기준 대응) 필수참고 https://bkjeon1614.tistory.com/38 포스팅을 먼저 참고하고오자. 해당 포스팅은 Gradle 업그레이드로 인한 Deprecate 대응이므로 일부 코드수정만 확인할 수 있다. (참고 Github Repo) 시작하기전에 이전 포스팅에서 작성했던 Gradle 기능중 일부 삭제된 부분이 존재한다. 삭제된 내용은 하기 내용을 참고하자. Could not find method compile() for arguments 오류해결 compile, runtime, testCompile, testRuntime 은 Gradle 4.10 (2018. 8. 27) 이래로 Deprecate 되었으며 Gradle 7.0 (2..
Spring Boot 에서 aws-java-sdk-dynamodb 를 활용한 AWS DynamoDB 연동 (+Credentials Setting 포함) 먼저 AWS Credentials 설정을 application.yml 기반으로 하게된다면 중요키들이 노출하게된다. 그래서 보통 KMS(=Key Management System)를 통한 관리, 키값 암호화 관리, 서버에 설정된 AWS CLI 를 통한 저장된 프로필 사용(Ex- ~/.aws/credentials) 등의 방법이 있으며 해당 내용에서는 서버에 설정된 AWS CLI 를 통한 저장된 프로필 사용 하는 방법으로 진행하도록 한다. aws-java-sdk-dynamodb 를 선택한 이유 (=spring-data-dynamodb 의 단점) 2020.03.0..
spring boot 2.5 이상부터 생성된다고함 -plain 이 붙은 jar 파일은 plain archive 라고하며 애플리케이션 실행에 필요한 모든 의존성을 포함하지 않고, 작성된 소스코드의 클래스 파일과 리소스 파일만 포함 (즉, 모든 의존성이 존재하지 않기 때문에 java -jar 명령어로 실행시 오류가 발생) plain.jar 생성 방지를 위한 설정 추가 [build.gradle] ... jar { enabled = false }
DB 관련 로그 의존성 추가 [build.gradle] ... // DB Log implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' ... ../resources/log4jdbc.log4j2.properties 파일 생성 [log4jdbc.log4j2.properties] # log4jdbc spy의 로그 이벤트를 slf4j를 통해 처리 log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator # 로그를 표시할 줄의 제한 0은 무제한 log4jdbc.dump.sql.maxlinelength=0 # log4jdbc의 드라이브 클래스 설정 log4jdbc..