분류 전체보기29 Jackson SnakeCase / CamelCase 한번에 변경 하기 시작하며 오늘은 특정 GW에서는 카멜 케이스가 아니라 스네이크 케이스로 응답을 줘야 하는 상황이 생겼다. 개발자들은 전통적으로 반복 작업을 싫어하고 key를 바꾸기 위해서 모든 key 마다, @JsonProperty 를 넣어주기엔... 무리가 있다. 어노테이션 하나로 편리하게 변경을 해보자. @JsonProperty 멈춰! 해당 Task를 다른 분에게 부탁을 했더니 Response 객체의 Data Class에 @JsonProperty로 떡칠을 해두었다. 물론 이렇게 해도 개발에 문제가 없고 동작에도 문제는 없다. 하지만 코드의 가독성이 떨어지고, 솔직히 귀찮다. @JsonNaming을 써보자 어노테이션 하나로 손쉽게, 스네이크케이스와 카멜케이스를 변경 할 수 있다. 아래의 예시 코드를 보자. @JsonN.. 2021. 10. 20. 인텔리제이에서 Git을 찾을 수 없을때 (Cannot identify version of git executable: no response) 문제 상황 인텔리제이에서 갑작스럽게 Git Pull이 안되는 상황이 생긴다.. 홍길동도 아니고 어머니를 어머니라 부르지못하네 원인 추정 하기로는 인텔리제이 플러그인 업데이트 하면서, Git 경로가 깨진듯하다. 해결 1. 터미널에서 아래와 같이 Git 바이너리의 경로를 확인한다. ``` ➜ ~ whereis git /usr/bin/git ➜ ~ ``` 2. 인텔리제이 설정 -> Version Control -> Git -> Path to Git executable 에 경로 변경-> Test -> OK 2021. 9. 13. 03. Soft Delete 더 편하게 하기 들어가며 DB를 만들면서 우리는 삭제 하는 방법은 두 가지 방법이 있다. 방식 설명 Soft Delete `UPDATE table SET delete = 1 WHERE id = 2` 형태로 ROW가 삭제 되지 않고 flag를 통한 제어 하는 방식 Hard Delete DELETE FROM table WHERE id = 2 형태로 ROW가 실제로 삭제 되는 방식 `Hard Delete`를 하는 경우도 있지만, `Soft Delete`를 하는 경우가 더 많다. 이런 경우에 JPA Entity Graph 의 경우는 `Soft Delete`시 데이터가 같이 담겨서 온다. `Application level에서 필터 하면 되는거 아니냐? ` 라고 생각 할 수 있지만, 인간이기 때문에 로직에 구멍이 많이 생길 수 있.. 2021. 7. 15. AWS에 호구 잡히지 않는 방법 feat. CDN 비용절감 진행기 다음 글은 어떤 내용을 적어볼까 고민을 해보다가, 이런 이야기를 했는데, 반응이 좋아서 한번 적어보려고 한다. 0.시작하며 내가 담당하고 있는 서버들은 현재 재직중인 회사에서 가장 높은 유저수를 보유한 (1600만..) 서비스들이다. 정확한 트래픽 수치를 알려줄수는 없겠지만 , 월 트래픽이 PB 단위를 넘어가게 된다. 유저수에 기뻐하는것도 잠시, 매달 늘어가는 통신비용 (IDC, AWS CF비용)등에 대한 부담이 점점 커저만 갔다. 그리하여, 어찌보면 비용절감TF가 만들어졌고, 클라이언트 개발자분과 함께 여러가지 전략을 세워 나갔다. 결론적으로 예전부터 잘못 사용하고 있던 비용을 절감하여, 전체 통신 비용의 절반을 줄이면서 팀 안에서 '타노스' 라는 별명을 얻게 되었다. 1. 현재를 정확하게 파악해야 비.. 2021. 2. 12. 02. 당신의 @Transactional의 readOnly 옵션 잘 쓰고 있나요? 시작하며 오늘은 Spring에서 마법의 어노테이션이라고 부르는 @Transactional의 readOnly 옵션에 대하여 이야기해보려고 한다. 엥? @Transactional에는 readOnly라는 옵션이 없는데? 엥? @Transactional에는 readOnly 옵션이 없는데 이게 무슨일이죠? 없는 걸로 이야기를 하려고 하는 건가? 우리는 이번 readOnly 이야기를 하기 전에 @Transactional은 2가지 있다는 것을 이야기하고 넘어가려고 한다. 이 2가지가 궁극적으로 하려고 하는 일은 동일하다. (실제 Spring AOP 상에서는 javax 패키지의 트랜젝션과 Spring 패키지의 트랜젝션도 모두 지원하고 있다.) Spring 패키지를 통해 제공되는 어노테이션이 더 많은 옵션을 제공하게 된.. 2021. 2. 4. [회고] 2020년 상반기 리모트근무 회고 시작하며 2020년은 코로나 19라는 팬데믹 상황이 계속 반복되며, 전례 없는 재택근무의 시대가 되었다. 필자가 다니고 있는 회사에서도 2월 부터 재택근무를 계속 진행하고 있다. 2020년 상반기 동안 리모트 근무를 하면서 필자가 느낀 이야기를 해보려고 한다. 이 글은 내가 다니는 회사에서 진행한 리모트 근무에 대해 주관적인 나의 생각하는 점을 다시 한번 강조하면서 이야기를 시작하겠다. 재택근무의 시작 회사 바로 앞에 있는 식당에서 '코로나 19' 확진자가 발생하면서, 갑작스러운 재택이 시작되었다. 아무런 준비도 없이 재택을 시작하게 되고 나서 다른 사람들은 환경 준비에 꽤 이슈가 있었다고 한다. 필자의 경우는 서버 개발자 이고, 코덕(?)이다 보니, 평상시에도 사내 VPN을 통해 집에서도 일하고 있었다.. 2020. 8. 30. [리뷰] 개발자 입장에서의 iPad Pro Magic Keyboard 사용기 오늘 해볼 이야기는 기술적인 내용은 아니다. 개발자 입장에서의 한달간 iPad Pro Magic Keyboard는 얼마나 효용성이 있는지에 대한 이야기를 해보려고 한다. 구매를 결심하게 된 내용을 보고 싶다면 아래의 글을 보도록 하자 코로나19를 뚫고 애플스토어를 다녀왔습니다. 회사에 계신 분께서 아이패드 매직 키보드 관련 이야기를 하다 보니 갑자기 매직 키보드가 쓰고 싶어 졌다. 그래서 이번 달 장비 구입 예산도 있기도 했고 구매를 해보기로 했다. 애플스토어 코� life.yangs.kr 내가 생각한 iPad Magic Keyboard의 사용 용도 많은 사람들은 '노트북 대신' 사용하기 위하여, 'iPad'를 구매하고는 한다. 물론 Apple이 지난 WWDC에서 이야기 했던 Big Sur와 Apple .. 2020. 7. 30. 알쓸신잡(3) - 폐쇄망에서 CloudFront 사용 하기 시작하며 사내에서 CloudFront를 사용 하고 있다. 이전에는 Invadliation을 날리지 않는 CF 였는데, 이번에 내부적인 사정으로 인하여 Invalidation 요청이 필요한 상황이다. 이전 글을 보면 알겠지만, 나는 폐쇄망 환경에서 서비스를 개발하고 있다. 그래서 이 카테고리의 취지에 맞게, 필요한 도메인 리스트들을 남겨두려고 한다. 오픈이 필요한 방화벽 리스트 도메인 포트 cloudfront.amazonaws.com 443 사실 이렇게 기억 하면 된다. 1. 리전을 타는 서비스의 경우 (S3, Dynamodb, SQS 등) 서비스명.리전.amazonaws.com 2. 리전을 타지 않는 Global 서비스의 경우 (Cloudfront) 서비스명.amazonaws.com 서비스명.amazon.. 2020. 7. 27. 01. 알아두면 쓸떼있는 GeneratedValue 이야기 Part1 시작하며 우리는 Entity를 만들 때 우리는 PK (Primary Key)를 지정한다. 그중에서도 Primary Key를 선택할 때, 전략적으로 생각했을 때 순차 증가 값을 포기할 수가 없다. 과연 그럼 JPA에서는 이런 대체 키를 어떻게 생성하고, 어떤식으로 동작하는지에 대해 알아보도록 하자. GeneratedValue란? import javax.persistence.*; import java.io.Serializable; import java.time.LocalDateTime; @Table(name = "coupon") @Entity @Getter @Setter public class Coupon implements Serializable { private static final long seria.. 2020. 6. 4. 알쓸신잡(2) - 폐쇄망에서 FCM 서버와 통신하기 시작하며 지난 글에서 작성한 폐쇄망 관련 글이 생각보다 조회수가 잘 나와서, 하나 더 준비해봤다. 오늘은 Google Firebase에서 제공하는 Firebase Cloud Message API를 폐쇄망에서 사용해야 할때 필요한 도메인 리스트를 공유 하려고 한다. 구조 아마, 거의 모든 개발자가 비슷한 구성으로 서비스를 개발 할 것으로 생각 된다. 앱 서버 (혹은 PUSH 발송 서버) -> 구글 FCM 서버 방화벽 서비스 정책 상, 아웃바운드에 해당 하는 트래픽 오픈이 필요 하다. 필요한 오픈 리스트 서비스에 필요한 아웃바운드 정책은 아래와 같이 구성 된다. 도메인 포트 fcm.googleapis.com 443 재미있는 사건 근데, 먼가 Google이 이 정도 트래픽으로 차단을 하지는 않을 것 같다는 생.. 2020. 5. 11. 이전 1 2 3 다음