여러가지 logging 라이브러리가 있는데 Spring Boot 2.0에서는 사진과 같이 Java Util Logging, Log4j 2, Logback 을 기본적으로 사용할 수 있다. 다른 로깅 라이브러리로 갈아타기 편하기 위해 Facade 패턴을 적용한 Slf4
spring에서 Async, 즉 비동기 기능을 사용하는 방법은 아주 간단하다.@EnableAsync로 비동기 기능을 활성화비동기로 동작을 원하는 메소드(public 메소드)에 @Async 어노테이션을 붙여준다.Spring Async annotation를 이용하여 간단하
https://cbw1030.tistory.com/54스프링부트의 경우 @Component, @Service, @Controller, @Repository, @Bean, @Configuration 등으로 필요한 빈들을 등록하고 필요한 곳에서 @Autowired
IO 오류: Connection refused (CONNECTION_ID=뭐시기가 나오면, 아래 의존성을 추가.
자동 설정spring.datasource.url이 모든 Datasource의 url이 된다.수동 설정 (Java Config)spring.datasource.jdbc-url로 해야 HikariCP가 인식한다.application.properties에 두개의 데이터베이스
백엔드 서버가 두개가 있고, 프론트엔드 서버가 1개가 있다. 문제는 이거, A라는 벡 서버가 B라는 q벡서버에 소켓으로 데이터를 쏴주면 B라는 벡서버는 C라는 프론트서버에게 그 데이터를 다시 쏴주어야 한다. C는 그 데이터를 화면에 뿌려줘야 된다.리액트에서는 Rest
두 개의 부트 앱이 있다. 하나는 client 구현, 하나는 server를 구현해서 파일을 전송해보자.일단 클라이언트 측 작업 먼저비동기 서비스 생성소켓으로 filePath를 C:\\test\\CsFTPSendText.txt 요런 식으로 쏴줄거다.
https://blog.jiniworld.me/81스프링에서 API Key 또는 비밀스러운 정보를 따로 관리해야 할 때(에를 들어 public git 시스템에 푸쉬), 역할에 따른 설정파일이 필요할 때는 application.yml 이외의 설정파일을 추가해야합
https://www.codetd.com/en/article/6835684 //multi datasource 일 경우https://e2e2e2.tistory.com/12http://mybatis.org/spring-boot-starter/m
http 프로토콜로 통신하는법https://www.baeldung.com/spring-resttemplate-post-jsonhttps://recordsoflife.tistory.com/360https://easybrother0103.tist
https://github.com/pagehelper/Mybatis-PageHelperhttps://goodteacher.tistory.com/251https://badstorage.tistory.com/13 customhttps:
CommandLineRunner 인터페이스는 구동 시점에 실행되는 코드가 자바 문자열 아규먼트 배열에 접근해야할 필요가 있는 경우에 사용합니다. 다음과 같이 CommandLineRunner 인터페이스를 구현한 클래스에 @Component 어노테이션을 선언해두면 컴포넌트
ConcurrentHashMap 이용!!!다른 스레드에서또 다른 스레드에서 그 객체를
spring boot 에서 redis 에 데이터 set, get 하는 방법은 크게 아래 2가지가 있습니다.1) RedisTemplate 를 이용하는 방법 ( low level API )2) CrudRepository 를 이용하는 방법 ( high level API, J
객체를 참조하는 클래스를 하나 또 등록하고..사용법은 아래와 같이FTP 클라이언트를 싱글톤으로 쓰기 위해 @Bean으로 등록했는데, FTP 서버가 먼저 켜지지 않으면 connect를 못하므로 return을 못 시키고, 결국엔 참조하는 FTPUploader가 의존성 에러
https://www.appsdeveloperblog.com/command-line-arguments-spring-boot/https://jsonobject.tistory.com/419https://stackoverflow.com/questi
비동기 메서드 호출시 예외를 던졌는데 @ControllerAdvice에서 catch 하지 못했다. 찾아보니.. 오직 동기적 예외만 잡을 수 있단다..https://stackoverflow.com/questions/61885358/async-will-not-ca
https://stackoverflow.com/questions/51631641/cannot-autowire-service-into-implementation-of-asyncuncaughtexceptionhandlerhttps://stackoverfl
https://stackoverflow.com/questions/33744875/spring-boot-how-to-log-all-requests-and-responses-with-exceptions-in-single-plhttps://stackover
https://downloads.mysql.com/archives/excel/위의 링크를 타서 설치 전에 Visual Studio 2010 Tools for Office Runtime 를 설치해준다.https://download.cnet.com/Vis
사전 mariaDB - JPA 셋팅 application.yml 환경 셋팅 Maven 의존성 추가 springBoot 최신 버전부터는 라이브러리 version을 생략해도 알맞게 갖고오나보다.. rum maven compile 실행 > 가끔 intellij 버
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.htmlhttps://www.baeldung.com/spring-boot-actuatorshttps://inche
스프링 시큐리티 예제를 보며 개발하다 보면 UserDetailsService 인터페이스의 loadUserByUsername(String username)을 구현해서 사용자 정보를 DB에서 조회하고 반환한다.하지만 비밀번호를 체크하는 코드는 없다. 그래도 잘못된 비밀번호
placeholder를 사용하면 logger 레벨에 의해 자동으로 문자열 연산을 안 함효율적이면서 또 공백 같은 눈에 띄기 힘든 오류들도 잘 잡아낼 수 있음. https://www.youtube.com/watch?v=HxzlJWMcHnghttps://
https://all-record.tistory.com/164https://leeyongjin.tistory.com/entry/Spring-MVC-%EC%A0%95%EB%A6%AChttps://jeong-pro.tistory.com/204
회사에서 스프링 레거시 + myBatis로 이루어진 프로젝트를 부트 환경의 JPA로 마이그레이션 하면서, 내가 나름 고민한 일종의 Tip들을 적겠다. 도메인 오브젝트는, 기존 테이블과 같이 만들었지만, 쓸데없이 의존관계를 갖고 있다면 과감하게 끊어서, 설계도를 최대한
아래와 같은 형태의 엔티티 클래스가 있다고 가정하자.쿼리는 아래와 같이 작성해줬다.현재 내 생각에 쿼리는 총 2번 날라갈 것으로 예측이 됐다. count query 랑, select query.하지만 테스트 결과는...쿼리가 현재 가지고 있는 로우수만큼(지금은 4번)
Restdoc Test ConfigTemplateClass Test ADOC
요렇게 2개의 Entity가 있다고 생각했을 때..수정 API 작업 중.. ArtistAlbum collection 일괄업데이트 로직 상 기존 item 중 수정할 부분만 수정하고, 추가된 item이나 삭제된 item은 별도로 다루는 로직을 만들수 있는 방법이 없나..
Docker를 통해서 TestContainer를 사용 중, 테스트 데이터를 집어넣는 스크립트를 실행하는 코드를 작성했다. 문제는 전체 테스트를 실행하면, 상위 클래스에 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 와 @Befor
JPA를 이용 중 RDS Table에 한 칼럼에 배열형태의 자료형을 넣는 대표적인 꼼수? 를 사용했다, AttributeConverter를 사용해서, 문자열 , 로 구분해서 그냥 집어넣은 것그런데 동적 쿼리를 만들 때, 에로사항이 이뤄났다. 나는 JPA 쿼리빌더 라이브
asd
필자는 새로운 프로젝트를 시작함에 있어서, AWS Aurora mysql에 Replication을 적용했다. Master DB, Slave DB로 나눠 동일한 데이터를 가지고 있게 한 후, select요청은 Slave DB에서만 담당하게 하고, CUD요청은 Maste
기존상황 기존에 파일을 업로드하면, 업로드 된 파일을 외부 API 에게 넘겨주고 마스터링된 결과를 받아 반환하는 API 를 만들었다. 문제는 이 과정에서 외부 API를 호출하는 부분이 여러 군데 있었고 합치면 11~12초 정도 걸린다는 점이었다. 새로 리팩터링하면서
파일을 변환해서 외부 api 에게 넘겨줘야 하는 일을 맡았다. 간략하게 이야기하자면, mp4 파일 중에서 오디오 소스만 추출해서 wav 파일로 만들고, 이 wav 파일을 외부 API 에게 넘겨주고 반환받은 Byte array를 다시 wav 파일로 만든 다음, 다른 mp
필자는 이메일 발송 할 때 템플릿 엔진으로서 타임리프를 사용하고 있다. 이메일 양식은 resource/templates 폴더 내에 위치하고 있는데, 이메일 양식이 많아짐으로서, 폴더쩨로 구분해야 될 필요가 생겼다. 필자는 SpringTemplateEngine에 넘겨줄
사용자 IP를 직접 DB에 저장하는 건 리스크가(법적인 문제) 있다고 판단. 대신 접속국가를 판별해 DB에 저장시키는 로직을 작성하자. 우리 서버는 NGINX가 프록시 서버 역할을 하고 있다. MAXMIND GeoIP는 client Ip를 이용해서 대략적인 국가를 판별
상황은 요렇다. 필자는 서버(SpringBoot) httpClient로 WebClient를 사용하고 있는데, 필자의 서버에는 파일을 받아서 마스터링해서 응답해주는 기능이 있는데, 이 과정에서 외부 API를 호출하는 코드가 여러군데 존재했다. 그 중 특정 외부 API를
kotlin을 사용하면 data class나 lazy loading 문제들 때문에, Json 직렬화, 역직렬화를 원활하게 하기 위헤 부가적인 설정들이 필요하다. 나는 커스텀하게 쓰는 설정들이 있으니, 여기서 공유해보고자 한다.예를 들어 다음과 같은, enum class
별 건 없고, 회사에서 간단히 CSV 파일을 테이블 규격에 맞춰서 DB에 적재시키는 배치서버를 만들다가, OPENCSV 라이브러리 도움을 받은 게 있어서 공유해보고자 한다. CSV 파일을 읽을 때, 골칫거리 중 하나가 칼럼에 있는 줄바꿈인데, opencsv를 활용하면,
asdasd 참고 https://creampuffy.tistory.com/162 https://stackoverflow.com/questions/27930449/jpa-many-to-one-relation-need-to-save-only-id
최근 기존 레거시 코드를 리팩토링하는데 있어 쓸만하고 유용한 패턴 몇 가지를 소개하겠다. 코드를 작성하다보면, 어느 순간 비슷한 역할을 하는 중복코드가 생기게 되고 이를 공통모듈로 추상화하고 싶은 욕구가 생긴다. 그럴 때 우리는 보통 인터페이스를 활용한다. 다음과 같
https://www.tutorialsbuddy.com/download-multiple-files-from-amazon-s3-in-spring-boot
문제 재밌는 문제가 발생했다. 서비스를 개발하던 중 클라이언트 사이드에게 Noti를 주기 위해, SSE protocol를 사용했다. 그런데 기존에 잘 동작하던 Connection이 메시지를 정상적으로 송수신하지 못하는 상황이 벌어지는 게 아닌가? 클라이언트 쪽 코드
SpringBoot 통합테스트를 할 시 DB로 Docker + TestContainer 이용
지금까지는 쭉 젠킨스를 사용해왔다. 젠킨스는 수많은 기능을 지원해주는 다양한 플러그인 생태계가 존재하고, 오픈소스이다. 지금까지 사용해왔을 때 딱히 아쉬운 점을 못 느꼈다. 다만 기본적으로 무거운 편이며 나는 젠킨스의 강력한 기능들을 다 사용할 필요도 없고, 쓰지도 않
springBoot3 버전 업그레이드 되면서, 소소하게 변경해야 될 것들이 늘어났다. compileKotlin을 하면, 큐 타입 클래스들이 해당 폴더 내에 잘 생성된 것을 확인할 수 있다.이제 jpaQueryFactory를 레파지토리 클래스에 주입받아서 사용하면 끝~담
그동안은 Request 로깅을 위해 별도의 런타임 프록시를 이용했는데, 이번에는 스프링부트에서 제공하는 클래스인 ServletContextRequestLoggingFilter 라는 걸 알아서 이걸 한 번 커스텀해서 사용해보았다.user-agent:"ELB-HealthC
현재 여러 대의 인스턴스에(AWS 클라우드) 서버(SpringBoot App)가 배포되어있는 상황이다. 그동안 체계화된 모니터링 시스템에 대한 필요성을 인지만 하고 있는 상태였다가 시간이 나는 김에 구축해보았다. 스스로 생각한 제약조건은 대충 다음과 같다.하나의 모니
전에는 깃허브 액션만을 이용해 원격으로 배포하는 걸 해보았는데, 이번에는 Docker를 살짝 끼얹어보기로 하자. https://www.seankim.life/aws/1827/ DockerFile 작성 Docker Compose 기본 명령어 개념 ![](ht
짜잘한 에서 제외하고 싶은 테스트 메서드나 클래스에는 위에 @Disabled를 붙이면 된다. 전체 테스트를 수행할때, 공통적으로 수행하고 싶은 작업이 단 한번만 있으면 테스트 클래스들이 상속받는 상위 템플릿 클래스를 하나 만든다, @TestInstance(Tes
의존관계의 최소화 의존관계가 최소화 되어야 한다는 것은 무슨 의미인가.. 넓게 보면 아키텍처와 더 나아가 인생까지 생각해 볼 수 있고, 좁게 보면 단일 코드내로도 생각을 뻗칠 수 있다. 나는 협소하게 범위를 한정지어서 생각을 전개해나가겠다. 어쨌건 나는 기술자니까,