| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
- #크랙미3번
- springframework
- #보안뉴스
- #크랙미 10번
- #크랙미 5번
- #abex크랙미
- #크랙미 9번
- java
- #크랙미2번
- Easy
- #abex
- #파밍
- java8
- GraphQL
- #심플즈 크랙미
- #보안이슈
- #크랙미4번
- #심플즈
- leetcode
- #크랙미
- #abex크랙미4번
- #리버싱
- 리버싱
- Spring
- #고클린
- Today
- Total
목록분류 전체보기 (120)
Halo World
SOLID는 OOP설계의 다섯가지 기본 원칙으로 객체지향 설계를 할때 지켜야 하는 원칙으로 알려져 있다. SRP (Single Responsibility Principle) 단일 책임 원칙 : 하나의 클래스는 하나의 책임만 갖는다. 한 클래스가 여러 책임을 갖고 있는 경우 혼재된 책임을 개별 클래스로 분할하여 한 클래스당 하나의 책임만 맡도록 한다. 자식 클래스끼리 유사한 책임을 중복으로 정의한다면, 부모 클래스로 공통되는 책임을 위임한다. 여러 클래스에 동일한 책임이 분리된 경우 중복되는 책임을 특정 클래스로 분리한다. (응집성 증가) 장점 : 기능의 책임 영역이 확실해져 한 책임의 변화가 다른 책임에게 side effect를 미치지 않도록 방지할 수 있고, 코드의 가독성과 유지보수성이 향상된다. 클래..
 Twitter 시스템 설계
      
      
        Twitter 시스템 설계
        * 인터뷰시 인터뷰어는 원하는 방향으로 면접자를 가이드하면서 면접자의 property를 검증하려고 한다. 따라서, 인터뷰어가 가이드 할 수 있게 놔둘 것 * "트위터는 어떻게 설계되어있을까요?"라고 질문한다면, 바로 답을 도출하지 말고 답을 풀어가는 과정을 보여줄 것 (~~ 기능들을 수행해야하니 어떤 것이 필요하고, 또 그것을 위해서는 어떤 것이 필요하고,, 이런식) Core Features 1. Tweeting 2. TimeLine User TimeLine : 본인 트윗 + 리트윗한 트윗 (More easy too design! => 자신의 트윗과, 리트윗한 액션을 리스트업하면 됨) Home TimeLine : 팔로우한 사람들의 트윗 3. Following 다른 기능들은 비교적 단순하니 Home Tim..
 JAVA 8 비동기 처리 (@Async)
      
      
        JAVA 8 비동기 처리 (@Async)
        - 자바 비동기 처리의 방법 / 장점 - Async 처리시 주의사항, 고려사항, Pool 설정이유, 단점 - Async 예외처리 - Future와 CompletableFuture의 차이점 Java 비동기 처리 방법 1. @Async annotation 으로 간단하게 처리 가능. 클래스에 @EnableAsnyc를 추가하고, 비동기로 제공하고자 하는 메소드에 @Async 어노테이션을 추가하는 방식으로 가능함. @Async의 기본 설정은 SimpleAsyncTaskExecutor 이기 때문에 thread 관리를 위해서는 별도로 구성해주어야 함 2. Async thread pool 설정을 위한 별도의 @Configuration 클래스를 만들고, 해당 클래스에 @EnableAsync 어노테이션 추가. (기존 클래..
 AWS SQS vs Kafka vs RabbitMQ
      
      
        AWS SQS vs Kafka vs RabbitMQ
        1. SQS Fully managed message queuing service 메시지 손실이나 다른 서비스를 별도로 요구하지 않고, 모든 처리량 수준에서 모든 크기의 데이터 전송 가능 고 가용성 메시지 클러스터를 운영하고 스케일링하는 관리 부담이 적음 (workload에 맞게 자동 확장) 사용하는 만큼만 가격 지불 사용하기 쉽고, 신뢰할 수 있음 (Easy to use, reliable) Medium, Lyft, Coursera 등에서 사용 2. Kafka 분산, 내결함성, 높은 처리량을 지원하는 pus-sub 메시징 시스템 Kafka는 distributed, partitioned, replicated 된 커밋 로그 서비스 메시징 시스템의 기능을 제공하긴하지만, 독특한 디자인임 높은 처리량 (High-..
Spring 3.2.x Java 5 기능 @Async annotation을 활용한 비동기 메서드 호출 지원 하나의 Spring.jar 로 지원하던 것을 spring-core, sprint-web 등으로 나눔 Java 클래스로부터 @Configuration @Bean 등 annotation을 통해 DI 지원 받기 가능 RestTemplate 이용 가능 16.12.31 지원 종료 Spring 4.3.x (Spring boot 1.5) Java 8 지원 @Autowired 지원 custom-annotation 가능 Bean 관리 용이(@Order, @Lazy annotation) Framework 레벨에서 테스트 유틸리티 지원 (AopTestUtils, ReflectionTestUtils 개선) 20.12.3..
Java 7 개선점 다이아몬드 연산자 switch문에 String 자료형 사용 가능 try-with-resources 등장 AutoCloseable 인터페이스로 자원의 자동 회수가 가능하다. (대부분의 자원이 AutoCloseable을 구현하고 있음) muti exception catch 가능 참고 - johanneslee.github.io/articles/page7/ Java 8 개선점 Lamda 표현식 사용 가능 : 함수형 프로그래밍이 가능해짐 함수형 프로그래밍의 장점은? -> 높은 수준의 추상화 가능 / 함수 단위의 코드 재사용 수월 / 불변성 지향 (프로그래밍의 동작을 예측하기 수월함) / 직관적임 Stream (https://jeong-pro.tistory.com/165) 스트림이란? 컬렉션, ..
분할 정복 패러다임을 차용한 알고리즘들은 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산해 낸다. 분할 정복을 사용하는 알고리즘의 세 가지 구성요소 - 문제를 더 작은 문제로 분할하는 과정(divide) - 각 문제에 대해 구한 답을 원래 문제에 대한 답으로 병합하는 과정(merge) - 더이상 답을 분할하지 않고 곧장 풀 수 있는 매우 작은 문제(base case) 분할 정복을 적용해 문제를 해결하기 위해서는 1. 문제를 둘 이상의 부분 문제로 나누는 자연스러운 방법이 있어야 하며, 2. 부분 문제의 답을 조합해 원래 문제의 답..
leetcode.com/problems/divisor-game/ Divisor Game - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 해당 문제는 DP로 풀수 있는 문제. 알고리즘을 안한지 오래되어 차근차근 공부하는 중 DP 관련하여 잘 정리되어있는 블로그가 있어 참고해서 개념 잡았다. velog.io/@nninnnin7?tag=DP nninnnin7 (justindglee) - velog velog.io [풀이] 핵심은 dp[N-x]가 false 이면 dp..
 멀티프로세스 vs 멀티쓰레드
      
      
        멀티프로세스 vs 멀티쓰레드
        멀티 프로세스 vs 멀티 쓰레드 멀티 프로세스는 한 대의 컴퓨터에 서비스를 여러개 띄워 사용하는 방식으로, 프로세스는 하나의 애플리케이션이라고 보면 된다. 각 프로세스는 독립적인 메모리를 할당받기 때문에, 메모리를 공유할 수 없고 공유하기 위해서는 IPC(프로세스간 통신)을 이용해야 한다. 멀티 쓰레드는 한 프로세스 안에 쓰레드를 여러개 실행시키는 방식으로 각 쓰레드는 별도의 stack 영역을 갖지만 heap 영역이나, data 영역, code영역은 공유해서 사용한다. 어떤 것이 더 효율적일까? 일반적으로 하나의 프로세스에서 여러 작업을 동시에 실행하는 멀티 쓰레드 방식이 더 효율적이고 멀티 쓰레드 방식은 아래 두 가지의 이점을 갖는다. 1) 메모리 자원 공유 : 멀티 쓰레드 방식은 stack을 제외한 ..
 Java Stack 영역과 Heap 영역
      
      
        Java Stack 영역과 Heap 영역
        [자바 Stack과 Heap 영역] 새로운 변수와 객체를 선언하거나, 새로운 메소드를 호출하거나, 문자열 선언 또는 유사한 작업을 수행할 때, JVM은 stack 또는 heap 메모리 영역에 필요한 메모리를 할당한다. Stack 메모리 영역 정적 메모리 할당 및 쓰레드 실행을 위해 사용되는 영역으로 메서드에 고유한 기본 값과 메서드에서 참조하는 힙 개체에 대한 참조 값을 포함하고 있다. LIFO(Last-In-First-Out) 순서로 동작하며, 새 메소드가 호출될 때마다 스택 상단에 해당 메소드에 대한 새 블록이 생성된다. 메서드 실행이 완료되면, 해당 스택에서 pop되고, 호출한 메서드로 흐름이 돌아가게 된다. 특징 스택 내부의 변수는 변수를 생성한 메서드가 실행되는 동안만 존재한다. 메서드 실행에 ..