얇고 넓은 개발 블로그
지금까지 올라온 글들
-
2024 회고 - 고생은 좀 했지만, 행복함이 있는 한 해
2024 회고 - 고생은 좀 했지만, 행복함이 있는 한 해
2024.12.22올해도 벌써 마무리가 다 되어버렸네요. 정말 많은 일이 있었는데 다 말하기 힘들정도로 여러가지 일들이 있었어요. 막상 사진으로 찍어둔 것을 보니까 사실상 회사에서의 일보다는 개인적인 여러가지 일들이 많았던거 같은데, 그래도 회고 한번 쭉 적어보면서 다양한 일에 대해서 생각해보는걸로 해보려구요. 올해는 회사에서의 성장이 스스로가 느끼기에도 좀 더 좋은 성장이 있었던거 같았어요. 그리고 개인적으로도 많은 시도와 여러가지 일들이 많았기 때문에, 성장했다고 생각해요. 사실 회사보다는 개인적인 측면에서의 성장이 스스로가 생각하기엔 인상 깊어요. 나중에 풀겠지만...!회사올해는 뭔가 회사는 격변의 한 해였어요. 특히나, 프로젝트 중단과 통합 회원 이관이란 엄청나게 큰 서비스적인 개편도 있었어요. 그로 인해 내가 얼.. -
Custom Deserializer를 Json Module방식으로 등록해보자
Custom Deserializer를 Json Module방식으로 등록해보자
2024.11.24TL; DR등록기라서 사실 요약할 내용은 없다. D2 추천 방식으로 해당하는 Enum Type을 좀 더 쉽게 Deserializing하는 방식을 체크해보고 싶었다.도입 이유1. Enum Type의 사용 이유일단 개발하다보면, 100% 확률로 Enum Type을 사용할 수 밖에 없기때문에 해당하는 타입을 Enum화 해서 관리하는게 좋다. 실제로 실무에서는 DB에 저장되는 형태랑, 실제로 Json 타입으로 주는 형태랑 다를 경우가 많다. 즉, 해당하는 걸 매번 Enum의 키값으로 지정하기에 부담스러울때가 종종 있기 때문이다.일단 Enum 타입을 만들고, 해당하지 않은 타입으로 전달하게 되면 대략 이런 오류가 발생하기 마련이다.import lombok.Getter; import lombok.RequiredA.. -
에러에 상태에 따라서 로깅 레벨을 조절해보자
에러에 상태에 따라서 로깅 레벨을 조절해보자
2024.11.10TL; DR선호하진 않을 방식일순 있으나, 에러에 대한 익셉션이 하나로 결정되어진 경우 ControllerAdvicer의 로그레벨을 무조건 한 가지로 고정해버리면 간혹 이 에러에 대한 오류를 지정하기가 힘들어진다. 차라리 이럴때는 Exception에 로그레벨을 넣고, Sl4fj에서 제공하는 makerLoggingEventBuilder기능을 활용하면 좋다. 익셉션에 로그레벨을 프로퍼티로 넣고, 꺼내서 해당하는 어드바이저의 레벨과 상관없이 자동으로 출력하자1. 이런 상황이 만들어지게된 배경에러 로그를 Exception별로 만들게 되면, 로깅을 우리팀에서는 ControllerAdvicer에서 처리하는 방식으로 구현했었다. 근데 이렇게 하면 문제가 되는 지점이 공통분모로 묶어둔 익셉션이 자주 에러를 발생해서 가.. -
@AuthenticationPrincipal과 getAuthentication()에서 가져온 principal의 다른점은 있을까?
@AuthenticationPrincipal과 getAuthentication()에서 가져온 principal의 다른점은 있을까?
2024.10.27TL; DR없다 같은것이기 때문에 크게 신경쓰지 말자 타입캐스팅도 자동으로 되기때문에 굳이 서비스 로직이아니라면 Parameter화시키는게 더 편하다.왜 궁금했나?@CreatedBy 나 @LastModifiedBy를 사용하는 경우 Auditor를 구성하기위해 implements AuditorAware 과 같은 Aware를 이용하게되는데, 개발시 스프링에서 제공하는 예시를 보더라도...class SpringSecurityAuditorAware implements AuditorAware { public User getCurrentAuditor() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(.. -
글또 10기를 시작하면서...
글또 10기를 시작하면서...
2024.10.13글또 첫주차는 늘 뭘 적을까에 대한 고민을 많이 하곤 하는데, 결국에는 다짐글을 적게되는게 굳혀졌다 아래 글만 봐도 벌써 4번째기 때문이번 글또는 마지막 기수기도하고 이 블로그의 대한 방향성도 좀 미묘해진 상황이다. 글또 5기를 시작하면서...글또를 시작해버렸다. 글쓰는 또라이라는 이 모임은 개발 블로그 글쓰기 모임과 같다. 사실 개발 블로그는 내가 배운 내용이 아니면 정기적으로 포스팅하기가 쉽지는 않다. 아무래도 내가 순간sundries-in-myidea.tistory.com 글또 6기를 시작하면서 - 올해의 마무리도 글또와 함께글또를 또 하게되었다. 이번에도 글또를 시작했다. 뭐 지난번에 이야기를 주절주절했으니까.. 글또에 대해서 무엇이고 어떤 비전을 가지고 있는지에 대해서는 딱히 언급하지 않고, .. -
Transactional의 Self Injection이 올바른가
Transactional의 Self Injection이 올바른가
2024.06.22TL; DR올바르지 않고, 쓰지마. Self Injection은 기본적으로 Spring이랑 Spring Boot에서 기본 논점으로 막고 있음. 왜냐하면 무한 참조에 위험성을 가지고 있고 @Lazy를 위한 방식으로 처리할 수는 있는데.. 굳이 그렇게 쓰는거 자체가 전자에 발생할 위험성을 포함하고 있음. 스프링 부트의 경우는 아예 기본으로 순환 참조시 아예 Application 켜지지 않는 이슈도 있음. 아님 허용하고 Spring boot 전체가 전부 Self Injection이 가능해져야하기 때문에 비선호기본적으로 Spring에서 권고하지 않는 사항이면, 안하는게 좋다고 생각함. 프레임워크기 때문에 굳이 벗어나는 행동을 하는건 좋지 않다고 생각함왜 이 주제가 생각났는가?팀내에서 소나큐브를 적용해보자는 이야.. -
Slack App Directory를 활용하여 Webhook보다 퀄 좋은 메세지 발송하기
Slack App Directory를 활용하여 Webhook보다 퀄 좋은 메세지 발송하기
2024.05.12Legacy Integration....Slack 웹훅을 발송하면 구) 버젼을 이용하다보면 문제가 발생할 수 있는데, 해당하는 문제는 다음과 같다.→ 웹훅 만든사람이 나가면 그 웹훅이 비활성화된다는 것!그리고 Incoming webhook 들어가면 경고 문구가 계속 뜨기 때문에 개발자인 이상 눈길이 갈 수 밖에 없다.그러면 App Directory로 이전하기 위해서는 어떤 기능을 활용해야하고, 어떻게 하면 퀄 좋은 메세지 발송해야할 수 있는지 확인해봅시다.물론 Webhook도 쓸수 있다.웹훅도 당연히 쓸 수 있다. 문제는 Webhook은 SaaS 서비스에서 양식을 제공하면 사실 필요없지만, 양식을 만들려면, Blockit을 활용해서 해당하는 양식을 만들 수 있는데, 단점이 하나 있다.웹훅의 메세지의 타이.. -
Hibernate 신기능 @SoftDelete 기능
Hibernate 신기능 @SoftDelete 기능
2024.04.10Spring Boot도 벌써 3.2.X버전대가 릴리즈 되었고, 그에 따라서 자동으로 하이버네이트도 마이너 버젼 업데이트가 되었습니다. 6.4 버젼부터 해당하는 기능을 사용할 수 있습니다. 해당하는 기능을 한번 사용해보고 싶어서 테스트 해봤습니다. 일단 기본적으로 스프링 부트는 3.2.1 부터 사용 가능할 수 있으므로 참고 부탁드립니다. 기존에 사용하던 Soft Delete 방식 기존에는 Soft Delete기능을 사용하기 위해서는 개념적으로 사용해야하는 @Where절과 같은 기능을 사용하여, 삭제 컬럼에 대한 flag에 대한 조건을 엔티티 자체에 붙여서 사용해야했다. 그리고 삭제조건을 자동으로 update절로 바꿔서 처리할 수 있는 @SqlDelete문 과 같은 어노테이션이 필요했다. 즉, 개념적인 So.. -
클린 코드 - 1. 객체 지향 생활 체조
클린 코드 - 1. 객체 지향 생활 체조
2024.03.31클린코드 with java 17기를 들었던 경험 및 거기서 피드백 받았던 내용을 공유를 하려합니다. 저는 10월 30일부터 12월 31일까지 클린코드 강의를 코드리뷰, 강의를 끝까지 완료를 했습니다. 실제 강의 일자는 6주 과정이였지만, 업무 + 과제 까지 다해내게기엔 굉장히 빡센 과정이였지만... 배운점은 있었고, 다 아는 내용일지언정, 공유는 드리는 것이 좋아보여 전달을 드립니다. 객체지향 생활 체조란? 겍체지향 생활체조를 지켜 보는것이 왜 중요한가? (저도 못지키지만...) 생활체조 원칙은 좋은 품질의 소프트웨어를 만들기 위한 응집도(cohension), 느슨한 결합(loose coupling), 무중복(zero duplication), 캡슐화(encapsulation), 테스트 가능성(testab.. -
헉, 이거 나만 몰랐나? 3편 - 알아두면 회사에서 유용한 Intellij 단축키
헉, 이거 나만 몰랐나? 3편 - 알아두면 회사에서 유용한 Intellij 단축키
2024.03.03신입으로 들어간 내가 종종 시니어 팀원분들에게 개발한 것을 리뷰를 받기 위해 종종 코드를 보여주다보면, 종종 그... ctrl + G 키 눌러봐~ 아니면 그 메소드를 사용하는 다른 곳이 있는지를 확인을 해봐처럼 응애 신입 개발자이기전에는 한 번을 안써봤던 단축키를 이야기해보려 하는데요. 하지만, 이런 단축키들은 굉장히 유용하므로, 해당하는 단축키를 잘 사용하면 선배님들에게 특급 칭찬을 받을 수 있지 않을까요? 1. 사용 위치 찾기 (Find Usages) 왼도우 (Alt+ F7) / 맥 (Alt + F7) 해당기능을 사용할 경우 해당 메소드들을 내 코드에서 어디서 사용하고 있는지를 알려준다. 라인과 해당하는 사용 위치를 알려주는 역할을 한다. 옆에 해당하는 코드가 어디에서 사용하고 있으며 , 위치도 파악..