springboot
-
Spring Boot: Repository Extension 패턴 (CustomRepositoryImpl)컴퓨터/Spring Boot 2024. 5. 8. 15:12
소개프로젝트들을 보다 보면 가끔 RepositoryImpl과 같은 파일을 본 적이 있다.그냥 Repository를 다르게 구현한 것일까 하고 넘어갔다가 개발을 하다가 위 방식으로 해결했다. 문제MySQL 에서 spatial 타입을 사용 중이다.POINT 타입으로 저장되어 있기 때문에 클라이언트 JSON에서는latitude/longitude (경/위도)로 float64 (double) 타입으로 반환하고 싶었다.@Entity@Table(name = "Markers")public class Marker { @Id @Column(name = "MarkerID") private Integer markerID; @Column(columnDefinition = "geometry(Point, 43..
-
Spring boot + Kotlin Coroutine + WebFlux + Security 5 + MySQL 기본 셋업컴퓨터/Spring Boot 2024. 3. 18. 21:31
Spring boot 2.7에서 kotlin coroutine을 써서 webflux를 사용할 것이다. (JDK 17) 시큐리티는 기본 셋업에 R2DBC MySQL을 써서 연결했다. gradle-kts 버전이다. MySQL 테이블 Geolocation Spatial 타입을 갖고 있는 간단한 table이다. CREATE TABLE Markers ( MarkerID INT AUTO_INCREMENT PRIMARY KEY, UserID INT NULL, Location POINT NOT NULL SRID 4326, -- SRID Description VARCHAR(255), CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UpdatedAt TIMESTAMP DEFAULT CU..
-
Spring boot: websocket 서버 확장 도전 및 Kafka컴퓨터/Kafka 2023. 12. 24. 13:23
소개 같은 Spring boot 웹소켓 서버 (실시간 채팅을 위한)를 scale-out 하는 (같은 서버를 여러 다른 포트에서) 과정을 담았다. 문제 여기서 마주친 문제는, 여러 다른 포트에서 열린 웹소켓 서버에서 같은 하나의 채팅 방에 있는 유저들끼리 어떻게 통신할 수 있을까? (예: 8081 포트 서버에서 "spring"이란 채팅 방, 8082 포트 서버에서 "spring"이란 채팅 방, 서로 같은 메시지를 봐야 한다.) Sticky Session 처음 떠올린 건 스티키 세션이다. 사용자를 특정 서버 인스턴스에 '고정'해서, 모든 요청이 같은 서버로 라우팅 되도록 하는 기술이다. (세션 데이터 일관성 유지) 웹소켓의 경우, 연결이 한 번 맺어지면 계속 유지되므로, 스티키 세션의 효과가 제한적일 수 있..
-
Spring Boot: Kotlin + Cassandra 에서 @CreatedDate null 해결컴퓨터/Spring Boot 2023. 12. 16. 17:40
코틀린 스프링 부트에서 Apache Cassandra/Scylla 데이터 베이스를 사용할 때 Auditing을 해도 @CreatedDate 어노테이션이 작동을 안 해서 null이다. @LastModifiedDate는 근데 작동을 잘한다. Main.kt @EnableScheduling @SpringBootApplication @EnableCassandraAuditing class KotlinTestApplication { // @PostConstruct // fun setTimeZone() { // TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul")) // } companion object { @JvmStatic fun main(args: Array) { Se..
-
Spring Boot: Mailsender HTML 보내기컴퓨터/HTML & JS & TS 2023. 11. 28. 17:32
templates에 있는 passcode.html을 사용하려고 아래처럼 thymeleaf 엔진 설정을 했다. spring: thymeleaf: cache: false prefix: classpath:/templates/ Bean 하나 만들어준다. 구글을 사용했다. @Configuration public class EmailConfig { @Value("${spring.mail.username}") private String FROM_ADDRESS; @Value("${spring.mail.password}") private String EMAIL_PASSWORD; @Bean public JavaMailSender javaMailService() { JavaMailSenderImpl javaMailSende..
-
Spring boot: 실시간 로그 수집하기 (Logstash, ELK)컴퓨터/JAVA 2023. 10. 31. 21:38
Logstash Kibana를 제외하고 ELK를 셋업 할 것이다. ElasticSearch는 어딘가 실행되고 있다고 가정하고 Logstash를 Docker에서 돌려서 Spring Boot 로그를 수집할 것이다. Logstash 셋업 Logstash 도커 파일을 만든다. version: '3.8' services: logstash: container_name: logstash image: docker.elastic.co/logstash/logstash:8.10.4 ports: - "5044:5044" - "5000:5000/tcp" - "5000:5000/udp" - "9600:9600" volumes: - ./logstash/config:/usr/share/logstash/config - ./logsta..
-
Spring boot: ChatGPT API 사용하기컴퓨터/JAVA 2023. 10. 2. 19:15
GitHub - flashvayne/chatgpt-spring-boot-starter: a chatgpt starter based on Openai Official Apis. a chatgpt starter based on Openai Official Apis. Contribute to flashvayne/chatgpt-spring-boot-starter development by creating an account on GitHub. github.com gradle 기준, 라이브러리를 추가한다. implementation 'io.github.flashvayne:chatgpt-spring-boot-starter:1.0.4' src/resouses.yml 에 아래와 같은 설정을 추가한다. (gpt-3.5-..