IT

회사 내부에서만 사용하거나 개인적으로 사용하는 기능을 모듈화하여 private 하게 패키지로 배포해서 쓰려면 어떻게 해야할까? 크게 3가지 방법이 있다. 1. npm 에서 제공해주는 유료 플랜 사용 - https://www.npmjs.com/products 2. github package 사용 - https://github.com/features/packages github 에서 제공해주는 패키지 레지스트리. 현재 지원하는 레지스트리 목록 - npm - gem - mvn - gradle - dotnet CLI - docker 저장 용량: 500MB, 매달 데이터 전송 트래픽: 1GB 를 무료로 제공해준다. 3. 직접 레지스트리 구축 sinopia 또는 verdaccio 를 활용해서 직접 레지스트리를 구축..
· IT/스프링
스프링부트에서 AOP 구현은 프록시를 활용하며 @Aspect 어노테이션을 제공하여 구현 편의성을 제공해준다. 스프링부트에서 AOP 를 구현하기 위해선 @Aspect 에 대해 알아야 하며 이와 관련된 용어에 대해 숙지하고 있어야 한다. AOP 관련 용어 조인 포인트(Join point) 어드바이스가 적용될 수 있는 위치, 메소드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점 조인 포인트는 추상적인 개념이다. AOP를 적용할 수 있는 모든 지점이라 생각하면 된다. 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행 지점으로 제한된다. 포인트컷(Pointcut) 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능 주로 AspectJ 표..
· IT/스프링
AOP 가 무엇인지 알아보기에 앞서 AOP 가 등장하게된 배경에 대해 먼저 알아보자. 웹 어플리케이션 서버에서 흔히 사용되는 패턴인 MVC + Repository 패턴이다. 각 역할별 책임을 분담하여 레이어를 이루는 구조이다. 만약 위 구조에서 각 레이어에서 호출, 응답에 대해 로그를 남겨 추적하고 싶다면 어떻게 해야할까? (일반적으론 이런 경우 APM 이 사용되지만 배경 설명을 위해 로그를 예로 들었다.) 단순한 방법으론 위와 같이 각 레이어에 로그 추적 코드를 추가하는 방법이 있을것이다. 하지만 만약 로그 추적을 해야하는 파일의 갯수가 수백개인 경우에도 이렇게 작업을 해야할까? 할수야 있겠지만 매우 비효율적이고 관리하기 힘든 형태이다. 잘 살펴보면 로그 추적 로직은 공통 코드로서 유틸리티한 기능이기 ..
· IT/DB
예전엔 Mysql/Maria DB 테이블에 컬럼을 추가하거나 수정하는등 ALTER (DDL) 실행시 테이블에 Lock 이 걸려 Select, Insert, Update, Delete 같은 DML 이 동시에 실행되지 못하는 문제가 있었다. 이렇게 될 경우 해당 테이블에 쿼리를 날리던 서버에서 문제가 발생할수 있다. 가장 좋은 방법은 서비스 점검을 띄운후 이런 작업을 진행하는것인데 서비스마다 상황이 달라 다운타임이 허용되지 않는 24시간 서비스의 경우 난감하다. 그리고 이러한 문제를 해결할수 있는 기능이 Online DDL 이다. (테이블 스키마 변경도중 DML 실행 가능) - Myqsl 5.6 이상 부터 - MariaDB 10 이상 부터 Online DDL 은 알고리즘에 따라 작동 방식이 다른데 종류는 다..
· IT/스프링
스프링을 공부하다 문득 @Bean 과 @Component 의 차이에대해 궁금증이 생겨 알아보았고 그 내용을 정리해보고자 한다. 스프링 컨테이너에의해 생성, 관리되는 자바 객체(POJO(Plain Old Java Object))이며 기본적으로 싱글톤 형태로 생성, 관리 된다. 이 스프링 빈을 등록하는 방법에는 2가지가 있다. 1. 스프링 부팅 과정에서 스캔되어 바로 등록 @Component 어노테이션 사용. 대부분의 경우 @Component 를 사용하여 스프링 빈으로 등록하며 특별한 경우가 아니면 이 방법을 사용할 것이다. ex) @Controller, @Service, @Repository ... (@Component 를 갖고 있는 어노테이션들) 스프링 DI 관련하여 문서에선 일반적으로 이 방법을 추천 ..
· IT/라라벨
인증 실패 발생시 클라이언트의 device id 와 액세스 토큰을 로그로 남겨야 할 일이 있어 작업을 하던 도중 액세스 토큰이 보이질 않아 당황. 코드를 좀 살펴보니 passport 에서 Authoization header 를 날려버리길래 궁금해서 살펴보니 이러한 히스토리가 있었다. 누군가가 이걸 왜 날리냐고 이슈에 질문.. https://github.com/laravel/passport/issues/1309 Do not overwrite the authorization header · Issue #1309 · laravel/passport Hi, in the TokenGuard the authorization header will be overwritten when the authentication r..
· IT/라라벨
N - N 관계시 보통 중간에 pivot 테이블을 두어 구현하는데 이때 pivot 테이블에 관계 맵핑뿐만 아니라 추가적으로 컬럼을 추가하여 관리가 가능하다. 그리고 pivot 테이블의 컬럼 값들에 대한 crud 는 다음과 같은 메소드를 자주 활용한다. 문서 참조 attach detach sync syncWithoutDetaching 쿼리빌더 활용 updateOrCreate 와 같은 기능을 사용하고 싶은 경우 쿼리빌더를 반환 받아 활용하도록 하자.
캐시란 시간이 많이 걸리는 연산을 미리 계산해놓고 빨리 가져다 쓰거나, DB 부하를 줄이기 위해 Read 가 많이 발생하는 데이터를 캐싱해놓고 빨리 가져다 쓰는 기법이다.(write 를 위한 캐시 또한 존재) 그리고 캐시를 하는 위치에 따라 로컬캐시, 분산캐시로 나눌수 있는데 로컬캐시의 경우 자바의 ehcache 가 대표적이며 속도는 로컬캐시가 가장 빠르다. 왜냐하면 분산 캐시의 경우 별도의 서버로 외부에서 작동하기 때문에 네트워크 통신같은 오버헤드가 필연적으로 발생한다. 그럼 가장 빠른 로컬 캐시가 좋으니 무조건 로컬 캐시를 사용하면 되지 않을까? 서비스의 규모가 작고 모놀리틱하게 서버 한대로만 운영한다면 초창기엔 로컬캐시만 사용해도 문제가 없을수도 있다. 하지만 서비스가 성장함과 동시에 서버 한대로는..
_이준호_
'IT' 카테고리의 글 목록 (4 Page)