데브콘 활동 후기

[Review] 2024-10-19 K-DEVCON DEAJEON 스터디 후기

dev-jonghoonpark 2024. 10. 23. 14:36
📢 notice.

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


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

 

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

 

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

 

이번 스터디에서 진행된 내용은 다음과 같았습니다.

 

곽준선 님
- 컬렉션 처리시 코드를 복잡하게 하는 중첩 구조와 복잡하게 얽힌 결합구조를 개선하는 방법에 대해서 알아봅니다.
    - 내 코드가 그렇게 이상한가요? (7-8장)

박종훈 님
- MySQL에서 인덱스를 어떻게 처리하는지 알아보고 어떻게 써야 제대로 쓰는지에 대해서 알아봅니다.
    - Real Mysql 8.0 (8장)

 


컬렉션 처리시 중첩 구조 잘 처리하는 방법 / 복잡하게 얽힌 결합구조를 개선하는 방법 (곽준선 님)

최신 자바에서는 컬렉션 처리와 관련해서 많은 기능들을 제공해줍니다.
직접적으로 for, while loop를 사용해서 구현하기 전에 해당 기능들이 이미 있는 기능인지 보고, 있을 경우에는 해당 기능을 사용하는것이 좋은 코드를 작성하는데 도움이 될 가능성이 높습니다. Stream 에 익숙하지 않다면 한번쯤 도입해보는것을 추천드리고 싶습니다.

일급 컬렉션 패턴을 사용해서 컬렉션 관련 로직을 캡슐화하고, 중복 코드를 줄일 수도 있습니다.

 

강한 결합구조를 풀어나가기 위해서는 모듈 간 의존도를 줄이고, 단일 책임 원칙을 적용하여 클래스의 책임을 명확히 하는 것이 좋습니다.

강한 결합이 발생되는 이유는 다향한 원인들이 있습니다. 그 중 책에서 소개하는 것은 다음과 같습니다.

 

- 상속과 관련된 강한 결합 → 상속 구조에서 subclass는 superclass에 기본적으로 강하게 의존하므로 강한 결합을 유발

- 인스턴스 변수별로 클래스 분할이 가능한 로직 → 하나의 클래스에 책임이 완전히 다른 변수 및 메서드가 존재

- 특별한 이유 없이 public 사용하지 않기 → 관계 없는 클래스끼리 의존 관계 유발 가능, 결합도 증가

- private 메서드가 너무 많다는 것은 책임이 너무 많다는 것 → 메서드가 너무 많다면 책임의 관점에서 다시 생각해보기

- 높응집를 오해해서 생기는 강한 결합 → 개념이 다른 로직이 이면 강한 결합이 발생

- 스마트UI 시와 직관련이 없는 책임이 담당 클래스에 구현되어 책임끼리 강하게 결합

- 거클래스 → 관련없는 접근 가능하강한 결합 및 버그 유발 가능, 전변수 성질을 띄

- 트랜잭션 크립트 패턴 → Tell, don’t ask 가 안 된 경우 쉽게 발생하며 낮응집도 강한 결합도 형태 띄게 됨

- 갓 클래스 → 강한 결합, 영향 범위 파악 어려움

추가적으로 상속은 강한 결합 구조를 유발하기 때문에 상속 보다는 컴포지션을 사용하자는 팁도 제공해주었습니다. (해당 팁은 이펙티브 자바에도 소개되어 있습니다.)

 

MySQL 인덱스 (박종훈 님)

MySQL 과 같은 RDBMS 에서는 인덱스가 정말 중요합니다.
이번 기회에 스터디 회원분들과 데이터베이스에서 내부적으로 인덱스를 어떻게 사용하는지 함께 알아볼 수 있는 시간을 가졌습니다.

 

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

 

인덱스

인덱스는 책의 맨 끝에 있는 찾아보기(또는 “색인”)으로 설명할 수 있습니다.
책의 마지막에 있는 “찾아보기” 를 인덱스에 비유해본 다면, 책의 내용은 데이터 파일, 페이지 번호는 데이터 파일에 저장된 레코드의 주소에 해당한다고 볼 수 있습니다.

인덱스는 저장되는 칼럼의 값을 이용해 항상 정렬된 상태를 유지합니다.

데이터가 저장될 때 마다 항상 값을 정렬해야 하므로 저장하는 과정이 복잡하고 느리지만, 이미 정렬돼있어서 아주 빨리 원하는 값을 찾아올 수 있습니다.
즉, 데이터의 저장 (INSERT,UPDATE,DELETE) 성능을 희생하고, 그 대신 데이터의 읽기 (SELECT) 속도를 높힙니다.

 

SELECT 쿼리 문의 WHERE 조건절에 사용되는 칼럼이라고 해서 전부 인덱스로 생성하면 데이터 저장 성능이 떨어지고 인덱스의 크기가 비대해져 오히려 역효과만 불러올 수 있습니다.

 

따라서 테이블의 인덱스를 더 추가할지 말지는 '데이터의 저장 속도를 어디까지 희생할 수 있는지', '읽기 속도를 얼마나 더 빠르게 만들어야 하는지' 를 고려하여 결정해야 합니다.

 

MySQL 뿐 아니라 다양한 RDBMS 에서 B-Tree 에 기반한 자료구조를 통해 인덱스를 관리합니다.

이 과정에서 어떻게 키와 데이터를 저장하고, 어떤 방식으로 스캔을 할 것인지가 중요합니다.

상황에 따라 적합한 방식이 다르기 때문에, 어떠한 상황들이 있고, 어떤 상황을 피해야 하는지에 대해서 알아보았습니다.

 


 

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

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

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

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


 

 

26회 스터디의 경우 9월 28일날 진행되었었는데요.

따로 후기글을 남기지 못해서 이 글에 함께 기록을 남겨보기로 했습니다. 😭😱

박정환 님
- 복잡한 조건분기를 개선하는 방법에 대해서 다룹니다.
    - 내 코드가 그렇게 이상한가요? (6장)

박종훈 님
- MySQL에서 데이터 압축 과 암호화를 어떻게 처리하는지에 대해서 다룹니다. (정리글)
    - Real Mysql 8.0 (6-7장)
- 영속성과 객체/관계형 패터다임의 불일치에 대해서 알아보고 ORM, JPA 에 대해서 소개합니다
    - 자바 퍼시스턴스 프로그래밍 완벽 가이드 (1장)

 

 

추가적으로 스터디가 끝나고 이야기 하는 시간에, 스터디 멤버 중 한분이신 혜미님께서 본인이 최근에 만났던 GIS 관련 문제들을 여러가지를 소개해주셨습니다 : )

다양한 관점에서 같이 논의해 볼 수 있어서 재밌었던 시간이였습니다.