2023/08 13

[Docker] Docker-Compose를 사용하여 Springboot, Mysql 연동

Docker-Compose.yml에 Springboot, Mysql 설정파일을 추가하여 2개의 컨테이너를 구성한 애플리케이션을 실행시켜 보려고 합니다. 우선적으로 백엔드 서버, DB 서버를 연동하는 것이 목표기 때문에 간단한 프로젝트를 가지고 왔습니다. 한 가지 주의사항은 포트 충돌을 방지하기 위해 Mysql DB 서비스를 꺼놔야 합니다. Terminal: netstat -ano | findstr 3306 (3306 포트를 사용하는 프로그램 확인) 3306 포트를 사용하고 있는 프로그램이 있다면 중지시켜야 합니다. 상품을 조회하는 로직 하나를 만들어 두었고, 다음과 같이 더미데이터를 넣어두었습니다. 이제 application.yml부터 docker-compose.yml 까지 차근차근 설명드리겠습니다. 애..

DevOps/Docker 2023.08.31

[Docker] Docker, Docker-Compose, Dockerfile

일반적으로 Docker는 단일 컨테이너 기반의 응용 프로그램을 실행하고 관리하는 도구입니다. 여러 개의 컨테이너로 구성된 복잡한 애플리케이션을 동시에 실행할 때는 Docker-compose를 이용하게 됩니다. 우선, Docker에서 애플리케이션이 구동되는 과정에 대해 상세하게 설명드리겠습니다. Docker는 컨테이너를 만들고 배포하고 구동하기 위한 기술입니다. 이제 컨테이너가 어떻게 만들어지는지 알아보기 전에 Linux OS에서 Docker를 사용하는 방법 2가지에 대해 간단히 설명드리겠습니다. VirtualBox, VMware 같은 VM위에 Linux OS를 설치하고 Docker 실행 Docker Desktop처럼 Docker를 실행하는데 필요한 Linux OS를 포함하는 패키지 설치 Container..

DevOps/Docker 2023.08.31

[Docker] Container vs VM

Container와 VM은 애플리케이션을 it 인프라 리소스로부터 독립적으로 만드는 기술입니다. 컨테이너는 애플리케이션을 구동하기 위해 필요한 설정파일, 라이브러리, 환경 설정 등이 담겨있는 패키지입니다. 애플리케이션의 이미지를 개별적인 파일 시스템 안에서 실행할 수 있습니다. 가상 머신은 하나의 Host OS에서 개별적인 운영체제를 실행할 수 있을 뿐만 아니라, 애플리케이션을 실행하는데 필요한 파일들이 포함된 가상 머신을 생성할 수 있습니다.(Host OS와 분리된 Guest OS 환경에서 개발 및 테스트 진행) 이들의 차이점을 파악하고 Container 기반 기술인 Docker의 장점을 알아보려고 합니다. VM (Virtual Machine) 가상 머신은 물리적인 서버 위에서 Hypervisor(Vi..

DevOps/Docker 2023.08.31

[Java] Exception

예외 계층의 구조와 체크 예외, 언체크 예외의 차이와 활용에 대해서 알아보려고 합니다. Object: 예외도 객체이고, 모든 객체의 최상위 부모는 Object이므로, 예외의 최상의 부모 또한 Object 입니다. Throwable: 최상위 예외로서, Exception과 Error로 나눌 수 있습니다. Error: 메모리 부족, 시스템 오류와 같이 애플리케이션에 복구 불가능한 시스템 예외입니다. 이 예외를 잡아서는 안 됩니다. 상위 예외를 catch로 잡아버리면 하위 예외까지 같이 잡아버리는데, Throwable 예외를 잡게 되면, Error 예외도 함께 잡는 불상사가 일어날 수 있기 때문에 잡아서는 안됩니다. Error는 언체크 예외입니다. Exception: 체크 예외 애플리케이션 로직에서 사용할 수 ..

Java 2023.08.21

[Spring] Spring AOP

애플리케이션 로직은 큰 틀에서 핵심 기능, 부가 기능 2가지로 나눌 수 있습니다. 핵심 기능은 객체가 제공하는 비즈니스 로직이고, 부가 기능은 핵심 기능과 함께 사용되는 로그 추적 로직, 트랜잭션 기능과 같습니다. 부가 기능은 핵심 기능을 보조하기 위해 사용되는 기능입니다. 부가 기능은 여러 클래스에 걸쳐서 사용되는데 이를 횡단 관심사라고 하며, 하나의 부가기능이 여러 곳에서 동일하게 사용됨을 의미합니다. 하지만, 이러한 중복된 로직을 반복해서 사용하게 된다면 Refactoring에 있어서 많은 번거로움이 발생하게 됩니다. 즉, 이러한 문제점을 해결하기 위해 도입된 기술이 AOP 입니다. AOP가 생기면서 부가 기능을 핵심 기능에서 분리하고 한 곳에서 관리해 줄 수 있게 되었습니다. 그리고 이러한 기술을..

Java/Spring 2023.08.15

[Spring] Proxy Pattern, Decorator Pattern

Proxy Pattern, Decorator Pattern은 모두 Proxy 기술(클라이언트의 요청을 대신해서 처리해 주는 역할)이 적용됩니다. 이때, 서버와 프록시는 같은 인터페이스를 사용해야 하고, 의존관계를 서버에서 프록시로 변경해도 클라이언트 입장에서는 이러한 사실을 몰라야 합니다(프록시 체인). 앞서 설명드린 DI를 사용하면, 클라이언트의 코드 변경 없이 프록시를 주입할 수 있게 됩니다. 이제 이 둘의 차이와 역할에 대해 설명드리겠습니다. GOF 디자인 패턴에 따라 프록시의 역할은 2가지로 구분됩니다(intent에 의해 구분). 1. Proxy Pattern 권한에 따른 접근 차단, 캐싱, 지연로딩 2. Decorator Pattern 원래 서버가 제공하는 기능에 더해 부가 기능 수행 Proxy..

Java/Spring 2023.08.15

[CS] I/O 속도 개선을 위한 ios_base::sync_with_stdio(false), cin.tie(NULL), '\n'

백준에서 간단한 stack 문제를 푸는 도중 발생한 시간 초과 문제입니다. 모든 테스트케이스를 고려했었고, 100% 확신을 한 상태에서 제출을 했는데 다음과 같은 issue가 발생했습니다. 설마설마하고 ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL) 코드를 넣었는데 정답 처리가 되었습니다. 그래서 이러한 사례가 많았는데, 막연하게 시간초과 방지를 위해 코드를 달아주는 것 외에는 정확히 모르고 있었습니다. 그래서 이 코드들에 대해 무엇이고 어떠한 상황에 사용하는지 알아보려고 합니다. ios_base::sync_with_stdio(false): C/C++ 표준 스트림 간 동기화 비활성화 처리 장점 일반적으로 C++ 표준 스트림(cin + co..

CS 2023.08.15

2023 7월 회고록

늦게 쓰는 7월 회고록입니다. 방학 한 달 동안 정말 바쁘기도 하고 날씨 핑계로 공부 의욕이 약간 떨어졌습니다. Spring 핵심 원리에 대한 이론적인 지식을 공부하면서 개념을 다잡았습니다. 더불어 CS 중에서도 네트워크에 집중하여 공부했던 것 같습니다. 공부하면서도 실생활에서 쓰이는 wifi에 대해 알아봤는데 기대치보다 재밌었던 것 같습니다. 그리고 실무에서 자주 쓰이는 리눅스 마스터 1급을 취득하려고 시험 지원도 했습니다. 시험 비용이 55000원이라 1트에 붙어야 하는 압박감이 생겼네요.. 2023-2 계획 회사 실무 경험, 캡스톤디자인2 프로젝트 진행 Linux 공부 (출, 퇴근, 주말 자투리 시간 내서 공부 예정) CS 꾸준하게 공부하기 OPIC IH(희망사항) 회사에서 출퇴근하면서 캡디를 진행..

일상/회고록 2023.08.14

[PS] 백준 1167 트리의 지름 (c++)

https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 www.acmicpc.net 오랜만에 알고리즘 트리 문제를 풀어봤습니다. 이 문제는 트리에서 임의의 두 정점 사이의 가장 긴 거리를 출력하는 문제입니다. 입력의 경우 시작 정점(from)이 주어지고, 시작 정점과 연결된 정점(to)과 두 정점 사이의 거리(dist)를 입력으로 받습니다. 더불어 해당 정점에서 입력을 종료하려면 -1을 입력으로 받아야 합니다. 첫 번째로, 우선 임의의 정점에서 가장 거리가 먼 노..

[Spring] Template Method Pattern, Strategy Pattern, Template Callback Pattern

스프링에서 사용되는 디자인 패턴인 템플릿 메서드 패턴, 전략 패턴, 템플릿 콜백 패턴에 대해 알아보려고 합니다. 이들을 적용하는 이유는 좋은 설계를 위해서입니다. 좋은 설계란 요구 부가 기능(핵심 기능의 보조 기능)을 변경하지 않고 핵심 기능만 변경하게 설계하는 것입니다.(중복된 로직을 변경하지 않고, 변하는 것(비즈니스 로직)만 순수하게 바꾸어주는 것) 우선 좋은 설계에 한 발짝 나아갈 수 있는 템플릿 메서드 패턴에 대해 설명드리고 이와 비슷한 기능을 하고 있지만, 템플릿 메서드 패턴의 단점을 보완할 수 있는 전략 패턴, 전략 패턴에서의 템플릿과 콜백 부분을 강조한 템플릿 콜백 패턴까지 설명드리려고 합니다. GOF 템플릿 메서드 패턴 정의 부모 클래스에서의 템플릿을 정의하고, 일부 변경되는 로직을 자식..

Java/Spring 2023.08.09