데브콘 활동 후기

[Review] 2024-06-15 K-DEVCON DEAJEON 스터디 후기

dev-jonghoonpark 2024. 6. 17. 10:22
📢 notice.

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


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

 

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

 

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

 

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

 

예성님
시스템의 신뢰성을 확보하기 위한 카오스 엔지니어링에 대해서 알아봅니다.

 

종훈님
- 기본이 되는 자료구조들에 대해서 알아보고 자바에서는 어떻게 사용하는지 알아봅니다. (자바 컬렉션)
- 제네릭에 대해서 알아봅니다.

 

K-DEVCON은 스터디 회원들의 자유로운 발표를 권장하고 있습니다.

 


세션 1 : 카오스 엔지니어링

예성님께서 카오스 엔지니어링에 대해서 소개를 해주셨습니다.

분산시스템, MSA 를 다뤄보시거나 공부해보신 분이라면 카오스 엔지니어링에 대해서 한번쯤은 들어볼 수 있었을 것 같습니다.

 

 

먼저 카오스 엔지니어링 이란 무엇일까요?

카오스 엔지니어링은 운영 환경에서도 갑작스러운 장애를 견딜 수 있는 시스템을 구축하기 위해 시스템을 실험하는 것이며
무작위하고 예측 불가능한 행동을 도입하는 통제된 실험을 통해 시스템의 약점을 미리 파악하는 것입니다.

카오스 엔지니어링을 통해 사각지대, 숨겨진 버그, 성능 병목 현상 들을 발견할 수 있습니다.

 

카오스 엔지니어링은 아래와 같은 단계로 진행됩니다.

여기서 기준점을 잘 세우는 것이 가장 중요하다고 설명해주셨습니다.

(잘못된 기준점은 잘못된 테스트로 이어지게 됩니다.)

 

이 과정에서 실수하는 "분산 시스템의 잘못된 가정 8가지" 도 소개를 해주셨습니다.

1. 네트워크는 Reliable 하다.
2. Zero-Latency 다.
3. 대역폭은 무한대이다.
4. 네트워크는 secure 하다.
5. Topology(연결 구성)은 변하지 않는다.
6. 하나의 admin만 있다.
7. Transport 비용이 0이다.
8. 네트워크는 homogeneous(동종, 같은 기능) 하다.

 

 

예성님의 발표에 이어, 멘토이신 강성욱님 께서 부가적인 설명과 실제적인 사례들을 공유해주셨습니다.

 


세션 2 : 자바 (컬렉션, 제네릭)

컬렉션

기초적인 개념부터 시작해야 겠다는 생각으로 바로 컬렉션으로 들어가기 보다는 자료구조에 대해서 먼저 설명을 진행하였습니다.

 

 

자료 구조는 "데이터를 효율적으로 저장하고 관리하는 방법을 정의하는 추상적 개념" 입니다.

자바 컬렉션은 "자료 구조를 프로그래밍 언어로 구현한 것" 입니다.

 

대표적으로 사용되는 자료구조와 그 예시는 다음과 같습니다.

 

https://blog.bytebytego.com/p/ep55-data-structures-used-in-daily

 

적절한 자료구조를 선택하는 것은 보다 효율적인 알고리즘을 구현하는데 도움이 됩니다.

그럼 효율적이라는 것은 어떻게 나타낼 수 있는지에 대해 이야기를 하기 위해 시간복잡도와 빅 오(Big-O) 표기법에 대해서 소개를 해드렸습니다.

 

https://www.linkedin.com/pulse/dev-training-big-o-notation-matt-matthias/

 

오늘 하루동안 모든 자료구조를 완벽하게 알아갈 수는 없겠지만, 주요 알고리즘들의 컨셉과 사용되는 예시에 대해 이해하여 필요할 때 떠오르면 좋겠다 라는 생각으로 스터디를 진행해나갔습니다. (원래 학부에서는 한학기를 잡고 진행하는 내용이기도 하고요)

 

 

한 회원분께서는 이번 스터디를 참여하시고 나서 아래와 같은 코멘트를 남겨주셨습니다.

 오랫만에 자바 공부 했는데 제가 지금은 쓰지 않는 언어라 해도 본질은 cs에서 시작하니 생각할 점들이 많았습니다

 

제네릭 (Generics)

제네릭에 대해서는 간단하게 개념을 짚어보는 방향으로 진행하였습니다.

 

제네릭은 컴파일시 타입을 체크해 주는 기능(compile-time type check) 입니다. 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줍니다 (코드도 줄어듬)

 

공식 문서의 예시로 그 사용법을 알아보자면 다음과 같이 Box 라는 Container 가 있다고 가정해 보겠습니다.

 

public class Box {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

 

이 클래스는 현재 Object를 사용하기 때문에 보든 객체를 받을 수 있습니다.

 

만약에 Object에 특정 객체만 받아야 한다면 어떨까요? ToyBox, FuiteBox, SnackBox 이런식으로 각각의 클래스를 만들어 타입을 지정해줘야 할 것입니다. 이는 코드 중복을 발생시킬 것입니다.

 

이러한 문제를 제네릭을 통해 해결할 수 있습니다.

public class Box<T> {
    // T stands for "Type"
    private T t;

    public void set(T t) { this.t = t; }
    public T get() { return t; }
}

 

이런식으로 제네릭을 통해 타입을 매개변수화 할 수 있습니다. 코드도 절약되면서  타입 안정성도 높일 수 있습니다.


장소 대관

충남대학교 소프트웨어중심대학사업단 에서 도움을 주셔서 창의SW설계실 을 대여해주셨습니다.

 


 

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

 

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

 

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

 

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