[Spring] 빈 스코프
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 빈 스코프란?스코프는 빈이 존재할 수 있는 범위를 의미한다.싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.웹 관련 스코프request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다.session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다.application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다컴포넌트 스캔 자동 등록@Scope(..
[Spring] 빈 생명주기 콜백
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 빈 생명 주기 콜백스프링 어플리케이션 시작 시점에 필요한 연결을 미리 해두고 어플리케이션 종료 시점에 연결을 모두 종료하는 객체 초기화 작업과 종료 작업이 필요하다.package hello.core.lifecycle;public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } pub..
[Spring] 의존관계 자동 주입2
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.다양한 의존 관계 주입 방법에 대해서는 “이전 게시물”을 확인해주세요.이전 게시물 - 의존관계 자동주입 1✏️ 자동 주입 대상을 옵션으로 처리주입할 스프링 빈이 없어도 동작해야 할 때가 있다.그런데 @Autowired 만 사용하면 required 옵션의 기본값이 true 로 되어 있어서 자동 주입 대상이 없으면 오류가 발생한다. 이를 해결하기 위해서는 아래와 같이 3가지 방법을 가지고 옵션처리하여 해결할 수 있다.아래 예시에서 Member 는 스프링 빈이 아니다.@Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서..
[Spring] 컴포넌트 스캔 & 의존관계 자동 주입
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 자동으로 스프링 빈을 등록해 → 컴포넌트 스캔(@ComponentScan, @Component)컴포넌트 스캔이란 ?지금까지의 과정에서 자바 코드의 @Bean 이나 XML의  를 통해서 직접 스프링 빈을 등록상당히 귀찮고 누락할 수 있는 가능성이 높다는 문제점을 지닌다.이를 해결하기 위해 컴포넌트 스캔이라는 기능을 통해서 스프링 빈을 자동으로 등록할 수 있다.컴포넌트 스캔 사용하기컴포넌트 스캔을 사용하려면 먼저 @ComponentScan 을 설정 클래스에 붙여준다.기존의 AppConfig와는 다르게 @Bean으로 등록한 클래스가 하나도 없다!Aut..
[Spring] 싱글톤 컨테이너
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 싱글톤 패턴을 사용하는 이유스프링 없는 순수한 DI 컨테이너를 가진 어플리케이션을 사용자에게 배포 했다고 생각해보자.그 어플리케이션이 대박이 나서 동시 접속자수가 만명이 넘는다.그러면 만명 사용자가 동시다발적으로 서버에 요청을 보내게 된다.이 어플리케이션에서의AppConfig 는 아래와 같다package hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.RateDiscountPolicy;import hello.core.member.MemberReposit..
[Spring] 스프링 컨테이너와 스프링 빈
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 스프링 컨테이너AppConfigpackage hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.RateDiscountPolicy;import hello.core.member.MemberRepository;import hello.core.member.MemberService;import hello.core.member.MemberServiceImpl;import hello.core.member.MemoryMemberRepository;import hello..
[Spring] 스프링의 핵심 원리 이해2 - 객체 지향 원리 적용
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 비즈니스 설계 Remind  ✏️ DIP, OCP 위반 상황 설명 지난 시간에는 정액 할인 정책만 구현하여 의존해두었는데 요구 사항이 정률 할인 정책으로 변경되었다.변경에 따라 RateDiscountPolicy를 구현하고 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl코드를 고쳐야 한다.public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); priva..
[백준 Java] 1407번 2로 몇 번 나누어질까
·
Algorithm/PS - 백준
💡문제[Gold IV] 2로 몇 번 나누어질까 - 1407문제 링크성능 요약메모리: 11552 KB, 시간: 76 ms🌟풀이범위가 무려 1≤A≤B≤1015 로 엄청나다.그래서 A ~ B 까지 순회하면서 더할 수는 없다.1 ~ n까지 소수 x의 배수의 개수를 구하는 방식을 이용하였다.💡 1 ~ n까지 수들은 소수 x로 몇번 나누어 떨어질까 ?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20-1-2-1-3-1-2-1-4-1-21부터 20까지 순회하며 각 수를 소인수분해 했을때 2가 몇 번씩 들어가는지 적어보았다.이를 2가 들어간 횟수만큼 동그라미로 표현하게 되면 아래 사진과 같이 표시되며 오른쪽과 같은 의미를 가질 수 있다.위를 참고하여| 1 | 2 | 3 | ..
[Docker] permission denied while trying to connect to the Docker daemon socket at unix 에러 해결
·
DevOps/Docker
Docker를 컨테이너에서 실행하거나, 호스트의 Docker 소켓(/var/run/docker.sock)을 컨테이너에 마운트하여 사용하는 경우, 예상치 못한 권한 문제로 인해 Docker 명령이 작동하지 않을 때가 있습니다. 이 글에서는 Docker 소켓 접근 권한 문제를 해결하는 방법을 단계별로 안내합니다.1. 증상[runner@ae8762224dd7 /]$ docker pspermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json": dial unix /var/run/do..
[참고] centos 버전을 7이 아닌 8을 사용하는 이유 : /actions-runner/externals/node20/bin/node: /lib64/libm.so.6: version GLIBC_2.27' not found (required by /actions-runner/externals/node20/bin/node)
·
DevOps
Self-hosted runner 를 구축하기 위해서 Centos7을 컨테이너로 띄웠고 ci/cd 파이프라인을 도는 과정에서 오류가 발생하였다.🎃 발생 오류 Run actions/checkout@v2 with: repository: token: *** ssh-strict: true persist-credentials: true clean: true fetch-depth: 1 lfs: false submodules: false set-safe-directory: true /actions-runner/externals/node20/bin/node: /lib64/libm.so.6: version GLIBC_2.27' n..
[Centos] Failed to download metadata for repo 'appstream' 에러 해결
·
DevOps/Linux
🎃 발생 에러[root@e12ebc3453d8 /]# yum updateFailed to set locale, defaulting to C.UTF-8CentOS Linux 8 - AppStream 0.0 B/s | 0 B 00:00Errors during downloading metadata for repository 'appstream': - Curl error (6): Couldn't resolve host name for [Could not resolve host: mirrorlist.centos.org]Error: Failed to download metad..
[CI/CD] GitHub-hosted runner 와 Self-hosted runner 란?
·
DevOps
GitHub-hosted runner: GitHub에서 제공하는 서버에서 작업을 실행하는 방식. 사용자는 인프라를 관리할 필요 없이 자동으로 제공된 환경에서 빌드, 테스트, 배포 작업을 수행할 수 있다.Self-hosted runner: 사용자가 직접 서버를 설정하고 관리하여 GitHub Actions의 작업을 실행하는 방식. 자신의 인프라에서 작업을 처리하므로 사용자 제어가 가능하지만 유지 관리와 리소스 관리는 사용자의 책임이 된다.항목 GitHub-hosted Runner Self-hosted Runner인프라 제공 및 관리GitHub에서 제공하는 인프라에서 자동 실행사용자가 runner 서버를 지정하여 직접 서버를 설정 및 관리하여 실행비용제한된 무료 실행 시간 제공, 추가 리소스는 유료 플랜 필요..
[DevOps] Jenkins로 CI/CD 구축하기-1 (Jenkins 설치편)
·
DevOps
0. 들어가기 전에회사에서 하고 있는 프로젝트에 바로 ci/cd를 구축하면 좋겠다만 ci/cd가 처음인 나는 전에 했던 프로젝트를 가지고 ci/cd를 구축해보려고 한다.플리보따리 라는 프로젝트인데 이 프로젝트는 현재 팀원이 gitAction으로 cicd를 구축해두어서 나는 따로 포크해와 jenkins로 구성해보려고 한다.위와 같은 구조를 가지도록 목표하고 있다.기회가 된다면 Nginx도 추가해보고 싶다.우선 대충 이 정도만 띄워서 되는지만 확인해보는 것이 단기 목표이다!가보자고1. Jenkins 컨테이너 생성하기젠킨스 도커 컨테이너를 생성할 것이다.서버에는 이미 도커가 설치되어 있었다. 도커를 설치하는 과정은 넘어간다.swapfile 도 2기가 설정해두었다. 이 과정도 기록하지는 않는다. 참고링크에서 참..
[DevOps] CI/CD란..?
·
DevOps
0. 배경회사에서 참여하게 된 프로젝트로 인해 CI/CD를 공부 해야겠다는 생각이 들었다.프로젝트에서 나는 A 서비스를 제공하는 웹서버(간단하게 A서버라고하자)를 구축하고 수정해야 했다. ( 물론 내가 다하진 않는다. 나의 기여도는 개미 눈물만큼? )근데 A 서비스 서버는 대략 8개 ..? 정도 되는 서비스로 이루어져 있었다. (자세히는 모르지만 이게 MSA?)그래서 소스코드를 수정하고 테스트 서버에서 수정사항이 반영됐는지 확인하기 위해서는 1번 서비스에서 war 파일을 생성해서 옮기고…2번 서비스에서는 jar 파일을 생성해서 올리고…엔진엑스를 다시 실행시키고 ..어쩌구 저쩌구 하는 상당히 복잡한 과정 ,, 워드로 두, 세장이 작성될 만큼에 서버 구축 과정이 다시 수행되어야 한다.. ( 물론 생략하는 부..
[Docker] DockerHub에 이미지 올리기
·
DevOps/Docker
🐳이미지 저장소도커는 빌드한 이미지를 서버에 배포하기 위해 직접 파일을 복사하는 방법 대신 도커 레지스트리(Docker Registr)y라는 이미지 저장소를 사용한다.도커 명령어를 이용하여 이미지를 레지스트리에 push 하고 다른 서버에서 pull 받아 사용하는 구조로 git과 비슷하다고 생각하면 될 것 같다.도커 레지스트리는 오픈소스로 무료로 설치할 수 있고 설치형이 싫다면 도커(Docker Inc.)에서 서비스 중인 도커 허브Docker Hub를 사용할 수 있다.🐳Docker Hub도커 허브는 도커에서 제공하는 기본 이미지 저장소로 ubuntu, centos, debian등의 베이스 이미지와 ruby, golang, java, python 등의 공식 이미지가 저장되어 있다.일반 사용자들이 만든 이..
[Docker] Docker 권한 설정하기
·
DevOps/Docker
실행 환경Ubuntu 22.04🐳Docker 권한 설정Docker 에서 모든 도커 관련된 작업이 root 사용자에게만 권한이 허용되어 있기 때문에도커 명령어를 입력하기 위해서는sudo를 앞에 붙여주어야만 가능하다.이를 root 계정이 Host의 기본 유저에게 권한을 주도록 바꿔볼 것이다.아래 명령어는 새로운 터미널을 띄어서 수행하도록 하자!sudo usermod -a -G docker [사용자 이름] # [사용자이름]에게 권한주기sudo service docker restart위 처럼 명령어를 입력한 후 vm을 다시 시작해보자.아까와 똑같은 명령어를 sudo를 적지 않아도 잘 실행 됨을 확인 할 수 있다.이제 도커 세팅을 마쳤으니 제대로 실습해보자 !다음게시글 -> [Docker] Docker 컨테..
[Docker] 도커 설치하기
·
DevOps/Docker
실행 환경Ubuntu 22.04🐳Docker 설치⭐공식 문서 링크1. 우분투 시스템 패키지 업데이트리눅스 계열 운영체제에서 쓰이는 패키지 관리 툴인 apt를 최신 버전으로 업데이트 한다sudo apt-get update2. 필요한 패키지 설치sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-commonapt-transport-https : https를 통해 데이터나 패키지에 접근할 수 있다. (링크)ca-certificates : Certificate Authority - certificates라는 뜻으로 SSL기반 웹 애플리케이션이 SSL연결의 진위여부를 판별할 수 있게 해준다.cur..
[Docker] 버츄얼박스(VirtualBox) & 우분투(Ubuntu) 설치
·
DevOps/Docker
🐳버츄얼박스(VirtualBox) & 우분투(Ubuntu) 다운로드도커는 리눅스 컨테이너 기반의 기술이기 때문에 윈도우나 맥에서 실습하기 위해서는 가상의 리눅스 환경을 만들어 주어야한다.이를 위해 Vitrual Box와 Ubuntu를 사용하여 실습을 진행하려 한다.버츄얼 박스 버전 : VirtualBox-6.1.50-161033-Win우분투 버전 : ubuntu-22.04.3-desktop-amd64🔻 Ubuntu 다운로드🔻 Virtual Box 다운로드이전에 VirtualBox 7.0을 깔았을때는 아래와 같은 오류가 났다.설치 파일을 실행시켰을 때 아래와 같은 오류가 뜬다면 Microsoft Visual C++ 2019를 설치하자.🔻  Microsoft Visual C++ 2019 다운로드ARM..
[Ubuntu] 우분투 ↔ 윈도우 클립보드 공유 안됨 문제, VirtualBox 가상 광 디스크 삽입 문제
·
DevOps/Linux
⚙ 우분투↔ 윈도우 클립보드 공유 안됨 문제⚙ VirtualBox 가상 광 디스크 삽입 문제VirturalBox 의 Ubuntu에서 도커를 설치하는 실습을 하던 중우분투와 윈도우간의 클립보드가 공유되지 않은 것에 대한 불편함을 느끼게 되었다.전에 가상머신을 사용했을때 내 기억으론 복붙이 공유가 되었던거 같은데 왜 그런지 문제를 찾아보았다.첫 번째로는 [장치] - [클립보드 공유] - [양방향]전혀 먹지 않았다.또 검색해본 결과 이걸 해소하기 위한 게스트 확장을 설치하는 것이었다.[장치] - [게스트 확장 CD 이미지 삽입]띠용오류가 났다.이상태로 나는 우분투 버전도 바꿔서 다시 깔아보고VBox도 다시 깔아보고블로그에서 입력하라는 명령어들도 다 입력해보았지만 안됐다..찾아보니 자세한 정보를 봤을때 VERR..
GitHub Pages에 리액트 프로젝트(React + Vite) 배포하기
·
Programming/React
이번 블로그 글에서는 GitHub Pages를 사용해 특정 폴더 안에 있는 리액트 프로젝트를 배포하는 방법에 대해 다룹니다. 배포한 프로젝트는 https://username.github.io/repository-name/ 형식으로 접근할 수 있게 됩니다. 저는 레포지토리 안의 디렉토리에 배포 파일이 존재하기 때문에, 아래와 같은 URL로 접근할 수 있도록 설정했습니다.https://an0401na.github.io/React_Study/08-Refs-Portals/ Refs & PortalsThe Almost Final Countdown Stop the timer once you estimate that time is (almost) upan0401na.github.io제가 위와 같이 설계했던 이유는 리..
[React] React 완벽 가이드 - Refs(참조) & Potals(포탈) 활용하기
·
Programming/React
이 글은 Udemy의 【한글자막】 React 완벽 가이드 2025 with React Router & Redux 를 수강하고 정리한 내용입니다.👉 useRef를 이용하여 만든 Timer Challenge 방문하기https://an0401na.github.io/React_Study/08-Refs-Portals/ Refs & PortalsThe Almost Final Countdown Stop the timer once you estimate that time is (almost) upan0401na.github.io  🎈Refs (참조) 란?Refs(References)는 React에서 특정 DOM 요소나 클래스형 컴포넌트의 인스턴스에 직접 접근할 수 있도록 도와주는 기능입니다. 🎈 상태 vs 참조 ..
[React] 컴포넌트 속성에 컴포넌트 전달하기
·
Programming/React
🎯 React에서 children을 활용한 유연한 컴포넌트 만들기React에서 컴포넌트를 만들다 보면, 내부에 어떤 내용이 들어올지 모르는 컨테이너 역할의 컴포넌트를 만들 일이 많다. 예를 들어, Sidebar, Dialog, Card 같은 컴포넌트들은 내부에 들어갈 요소가 정해져 있지 않다.이럴 때 React의 children prop을 활용하면 꽤 유연하게 컴포넌트를 만들 수 있다. 하지만 children 외에도 특정 prop으로 컴포넌트를 직접 전달하는 방식도 있는데, 이 방법을 활용하면 더 구조적으로 UI를 구성할 수도 있다.이번에 children과 특정 prop을 활용해 재사용 가능한 컴포넌트를 어떻게 만들고 활용할 수 있는지 직접 예제를 통해 정리해 보자.children prop이란?chil..
[React] React 완벽 가이드 - 섹션 5: React로 투자 계산기 만들기 | 개발 회고
·
Programming/React
이 글은 Udemy의 【한글자막】 React 완벽 가이드 2025 with React Router & Redux 를 수강하고 정리한 내용입니다. 💡 프로젝트 개요자세한 코드는 여기로 👉 https://github.com/An0401na/React_Study/tree/main/01-starting-project이번 프로젝트에서는 React를 활용한 투자 계산기를 개발했다.사용자가 입력한 데이터를 기반으로 연간 투자 금액, 예상 수익률, 투자 기간을 계산하여매년 누적된 투자 금액과 이자를 시각적으로 보여주는 기능을 구현했다.React: 컴포넌트 기반 UI 개발useState: 사용자 입력값을 상태로 관리map(): 배열 데이터를 테이블 형식으로 렌더링Intl.NumberFormat: 숫자를 화폐 단위로 ..
[React]스프레드 연산자를 통한 속성 전달 방식- id 전달
·
Programming/React
🎈 속성(props) 전달에서 발생하는 문제와 해결 방법리액트에서 커스텀 컴포넌트에 속성을 전달할 때, HTML의 기본 속성인 id나 className 같은 속성이 정상적으로 전달되지 않는 문제가 발생할 수 있습니다. 이 문제를 해결하는 방법과 함께, Forwarded Props를 이용해 어떻게 이러한 속성들을 전달할 수 있는지 설명해 보겠습니다.  1. 기본 코드 예시먼저, 아래와 같은 기본 코드를 봅시다:function UserProfile({name, age, children}) { return ( {name} {age} years old {children} {/* 자식 요소 출력 */} );}function App() { return ( ..
[React] 함수형 컴포넌트의 반환 return 값 조건 & Fragment(프래그먼트) <>...</>
·
Programming/React
일반적인 함수에서 return 값을 두 개 가질 수 없듯이 함수형 컴포넌트에서도 여러 개의 요소를 반환 할 수 없다.리액트 컴포넌트는 반드시 하나의 요소를 반환 해야한다. 이와 같이 리액트의 함수형 컴포넌트의 return 값에는 몇가지 조건이 있다.✅ 1. 반드시 하나의 리액트 엘리먼트(React Element)를 반환해야 한다.❌잘못된 예시 (여러 개의 요소를 반환)function Welcome() { return Hello React!; // 오류 발생 ❌}그러나 화면의 UI를 구성하기 위해서 하나의 엘리먼트로는 부족한 경우가 많다. 이를 해결하기 위해 불필요한 로 감쌀 수 있다.⭕ 올바른 예시 (하나의 부모 요소로 감싸기)function Welcome() { return ( ..
[React] Element와 Componet의 차이
·
Programming/React
🎈Element앱의 UI를 구성하는 가장 단위immutable 객체(불변)화면에 표시할 내용을 기술하는 단순한 객체이며, 실제 DOM 요소를 직접 만들지는 않는다.React.createElement() 함수로 생성되며, JSX를 사용하면 더 쉽게 작성 가능하다.const element = Hello, React!;아래 element는 화면에 Hello, React!를 표현하는 객체일 뿐, 아직 실제 DOM에 반영된 것은 아니다. 리액트는 이러한 엘리먼트를 ReactDOM.render() 혹은 useState, useEffect 등의 업데이트 과정에서 가상 DOM을 통해 실제 DOM으로 변환합니다. 🎈Component리액트 엘리먼트를 반환하는 함수 또는 클래스컴포넌트는 여러개의 엘리먼트들을 조합하여 재..
[React] React 완벽 가이드 - 섹션 3: 리액트의 핵심 - 컴포넌트, JSX, 속성, 상태 등
·
Programming/React
이 글은 Udemy의 【한글자막】 React 완벽 가이드 2025 with React Router & Redux 를 수강하고 정리한 내용입니다.🎈Componet재사용이 가능한 구성요소이다.HTML, CSS, 자바스크립트 로직 등을 포함하고 있다.사용하는 이유컴포넌트가 없다면 html 코드가 방대하고 복잡해져 유지보수가 어려워질 수 있다.오류 가능성이 줄어든다.코드를 재활용 하는 방식이기 때문에 한 부분에서 일괄적으로 수정이 가능하다.공통된 기능을 제공하는 유사한 코드가 묶여 작성되어 개발 과정이 단순해진다.각 컴포넌트들 마다 각 기능별로 관심사가 분리되어 작업된다.컴포넌트 저장 및 좋은 프로젝트 구조src - assets - components - Header - Header.jsx - Header.c..