본문 바로가기
반응형

전체 글242

[공유] Clean Code PHP 한글판 clean code PHP 버전으로 만든 문서를 한글로 번역한 Git Readme 문서를 봤는데 간단한 코드 예제와 함께 클린 코드 규칙을 잘 설명해주어서 공유하게되었습니다. GitHub - yujineeee/clean-code-php: Clean Code PHP 한글판 :bathtub: Clean Code PHP 한글판. Contribute to yujineeee/clean-code-php development by creating an account on GitHub. github.com Robert C. Martin의 책, 소프트웨어 엔지니어링의 교과서라고 불리는 Clean Code PHP 버전입니다. 이 문서는 스타일 가이드가 아닙니다. PHP로 읽기 쉽고 재사용 가능하며, 리팩토링이 쉬운 소프트.. 2023. 5. 16.
[SpringBoot 통신] RestTemplate, WebClient 서버로 웹 요청을 보내고 응답을 받을 수 있게 도와주는 RestTemplate 과 WebClient RestTemplate 스프링에서 HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿 RESTful 원칙을 따르는 서비스를 편리하게 만들 수 있다. 동기 방식으로 처리되며, AsyncRestTemplate를 사용하면 비동기 방식으로 사용할 수 있다. 현업에서 많이 쓰이지만 지원이 중단된 상태여서 최신 버전에서는 WebClient 사용을 권고한다. WebClient Reactor 기반으로 동작하는 API 스레드와 동시성 문제를 벗어나 비동기 형식으로 사용할 수 있다. 특징 Non-Blocking I/O 를 지원한다 Reactive Streams의 Back Pressure를 지원한다 적은 하드웨어 리소스로 .. 2023. 5. 9.
객체지향 패러다임 적절한 객체에게 적절한 책임을 할당하여 서로 메시지를 주고 받으며 협력하도록 하는 것 점점 증가하는 sw 복잡도를 낮추기 위해 객체지향 패러다임 대두 높은 응집도, 낮은 결합도 -> 유지보수가 용이하다. 영향도를 파악할 수 있어야 한다. 중요한 포인트! 1. 클래스가 아닌 객체에 초점을 맞추는 것 2. 객체들에게 얼마나 적절한 역할과 책임을 할당하는지 절차지향 프로그래밍 vs 객체지향 프로그래밍 절차 지향 - 책임이 한곳에 집중해 있는 방식 (getter) 객체지향 - 책임이 여러 객체로 적절히 분산돼 있는 방식 객체지향 설계 시 고려할 것 1. 도메인을 구성하는 객체에는 어떤 것들이 있는지 고민 2. 객체들간의 관계를 고민 3. 동적인 객체를 정적인 타입으로 추상화해서 도메인 모델링 하기 4. 협력을 .. 2023. 4. 12.
[Spring Boot] 예외처리 Exeption 클래스 구분 Chekcked Exception Unchecked Exception 처리 여부 반드시 예외처리 필요 명시적 처리를 강제하지 않음 확인 시점 컴파일 단계 실행 중 단계 대표적인 예외 클래스 IOExceiption SQLException RuntimeException NullPointerException IllegalArgumentException IndexOutOfBoundException SystemException uncheked exception 은 문법상 문제는 없지만 예기치 않은 상황이 생겨 발생하는 예외이다. 예외처리 방법 1. 예외 복구 - try catch 2. 예외 처리 회피 - throw 예외가 발생한 메서드를 호출한 곳에서 에러 처리를 할 수 있게 전가하는.. 2023. 3. 28.
[Spring Boot] JPA 영속성 전이 cascade, 고아객체 영속성 전이 cascade : 특정 엔티티의 영속성 상태를 변경할 때 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것 영속성 전이 타입의 종류 ALL : 모든 영속 상태 변경에 대해 영속성 전이 적용 PERSIST : 엔티티가 영속화할 때 연관된 엔티티도 함께 영속화 MERGE : 엔티티를 영속성 컨텍스트에 병합할 때 연관된 엔티티도 병합 REMOVE : 엔티티를 제거할 때 연관된 엔티티도 제거 REFRESH : 엔티티를 새로고침할 때 연관된 엔티티도 새로고침 DETACH : 엔티티를 영속성 컨텍스트에서 제외하면 연관된 엔티티도 제외 엔티티 생명주기와 연관이 있다. 한 엔티티가 영속 상태의 변경이 일어나면 매핑으로 연관된 엔티티에도 동일한 동작이 일어나도록 전이를 발생시킨다.. 2023. 3. 27.
PHP 싱글톤 패턴 어플리케이션에서 하나의 객체 인스턴스를 가진다. 단점: 코트 재사용을 제한하고 유닛 테스트를 복잡하게 만드는 등 안티패턴으로도 간주한다. ex) DB connector, Logger 등 class Singleton { private static $instances = []; public static function getInstance() { $cls = static::class; if (!isset(self::$instances[$cls])) { self::$instances[$cls] = new static(); } return self::$instances[$cls]; } } function clientCode() { $s1 = Singleton::getInstance(); $s2 = Singlet.. 2023. 3. 19.
디자인 패턴의 종류 종류 데코레이션 패턴 : 객체를 감싸서 새로운 행동을 제공한다. 상태 패턴 : 상태를 기반으로 하는 행동을 캡슐화한 다음 위임으로 필요한 행동을 선택한다. 반복자 패턴 : 컬렉션이 어떤 식으로 구현되었는지 드러내지 않으면서도 컬렉션 내에 있는 모든 객체를 대상으로 반복 작업을 처리할 수 있게 한다. 퍼사드 패턴 : 일련의 클래스에 간단한 인터페이스를 제공한다. 전략 패턴 : 교환 가능한 행동을 캡슐화하고 위임으로 어떤 행동을 사용할지 결정한다. 프록시 패턴 : 상태가 변경되면 다른 객체들에게 연락을 돌릴 수 있게 해준다. 팩토리 메소드 패턴 : 서브클래스에서 생성할 구상 클래스를 결정한다. 어댑터 패턴 : 객체를 감싸서 다른 인터페이스를 제공한다. 옵저버 패턴 : 객체를 감싸서 그 객체로의 접근을 제어한.. 2023. 3. 19.
분산시스템 이해 분산 시스템이 필요한 이유 데이터베이스를 중심으로 여러대의 서버로 scale-out이 가능하면서도 상태와 데이터 공유가 가능하고 유저가 사용하는 기능에는 변화가 없는 소프트웨어가 필요해졌다. 분산 시스템 특징 Concurrency 자원은 공유하면서 리소스 내에서 동시에 여러가지 작업을 수행한다. 동시 실행 자원을 늘려서 처리량을 늘릴 수 있다. No Global Clock 시스템의 각 부분이 비동기식으로 동작한다. 어떤 부분의 상태 때문에 다른곳에 Lock이나 Bottleneck이 걸리면 안된다. Independent Failure 시스템의 한 부분의 장애가 전체 시스템에 장애를 주면 안된다. 분산 시스템 고려 요소 1. Heterogeneity 서로 다른 시스템에 설치 가능해야 한다. OS, HW 관계.. 2023. 3. 18.
[Spring Boot] JPA Auditing 엔티티 클래스에 들어가는 공통적인 필드가 있다. ex) 생성자, 생성시각, 변경자, 변경시각 매번 값을 주입해야하는 번거로움을 해소하기 위해 Spring Data JPA에서 이값을 자동으로 넣어주는 기능을 제공한다. 컨피그 클래스 생성 @Configuration @EnableJpaAuditing public class JpaAuritingConfiguration { } BaseEntity 생성 @MappedSuperclass : 자식 클래스에게 매핑 정보를 전달 @EntityListeners(AuditingEntityListener.class) : 엔티티를 데이터베이스에 적용하기 전후로 콜백 요청 @CreatedDate : 데이터 생성 날짜 자동 주입 @LastModifiedDate : 데이터 변경 날짜.. 2023. 3. 11.
728x90
반응형