스프링(15)
-
Telegram bot longPolling과 webhook
회사 내부 프로젝트에서 결재 알림을 위해 텔레그램 메시지를 활용하기로 했다. 사실은 웹푸시로 개발하려 준비하고 있었지만 토큰 관리와 모바일 기기 푸시 문제로 텔레그램 메시지로 선회하였다. 우선 telegram 같은 경우 longPolling과 webhook을 모두 지원하는데 간략하게 설명을 하자면 롱폴링같은 경우 지속적으로 메시지 요청을 보내고 계속해서 확인하는 방법이다. 계속해서 연결을 유지하며 이벤트가 메시지를 감지해서 data를 전달해주는 방법인데 실제론 몇시간동안 연결이 유지되는 건 아니고 일정시간 간격으로 다시 요청하는 방식이다. 웹훅같은 경우는 데이터를 주는 곳에 직접 접근할 수 있는 url을 제공하는 것이다. 롱폴링의 경우 데이터를 받는 서버에서 지속적으로 요청을 한다면 웹훅은 데이터를 주는..
2024.02.27 -
spring filterChain 동작과정
스프링 시큐리티를 사용하게 된다면 필터체인의 경우 was가 제공하는 ApplicationFilterChain과 스프링에서 제공하는 SecurityFilterChain으로 나뉜다. 둘은 다른 라이프사이클을 가지고 있는데 서로의 요청 url이 다르게 해도 개발자의 의도에 맞게 적용이 되지 않을 수가 있다. 처음 애플리케이션을 실행하게 되면 ApplicationFilterChain이 실행이 되고 DelegatingFilterProxy를 통해 SecurityFilterChain 필터를 타게 된다. 다시 설명하자면 기존 FilterChain을 타다가 DelegatingFilterProxy에서 SecurityFilterChain 전달되면 내부 필터들이 작동하게 된다. 결국 시큐리티에서 Filter에 대한 제외할 u..
2023.11.15 -
스프링부트 개발 가이드
rest방식의 uri의 경우 “/api”를 붙여 준다. 유저라는 엔티티의 crud의 uri의 경우 복수형으로 적어준다 ex) userList(x) GET /users POST /users PUT /users/{id} DELETE /users/{id} 연관관계에 있는 uri의 경우 뒤에 행위를 적어준다 ex) has 소유관계 “/users/{id}/exists” 엔티티와 컨트롤러에는 swagger를 적용한다 ex) user 참고 uri에는 가급적 camelcase를 사용 하지 않고 하이픈(-)을 사용한다. ex)sysCode(x) ⇒ sys-code(o) 패키지 이름은 무조건 소문자! 데이터를 전송하거나 받을 때 가급적 entity에 직접 접근하지 말고 DTO, VO를 생성해서 해준다. service는 인..
2023.11.08 -
springboot redis 연동
gradle에 추가해준다. implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.session:spring-session-data-redis' redisConfig 파일을 하나 작성해주어야 하는데 우선 @EnableRedisHttpSession을 통해서 redis로 HttpSession을 사용한다. 꼭 명시 해주자. @Configuration @EnableRedisHttpSession(redisNamespace = "${spring.session.redis.namespace}") @RequiredArgsConstructor public class RedisConfi..
2023.10.11 -
네이버 클라우드 sens 알림톡 발송
기본적인 페이지에 연동작업은 생략하고 우선 service-id, access-key, secret-key를 암호화 후 yml 파일에 작성하거나 env파일로 작성한다. 백단에서 통신을 위한 작업을 진행한다. 우선 헤더에 timestamp, accessKey, signature를 보내줘야 하는데 timestamp 같은 경우 String time = String.valueOf(System.currentTimeMillis()); 간단히 생성 가능하며 access-key는 저장된 키를 가져온다, signature값 생성의 경우 자바로 예를 든다면 public String makeSignature(String method, String time, String url) throws NoSuchAlgorithmExce..
2023.09.26 -
yml 파일 암호화
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4' gradle에 라이브러리를 추가해준다. jasypt: encryptor: # 운영에서는 톰캣에서 environment variable :jasypt.encryptor.password=${password} 설정하고 밑에 password 지워야함 password: ${yourPassword} bean: jasyptStringEncryptor local 환경 테스트기때문에 직접 암호화 키를 넣어줬다. @Configuration public class JasyptConfig { @Value("${jasypt.encryptor.password}") private String pas..
2023.08.29