본문 바로가기

Develop43

Spring Triangle - POJO, IoC, AOP, PSA POJO Plain Old Java Object 오래된 방식의 자바 오브젝트 클래스나 인터페이스를 상속 받지 않고, 메소드가 추가된 클래스가 아닌 getter, setter 같은 기본적인 기능만 가진 자바 객체를 말한다. 우리는 사람들이 자기네 시스템에 보통의 객체를 사용하는 것을 왜 그렇게 반대하는지 궁금하였는데, 간단한 객체는 폼 나는 명칭이 없기 때문에 그랬던 것이라고 결론지었다. 그래서 적당한 이름을 하나 만들어 붙였더니, 아글쎄, 다들 좋아하더라고. - 마틴 파울러 그렇다고 합니다... POJO는 엄청난 개념이 아니라 적당한 명칭 정도로만 이해하면 됩니다. IoC 제어의 역전 Inversion of Control 제어의 역전이 뭐임! 사실 제어의 역전은 스프링만의 특징이 아니다. 프레임워크의 흔.. 2023. 9. 6.
Java JVM 아키텍쳐 (1) 먼저 Virtual Machine 이란? 수업을 듣다보면 가상 머신을 다뤄 본 적이 있을 것이다. 자신의 하드웨어 위에 또 다른 OS(Guest OS)를 실행하게 해주는 것이 VM의 역할이다. 그런 VM이 자바에도 있다! 연관해서 생각해 본 적이 없었는데, 생각해보니 JVM의 VM이 virtual machine 이다. JVM은 무엇인가? JVM은 추상 머신이다. 자바 바이트 코드를 런타임 환경에서 실행할 수 있게 해준다. JVM은 많은 하드웨어나 소프트웨어에서 사용 가능하다. Implementation(JRE, Java Runtime Environment)에 따라서 JVM 동작 알고리즘을 선택할 수 있다. 무슨일을 하는가? VM인만큼 스스로 메모리 관리를 한다. Loads code Verifies cod.. 2023. 7. 16.
[Git] 원격 저장소 브랜치 삭제하기 로컬 저장소 브랜치 삭제하기 git branch -d [브랜치 이름] -D를 사용하면 강제 삭제 원격 저장소 브랜치 삭제하기 git push [원격 저장소 이름] --delete [브랜치 이름] push로 연결되어 있는 모든 저장소에 적용된다. 2023. 7. 3.
Docker로 React, Nginx, Spring Boot 컨테이너 배포하기 이전까진 도커 캐싱이 뭔지 모르고 어영부영 Dockerfile 작성하면서 살았다. 예에에에에에에전에 도커를 처음 사용해 프로젝트 진행했을 때 컴퓨터 수명 다 깎아 먹었었다. 코드 수정이 있을 때마다 이미지 재생성을 위한 빌드를 계속했기 때문에 (한 번 빌드 시 20분 씩 걸렸던 기억이다....) 프로젝트 구조는 대충 이렇게 생겼다. ├─docker-compose.yml ├─backend │ ├─Dockerfile │ ├─build │ └─src └─frontend ├─Dockerfile ├─nginx.conf ├─build └─src Spring Boot Dockerfile 그레이들 코틀린 버전이라 kts 확장자로 작성했는데 순수 그레이들이면 .kts를 삭제하면 된다. FROM openjdk:11 AS .. 2023. 6. 9.
0.1 + 1.1 == 1.2 문제 (feat. 부동소수점) 왜 이런 문제가 발생할까? 실수 표현 방법 고정 소수점 방식 (Fixed Point) 실수는 보통 정수부와 소수부로 나누어 표기한다. 따라서 실수를 표현하는 가장 간단한 방식은 소수부의 자릿수를 미리 정하여, 고정된 자릿수의 소수를 표현하는 것이다. 장점 : 단순하다. 단점 : 표현 범위가 적다. 부동 소수점 방식(Floating Point) 하나의 실수를 가수부와 지수부로 나누어 표현하는 방식이다. (不動이 아니라 浮動이다) 지수부 : 크기를 표현함. 가수의 어디쯤에 소수점이 있는지 나타냄 가수부 : 실수의 실제값 표현 지수의 값에 따라 소수점이 움직이는 방식을 활용한 실수 표현 방법이다. 장점 : 범위가 넓다(현재 대부분 시스템에서 사용 중) 단점 : 오차 발생 가능성 부동소수점의 오차 1보다 작은 .. 2023. 5. 23.
[C++] 람다식 (feat. 2887 행성 터널) https://www.acmicpc.net/problem/2887 2887번: 행성 터널 첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌표가 주어진다. 좌표는 -109보다 크거나 같고, 109보다 작거나 같은 정수이다. 한 위치에 행성이 두 개 이 www.acmicpc.net 해당 문제를 풀면서 정렬을 세 번 수행해야 하는데 C++로 람다식 어떻게 쓰나 찾아보고 쓴다. >>> 행성터널 풀이 2023.05.22 - [Computer Science/Problem Solving] - [백준] 2887번: 행성 터널 | C++ [백준] 2887번: 행성 터널 | C++ https://www.acmicpc.net/problem/2887 2887번.. 2023. 5. 20.
RabbitMQ의 메시지 전달 방식 (Direct, Fanout, Topic, Headers Exchange) 래빗엠큐로 살펴보는 메시지 프로듀서의 메시지 전달 방식을 알아보자. 래빗엠큐가 아니더라도 Kafka, JMS 등 다른 메시지브로커들도 비슷한 모델을 사용한다. 하나를 알면 열을 안다...!! 기본적으로 구독-발행 시스템을이용한다고 생각하면 된다. 유튜브 구독을 예시로 들면 특정 사용자에게만 알림 보내기, 전체 사용자에게 알림 보내기, 특정 유튜버 구독자에게만 알림 보내기 처럼 이해하면 쉽다. Binding : 익스체인지가 어떤 큐에 메시지를 적재할지 정하는 규칙 Exchange : 프로듀서로 부터 발행된 메시지를 받고, 큐에 메시지를 라우트한다. 라우팅 알고리즘은 익스체인지 타입과 바인딩 규칙에 따른다. Direct Exchange Key 값에 해당하는 큐에만 메시지를 적재한다. 유니캐스트와 개념이 비슷.. 2023. 4. 19.
[Docker] Dockerfile 문법 Dockerfile은 애플리케이션을 패키징 하기 위한 간단한 스크립트이다. Dockerfile은 일련의 인스트럭션으로 구성돼 있는데, 인스트럭션을 실행한 결과로 도커 이미지가 만들어진다. 기본 다섯 가지 인스트럭션만으로도 엔간한(!) 애플리케이션을 도커로 패키징할 수 있다. FROM 모든 이미지는 다른 이미지에서 출발한다. 애플리케이션을 실행하는 데 필요한 런타임 이미지를 가져와야 한다. 예를 들어 Spring이면 Java를, Django라면 Python을. ENV 환경 변수 값을 지정하기 위한 인스트럭션이다. 값을 지정하기 위해 [key]="[value]" 형식을 따른다. WORKDIR 컨테이너 이미지 파일 시스템에 디렉터리를 만들고, 해당 디렉터리를 작업 디렉터리로 지정하는 인스트럭션이다. COPY .. 2023. 4. 14.