본문 바로가기

전체 글196

우리 가게 정상 영업합니다 꽤 긴 시간 글을 남기지 않았다. 취업에 성공해 그런 것이니 너그러이 봐주길 부탁드린다 껄껄.  현재 회사에서 사용하는 기술은 그렇게 트렌디하지는 않다. 코틀린도, JPA도 사용하지 않는다. Build Tool도 Maven을 사용한다. Java버전 역시 8버전으로 꽤 오래된 버전을 사용 중이다. 뭐 그래서 나쁘다는 건 아니다. 돌아가지 않는 좋은 코드보단 돌아가는 안좋은 코드가 비즈니스 관점에서 훨씬 나은 코드고, 잘 알지도 못하고 사용하는 최신 기술이 덕지덕지 범벅된 소프트웨어보다 조금 오래됐더라도 내부 동작과 사용하는 이유를 알고 만들어 낸 소프트웨어가 훨씬 유지보수하기 좋다.  그럼에도 더 좋은 코드를 만들어내고 싶고, 유행하는 기술 트렌드에 발맞춘 소프트웨어를 개발하고싶은 욕심은 모든 개발자들에게.. 2024. 7. 14.
Pull Request 030. 바버샵 등록 기능 구현하기 - Slack WebHook 연동 및 비동기 이벤트 처리 해보기 + 계층 간 통신 고민하기 처음 구상에는 바버샵을 네이버 지도 같은 데에서 크롤링해서 한 번에 쫙 등록하는 걸 생각했다. 그런데 직접 네이버 지도에 바버샵을 검색해보니 샵마다 등록된 정보가 너무 제각각이더라, 데이터를 하나의 형태로 통합해서 저장하는게 어려워보였다. 그래서 일단 등록은 바버들이 마음대로 할 수 있도록 진행했다.  이렇게 진행하면 문제는 한 명의 바버가 너무 많은 샵을 등록할 수도 있고, 샵 자체를 장난으로 등록할 수도 있다. 따라서 서버측에서는 바버샵이 등록되었다는 정보를 알아야 할 필요가 있다. 이러한 문제를 해결하기 위해 일차원적인 해결 방안으로 서버측에 알람을 보내는 방법을 생각했다. Slack WebHook을 이용하면, 서버에서 발생한 상황을 Slack에 메세지로 전달하여 확인할 수 있다. 오늘은 바버샵을 .. 2024. 5. 20.
Pull Request 029. Record를 적용한 리팩토링 진행하기 이번에 자바 버전을 21버전으로 마이그레이션 하면서, 기존에 사용하던 11버전과의 가장 큰 차이는 역시 Record의 도입이 아닐까 싶다. Record에 관한 자세한 설명은 밸덩의 아티클을 참조하면 좋을 것이다. 이번 포스트에서는 간단한 Record의 특징과 리팩토링에 어떻게 적용했는지를 다룰 예정이다. Record의 특징 Record의 가장 큰 특징이라면 모든 필드가 private final로 강제 선언되며, 해당 필드에 대한 getter가 주어진다는 것이다. 또한, equals(), hashCode(), toString()의 Object기본 메서드들이 자동으로 생성된다. 이러한 특징들을 바탕으로 어떤 형태의 Object들에 Record를 적용해보면 좋을지 고민해 보았다. Record는 어디에 쓰면 좋.. 2024. 4. 18.
JPA Indexing은 개념에 맞게 사용해 중복을 피하자 JPA에서는 DB Indexing기능을 아주 간단하게 제공해준다. 혹시 DB Indexing에 대해 잘 모른다면 해당 영상을 참고하도록 하자. 한 줄로 요약하자면, 데이터가 수억개 있을 때, 특정 값을 검색하기 편하게 트리 형태로 인덱스 칼럼을 따로 저장해서 검색을 좀 더 빠르고 간결하게 하겠다는 것이다. 조금 깊이 알고 싶으면 해당 영상을 참고하면 좋다. 예를 들어, 1억 개의 데이터가 있는데 이 중에 id = 3524125인 값을 SELECT해주세요. 하면 1억 개를 전부 뒤져야한다. 그러나 인덱스에 해당 칼럼을 저장해놓으면 업다운 게임처럼 트리를 이용해서 훨씬 빠른 시간에 찾을 수 있다. 특히 관계형 DB를 사용해 데이터를 영속화하는 경우에는 하나의 테이블에 꽤 많은 데이터가 저장되기 때문에, 인덱.. 2024. 4. 15.
더 이상 미룰 수 없다. 너의 마이그레이션, 나의 삽질 : Java 11 -> 21, Spring Boot 2.X -> 3.X 나는 보통 Spring 프로젝트를 만들 때 Spring Initializr 사이트를 애용한다. 원하는 빌드 툴, 언어, Spring Boot버전, 필요한 Dependency 등을 손쉽게 적용할 수 있기 때문이다. 최근에 과제 테스트를 진행하면서 해당 사이트에서 Spring 프로젝트를 하나 만들게 됐는데 아주 충격적인 사실을 알 수 있었다. 사랑하는(?) 자바 11버전이 아예 버전에서 삭제되었다. 현재 진행 중인 프로젝트에도 자바 11,과Spring Boot 2.X버전을 사용하고 있었는데, 이제는 역사의 뒤안길로 사라져야할 때인가보다. 시대의 흐름이 그렇다고 하니, 나도 자바 버전의 업데이트를 해야 할 필요성을 느꼈다. 언제까지고 구버전에 머물러있을 수는 없으니까. 자바 21 버전에서는 정말 다양한 기능이.. 2024. 4. 9.
중간 테이블은 어느 도메인에 위치시켜야할까? 데이터베이스 설계를 하다보면 종종 다대다 관계를 마주한다. 그리고 다대다 관계를 해결하기 위해 중간 테이블을 사용하는 것이 일반적이다. 다대다 테이블을 사용하면, @ManyToMany와 @JoinTable을 사용하는 것보다 유연하게 테이블 및 소프트웨어 디자인이 가능하다. 중간 테이블에 더 많은 정보를 담을 수 있다. @JoinTable에는 양쪽 테이블의 id값밖에 담지 못한다. 추가 칼럼을 담을 수 있다는 것은 곧 해당 테이블이 새로운 개념으로 확장될 수 있다는 의미다. 그런데, 그럼 중간 테이블은 어디에 두는 것이 옳을까? 예를 들어, A라는 도메인과 B라는 도메인의 중간 테이블인 C엔티티는 어느 도메인 패키지에 두는 것이 옳을까. 내가 생각한 방안은 크게 두 가지였다. A 또는 B 도메인의 하위 .. 2024. 3. 26.
반응형