설계·방법론
-
Java - 코딩 인터뷰 질문 정리설계·방법론 2023. 3. 13. 21:55
Java란 무엇인가요? Java는 객체 지향, 클래스 기반 프로그래밍 언어로서 다양한 플랫폼을 위한 안전하고 이식성 있는 애플리케이션을 생성하는 데 널리 사용됩니다. Java의 특징은 무엇인가요? Java의 주요 특징은 플랫폼 독립성, 객체 지향 프로그래밍, 자동 메모리 관리, 견고성, 보안 및 멀티스레드 지원입니다. 추상 클래스와 인터페이스의 차이점은 무엇인가요? 추상 클래스는 인스턴스화 할 수 없는 클래스이며, 인터페이스는 클래스가 구현해야하는 추상 메서드의 컬렉션입니다. 클래스는 추상 클래스 하나만 상속할 수 있지만, 여러 인터페이스를 구현할 수 있습니다. 클래스와 객체의 차이점은 무엇인가요? 클래스는 객체를 생성하기 위한 청사진(blueprint)이며, 객체는 클래스의 인스턴스입니다. 클래스는 객..
-
변수 이름을 잘 짓는 법설계·방법론 2023. 1. 19. 20:52
"오픈소스의 네이밍 특징들"에 따르면 가장 많이 쓰는 변수 이름은 i, L06, result 라고 합니다. 보통 i는 integer를 뜻하거나 index의 의미로 많이 쓰입니다. 그러나 a, b 이런 글자를 변수로 쓰면 이것이 무슨 의미인지 알기 어렵습니다. 좋은 변수는 의미가 명확한게 좋습니다. int day int someday int today int thisMonth 이런 식으로 단어를 봤을 때 무슨 의미인지 명확한 것이 좋습니다. 특정한 날짜로부터 며칠이 지났는지 알려주고 싶은 경우에는 int daysSinceCreated int monthsSinceUpdated 이렇게 쓰면 가독성이 좋습니다. 변수 이름을 여러 단어 조합할 때는 순서가 중요합니다. 예를 들어 총 방문자수를 나타낼 경우 tota..
-
빨리 실패하는 시스템을 만들어라설계·방법론 2022. 7. 19. 18:48
빨리 실패하기는 시스템은 문제가 일어났을 때 즉시 눈에 띄게 실패한다. '즉시 눈에 띄게 실패'하게 하면 소프트웨어가 더 취약해질 것 같지만, 실제로는 더 견고해진다. 버그를 찾고 수정하기 더 쉬워지므로 프로덕션으로 가는 버그가 줄어든다. 빨리 실패하기의 예 시작할 때 설정 오류를 발견하면 바로 종료하기 소프트웨어 입력 확인하기 (오랜 시간이 지난 후에 사용되지 않을 예정이라면 더욱 중요함) 다룰 줄 모르는 외부 서비스에서 발생한 오류를 무시하지 말고 표시하기 컬렉션 같은 자료 구조의 특정 변경사항이 반복자 같은 종속적인 자료구조를 사용할 수 없는 상태로 만들면 최대한 빨리 예외 발생시키기 주요 데이터 구조가 손상됐을 때 시스템 내부로 손상을 더 전파하지 말고 예외 발생시키기 복잡한 논리 흐름 전후에 주..
-
좋은 추상화를 만드는 요소는?설계·방법론 2022. 7. 15. 18:43
좋은 추상화는 다음과 같은 속성이 있다. - 배우기 쉽다 - 문서가 없어도 사용하기 쉽다. - 잘못 사용하기 어렵다. - 요구 조건을 충족시킬 정도로 충분히 강력하다. - 확장하기 쉽다. - 대상 사용자에게 적합하다. 좋은 추상화는 복잡하게 꼬인 개념을 단순하게 풀어낸다. 단순한 추상화는 여러 개념을 서로 얽지 않으므로 의도치 않게 여러 개념을 동시에 고려할 필요 없이 각 개념에 대해 독립적으로 추론할 수 있다. 소프트웨어를 만들 때 복잡성을 줄이는 방법 - 가변 상태 피하기 - 명령형 프로그래밍보다 함수형 프로그래밍 사용하기 - 상속보다 합성 선호하기 - 명령형보다 선언형으로 데이터 조작 표현하기 추상화를 처음 설계할 때 도움이 되는 몇가지 아이디어 1. 회사의 코드베이스나 깃허브 저장소에서 인기 있는..
-
마이크로서비스 장단점설계·방법론 2022. 6. 16. 00:59
monolithic 의 문제점 - 모든 개발자가 하나의 코드 베이스 내에서 작업하여 관리 비효율적임 - 모듈 간 의존적이기 때문에 배포 시 여러군데에서 영향을 받음 - 계층의 유연함을 잃고 경직되게 됨 - 단일체 구조이기 때문에 문제가 생겼을 때 책임소재가 애매함 마이크로서비스는? - 다른 서비스에 의존성이 없고 배포와 관리를 단독으로 할수 있는 수준에서 독립적인 서비스로 나누어야 함 - 기능을 기반으로 나누어야 함 마이크로서비스의 단점 - 모니터링의 오버헤드 증가 - 장애 시 추적이 어려움 - 중앙 로그 모니터링이 없어서 로그 관리 시스템이 필요함
-
[펌] 개발자 평생 공부설계·방법론 2022. 6. 15. 23:53
지금 다니고 있는 회사에서 하는 일을 잘하기 위해서 노력하는 것이 가장 좋은 공부다. 회사에서 하는 일과 개인적으로 공부하는 내용을 최대한 근접시키기 위해서 노력하라. 새로운 기술을 익히는 최선의 방법은 스스로 문제를 정의한 다음, 새로운 기술을 이용해서 그 문제를 풀어보는 것이다. 책을 읽거나 동영상을 보는 것은 그보다 하위수준의 방법이다. 신기술을 좇는 메뚜기가 되지 말라. 모든 것을 알아야 한다는 강박을 버려라. 미리 획득하는 지식의 99%는 무용지물이다. 필요할 때 필요한 기술을 익힐 수 있는 것이 능력이다. 그 능력을 키워라. 이상한 나라의 앨리스에 나오는 토끼굴(rabbit hole)을 피하라. 카테고리이론을 알아야 함수형 언어를 쓸 수 있는게 아니고, 선형대수학을 공부해야 머신러닝을 할 수 ..
-
(펌) 배민은 서비스 장애를 어떻게 없앴나설계·방법론 2022. 6. 11. 00:22
https://byline.network/2020/12/17-108/ 배민은 서비스 장애를 어떻게 없앴나 - Byline Network A매치 축구대회나 프로야구 코리안시리즈와 같은 대형 스포츠 이벤트가 있을 때 나는 경기 시작 한참 전에 치킨을 배달시키곤 했었다. 너무 빨리 주문하는 바람에 막상 경기가 시작됐을 때는 치 byline.network 간단하게 정리 모놀리틱에서 MSA로 전환 배경 사용자가 몰리면 장애가 발생해서 전환 필요 DB에 영향이 생기면 전체 서비스가 장애 발생 배민 아키텍처 정리 1. 마이크로서비스들이 이벤트 기반으로 연결 ex) 주문이 들어오면 주문 시스템은 주문이 들어왔다는 이벤트를 발생시키고 끝난다. 다른 시스템에 정보를 API로 직접 넘겨주는 것을 최소화 장애가 전파되는 것을..
-
(펌)개발자의 평생공부설계·방법론 2022. 6. 10. 18:20
개발자가 공부하는 것은 그래서 두 번째 유형의 사람이 가진 능력, 본질적인 능력을 키우는 것을 의미한다. 프로그래밍의 본질은 문제의 해결이다. 트렌드를 좇는 것은 파편적인 지식을 획득하는 것에 불과하기 때문에 큰 의미가 없다. 페이스북이나 트위터의 타임라인을 보면 수만가지 새로운 기술과 도구가 날마다 쏟아진다. 좋은 개발자라면 그런 것들을 모두 알아야 하는가? 전혀 그렇지 않다. 파편적인 지식은 파편적인 태도만으로 충분하다. 트렌드에 필요한 것은 가벼운 눈팅이지 공부가 아니다. 공부는 본질에 다가서려는 노력이다. https://zdnet.co.kr/view/?no=20170616090644 개발자의 평생공부 평생 공부하는 건 개발자만이 아니다. 다른 직업을 가진 사람들도 쉼 없이 공부하고, 컨퍼런스와 세..