데브콘 활동 후기

[Review] 2024-12-21 K-DEVCON DEAJEON 스터디 후기

dev-jonghoonpark 2025. 1. 3. 22:51
📢 notice.

K-DEVCON Daejeon 브랜치는 대전, 세종을 중심으로 운영 중인 개발자 커뮤니티이며 온라인으로 IT 지식과 개발에 관련된 토론을 나누고,
오프라인 정기 스터디 모임(격주 토요일, 유료)이 진행되고 있습니다. IT업계에 종사하고 있거나 IT를 공부하고 있다면 누구나 함께할 수 있습니다. 자세한 내용은 아래 링크를 참고해 주세요.

K-DEVCON Daejeon
K-DEVCON Daejeon 정기 스터디 모임 신청 문의

 

안녕하세요 K-DEVCON(k-devcon.com) 입니다.

 

지난 12월 21일(토)에 K-DEVCON 대전 챕터에서는 29번째 오프라인 스터디가 진행되었습니다.

 

스터디 주요 내용은 다음과 같습니다.

 

내 코드가 그렇게 이상한가요? (정혜미)
프로그램 설계의 질서를 파괴하는 주요 패턴에 대해서 알아봅니다.
11장 주석: 유지 보수와 변경의 정확성을 높이는 주석 작성 방법
12장 메서드(함수): 좋은 클래스에는 좋은 메서드가 있다

Real Mysql 8.0 (박종훈)
MySQL에서 어떻게 쿼리 작성을 최적화 할 수 있는지 알아봅니다.
11장 쿼리 작성 및 최적화 (INSERT, UPDATE, DELETE)

내 코드가 그렇게 이상한가요? - 11장-12장 (정혜미 님) 

이 책은 제목은 장난스러워 보이지만, 그 안에 내용은 이해하기 쉬우면서도 공감이 가는 내용들로 채워져 있어서 재밌게 함께 스터디를 진행하고 있습니다.

 

이번 스터디에서는

  • 11장 주석: 유지 보수와 변경의 정확성을 높이는 주석 작성 방법
  • 12장 메서드(함수): 좋은 클래스에는 좋은 메서드가 있다

이렇게 두가지 챕터를 각자 읽어와서 이야기를 나눴습니다.

 

그 중 재미있게 다뤘던 내용을 뽑아 소개해드려 보겠습니다.

 

묻지 말고 명령하라

https://martinfowler.com/bliki/TellDontAsk.html

 

많은 초보 개발자들이 IDE의 기능을 이용하여 getter, setter를 구현하고, 이를 캡슐화 한다고 생각합니다.

하지만 이러한 방식은 문제를 발생시키기 쉽습니다.

 

캡슐화는 데이터를 다루는 로직과 데이터를 하나의 클래스로 묶고, 외부에 반드시 필요한 메서드만 공개하는 것을 의미합니다.

메서드를 호출하는 쪽에서는 복잡한 처리를 하지 않는것이 좋습니다. (생산성이 낮게 됩니다.)

객체가 스스로 자신의 데이터를 처리할 수 있도록 하는 것이 좋습니다.

 

커맨드 쿼리 분리 (CQS, Command-Query Seperation) 패턴

상태 변경과 추출을 동시에 하는 메서드는 여러 문제의 원인이 되기 쉽습니다.

또한 사용자도 사용하기 힘든 메서드가 됩니다. (두 가지가 조회만 하고 싶을때, 업데이트만 하고 싶을때 사용하지 못함.)

 

메서드 종류 구분 설명
커맨드 상태를 변경하는 것
쿼리 상태를 리턴하는 것
모디파이어 커맨드와 쿼리를 동시에 하는 것 

커맨드와 쿼리를 동시에 처리하는 메서드는 유지보수성이 낮아지고, 예기치 못한 동작을 초래할 수 있으므로 가급적 피해야 합니다.

 

참고로 CQRS 와는 비슷하지만 다릅니다.

CQS 는 메소드/함수 수준에서의 분리를 다루는 설계 원칙이고,

CQRS 는 모델/객체, 나아가 아키텍처 수준에서의 분리를 다루는 설계 패턴입니다.

* cqrs 소개 : https://learn.microsoft.com/ko-kr/azure/architecture/patterns/cqrs


Real Mysql 8.0 - INSERT, UPDATE, DELETE 쿼리 작성 및 최적화 (박종훈 님)

MySQL 8.0의 INSERT, UPDATE, DELETE 문과 관련된 다양한 내용들을 다뤄보았습니다.

스터디에서 진행했던 내용은 블로그 글로도 정리해보았습니다.

 

이번 스터디에서 다룬 내용중에서 재밌는 이야기를 하나 꼽아보자면

 

MySQL 에서 UUID를 Key로 사용할 때 고려해야 하는 부분들에 대한 것이였습니다.

 

UUID는 universally unique identifier 의 약자입니다.

중복이 되지 않은 고유 값을 생성할 수 있다는 장점이 있습니다.

 

AUTO_INCREMENT 는 다음 값을 알기 위해서 조회를 해와야 하지만 

UUID는 함수를 사용하여 키를 생성하기 때문에 종속적이지 않다는 장점이 있습니다.

또한 UUID는 순차적이지 않은 값을 생성하기 때문에 쉽게 유추하거나 조회하지 못한다는 장점도 있습니다.
(버전에 따라 디테일 한 부분은 다를 수 있음.)

 

UUID 에는 1부터 8까지의 버전이 있습니다.

MySQL 의 경우 UUID v1을 기본적으로 제공합니다.

(다른 버전을 사용하려면 함수를 등록하여 사용할 수 있습니다.)

UUID v1은 MAC 주소 와 시간을 기반으로 값을 구성합니다.

 

출처 : https://jonghoonpark.com/2024/12/21/mysql-insert-update-delete-optimize

 

UUID는 순차적이지 않은 값을 생성합니다.

키가 랜덤하게 저장된다면 MySQL 서버는 레코드를 INSERT 할 때마다 저장될 위치를 찾아야 하기 때문에 key로 사용할 경우에는 성능적인 이슈가 발생될 수 있습니다.

MySQL 8.0 부터 UUID 와 관련된 함수들에 swap flag 를 제공하는데, 이 flag를 사용하면 이러한 이슈를 개선할 수 있습니다.

 

 

swap flag 를 사용하면 UUID v1 의 값들을 재배치하여 시간 순으로 정렬될 수 있도록 합니다.

 

* 참고로 java 의 경우 UUID v4를 기본 패키지에서 제공합니다. (다른 버전을 사용하려면 라이브러리를 통해 사용할 수 있습니다.)

UUID v4는 랜덤한 값을 사용하여 UUID 값을 구성합니다. 마찬가지로 순차적으로 생성되는 값은 아니므로, key로 사용하고자 한다면 주의 하는 것이 좋습니다.

 


 

K-DEVCON 대전 스터디에 참여하고 싶으신 분들은 언제든지 환영합니다.

저희는 단순히 진도를 나가는데 목적을 두는 것이 아니라 해당 주제에 대해 서로 공부해 온 것을 기반으로 이야기 하면서 스터디를 진행하고 있습니다. 모르는 부분은 질문하고, 자기가 알던 내용과 다르면 얼마든지 의견을 제시해도 좋습니다. 같이 더 좋은 것을 얻어가기 위해 함께 노력하고 있습니다.

서로서로 현업에서 있었던 일이나, 최근 있었던 이슈들에 대해서도 이야기 하고 있습니다.

 

멤버십 신청하기

 

이번 스터디 까지 해서 Real MySQL을 마무리하고

2025년 스터디에서는 Spring 을 메인 주제로 다뤄보고자 합니다.

 

아래의 링크에서 자세한 내용을 확인하실 수 있습니다.

https://k-devcon.web.app/spring2025

 

[대전] K-DEVCON 대전에서 Spring 스터디를 시작합니다.

안녕하세요!K-DEVCON 대전에서는 새해를 맞아 멤버십에서 Spring 스터디를 시작합니다.스터디 일정 및 정보도서: 스프링 인 액션스터디 기간: 약 3달진행 횟수 및 주기: 6회, 평균 월 2회 (연휴/공휴

k-devcon.com

많은 관심 부탁드립니다.


오늘도 다들 파이팅입니다!

 

keyword: 대전, 대전 개발자, 대전 개발자 네트워킹, 대전 개발자 행사, 대전 개발자 스터디, 자바, Java, 스프링, Spring, 설계