전체 글145 [디자인 패턴] SOLID 원칙 The Single-Responsibility Principle (SRP) The Open-Closed Principle (OCP) The Liskov Substitution Principle (LSP) The Interface Segregation Principle (ISP) The Dependency Inversion Principle (DIP) The Single-Responsibility Principle (SRP) 클래스는 변경될 단 하나의 이유가 있어야 함 하나의 이유는 책임에서 비롯되기에 결국 단 하나의 책임을 지어야 한다 라는 의미 클래스가 지는 책임이란 의무 혹은 계약이다 클래스가 지는 책임이 많아질수록 자주 변경될 것이고 클래스가 자주 변경될수록 버그를 야기시키고 다른 이들에게 영향을 .. 독서 기록/디자인패턴 2022. 10. 18. [디자인 패턴] 중재자 패턴 vs 옵저버 패턴 중재자 패턴(Mediate Pattern)이란? 중재자 패턴(Mediate Pattern)은 서로 상호작용하는 객체들을 느슨한 결합(Loose coupling)을 통해 상호작용하는 작업을 캡슐화하는 것 장점 시스템과 객체를 분리함으로써 재사용성 향상 제어 로직을 한 군데로 분리했기에 관리하기 쉬움 객체들 사이에 오가는 메세지 줄이고 단순화할 수 있음 단점 중재자 객체가 너무 복잡해질 수 있음 서로 연관된 GUI 구성 요소를 관리하는데 많이 사용됨 vs Observer Pattern 중재자 패턴은 객체간의 상호작용을 한군데에 모음, 반대로 옵저버 패턴은 분리시킨다 중재자 객체를 재사용하기 어려움, 반대로 옵저버랑 주제는 재사용하기 쉬움 상호작용의 흐름 이해하기 쉬움, 반면 옵저버 패턴은 흐름 알기 어려움 독서 기록/디자인패턴 2022. 10. 17. [디자인패턴] 헤드퍼스트 디자인패턴 Chap.5 (Feat. 싱글톤 패턴) 인스턴스 1개만 있어도 되는 객체가 많음 예를들어 스레드 풀, 캐시, 대화상자, 디바이스 드라이버 등등 이런 경우 오히려 2개 이상이면 오작동, 일관성이 깨짐 혹은 자원 낭비 등의 문제가 발생할 수 있음 싱글톤 패턴: 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공한다. 즉, 객체 인스턴스를 전역 변수처럼 어디서든 엑세스할 수 있게 함 또한 사용하지 않으면 자원이 낭비되는 전역 변수의 단점을 감수하지 않는다. 게으른 인스턴스 생성을 통해 필요할 때 인스턴스 생성하여 자원 낭비 막음 싱글톤 패턴을 제대로 구현하면 new를 써서 만들면 안됨 public class Singleton{ private static Singleton uniqueInstance; private Singleton(.. 독서 기록/디자인패턴 2022. 10. 17. [디자인패턴] 헤드퍼스트 디자인패턴 Chap.7 (Feat.어댑터, 퍼사드 패턴) 어댑터 패턴(Adapter Pattern) 기존의 시스템과 연결된 시스템의 클래스가 서로 다르다면 중간에서 이를 변환해줄 어댑터가 필요함 public class TurkeyAdapter implements Duck{ Turkey turkey; public TurkeyAdapter(Turkey turkey){ this.turkey = turkey; } public void quack(){ turkey.gobble(); } public void fly(){ turkey.fly(); } } 클라이언트(Turkey)를 타깃 인터페이스(Duck)로 변환해주는 어댑터 클래스이다. public static void main(String[] args){ Turkey turkey = new Turkey(); Duck t.. 독서 기록/디자인패턴 2022. 10. 10. [디자인패턴] 헤드퍼스트 디자인패턴 Chap.4 (Feat.팩토리) new를 사용하지 않을 수는 없음 디자인 원칙 OCP(Open-Closed Principle): 클래스는 확장에는 열려있어야 하지만 변경에는 닫혀 있어야 한다. 인터페이스 기반이면 어떤 클래스든 인터페이스를 구현하면 사용할 수 있음 (다형성) 구상 클래스를 사용하면 구상 클래스가 추가될 때마다 코드 수정 필요 => 변경에 닫혀있게 됨 => 새로운 구상 형식을 써서 확장할 때는 다시 변경에 열릴 수 있게 하자 Phone getPhone(String model){ Phone phone; // 폰 종류가 늘어날 때마다 코드가 바뀌어야 하는 부분 if(model.equals("galaxy s10"){ phone = new GalaxyS10(); }else if(model.equals("iphone 14"){ p.. 독서 기록/디자인패턴 2022. 10. 10. [DB] 트랜잭션 격리 수준 & 부정합 이슈 부정합 이슈 Dirty Read: 다른 트랜잭션에서 처리한 작업이 완료되지 않았음에도 불구하고 다른 트랜잭션에서 볼 수 있는 현상 Non-Repeatable Read: 하나의 트랜잭션내에서 동일한 SELECT 쿼리 실행시 항상 같은 결과를 보장해야하는 Reapeatable Read 정합성에 어긋난 것 Phantom Read: 읽을 때 쓰기 잠금을 거는 경우 다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안보였다가 하는 현상 트랜잭션 격리 수준 Read Uncommitted 읽기 트랜잭션이 시작했을 때 다른 트랜잭션이 Update 가능 읽기 트랜잭션이 Update 중(un-commit)인 데이터를 조회할 수 있음 ⇒ 다른 트랜잭션이 중간에 롤백을 해도 읽기 트랜잭션은 롤백 전 데이터를 조회할.. TIL/TIL 2022. 10. 6. [BE]무한 스크롤(Infinite Scrolling) & 페이지네이션(Pagination) 요즘 사람들이 많이 사용하는 어플리케이션에 무한 스크롤이 없는 것을 오히려 찾아보기 힘들 정도라고 생각한다. 막상 쓸 때에는 이것을 어떻게 구현하냐? 라는 것에 대해 고민을 크게 해본적이 없었지만, 이번에 구현해보면서 했던 고민과 알게 된 점을 적고자 한다. 무한 스크롤은 말그대로 페이지 이동을 하지않고 계속 내려도 (보여줄 컨텐츠가 있다면) 컨텐츠를 무한정으로 보여주는 기능을 의미한다. 이러한 기능을 어떻게 구현할 것이냐? 라고 물으면 그냥 바로 생각나는 것은 무한대의 컨텐츠를 서버에게 요청하고 클라이언트가 받아서 줄줄이 소세지마냥 보여줍니다! 라는 생각이 났었다. 동작을 할 것이다 하지만 생각을 하면서도 너무 비효율적일 것이라는 생각을 동시에 하게 된다. 어떤 유저는 우리가 의도한대로 한 화면에서 무.. TIL/BackEnd 2022. 10. 4. 허준이 교수 서울대 졸업식 축사 감상 축사 영상 (영상으로 보길 추천한다) 축사 전문 안녕하세요, 07년도 여름에 졸업한 수학자 허준이입니다. 우리가 팔십 년을 건강하게 산다고 가정하면 약 삼만 일을 사는 셈인데, 우리 직관이 다루기엔 제법 큰 수입니다. 저는 대략 그 절반을 지나 보냈고, 여러분 대부분은 약 삼분의 일을 지나 보냈습니다. 혹시 그중 며칠을 기억하고 있는지 세어 본 적 있으신가요? 쉼 없이 들이쉬고 내쉬는 우리가 오랫동안 잡고 있을 날들은 삼만의 아주 일부입니다. 먼 옛날의 나와, 지금 여기의 나와, 먼 훗날의 나라는 세 명의 완벽히 낯선 사람들을 이런 날들이 엉성하게 이어주고 있습니다. 마무리 짓고 새롭게 시작하는 오늘 졸업식이 그런 날 중 하나일 수 있겠다는 생각이 듭니다. 그런 하루를 여러분과 공유할 수 있어서 무척 기.. 주저리주저리 2022. 10. 3. Node.js와 Express 그리고 Nest.js Node.js 란? Node.js는 서버 사이드 도구들과 어플리케이션을 JavaScript로 만들 수 있도록 해주는 런타임 환경 런타임 환경이란 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태 Node.js 의 장단점 장점 싱글 스레드 기반 Non Blocking, 비동기 IO처리로 매우 빠른 고성능 서버 CPU 파워를 많이 필요로 하지 않는, 연결을 동시에 처리해야 하는 상황에서 좋음 프론트엔드와 벡엔드 기술의 통합으로 언어들 사이의 context shift를 다루는 시간을 줄일 수 있음 단점 싱글 스레드 모델이기에 하나의 작업이 오래 걸리면 전체 시스템 성능에 영향 많이 줌 ⇒ CPU 파워를 많이 필요로 하는 작업에 부적절 스크립트 언어의 특성 상 런타.. TIL/TIL 2022. 10. 3. [PostgreSQL] error: column "vendor" of relation "user" contains null values (미제) 문제 상황: 유저 테이블에서 유저가 어떤 소셜로그인으로 가입된 것인지 인지하기 위한 컬럼 vendor 를 추가하였음 vendor 는 이상한 값이 아닌 정해진 값들 중 하나가 될 것이기에 아래처럼 'kakao' | 'google' | 'apple' 으로 설정함. 그리고 nullable하지 않게 할 것 이기에, 유저를 생성할 때는 vendor 값을 꼭 넣어주게 코드를 작성하였다 하지만 위의 에러가... vendor가 null값을 갖고있는뎁쇼?? 를 계속 뱉는 상황이였다. 문제 해결 과정: 위의 vendor 값을 넣어주는 코드에서 내가 잘못 구현한 부분이 있을 것이라는 생각에 그 부분을 우선적으로 체크 => 문제 없었음 => 그래도 혹시 모르니깐 DB의 값을 직접 수정하여 null 값이 없게 만들어봄 => 동.. TIL/삽질 기록소 2022. 9. 29. [디자인패턴] 헤드퍼스트 디자인패턴 Chap.6 (Feat.커맨드 패턴) 커맨드 패턴이란 request를 객체로 캡슐화하는 것이다. 예를 들어 형광등의 turnOff(), turnOn() 메소드가 있었다고 가정할 때, LightOffCommand, LightONCommand 같은 객체 형식으로 캡슐화하는 것이다. 이로서 이러한 request를 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있습니다. 어떤 객체(A)에서 다른 객체(B)의 메서드를 실행하려면 그 객체(B)를 참조하고 있어야 하는 의존성이 발생합니다. 그러나 커맨드 패턴을 적용하면 의존성을 제거할 수 있습니다. 위의 예시에서 이어가면 리모콘 객체에서 형광등 객체의 turnOff(), turnOn() 메소드를 사용하면 리모콘 객체와 형광등 객체 사이의 의존성이 발생한다는 것이다. 또한 기능이 수정되거.. 독서 기록/디자인패턴 2022. 9. 28. [TIL] MicroServices Architecture(MSA) vs Monolithic Architecture 기본 개념 Monolithic Architecture: 한 프로젝트 안에 모든 것이 다 들어 있는 형식 MicroServices Architecture(MSA): 여러 프로젝트를 만든 뒤, 프로젝트들을 연결하여 사용 ex) 모놀리식은 네이버 웹 서비스 전체를 하나의 프로젝트를 만든 것이라 하면, MSA는 메일 프로젝트, 카페 프로젝트, 블로그 프로젝트 등등 으로 나누어 이를 연결한 형태 왜 MSA를 사용할까?... MSA의 장단점?? 반대로 네이버같은 유저 트래픽과 기능이 크고 많은 서비스를 모놀리식으로 구현했다고 가정할 때, 네이버 메일 기능을 업데이트하기 위해 서버를 내렸다가 다시 올렸는데 버그가 발생해서 몇시간 동안 서버가 먹통이 된다 라는 시나리오가 가능하다. 반면 MSA 구조라면 메일 기능은 마.. TIL/TIL 2022. 9. 26. 이전 1 2 3 4 5 6 7 8 ··· 13 다음 반응형