profile

Junil Jeong

I am a frontend developer equipped with skills of typescript and react.js. Looking forward to achieve efficiency and productivity for your teams.

I have recently completed Software Engineering Bootcamp in CodeStates and currently studying Next.js 😁

📍 Incheon, Korea

효율적인 개발을 위한 아키텍처와 디자인 패턴

2023.09.23

개발

🧑‍💻 개발 시스템 정리

서비스를 개발할 때 어떻게 하면 더 효율적이고 유기적인 움직임을 가져갈 수 있을까?

개발하면서 마주치는 어려움 중 하나는 이미 작성된 코드를 수정해야 할 때 일 겁니다. 그 코드가 단순한 코드여서 사이드 이펙트를 고려하며 수정하여도, 가끔은 완전히 그 영역을 커버하지 못 할 때가 있죠. 따라서 대다수의 개발자들은 코드 수정에 꽤 예민한 편입니다 특히 동료가 내가 쓴 코드를 읽고 수정할 때..

또 영원히 수정이 필요 없는 코드는 없죠, 끊임없이 리팩토링하고 새로운 기능을 추가하며 서비스를 계속 발전시키는 게 저희의 임무입니다.

결국 효율적으로 개발하기 위해 우리는 가독성이 좋고 장기적인 유지보수에 용이한 코드를 작성해야 하는데 이를 위해서 코드를 작성하기 전 팀적으로 약속을 만들곤 합니다.

가장 큰 뼈대의 약속인 소프트웨어 아키텍처부터 살펴보죠.

아키텍처 패턴

아키텍처는 소프트웨어의 기본적인 구성 요소, 그들 사이의 관계, 시스템의 동작 방식, 성능, 확장성 및 유지보수 가능성과 같은 다양한 측면을 다룹니다. 아키텍처는 소프트웨어 시스템의 기반을 제공하며 전체 개발 프로세스를 안내하고 조직의 비즈니스 요구 사항을 충족시키기 위한 청사진 역할을 합니다.

아키텍처에 관한 중요한 개념과 원칙은 다음과 같습니다

1. 모듈화: 시스템을 작은 모듈 또는 컴포넌트로 나누어야 합니다. 각 모듈은 특정 기능 또는 역할을 담당하며 독립적으로 테스트, 개발, 유지보수할 수 있어야 합니다.

2. 관심사 분리: 시스템의 다른 부분들 간의 의존성을 최소화하고 각 부분이 자체적으로 특정 관심사에 집중하도록 설계해야 합니다. 예를 들어, 데이터 액세스와 사용자 인터페이스 로직을 분리하거나, 비즈니스 로직과 프레젠테이션 로직을 분리할 수 있습니다.

3. 단일 책임 원칙 (Single Responsibility Principle): 모듈이나 클래스는 단 하나의 책임을 가져야 합니다. 이것은 코드의 읽기 쉽고 이해하기 쉬운 구조를 유지하고 변경 사항에 대한 영향을 최소화하는 데 도움이 됩니다.

4. 계층화: 소프트웨어 시스템을 여러 개의 레이어 또는 계층으로 나누어 구성합니다. 일반적으로는 데이터 계층, 비즈니스 로직 계층 및 프레젠테이션 계층으로 나누어 구성합니다.

5. 확장성: 아키텍처는 시스템이 더 많은 요구 사항을 수용하고 더 큰 규모로 확장할 수 있는 방식으로 설계되어야 합니다. 이는 시스템의 성능을 향상시키고 사용자 수나 데이터 양이 증가할 때 대처하기 쉽도록 하는 중요한 고려 사항입니다.

6. 보안: 아키텍처는 시스템의 보안을 고려해야 합니다. 데이터의 안전성과 개인 정보 보호를 위한 적절한 보안 메커니즘을 구현해야 합니다.

7. 유지보수 용이성: 아키텍처는 시스템의 장기적인 유지보수를 고려해야 합니다. 변경이 필요한 경우 최소한의 노력으로 수정하고 확장할 수 있어야 합니다.

그 다음은 디자인 패턴입니다. 큰틀에서 아키텍쳐 패턴을 정했다면, 개발단계에서 어떻게 실제 코드 구조를 짤지를 정하는 게 디자인 패턴입니다.