Spring

Spring

부하 테스트 하기 (1)

기존에 진행했었던, 프로젝트를 바탕으로 모니터링 툴을 적용하고 부하를 걸어 어떤 지점에서 병목이 발생하는 지 확인해보려 한다. 스프링 설정 우선, 모니터링 툴을 적용하기위해 프로젝트에 스프링 actuator를 적용하고, 메트릭 수집 도구로는 프로메테우스를 사용할 것이니 이 둘을 모두 gradle에 추가해주자. //actuator implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'io.micrometer:micrometer-registry-prometheus' 그리고, 확인하고 싶은 지표들을 골라 설정해준다. (난 거의 대부분을 활성화하고 (기본적으로 대부분 활성화는 되어 있다.) 노출되게끔 설정했다...

Spring

왜 Spring Scheduler를 사용할 때 트랜잭션이 정상적으로 수행되지 않을까?

졸업 캡스톤 프로젝트를 하며 Jsoup을 이용해 학교 비교과 및 리쿠르팅 정보를 크롤링해와 그걸 저장하는 로직을 구현했었다. 그런데 이 크롤링 작업을 스케쥴러에 등록하여 매일 1번씩 데이터를 갱신하는 작업을 하려 했는데 스케쥴러도 정상적으로 동작하고 크롤링도 정상적으로 동작하는데 delete나 save가 모두 작동하지 않았다. 좀 찾아보니 신기한 답이 나왔다. 우선 나는 CrawlService위에 @Transactional(readonly=true)를 걸어줬다. 그리고 스케쥴러가 실행할 메소드를 정의했고 해당 메소드 내에서 크롤링에 필요한 메소드들을 호출했고 해당 메소드들은 @Transactional이 붙어있는 메소드들이다. 자, 여기서 우린 @Transactional 어노테이션이 하나가 아니란 사실을 ..

Spring

Jsoup으로 로그인 후 웹 사이트 크롤링 하기

졸업 프로젝트에서 학교의 비교과, 리쿠르팅 정보들을 긁어와서 앱에 보여주기 위해 학교 사이트를 크롤링해야 해서 Jsoup으로 크롤링을 해보려고 한다. 우선 maven repository에서 Jsoup을 검색해 프로젝트에 추가하자 여기로 들어가면 된다. 난 최신버전을 선택했다. implementation group: 'org.jsoup', name: 'jsoup', version: '1.16.1' 이걸 dependency에 추가해준다. 코드 구현에 앞서 로그인 후 크롤링을 하는 방식은 해당 사이트의 인증을 세션으로 하냐 토큰으로하냐에 따라 다른데, 세션으로 하는 경우 인증된 세션 id를 가지고 요청을하면 되는 것이고, 토큰인 경우 해당 토큰을 발급받아 인증헤더와 같이 사이트에서 지정한 방식대로 넘겨주면 된..

Spring

웹소캣이란?

이번 스터디 프로젝트에서 채팅기능을 구현해야 하기에 간단하게 개념 정리를 먼저 해보려 한다. 웹소캣을 통한 채팅의 경우 이미 구현해본 경험이 있지만 그땐 제대로 모르고 쓰기도 했고 시간도 좀 지났기에 다시 정리를 하면 나중에 오류를 잡는데에도 도움이 될 거라 생각한다. 소캣통신이란 HTTP와 같은 연결 프로토콜이며 이를 이용하여 실시간성이 필요한 게임,채팅등을 구현할 수 있다. 최초로 서버와 클라이언트가 연결을 시작할 땐, HTTP와 같이 Handshake를 하여 연결설정을 하지만 그 이후 데이터 전송에서 Header부분에 필요한 정보들이 훨씬 적기에 서버-클라이언트간 빠른 정보 전달이 가능하다는 특징이 있다. 또한, 전방향성을 가져 하나의 채널로 송,수신을 할 수 있다. 아래의 사진처럼 , HTTP환경..

Spring

spring boot v3에 스웨거 적용하기

저번 프로젝트에서 스웨거를 적용할 땐 무난하게 잘 적용되었는데 이번 프로젝트에 적용하려니 계속 404가 났다. 그래서, SwaggerConfig의 설정들(경로 제목 버전)을 조금씩 다 만져보고 gradle의존성 버전도 바꿔보고 springfox에서 springdoc으로 바꿔도 보고 정말 여러가지 해본 것 같다. 오류가날 부분이 없다고 생각하다가 기존 프로젝트와 지금 진행하는 프로젝트의 차이를 생각해봤는데 ... 가장 중요한게 달랐다. 바로, 기존엔 Spring Boot v2였는데 지금 프로젝트는 Boot 3.0.4라는 사실.. Security도 그랬고 V3가 되며 deprecate된 부분이 많다는 걸 알고있었기에 공식문서를 보기로 했다. 그러다, 찾은 아주 놀라운 사실.. spring doc 공식 문서를..

Spring

[Spring Boot] SMTP를 이용해 이메일 인증을 구현해보자

이번엔 프로젝트에 필요한 이메일 인증 기능( 학교 이메일로 인증 번호를 전송하는 기능 )을 구현해보려 한다. 이번 글에선 여러 smtp서버가 있지만 다음을 이용해보려 한다. 간단하게 플로우를 살펴보면 사용자의 이메일 인증 요청 -> 서버에서 이를 토대로 연결된 SMTP서버에 목적지 이메일 주소로 메일 전달 요청 -> 서버(스프링 부트)에 연결된 SMTP서버에서 목적지 SMTP서버로 메일을 전송한다 -> 사용자가 메일을 확인한 후 올바른 인증 코드를 서버에 다시 제출한다 원리는 꽤 단순하니 바로 구현을 해보자 SMTP설정 메일의 환경설정에 들어가 POP3/SMTP사용을 활성화 한다 (IMAP도 상관없다..) 그러면 하단에 pop3서버 및 포트번호 등 기타 정보를 알려준다. gradle의존성 추가 imple..

Spring

Spring Batch

프로젝트를 진행하며 csv파일을 DB에 파싱해서 넣기 위해 Batch를 사용했다. 생각했던 것 보다 내용이 많은 부분이였고, 나중에 시간이 된다면 배치에 대해 더 자세히 공부해 봐야겠다.. 배치란 ? 말 자체는 일괄처리 란 뜻을 가지고 있다. 대용량의 데이터를 처리하게 되면 해당 기능이 실행될 때 서버의 자원을 거의 다 쓰게 된다. 만약, 이런 대용량의 데이터를 불러오고 저장하는 과정이 하루에 한 번만 진행된다면 굳이 API를 사용해서 호출하는 것 보단, 배치 어플리케이션을 만들어 사용하는 것이 좋다.(spring schedueling쓰면 매일 자정에 실행하게끔도 할 수 있다.) 동일한 배치 작업은 여러번 실행되지 않는다 ! (스프링에서 알아서 동일 Job 재실행인지 확인함 (jobname으로 판단하는 ..

Spring

ExceptionHandling

@ExceptionHandler(xx.class) 이렇게 쓰고 인자로 캐치해서 핸들링하고 싶은 예외 클래스를 등록해주면 끝 {a.class,b.class}이런식으로 여러개를 처리 할 수도 있음 단, Controller(rest포함)에서만 사용이 가능 함 parameter로 받으려한 오류 클래스를 받거나 간단하게는 Exception클래스로 받으면 됨 CustomException 자신이 처리하고 싶은 예외들을 (직접 만든 예외 포함)처리하기 위해 직접 만드는 클래스 보통 RuntimeException을 extends해서 구현하나, 더 많은 예외를 처리하고 싶으면 Exception을 확장하면 된다 서비스단에서 그냥 뭘 리턴하는데 안되면 그냥 만든 오류 throw하고 @ExceptionHandler로 처리 근데..

시롱시롱
'Spring' 카테고리의 글 목록 (2 Page)