일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- mysql
- JPA
- Stream
- 보조스트림
- redis
- gradle
- OS
- SpringBoot
- 이스티오
- Stack
- Java
- Real MySQL
- 스트림
- 토비의 스프링 정리
- IntellJ
- Collection
- 자바 ORM 표준 JPA 프로그래밍
- 토비의 스프링
- thread
- spring
- 쿠버네티스
- list
- GC
- 스프링
- 자바
- MSA
- K8s
- Kotlin
- jvm
- Today
- Total
목록전체 글 (151)
인생을 코딩하다.
AOP(Aspect-Oriented Programming)란? "형일, 회원가입 하는 시간 측정해서 로그로 남겨줄 수 있어요?" 난 회원가입 하는 서비스로 가서 시간을 측정해본다. 이렇게 객체로 분리하여 시간 측정을 하게된다. 그리고 log가 남는 것을 확인 할 수 있다. 그런데 이렇게 메서드에 스탑워트 기능을 추가하면 뭔가 이상하다. 스탑워치라는 시간을 재는 기능을 만들긴 했는데 서비스에 이 로직이 들어가는게 맞을까? 사실 여기서 필요한 핵심 로직은 위에 빨간색 박스에 있는 로직 아닐까? SRP에서 클래스를 변경하는 이유는 하나라고 했는데 여기에 서비스 로직 말고 위의 빨간 박스에 있는 로직들 처럼 부가기능이 들어간 것 같다는 생각을 할 수 있다. 사실 서비스에서 필요한 내용은 비즈니스 로직이라고 불리..
Spring 프레임워크는 자바 엔터프라이즈 애플리케이션을 개발하기 위한 프레임워크다 즉, 기업들에게 애플리케이션을 보다 쉽게 개발할 수 있도록 서비스를 제공한다 어떻게? 데이터베이스 연동이나 다른 시스템과의 연동같은 복잡한 로직을 분리시켜개발자가 비즈니스 로직 에만 신경쓰도록 만들어주는 핵심 기능이 IOC와 DI다. IOC (Inversion of Control) 제어의 역전 개발자가 아닌 프로그램이 코드의 흐름을 제어하는 것 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 한다. public class HyungIl{ private Child child; public HyungIl(){ this.child = new Hosick(); } public v..
프록시는 대리자, 대변인이라는 뜻을 가진 언어다. 프록시 패턴프록시 패턴(Proxy Pattern) 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다. 대리자는 실제 서비스에 대한 참조 변수를 갖는다.(합성) 대리자는 실제 서비스와 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다. 대리자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있다. 대리자/대변인이라는 이름에 주목해 보자. 청화대 대변인, 백악관 대변인은 해당 기관의 입장을 대변할 뿐 그 입장에 자신의 입장을 가감하지 않는다. 프록시 패턴이 실제 서비스 매서드의 반환값에 가감하지 않는다는 것이 딱 느껴지지 않는가? 프록시 패턴은 실제 서비스 메서드의 반환값에 가감하는 것을 목적으..
web Server와 WAS의 차이를 알아보기전에 web과 server은 무엇일까? Web 인터넷을 기반으로 하여 정보를 공유, 검색 할 수 있게 하는 서비스 URL(주소) HTTP(통신 규칙) HTML(내용) Server 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템. H/W : 서버가 설치되어 있는 소형, 대형 컴퓨터. S/W : HTML, CSS, Javascript와 같은 정적 컨텐츠를 처리하는 서버를 의미. Web Server는 정적 컨텐츠를 제공할뿐 동적 컨텐츠의 처리는 할 수 없다. 이제 차이를 알아보자. Web Server 클라이언트로부터 HTTP 요청을 받아 HTML 문서나 각종 리소스(Resource)를 전달하는 컴퓨터 클라이언트는 웹서버에게 주소(url)를 가지..
어댑터패턴이란? 개체를 속성으로 만들어서 참조하는 디자인 패턴 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 호출하는 패턴 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 개방 폐쇄 원칙을 활용한 설계패턴 데이터베이스 관련 프로그램에서도 어댑터패턴을 볼 수 있다. 시스템을 공통의 인터페이스 ODBC 또는 JDBC를 이용해 조작할 수 있다는 사실을 알고 있을 것이다. 바로 ODBC/JDBC가 어댑터 패턴을 이용해 다양한 데이터베이스 시스템을 단일한 인터페이스로 조작할 수 있게 해주기 때문이다. 예제 코드를 통해 어댑터 패턴을 이해해보자. 먼저 어댑..
디자인 패턴의 꽃이라고 하는 전략 패턴을 알아보자. 전략 패턴을 구성하는 세 요소는 꼭 기억해둬야 한다. 전략 메서드를 가진 전략 객체 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자) 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자) 즉, 클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴 전략 패턴이란? 동일 계열의 알고리즘을 정의하고, 각 알고리즘을 캡슐화하여 이들을 상호교환이 가능하도록 만든다. 알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 한다. 즉, 특정한 기능을 수행하는데 있어서 다양한 알고리즘이 적용될 수 있는 경우에 상황에 따라 필요한 알고리즘을 선택하여 해결할 수 있는 디자인 패턴이다. t..
왜 context Switching이 필요한가? 만약 컴퓨터가 매번 하나의 Task만 처리할 수 있다면, 해당 Task가 끝날때까지 다음 Task는 기다릴 수 밖에 없다. 그래서CPU가 Task를 바꿔 가며 실행하기 위해 Context Switching이 필요하게 되었다. context switching를 사용하면 멀티 프로세싱, 멀티 스레딩을 통해 빠른 속도로 응답할 수 있다. Context Switching은 "한 프로세스가 CPU를 차지하고 있을 때 우선순위가 높은 다른 프로세스가 현재 프로세스를 중지시키고 자신이 CPU를 차지할 수 있게 하는 선점형 프로세스" 방식이기 떄문에, 높은 우선순위를 가진 프로세스들이 빠른 처리를 요구하는 시스템에서 유용하다. 빠른 응답시간을 요구하는 시분할 시스템에 유..
ConcurrentHashMap의 내부구조 ConcurrentHashMap이란? ConcurrentHashMap은 Java 1.5 버전에서 HashTable의 대안으로 소개 되었다. Java 1.5 버전 이전에는 concurrent하고 multi-threaded 를 고려한 map을 구현하려면 HashTable 또는 synchronized map을 사용해야 했다. 왜냐하면 HashMap은 thread-safe 하지 않았기 때문이다. ConcurrentHashMap은 concurrent multi-threaded 환경에서 안정적으로 동작하고 HashTable과 synchronized map 보다 더 나은 성능을 가지고 있다. 그 이유는, ConcurrentHashMap은 map의 일부에만 lock을 거는데 ..