본문 바로가기

분류 전체보기

(887)
Spring Boot: JPA(Hibernate) 네이밍 전략 spring.jpa.hibernate.naming.physical-strategy 및 spring.jpa.hibernate.naming.implicit-strategy 을 통해 테이블 이름이나 컬럼 이름에 대한 네이밍 전략 설정이 가능하다. 네이밍 컨벤션에는 여러가지가 있다. camelCase: 앞자는 소문자 단어 사이에 대문자 PascalCase: camleCase와 같은데 첫 글자가 대문자이다. Initial Capitals, Initial Caps, InitCaps 로도 불린다. snake_case: 모든 문자는 소문자(lowercase)로 단어간 구분은 언더스코어(_)로 구분한다. kebab-case: 모든 문자는 소문자(lowercase)로 단어간 구분은 대시(-)로 구분한다. ALL CAPS:..
ServletModelAttributeMethodProcessor 와 @PathVariable ServletModelAttributeMethodProcessor 은 ModelAttributeMethodProcessor 상속받아 서블릿을 위한 위한 구현체이다. 가령 Spring MVC 에서 @PathVariable 을 이용해 URI 템플릿을 파라미터로 받아올 때 ServletModelAttributeMethodProcessor 가 사용된다. 사례 예로 아래와 같은 코드가 있을 때 requestNo 과 memberNo 에는 URI path의 템플릿 값이 들어오게 된다. @RestController public class VPNController { @GetMapping(value = "/vpn/{memberNo}/{requestNo}", produces = MediaType.APPLICATION_JS..
@NotNull이 Needs Work가 필요한 수준인가요? 코드 리뷰를 하다가 제목과 같은 질문을 받았다. @NotNull이 Needs Work가 필요한 수준인가요? 사업자등록번호에 대한 유효성 제약 수정이 있어서 PR을 받았는데 의견을 남기고 추가적인 작업이 필요할 것 같아서 Needs Work 로 마크를 했었다. 아래와 같은 요청 파라미터로 사용되는 객체이다. (실무 코드는 아니고 예제이다.) import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Getter @Setter public class MemberJoinRequest implements Member { @NotN..
JPA: @DataJpaTest 에서 트랜잭션 Rollback 이 안된 이유는? 어떤 기능의 변경에 대한 요청을 받았다. 마침 이전에 존재했던 기능에 테스트 코드가 없었다. 테스트 코드를 먼저 만들었다. 왜냐하면 변경 이후에 잘 동작하는지 안전망이 필요했기 때문이다. Unique index violation 이 발생 IntelliJ IDEA에서 테스트 묶음(Test Suites) 들을 돌릴 때는 문제가 없었다. 그런데 이상하게 로컬 환경에서 터미널에서 mvnw clean test 명령을 돌리면 테스트 하나가 깨진다. 원인을 찾아보니 DataIntegrityViolationException 가 발생했고, 세부적으로는 Unique index violation 이 발생했다. org.springframework.dao.DataIntegrityViolationException: could n..
Spring boot: HttpMessageConverters 는 누가 만들어줄까? RestTemplate 에 대해 통합 테스트를 만드는 과정에서 HttpMessageConverters 빈이 없다고 에러가 났다. 그러면 이 HttpMessageConverters 빈은 누가 만들어주고 있었을까? 스프링 부트에는 여러 Auto Configuration 이 있는데 HttpMessageConvertersAutoConfiguration 가 해주고 있었다. package org.springframework.boot.autoconfigure.http; @Configuration @ConditionalOnClass(HttpMessageConverter.class) @AutoConfigureAfter({ GsonAutoConfiguration.class, JacksonAutoConfiguration.c..
Google Bookmark: 북마크 서비스 중단 공지 2021-07-21 20:11 발행일 공지가 나온 것은 아직 못보았지만 서비스 위에 배너가 떴다. 2021년 9월 30일 이후에는 Google 북마크가 더 이상 지원되지 않습니다. 2022-04-17 업데이트 얼마전(?)까지는 추가/수정은 불가능하고 읽기 모드만 가능했는데 이제 404 에러가 발생한다.
아마존 vs 쿠팡 - 밀어서 주문하기 쿠팡에 입사하고 나서 쿠팡이 아마존을 따라하는 게 많다고 듣고 들었다. 지금은 쿠팡에 다니지 않지만 고객의 입장으로 서비스를 사용하다 보면 카피캣이라 할 정도로 비슷한 게 많다. 밀어서 주문하기 쿠팡 아마존 쿠팡의 내부 보도자료에 따르면 따라했다고 순순히 인정하는 내용이 들어가 있다. 원터치 또는 원클릭결제는 아마존이나 애플 등 실리콘밸리 기업들이 보편적으로 사용하는 결제 방식이다. 하지만 국내에서는 그 사례를 찾아 보기가 힘들었다. 쿠팡은 발상을 전환해 국내에서 처음으로 원터치 결제를 도입할 수 있었다.
[spring] health check endpoint 내가 회사에서 본 애플리케이션에는 관례적으로 /health 라는 경로의 endpoint를 노출하고 있었다. 저마다 반환하는 값은 "success"나 "OK" 나 다 달랐지만 200 응답을 돌려주는 것은 동일했다. 보통은 아래와 같이 Controller를 만들어서 어떤 응답값을 반환한다. @RestController @RequestMapping("/health2") class HealthCheckEndpoint { @GetMapping fun health(): ResponseEntity { return ResponseEntity.ok().body("OK") } } ResponseEntity.ok().body("OK") 부분은 BodyBulder 에 의해 매번 DefaultBuilder 라는 객체를 생성한다..