일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- redis
- 자바
- 토비의 스프링 정리
- 토비의 스프링
- SpringBoot
- 백준
- gradle
- GC
- mysql
- 이스티오
- Kotlin
- MSA
- 자바 ORM 표준 JPA 프로그래밍
- K8s
- list
- JPA
- thread
- 스프링
- 보조스트림
- Real MySQL
- jvm
- spring
- Java
- Stream
- OS
- IntellJ
- 스트림
- Collection
- 쿠버네티스
- Stack
- Today
- Total
목록전체 글 (151)
인생을 코딩하다.
2장, 테스트 p.145) 변하고 복잡해져가는 애플리케이션에 대응하는 첫 번쨰 전략이 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI 같은 기술이라면 두 번째 전략은 만들어진 코드를 확신할 수 있게 해주고, 변화에 유연하게 대처 할 수 있는 자신감을 주는 테스트 기술이다. p.146) 테스트란 결국 내가 에상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업이다. 또한 테스트의 결과가 원하는 대로 나오지 않는 경우에는 코드나 설계에 결함이 있음을 알 수 있다. 이를 통해 코드의 결함을 제거해가는 작업, 일명 디버깅을 거치게 되고, 결국 최종적으로 테스트가 성공하면 모든 결함이 제거됐다는 확신을 얻을 수 있다. p.149)..
1장, 오브젝트와 의존관계 p.64) 프로그래밍 기초 개념 중에 관심사의 분리라는 게 있다. 이를 객체지향에 적용해보면, 관심이 같은 것끼리는 하나의객체 안으로 또는 친한 객체로 모이게 하고, 관심이 다른 것은 가능한 한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것이라고 생각할 수 있다. 리팩토링은 기존의 코드를 외부의 동작방식에는 변화 없이 내부 구조를 변경해서 재구성하는 작업 또는 기술을 말한다. 공통의 기능을 담당하는 메소드로 중복된 코드를 뽑아내는 것을 리팩토링에서는 메소드 추출 기법이라고 부른다. p.67) 기능의 일부를 초상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤 서브 클래스에서 이런 메소드를 필 요에 맞게 구현해서 사용하도록 하는 방법을 디자인 패턴에서 ..
스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크다. 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, 기술 API 등을 제공해준다. 애플리케이션의 기본 틀 - 스프링 컨테이너 스프링은 스프링 컨테이너 또는애플리케이션 컨텍스트라고 불리는 스프링 런타임 엔진을 제공한다 스프링 컨테이너는 설정정보를 참고로 해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리한다. 스프링 컨테이너는 독립적으로 동작할 수도 있지만 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용한다. 공통프로그래밍 모델 - IoC/DI, 서비스 추상화, AOP 프레임워크는 애플리케이션을 구성하는 오브젝트가 생성되고 동작하는 방식에 대한 틀을 제공해줄 뿐만 아니라, 애플리케이션 코드가 어떻게 작성돼야..
스케일 업 (Scale-up) 성능이나 용량 증강을 목적으로 하나의 서버에 디스크를 추가하거나 CPU나 메모리를 업그레이드시키는 것을 말한다. 하나의 서버의 능력을 증강하기 때문에 수직 스케일링(vertical scaling)이라고도 한다. 즉, 기존의 하드웨어를 보다 높은 사양으로 업그레이드하는 것을 말한다. 스케일 아웃 (Scale-out) 기존의 서버와 같은 사양 또는 비슷한 사양의 서버 대수를 증가시키는 방법으로 처리 능력을 향샹시키는 것을 말한다. 스케일 아웃 방식을 "수평 스케일"이라고 부르기도 하고, 확장이 스케일 업보다는 다소 유연하다. 1’의 처리 능력을 가진 서버에 동일한 서버 4대를 더 추가하여, 총 ‘5’의 처리 능력을 만드는 것이다. 서버가 여러 대가 되기 때문에 각 서버에 걸리는..
싱글톤 패턴의 기본적인 구현 방법입니다. public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null){ instance = new Singleton(); } return instance; } } getInstance() 를 여러 번 호출 해도 단 하나의 동일한 instance 만을 반환해 줍니다. 싱글톤 패턴의 중요한 두 가지는, 생성 패턴은 시스템이 어떤 Concrete Class를 사용하는지에 대한 정보를 캡슐화합니다. 생성 패턴은 이들 클래스의 인스턴스들이 어떻게 만들고 어떻게 결합하는지에 대한 부분을 ..
프로젝트를 시작하며, build.gradle에서 gradle plugin과 관련하여 implementation의 의미가 궁금하였다. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 이리저리 오픈소스들을 보며 위의 implementation plugin외에 compile 'org.springframework.boot:spring-boot-starter-data-jpa' compile(Api) plugin도 볼 수가 있었다. 대략 `implementation`는 상속과 관련이 있다고 추측하고 있었고, `compile`은 컴파일 시에 추가되는 의존성이라고 추측하고 있었다. 추측만 하고있어서 확신을 해보고자 Gradle 공식 문서를 ..
독립적인 프로세스는 데이터를 공유할 일도 없고, 메시지를 주고 받을 일도 없기 때문에 문제가 발생하지 않는다. 그냥 따로 메모리 영역을 가지고 있고, 자기 일을 자기가 알아서 한다. 이럴 경우에는 CPU 스케쥴링을 잘해주면 영향을 안 미치고 자기들끼리 잘 공존한다. 하지만 문제는 협력적인 프로세스일때 문제가 발생한다. 우선 프로세스 간의 협력이 필요한 이유는 정보 공유 (Information sharing) : 여러 사용자가 동일한 정보를 필요로 할 수 있다. 계산 가속화 (Computation speedup) : 특정 작업(task)를 빠르게 실행하기 위해, 해당 작업을 부분 작업(서브 태스크)으로 나눠서 병렬로 실행하게 할 수 있다. 모듈성 (Modularity) : 특정한 시스템 기능을 별도의 프로..
메모리 누수(memory leak)란? CS 의미로 살펴볼 때, 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비된다. 즉, 더 이상 불필요한 메모리가 해제되지 않으면서 메모리 할당을 잘못 관리할 때 발생한다. 일부 서적에서 메모리 손실이라는 용어로 뜻을 옮기기도 하지만 leak라는 표현은 단순히 잃는 것 이상의 개념이므로 누수라는 표현이 더 정확하다. 자바에서 메모리 누수(memory leak) 더 이상 사용되지 않는 객체들이 가비지 컬렉터에 의해 회수되지 않고 계속 누적이 되는 현상을 말한다. Old 영역에 계속 누적된 객체로 인해 Major GC가 빈번하게 발생하게 되면서, 프로그램 응답속도가 늦어지면서 성..