@PathVariable @PathVariable 파라메터를 사용하면 아래와 같이 URI의 일부를 변수로 전달할 수 있다. @GetMapping("/bars/{barId}") fun getBar(@PathVariable(value = "barId") barId: Optional) @PathVariable 파라메터는 생략이 불가능하다. 생략할 경우 404 Not Found 오류로 분기된다. 생략을 허용하려면 아래와 같이 생략된 엔드포인트 URI를 추가하면 된다. @GetMapping(value = ["/bars","/bars/{barId}"]) @PathVariable 파라메터 타입으로 Optional을 사용하면 옵셔널 체크를 좀 더 우아하게 표현할 수 있다. [관련 링크]@PathVariable 파라메터..
개요 org.slf4j.MDC 클래스는 애플리케이션의 로그에 담을 정보를 저장할 수 있는 일종의 로그 정보 저장소로 유용하게 사용된다. MDC의 특징은 ThreadLocal에 의해 현재 쓰레드 범위 내에서만 사용할 수 있다는 것인데, 문제는 다른 쓰레드에서 실행되는 비동기 실행시 새로운 MDC 영역을 가지게 되어 호출한 쓰레드와의 연관성을 로그로 남기는 것이 불가능하다는 문제점이 있다. 해결책이 없는 것은 아니다. 비동기 실행시 제공될 쓰레드를 관리하는 org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor에 쓰레드 실행시 MDC를 복제해주는 로직을 삽입하면 된다. 이번 글에서는 이 방법을 설명하고자 한다. 기존 문제점 비동기 쓰레드와 호출한 ..
@Transactional 사용시 주의사항 @Transactional을 클래스 또는 메써드 레벨에 명시하면 해당 메써드 호출시 지정된 트랜잭션이 작동하게 된다. 단, 조건이 있다. 해당 클래스의 Bean을 다른 클래스의 Bean에서 호출할 때만 @Transactional을 인지하고 작동하게 된다. (같은 빈 내에서 @Transactional이 명시된 다른 메써드를 호출해도 작동하지 않는다.) Spring Framework는 내부적으로 AOP를 통해 해당 어노테이션을 인지하여 프록시를 생성하여 트랜잭션을 자동 관리하기 때문이다. [관련 링크1] [관련 링크2] Propagation.REQUIRED (기본 값) @Transactional(propagation = Propagation.REQUIRED) pub..
BigDecimal? BigDecimal은 Java 언어에서 숫자를 정밀하게 저장하고 표현할 수 있는 유일한 방법이다.소수점을 저장할 수 있는 가장 크기가 큰 타입인 double은 소수점의 정밀도에 있어 한계가 있어 값이 유실될 수 있다.Java 언어에서 돈과 소수점을 다룬다면 BigDecimal은 선택이 아니라 필수이다.BigDecimal의 유일한 단점은 느린 속도와 기본 타입보다 조금 불편한 사용법 뿐이다. double, 무엇이 문제인가? 소수점 이하의 수를 다룰 때 double 타입은 사칙연산시 아래와 같이 우리가 기대한 값과 다른 값을 출력한다. 이유는 double 타입이 내부적으로 수를 저장할 때 이진수의 근사치를 저장하기 때문이다. 저장된 수를 다시 십진수로 표현하면서 아래와 같은 문제가 발생..
- Total
- Today
- Yesterday
- Tomcat
- Spring MVC 3
- java
- 구동계
- chrome
- maven
- CentOS
- Kendo UI Web Grid
- 알뜰폰
- kotlin
- Eclipse
- node.js
- Kendo UI
- Spring Boot
- JavaScript
- spring
- Docker
- DynamoDB
- graylog
- 평속
- jsp
- JHipster
- 자전거
- jpa
- 로드바이크
- 로드 바이크
- jstl
- MySQL
- bootstrap
- 태그를 입력해 주세요.
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |