반응형

개발 106

g

[개발 환경] WSL (Windows Subsystem for Linux) 에 대해서

WSL 이란? 리눅스용 윈도 하위 시스템(Windows Subsystem for Linux, WSL)은 윈도 10과 윈도 11에서 리눅스를 실행하기 위한호환성 계층이다. https://github.com/Microsoft/WSL GitHub - microsoft/WSL: Issues found on WSL Issues found on WSL. Contribute to microsoft/WSL development by creating an account on GitHub. github.com https://learn.microsoft.com/ko-kr/archive/blogs/wsl/ Windows Subsystem for Linux Table of contents Windows Subsystem for..

g

[객체 지향] SOLID 원칙에 대해서 알아보자

객체 지향을 공부하면서 SOLID 원칙을 빼놓을 수 없다. SOLID 원칙에 대해서 공부해 본다. SOLID란 로버트 마틴이 2000년대 초반에 명명한 객체지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 소개한 것이다. 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다. SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링 하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. 1. 단일 책임 원칙(SRP) 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부..

g

[객체 지향] 객체 지향 프로그래밍(OOP)에 대해 알아보자

객체 지향(Object oriented) 이란? 우리가 실생활에서 쓰는 모든 것을 객체라 하며, 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말한다. 객체는 클래스라는 틀에서 생겨난 실체이다. 따라서 객체 지향 프로그램은 객체와 객체 간의 연결로 되어 있으며 각각의 객체 안에 자료구조와 알고리즘이 들어있는 것이다. 쉽게 말해서 프로그래밍을 할 때, 이 프로그램 내의 구성요소들을 각각 쪼개고 그 요소들끼리 서로 통신하는 개념으로 프로그래밍을 한다고 생각하면 된다. 이것이 절차 지향과의 큰 차이다. 결국 절차지향은 말 그대로, 어떤 순서로 프로그램이 돌아가느냐 의 관점에서 코드를 작성하는 것이고 ..

g

[Git] 안심하고 commit하자 reflog

아래 포스팅에서 자주 쓰는 명령어와 업무 flow를 정리해 보았다. https://growing-dev101.tistory.com/20 [Git] 자주 쓰는 명령어 Git 자주 쓰는 명령어 내가 현업에서 Git을 사용하면서 자주 사용하는 순으로 나름대로 정리해 보았다. 실제로 더 디테일한 옵션을 사용하기도 하지만 아래 내용만으로도 대부분의 업무가 가능하 growing-dev101.tistory.com 터미널에서 Git을 잘 활용해서 복잡하게 얽힌 상황을 해결해야 할 때가 있고 또 그런 환경에서 실수하기 쉽다. GitHub에서 원격 저장소가 여러 개이고 Fork 된 저장소까지 있다면 단순 작업을 하더라도 실수할 소지가 많다. Merge나 Rebase가 제대로 되지 않아, 원격 저장소와 로컬 저장소의 상태가..

개발/Git 2023.01.13

g

[Git] 자주 쓰는 명령어, 익숙해지자

Git 자주 쓰는 명령어 내가 현업에서 Git을 사용하면서 자주 사용하는 순으로 나름대로 정리해 보았다. 실제로 더 디테일한 옵션을 사용하기도 하지만 아래 내용만으로도 대부분의 업무가 가능하고, 브랜치가 엄청 많거나 분단위로 커밋이 발생하는 경우가 아닌 이상 충분하다고 생각한다. # remote 저장소로부터 git repository를 복사한다. git clone [remote repo] # commit history를 보여준다. git log # 한줄로 commit 로그를 출력한다. git log --oneline # commit 로그 그래프를 보여준다. git log --graph # 현재 파일 상태를 표시한다. git status # stage 상태와 HEAD를 비교한다. git diff --sta..

개발/Git 2023.01.13

g

[도서 리뷰] 소프트웨어 장인 책을 읽은 후기

http://www.yes24.com/Product/Goods/20461940 소프트웨어 장인 - YES24 더 나은 개발자가 되어, 더 좋은 코드를 전달하고 싶은 당신을 위하여...이 책에서 풀어낸 소프트웨어 장인정신의 프로페셔널리즘, 기술적 탁월함, 고객 만족은 애자일, 린(lean) 원칙들과 시너지 www.yes24.com 총평 소프트웨어 엔지니어링 관련 업무를 하며 처음으로 접한 책이다. 많은 추천과 후기가 있는 걸 보면 분명히 얻을 수 있을게 많다고 생각해서 정말 진지하게 꼼꼼하게 읽었다. 많은 사람들이 읽었다고 해서 다 맞거나 모두 공감할만한 내용은 아닐 수 있지만 적어도 소프트웨어를 진지하게 바라보기 시작하는 내 입장에서는 많은 내용이 공감되고 와닿았다. 개발을 하다 보면 실제 개발보다는 이..

g

[Git] GitHub vs Gerrit

GitHub와 Gerrit이 뭐지? GitHub와 Gerrit 두 가지 모두 코드를 관리하고 코드 리뷰를 통한 협업을 위한 시스템이다. Git을 베이스로 하여 각자 로컬 저장소에 있는 코드들을 함께 효율적으로 관리하기 위해 만든 시스템이라고 볼 수 있다. 또한 두 가지 모두 코드 리뷰를 자동화하고 강제하는 목적에 맞춰 만들어진 시스템이다. 수정한 코드를 적용하려면 일정 점수 이상의 코드 리뷰 점수를 획득해야 하도록 설정할 수 있다. 개발자가 수정한 코드를 중앙 저장소에 보내면 자동으로 지정된 리뷰어에게 알림이 가고, 리뷰어는 온라인으로 리뷰를 진행한다. 리뷰에서 규정된 점수 이상을 획득하면 최종적으로 해당 코드를 반영할 수 있다. Gerrit https://www.gerritcodereview.com/a..

개발/Git 2023.01.09

g

[개발 상식] 프로그래밍 패러다임을 알아보자

프로그래밍 패러다임의 개념과 패러다임 3가지 종류에 대해서 알아보도록 하겠다. 프로그래밍 패러다임 프로그래밍 패러다임은 어떠한 방식으로 프로그래밍을 할지, 프로그래밍 혹은 코드를 바라보는 관점에 대한 고민에서 나온 전략이라고 볼 수 있다. 사람이 프로그래밍을 하고 컴퓨터가 프로그래밍된 대로 돌아가는데, 결국 똑같은 기능을 하더라도 어떻게 프로그래밍을 하느냐에 따라 코드가 천차만별이 될 수 있다. 따라서 프로그래밍이 지향하는 혹은 지양하는 방법들과 프로그래밍할 언어가 어떠한 고민과 철학을 갖고 만들어졌는지에 대한 생각이라고 이해할 수 있다. 대표적으로 절차적, 객체지향, 함수형 프로그래밍이 있다. 1. 절차적 프로그래밍 절차 혹은 순서에 따라 프로그래밍을 하는 방식으로, 어떤 프로시저의 호출을 바탕으로 한..

g

[Git] 좋은 commit message 작성

commit message가 중요한가요? 개발하면서 commit을 많이 하는데, commit message의 중요성을 간과하는 경우가 많다. commit이 수백 수천 개가 되고, 수십 수백 명이 개발하는 환경이라면 더더욱 message의 명확성과 간결성이 중요해질 것이다. 결국 개발은 사람이 하는 것이므로 사람이 이해하기 좋은 것(가독성)이 좋은 commit message라고 할 수 있을 것 같다. 그럼, 좋은 commit message는 무엇일까? 사실 좋은 commit message가 어떤 것이다라는 정답은 없다. 당연히, 회사, 과제, 인원들의 수준 등에 따라 달라질 수밖에 없고 또 달라져야 한다. 하지만 우리 S/W라는 분야는 언제나 그렇듯, 정답은 없지만 여러 시행착오를 거쳐 나온 일반 원리 혹..

개발/Git 2023.01.08

g

[라이브러리] 정적(static) vs 공유(shared)

정적 라이브러리(Static Library)란? 프로그램 빌드 시에 라이브러리가 제공하는 코드를 실행 파일에 넣어서 빌드하는 방식의 라이브러리를 의미한다. 정적 라이브러리를 사용하여 컴파일하면 링커가 프로그램이 필요하는 부분을 라이브러리에서 찾아 실행파일에 복사한다. 실행파일에 다 들어가기 때문에 실행할 때 라이브러리가 필요 없이 다 포함되어 있다. 장점은 시스템 환경이 변해도 애플리케이션에 아무런 영향이 없고, 완성된 애플리케이션을 안정적으로 사용할 수 있다는 점이다. 반면에 사용하는 모든 오브젝트 코드를 실행 파일에 포함하기 때문에 메모리에 로드되는 애플리케이션 코드 크기가 커진다는 단점이 있다. 리눅스에서는 확장자 a가 붙는다. 공유 라이브러리(Shared Library)란? 어떤 라이브러리가 제공..

반응형