728x90

Java 19

객체지향) 객체의 역할, 책임, 협력

대부분의 책에서 객체지향은 역할, 책임, 협력이 중요하다고 한다. 도대체 역할, 책임, 협력은 정확히 객체세계에서 어떤 부분을 이루고 있을까? 한번 알아보자. 협력 객체지향 시스템은 자율적인 객체들이 공동체를 이루고 있는 것을 말한다. 객체지향 세계에서 협력이란 기능을 구현할 수 있는 유일한 방법이다. 두 객체사이의 협력은 하나의 객체가 다른 객체에게 도움을 요청할 때 사용한다. 백문이 불여일타라고 코드로 한번 보는 것이 빠를 것 이다. Lotto Class 는 자신의 IntArray 를 랜덤 숫자로 채우기 위해서 randomLottoNumberGenerator 에 협력을 요청하고 있다. 그림으로 그리면 아래와 같을 것이다. Lotto Class 는 LottoNumeberGenerator 의 genera..

Java 2021.11.24

JPA PersistContext

이 문서는 Hibernate ORM 공식문서를 읽으며 정리한 글입니다. Hibernate.Session 과 EntityManager 의 API 는 데이터를 지속성있게 다룰 수 있도록 해주는데 이를 Persistence Context 라 한다. Persistence Context 에서 관리되는 데이터는 기본적으로 database 와 persistence context 양쪽에서 연관된 상태로 관리된다. Persistence data 는 아래와 같은 생명주기를 가진다. LifeCycle 비영속 (transient) : 엔티티가 만들어졌지만 아직까지 Persistence Context 와 연관이 없는 상태를 뜻합니다. 위와 같이 Memer Entity 는 초기화가 됬지만, 아직 영속성 컨텍스트에 관리되지 않고있..

Java 2021.11.22

Java Stream

스트림 처리 스트림이란? 한번에 한개씩 만들어지는 연속적인 데이터 항목들의 모임이다. 프로그램은 입력 스트림에서 데이터를 한개씩 읽어 들이며 마찬가지로 출력 스트림으로 데이터를 한개씩 기록한다. 즉 어떤 프로그램의 출력스트림은 입력스트림이 될 수 있다. 유닉스와 리눅스의 많은 프로그램은 표준입력에서 데이터를 읽은 뒤에, 데이터를 처리하고 결과를 표준 출력으로 기록한다. 예를 들면 아래와 같다. cat file file2 | tr "[A-Z] "[a-z]" | sort | tail -3 위의 예제는 파일의 단어를 소문자로 바꾼 다음에 사전순으로 단어를 정렬했을 때 가장 마지막에 위치한 세 단어를 출력하는 프로그램이다. 해당 명령어가 실행되는 과정은 아래와 같다. 각각의 명령어는 자신의 임무를 수행하고 출력..

Java 2021.11.11

젠킨스 JVM 메모리 설정

프로젝트를 AWS 에 올리게 되면서 Jenkins 메모리 부족관련 이슈를 겪었습니다. AWS 프리티어를 이용하다보니, 메모리 부족 관련 이슈가 계속해서 발생했습니다. 요금제 때문에 더 높은 인스턴스를 이용할 수 없었고, 결과적으로 메모리를 늘려주기 위해 SWAP 메모리를 사용해야만 했습니다. SWAP 메모리? 간단하게 SWAP 메모리는 우리의 물리 하드디스크를 메모리 처럼 이용해줄 수 있게 만들어주는 것입니다. 쉽게 설명하면 하드디스크를 어느정도 메모리 처럼 사용할 수 있다는 것이죠 아마존 공식문서는 아래와 같습니다. https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/ 스왑 파일을 사용하여 Amazon EC2 인스..

Java 2021.10.20

객체는 무엇일까?

객체지향 프로그래밍에서는 클래스 내부 변수를 private 으로 선언하여 외부에 노출하지 않는 것을 선호합니다. 또한 무의미한 setter 와 getter 는 객체를 객체가 아닌 단순한 데이터 Sturucture 로 간주해 버릴 수도 있으니, 신중하게 외부로 내부의 속성을 노출하라고 말합니다. 그 이유는 무엇일까요? 아래의 클래스를 한번 봅시다. public class Point { public double x; public double y; } 이렇게 했을때 문제는 무엇일까요? 문제는 외부에서 Point Class 의 Property 에 직접적으로 붙을 수 있다는 것입니다. 예를 들면 아래와 같이 말이죠. Point point = new Point(); point.x = 10; point.y = 20;..

Java 2021.10.14

Switch 문 반복을 없애기

Switch 문을 어떻게 걷어낼 수 있을까? 이건 참 어려운 경우라고 생각한다. 하지만 Switch 의 경우에는 해당 Type 을 걷어내지 않는 이상 불가능하기에 숨기는 형태로 진행할 수 있다고 생각한다. 예를 들면 아래와 같은 코드를 보자 public class PayRoll { private static final String COMISSIONED = "COMISSIONED"; private static final String HOURLY = "HOURLY"; private static final String SALARIED = "SALARIED"; public Money calculatePay(Employee e) { switch(e.type) { case COMISSIONED: return cal..

Java 2021.10.07

JVM 구조

서론 이 스터디 내용은 백기선님의 자바 스터디를 참여하기 위한 정리 내용으로, 아래 링크에서 참가 가능합니다. 1900 원 정도의 구독비로 해당 스터디 내용을 확인할 수 있으니 자바에 대해 공부하고 싶으신 분들은 참가 하시는 것을 추천 드립니다. 백기선님 유튜브 참고로 읽으시면서 틀린 내용이 있을 수도 있습니다. 댓글로 지적해주시면 감사하겠습니다 목표 자바 소스 파일을 JVM 으로 실행하는 과정 이해하기 학습할 것 JVM 이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성요소 JDK 와 JRE 의 차이 JVM 이란 무엇인가? JVM 이란 Java Virtual Machine 의 줄임말으로 추상적인 컴퓨터 머신이라고 이해하는게 좋지 ..

Java 2021.10.07

[M1] Apache Jmeter로 Socket Server Test 하기

최근 회사에서 소켓 서버를 구현하게 되면서, 스트레스 테스트를 할 일이 필요해졌다. 처음에는 Go 언어로 Client 코드를 직접작성했으나, 단순 연결성이나 메세지를 주고 받는 정도에 그쳤고, 더 많은 부가 정보를 알기 위해서는 기존에 좋은 테스트 툴을 사용하는 것을 추천받았다. 두 가지정도의 방안을 생각했는데, 첫번째로는 Naver 가 만든 Ngrinder 이라는 테스트 툴이였다. 이미 유명한 툴이고 많은 이들이 사용하고 있을 툴이라고 생각한다. Groovy 로 Script 를 구성할 수 있는게 매력적이였다. http://naver.github.io/ngrinder/ nGrinder Please post questions in Discussions not Issues. nGrinder 3.5.3 ver..

Java 2021.09.24

[Spring Boot] Jenkins 로 자동 배포하기

현재 제가 하고 있는 프로젝트의 구성도는 아래와 같습니다. 위와 같이 구성되어 있는데요. 일단 Git-Hub 의 Master Branch 에 Merge 가 일어나거나 Push 로 인한 변경이 일어나면, Jenkins 에서 이를 감지하도록 되어 있습니다. 코드리뷰를 통해서 머지됬을 경우 즉각 적으로 Merge 를 할 수 있도록 하기 위해서 입니다. 자동 배포되는 과정에서 TEST 파이프 라인을 거치고 Build 까지 되도록 되있습니다. 만약 TEST 가 실패하게 된다면 Build 는 되지 않습니다.🤖 JENKINS 에서 TEST / BUILD 파이프라인을 거치게 되면 자동으로 Spring Boot Server 가 시작되어야 합니다. 이 조건을 위해서 선택지가 두가지 정도 있었는데 해당 선택지는 아래와 같습..

Java 2021.09.21
728x90