분류 전체보기
글또 안녕! - 몇기수의 글또 회고하면서
글또 안녕! - 몇기수의 글또 회고하면서
2025.03.30글또를 꽤 오랜기간동안 해왔던 내입장에서 글또의 마지막을 같이할 수 있어서 너무 좋았다. 아쉬움도 당연히 크지만, 4개의 기수 동안 여러가지 행사에 참여했다는 것도 생각해보면 참으로 기쁜일이었다. 첫시작은 5기내 글또 첫 시작은 5기부터였는데, 그 당시에는 취업전에 여러가지 동아리 참여와 여러가지 프로젝트를 했던걸로 기억한다.https://sundries-in-myidea.tistory.com/99그래서 취업전에 개발블로그에 내가 했던 프로젝트도 정리할겸해서, 2주마다 마감시한이 있는 방식의 압박감을 나한테 주면 블로그를 주기적으로 올릴 수 있지 않을까 싶어서 참여했었다.그 당시에는 꽤나 이런저런 프로젝트를 많이 참여하면서 프로젝트 정리를 많이 했었고, 대학생입장에서 프로젝트를 어떤 배경에서 어떤식으로 ..
Spring Data envers
Spring Data envers
2025.03.16Spring Data Enver란?어플리케이션을 만들고, 결국 운영 및 관리를 해야 하는 입장에서는 활동로그성 데이터들이 필요하다. "누가" 그리고 "언제" 무엇을 "어떻게" 했는지가 중요한 데이터가 되기 때문에, 그런 기록을 반드시 필요로 하는 상황이 생긴다.즉, 이러한 문제를 해결하기 위해서는 Audit(감사) 기능을 필요로 하게 되는데, 일단 데이터의 변경 이력을 관리하기 쉽게 해주는 Library를 찾았다.spring data envers는 하이버네이트의 enver의 이력 로깅 기능을 가져와 JPA에서도 훨씬 편리한 방향으로 개발할 수 있도록 도와주는 툴이다.의존성을 Spring Data Enver를 설치한뒤,implementation 'org.springframework.data:spring-d..
AWS SES Template 메일 발송
AWS SES Template 메일 발송
2025.03.02AWS SES는 메일발송을 쉽게 AWS에서 전송해주는 역할을 하고 있습니다. 그 중 일정한 형태는 고정되어있고 안의 내용만 변경 되야하는 템플릿 메일에 대해서 사용기와 경험담에 대해서 설명드리겠습니다.TemplateMail은...AWS에서는 일정형식의 HTML, 혹은 Text 형태의 템플릿 만들어서 그 형태에 어떤 값이 들어가는지만 알게되면 대치하는 방식을 통해 동일한 템플릿 사용자별로 다양한 메세지를 발송할 수 있습니다.https://docs.aws.amazon.com/ko_kr/ses/latest/dg/send-personalized-email-api.html메일 도메인이 처음 접하는 도메인이기도 했고, 어떤 방식으로 개발을 해야 효과적으로 개발 할 수 있는지에 대해서 잘 모르는 상황이라 좌충우돌이 ..
실무에서 사용하기 좋은 Stream Collector 기능
실무에서 사용하기 좋은 Stream Collector 기능
2025.02.16TL; DRStream에서 사용할수 있는 Collect 함수를 알아보자..본론 ㄱ뭘 할까 고민하다가 List처럼 Stream을 붙였을때 Map을 만든다던가 처럼 사용하기 유용한 Collectors 함수를 알아보는 시간을 가지겠다.기본적으로 사용하게될 DTOclass Dto { private Long id; private String name; private Integer value; public Dto(Long id, String name, Integer value) { this.id = id; this.name = name; this.value = value; } public Long getId() {..
코드트리 사용해보면서 느꼈던 점들!
코드트리 사용해보면서 느꼈던 점들!
2025.02.02이 포스팅은 코드트리 x 글또 블로그 챌린지 2기를 통해 코드트리 체험권을 받아 작성한 후기입니다 코딩테스트의 필요성간만에, 코딩테스트 준비를 해야할 필요성을 좀 느꼈다. 문제를 푸는 실력이 많이 죽어서, 문제를 푸는 실력을 다시 한번 살려보고자. 글또에서 관련한 체험권 나눔 행사에 참가했다. 아무래도 코드트리라는 플랫폼을 몰랐던 나로써는 매번 풀었던 백준이나 프로그래머스와 같은 사이트외에 다른 곳에서 도움이 될까라는 생각을 많이 했었다. 코드 트리 사이트에서 제공하는 형태타 사이트와의 다른 점이라면, 개인적으로 Codetrails 라는 방식이 가장 특이했는데, 일종의 이 방식대로 따라해보고 열심히 해봅시다~ 하는 형태의 문제집형태의 커리큘럼이 개인적으로 마음에 제일 들었다. 특히 난이도 별로 결정되어있..
Spring Boot + FireBase Auth 기능을 활용한 간편 회원체계를 만들기
Spring Boot + FireBase Auth 기능을 활용한 간편 회원체계를 만들기
2025.01.19TL; DR회원 체계는 초기 사이드 프로젝트에서 은근한 발목을 잡는다. 예상보다 회원 체계를 만드는 공이 크지만, 그렇다고 안 할 수도 없고 애매한 상황이다. 필요한 부분은 FireBase로 넘기고 간단한 부분들만 받아서 쓰면 되지 않을까?라는 스스로에 생각에 기반한 프로젝트계기사실 초창기 사이드 프로젝트에서 회원 체계를 현재 DB에서 관리하는 것은 은근히 귀찮은 작업이다. 예를 들면 패스워드 암복호화 같은 작업이나, 소셜 로그인을 붙이는 경우처럼 회원 인증 체계는 우리 서비스로 가져오는 순간부터 이상하게 잡무가 많아진다.그리고 사이드 프로젝트의 성패를 가르는 지점은 결국 해당 도메인의 성격을 얼마나 잘 녹이면서도, 빠르게 프로젝트를 완료하는가에 달려있다 본다. 예상보다 사이드 프로젝트는 공수가 늘고, ..
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에서 권고하지 않는 사항이면, 안하는게 좋다고 생각함. 프레임워크기 때문에 굳이 벗어나는 행동을 하는건 좋지 않다고 생각함왜 이 주제가 생각났는가?팀내에서 소나큐브를 적용해보자는 이야..