본문 바로가기

Spring

(71)
spring boot cache 넣기 Spring Boot에 Cache넣기 spring-boot-starter-cache만 import 하면 ConcurrentHashMap이 캐쉬 클래스가 된다. 이 클래스는 expire를 수동으로 해줘야 한다. 그래서 expire time을 줄 수 있는 caffein cache를 쓰는 것. pom.xml org.springframework.boot spring-boot-starter-cache com.github.ben-manes.caffeine caffeine 2.6.2 main(){ @SpringBootApplication @EnableCaching public class ChartDataServer extends SpringBootServletInitializer {} CacheType.java @G..
jpa에서 복수키 만들기(key 2개), 복수키를 사용할 경우 길이 문제 JPA에서 복수키 만들기@IdClass(OhlcvHour.OhlcvHourKey.class) public class OhlcvHour { @Id private String currencyPair; @Id private LocalDateTime timeToHours; @EqualsAndHashCode @Embeddable static class OhlcvHourKey implements Serializable { @Column(columnDefinition = "varchar(10)") private String currencyPair; @Column(name = "TIME_TO_HOURS", nullable = false) private LocalDateTime timeToHours; } }복수키를 만들..
jpa 강좌 주제 영속성 컨텍스트란? 영속성 컨텍스트를 쓰는 이유 준영속성이란? method query db와 mapping하는법 ddl-auto 옵션에 따라 작동하는 방법 join하는 방법. 1:1, 1:N, N:N @Join을 위한 domain 설계 - match와 team id를 예제로 기존에 있는 table을 jpa로 index잡는법 slow query는 어떻게 해결할 것인가? 캐싱(caching)은 어떻게 할 것인가? query dsl 어려운 점 join을 걸었을 때 속도 이슈 왜냐하면 join걸었던 table에도 모두 select를 걸어줌 데이터를 쓰지 않을 경우 손해 db가 변경 되었을 때 초보자가 만지면 데이터가 모두 날아갈 수 있다. group by문제 jpa에서 group by를 쓰기 어려움 테스트 하는..
Spring Data Jpa - mysql LocalDateTime은 timestamp로, BigDecimal은 decimal mapping하기 jpa로 mysql을 쓸 때 mapping을 아래와 같이 하였다. timestamp로 mapping하기 @Column(nullable = false, name = "TIME_TO_12HOURS", columnDefinition = "TIMESTAMP(3)") private LocalDateTime timeTo12Hours; decimal로 mapping하기 @Column(nullable = false, precision = 36, scale = 18) private BigDecimal open; BigDecimal은 그냥 mapping하면 decimal로 mapping된다. public class OhlcvMaker { public Ohlcv make(String ohlcvString) { // Stri..
Spring Boot Field Injection 피하기 Spring에서 bean을 import 할 때 field injection은 피하는게 좋습니다. 결론부터 말씀드리면 아래와 같이 생성자에 파라메터로 넣어주면 됩니다. @Autowired public MessageReceiveWorker(AmazonSQS sqsClient, ServerConfig serverConfig) { this.sqsClient = sqsClient; this.serverConfig = serverConfig; } intelli j에서 아래와 같이 쓰면 @Autowired private AmazonSQS sqsClient; @Autowired private ServerConfig serverConfig; Field Injection(필드 인젝션)을 쓰지 말라고 경고 메세지가 나옵니다..
Spring Boot 앱 빌드하고 실행하기 with jpa, h2 build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engin..
스프링 부트 API 빌드 & 테스트 스프링부트 앱을 만들고 컨트롤러를 만든 다음에 이 컨트롤러가 내가 원하는대로 잘 작동 하는지 테스트 하고 싶을 때가 있습니다. 그러면 주로 쓰는 방법이 스프링부트를 띄운다음에 localhost:8080을 띄우고 localhost:8080/deposit/ 이런식으로 api를 바로 콜하는 식으로 하는 경우가 많은데요 이 http request도 스프링부트 test에서 만들어주는 기능이 있어서 한번 해봅니다. 순서 1.소스코드 2.Project빌드 3.Controller추가 4.Vo형태로 리턴하는 Controller추가 5.List형태로 리턴하는 Controller추가 소스코드는 아래 리포지토리에 있습니다. https://github.com/Kyeongrok/spring_boot_controller GitHu..
스프링부트 spring.profiles.active에 default값 설정하기 스프링부트 spring.profiles.active에 default값 설정하기 @Slf4j @EnableScheduling @SpringBootApplication public class Server { public static void main(String[] args) { System.setProperty("spring.profiles.default", "local"); // SpringApplication.run(Server.class, args); Properties p = System.getProperties(); Enumeration keys = p.keys(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement()..