일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 세마포어
- Effective Java
- 디지털
- IT
- CS
- 컴퓨터공학
- 운영체제
- java
- 알고리즘
- 개발
- github
- package-private
- spring
- 스프링
- 프로그래밍
- 자바
- Public
- 컴퓨터과학
- OS
- 우리카드
- 깃
- 공채
- 뮤텍스
- 신입
- 스터디
- 깃허브
- 이펙티브 자바
- 정보처리기사
- 신입사원
- 메모리
- Today
- Total
목록Spring (30)
주니어 개발자 성장기
개요 평소 API 문서 자동화 프레임워크로 `Swagger`를 많이 써왔는데 `multipart/form-data`를 Body로 받는 API의 경우 `Swagger` 문서에서 try out(실행)할 시에 예외(HttpMediaTypeNotSupportedException)가 발생하는 문제가 있었다. 내가 본격적으로 개발을 시작한 2022년부터 꽤 거슬렸다. 그렇지만 문제가 치명적인 것도 아니고 `Swagger`상에서만 실행이 안되는 것이라 적극적으로 해결할 생각은 안하다가, 이번년도 초에 집중해서 구글링하면서 해법을 찾아서 해결할 수 있었다. 미리 문제상황을 말하자면 파일과 JSON 값을 동시에 입력받으려고 할 때 발생하는 문제다. Spring Fox와 Spring Doc 먼저 `Swagger`는 Ope..
개요 이번 Cheffi 프로젝트를 진행하면서 꼭 해보고 싶었던 것 중 하나가 CI/CD 파이프라인 구축이었다. 저번 프로젝트(Glims)에서 배포를 내가 담당했었는데 낮에는 회사일로 바쁘고 밤에는 회사 프로젝트를 위해서 Vue.js 공부를 하다보니 CI/CD 공부를 할 수 있는 물리적인 시간이 부족했었고, 프로젝트 진행 내내 수동 테스트와 배포를 반복했었다. 직접 경험한 수동 배포의 문제점 1. 서버 업데이트가 늦다. 매번 수동 배포를 하다보니 팀원이 기능을 추가하거나 디버깅을 해도 수정이 반영되려면 항상 내가 배포를 해야했다. 내가 변경을 인지하고 작업할 수 있는 상황이어야만 배포가 가능해지니 기능 업데이트가 나라는 병목현상(?)을 겪게 되는 것이다. 내가 개인 사정으로 바쁠때는 나의 배포를 하염없이 ..
*개인 참고, 공부용 포스팅입니다. 아래 포스팅을 참고해서 yml 파일과 깃허브 시크릿을 등록한다. https://mumomu.tistory.com/132 [Github Actions] Github Secrets에 secret파일 등록(secret.yml 등) Github Secrets에 Secret파일 등록으로 CI/CD 깃허브에 올릴 때는 조심해야하는 파일들이 있는데 AWS, API 등에 접근할 수 있는 키를 가진 환경변수 등이 공유될 경우 큰 문제가 생길 수 있다. 그렇기 때문 mumomu.tistory.com 내가 헤맨 부분은 깃허브 시크릿을 등록하는 부분이었는데 처음에 yml 파일을 그대로 복붙 해 등록해서 문제가 생겼었다. 그런데 위 포스팅에서는 `base64 --decode` 명령어를 이용하..
개요Cheffi 프로젝트를 진행하면서 develop 서버 자동 배포를 위해 도커파일을 작성하면서 생긴 이슈에 관해 말해보고자 한다. 필요한 도커 이미지 & 컨테이너 스프링 부트 애플리케이션 서버 레디스 Todo 스프링 부트 환경설정 파일 분리 (application-dev.yml) 컨테이너 이름으로 호스트 설정 스프링 부트 도커파일 작성 도커 컴포즈 파일 작성 컨테이너 간 네트워크 연결 배포 툴 Github Actions 과정먼저 Github Actions를 통해 배포하려면 yml 파일을 작성해야하는데, 나는 어떻게 작성하는 지 잘 몰라서 같은 팀원이 작성해준다고 했고 흐름은 다음과 같이 정했다. Jar 파일 빌드 → SCP로 Jar파일과 dockerfile, docker-compose 를 EC2 호스트..
Advisior(어드바이저)란? 프록시 내부에서 실제 대상을 호출하기 전에 호출되는 것으로 여기에 공통적으로 적용할 부가 기능을 구현할 수 있다. ex) 시간 재기, 로깅 등 어드바이저는 하나의 Pointcut과 하나의 Advice로 구성된다. Advice 부가기능을 책임지고 있는 인터페이스로서 MethodInterceptor를 구현하여 Advice를 만들 수 있다. invoke메서드에 부가 로직을 구현하면 된다. Pointcut 포인트 컷은 실제 대상 클래스가 호출하는 메서드가 부가기능이 적용되는 지 체크하는 것으로 NameMatchMethodPointcut, AspectJExpressionPointcut 등의 것들을 이용할 수 있다. 주의! 하나의 프록시에는 여러개의 어드바이저가 들어갈 수 있다. 한..
빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 간단하게 다음과 같은 라이프사이클을 가진다. 객체 생성 -> 의존관계 주입 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 그런데 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링..